Patch level : 12.0 344
Files correlati : li0 Commento : - Aggiunta programma per il resoconto delle dichiarazioni di intento - Adattata libreria per il nuovo programma - Sistemati errori di danneggiamento dell'heap causati dal distruttore di TLi_manager git-svn-id: svn://10.65.10.50/branches/R_10_00@23618 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
a0512c0a25
commit
b8723c6644
@ -6,11 +6,12 @@ int main(int argc,char** argv)
|
||||
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
|
||||
switch (r)
|
||||
{
|
||||
case 2: li0300(argc,argv) ; break; // Impostazioni dichiarazione d'intento (ma perchè li600 è di default sciabolette!?)
|
||||
case 3: li0400(argc,argv) ; break; // Gestione archivio
|
||||
case 4: li0500(argc,argv) ; break; // Stampa archivio
|
||||
case 5:
|
||||
default: li0600(argc,argv) ; break; // Invio dati
|
||||
case 1: li0200(argc,argv) ; break; // Visualizzazione riepilogo plafond
|
||||
case 2: li0300(argc,argv) ; break; // Impostazioni dichiarazione d'intento (ma perchè li600 è di default sciabolette!?)
|
||||
case 3: li0400(argc,argv) ; break; // Gestione archivio
|
||||
case 4: li0500(argc,argv) ; break; // Stampa archivio
|
||||
case 5:
|
||||
default: li0600(argc,argv) ; break; // Invio dati
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef __LI0_H
|
||||
#define __LI0_H
|
||||
|
||||
int li0200(int argc, char* argv[]);
|
||||
int li0300(int argc, char* argv[]);
|
||||
int li0400(int argc, char* argv[]);
|
||||
int li0500(int argc, char* argv[]);
|
||||
|
135
src/li/li0200.cpp
Normal file
135
src/li/li0200.cpp
Normal file
@ -0,0 +1,135 @@
|
||||
#include <automask.h>
|
||||
#include <defmask.h>
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
#include <filetext.h>
|
||||
#include <velib.h>
|
||||
#include <real.h>
|
||||
#include "lilib01.h"
|
||||
|
||||
#include "li0.h"
|
||||
#include "li0200a.h"
|
||||
|
||||
#define CONFIG_DICINT "DICINT.ini"
|
||||
|
||||
class TResDI_mask : public TAutomask
|
||||
{
|
||||
private:
|
||||
TSheet_field& sheet; // Sheet
|
||||
|
||||
public:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; };
|
||||
TResDI_mask() : TAutomask("li0200a"), sheet(sfield(DOCUMENTI_STATO)) { load_config(); };
|
||||
void load_config();
|
||||
void elabTipiDoc(TToken_string& tipi, TToken_string& stati);
|
||||
};
|
||||
|
||||
void TResDI_mask::load_config()
|
||||
{
|
||||
set(FLD_TABIVA_CODTAB, ini_get_string(CONFIG_DITTA, "li", "CODIVA"));
|
||||
TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
|
||||
|
||||
TString_array& strarr = sheet.rows_array();
|
||||
sheet.hide();
|
||||
sheet.destroy();
|
||||
|
||||
for(int i = 0; i < tipidoc.items(); i++)
|
||||
{
|
||||
TString td = tipidoc.get(i);
|
||||
TToken_string stati(ini_get_string(CONFIG_DITTA, "li", td));
|
||||
for(int j = 0; j < stati.items(); j++)
|
||||
{
|
||||
TToken_string row, s(stati.get(j), ',');
|
||||
row.add(td);
|
||||
row.add(s.get(0));
|
||||
row.add(s.get(1));
|
||||
strarr.add(row);
|
||||
}
|
||||
}
|
||||
sheet.force_update();
|
||||
sheet.show();
|
||||
}
|
||||
|
||||
void TResDI_mask::elabTipiDoc(TToken_string& tipi, TToken_string& stati)
|
||||
{
|
||||
for(int i = 0; i < sheet.items(); i++)
|
||||
{
|
||||
TToken_string row = sheet.row(i);
|
||||
int statoin = row.get_int(1), statoout = row.get_int(2);
|
||||
for(; statoin <= statoout; statoin++)
|
||||
{
|
||||
// Immetto nelle due TToken_string i valori per gestire la classe TLista_documenti
|
||||
// Per ogni posizione metto il documento e stato interessato, es. F01: da 1 a 3 -> tipi {F01|F01|F01} stati {1|2|3}
|
||||
tipi.add(row.get(0));
|
||||
stati.add(statoin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TResDI_app : public TSkeleton_application
|
||||
{
|
||||
|
||||
void elab(TResDI_mask& m);
|
||||
public:
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
void TResDI_app::elab(TResDI_mask& m)
|
||||
{
|
||||
int clifoda = m.get_long(F_CODICE_CLIFO_DA), clifoa = m.get_long(F_CODICE_CLIFO_A);
|
||||
|
||||
// Creo le TToken_string necessarie per filtrare i documenti
|
||||
TToken_string tipi, stati;
|
||||
m.elabTipiDoc(tipi, stati);
|
||||
|
||||
TRelation r_clifo(LF_CLIFO);
|
||||
TRectype fil_from(r_clifo.curr()), fil_to(r_clifo.curr());
|
||||
fil_from.put("TIPOCF", "C");
|
||||
fil_to.put("TIPOCF", "C");
|
||||
|
||||
if(clifoda > 0)
|
||||
fil_from.put("CODCF", clifoda);
|
||||
|
||||
if(clifoa > 0)
|
||||
fil_to.put("CODCF", clifoa);
|
||||
|
||||
TCursor c_clifo(&r_clifo, "", 1, &fil_from, &fil_to);
|
||||
|
||||
TLog_report log(TR("Resoconto plafond"));
|
||||
for(c_clifo = 0; c_clifo.pos() < c_clifo.items(); ++c_clifo)
|
||||
{
|
||||
TRectype row_clifo(c_clifo.curr());
|
||||
|
||||
TLi_manager currentCli(row_clifo.get_char("TIPOCF"), row_clifo.get_long("CODCF"), TDate(TODAY).year()); // Inizializzo l'oggetto per la gestione del plafond
|
||||
if(currentCli.hasValidPlafond())
|
||||
{
|
||||
real plafond = currentCli.getPlafond();
|
||||
real resPlafond = currentCli.getPlaRes(tipi, stati);
|
||||
|
||||
TString msg;
|
||||
msg << "\nDichiarazione di intento cliente N." << row_clifo.get_long("CODCF") << "\nRagione sociale: " << row_clifo.get("RAGSOC") << "\nPlafond totale: " << static_cast<TCurrency>(plafond).string() << "€\n";
|
||||
log.log(0, msg);
|
||||
msg = TString("Plafond disponibile: ") << static_cast<TCurrency>(resPlafond).string() << "€\n";
|
||||
log.log(0, msg);
|
||||
}
|
||||
}
|
||||
log.print_or_preview();
|
||||
}
|
||||
|
||||
|
||||
void TResDI_app::main_loop()
|
||||
{
|
||||
TResDI_mask m;
|
||||
while (m.run() == K_ENTER)
|
||||
{
|
||||
elab(m);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int li0200(int argc, char* argv[])
|
||||
{
|
||||
TResDI_app a;
|
||||
a.run(argc, argv, TR("Stato lettere di intento"));
|
||||
return 0;
|
||||
}
|
9
src/li/li0200a.h
Normal file
9
src/li/li0200a.h
Normal file
@ -0,0 +1,9 @@
|
||||
#define FLD_TIPODOC 101
|
||||
#define FLD_STATODOCDA 102
|
||||
#define FLD_STATODOCA 103
|
||||
|
||||
#define DOCUMENTI_STATO 201
|
||||
|
||||
#define FLD_TABIVA_CODTAB 301
|
||||
#define F_CODICE_CLIFO_DA 302
|
||||
#define F_CODICE_CLIFO_A 303
|
134
src/li/li0200a.msk
Normal file
134
src/li/li0200a.msk
Normal file
@ -0,0 +1,134 @@
|
||||
#include "li0200a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include <stdbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Impostazioni dichiarazioni d'intento" 0 2 0 0
|
||||
|
||||
STRING FLD_TABIVA_CODTAB 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Codice IVA plafond:"
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
USE %IVA
|
||||
FLAGS "U"
|
||||
INPUT CODTAB FLD_TABIVA_CODTAB
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Tipo" S1
|
||||
DISPLAY "%@5" R0
|
||||
DISPLAY "Vent." S6
|
||||
DISPLAY "Sospeso" B2
|
||||
OUTPUT FLD_TABIVA_CODTAB CODTAB
|
||||
HELP "Inserire il codice IVA"
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE ZEROFILL_FUNC 2
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_CLIFO_DA 6
|
||||
BEGIN
|
||||
PROMPT 1 2 "Da cod. cliente "
|
||||
FLAG "UR"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CODICE_CLIFO_DA
|
||||
DISPLAY "Cliente" CODCF
|
||||
DISPLAY "Ragione sociale@60" RAGSOC
|
||||
OUTPUT F_CODICE_CLIFO_DA CODCF
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
NUMBER F_CODICE_CLIFO_A 6
|
||||
BEGIN
|
||||
PROMPT 32 2 "a "
|
||||
FLAG "UR"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_CODICE_CLIFO_A
|
||||
COPY DISPLAY F_CODICE_CLIFO_DA
|
||||
OUTPUT F_CODICE_CLIFO_A CODCF
|
||||
NUM_EXPR #F_CODICE_CLIFO_A>=#F_CODICE_CLIFO_DA
|
||||
WARNING "Digitare un codice maggiore o uguale al campo 'da codice cliente'"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
SPREADSHEET DOCUMENTI_STATO 45 10
|
||||
BEGIN
|
||||
PROMPT 1 5 ""
|
||||
ITEM "Tipo Numerazione"
|
||||
ITEM "Da stato"
|
||||
ITEM "A stato"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga tipo numerazione" -1 -1 78 8
|
||||
|
||||
STRING FLD_TIPODOC 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Tipo Documento "
|
||||
FIELD TIPODOC
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
INPUT CODTAB FLD_TIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT FLD_TIPODOC CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING FLD_STATODOCDA 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Da Numerazione "
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
USE %STD
|
||||
FLAGS "U"
|
||||
INPUT CODTAB FLD_STATODOCA
|
||||
DISPLAY "Stato" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT FLD_STATODOCDA CODTAB
|
||||
//CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING FLD_STATODOCA 4
|
||||
BEGIN
|
||||
PROMPT 2 3 "A Numerazione "
|
||||
FIELD CODTAB
|
||||
KEY 1
|
||||
USE %STD
|
||||
FLAGS "U"
|
||||
INPUT CODTAB FLD_STATODOCA
|
||||
DISPLAY "Stato" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT FLD_STATODOCA CODTAB
|
||||
NUM_EXPR #FLD_STATODOCA>=#FLD_STATODOCDA
|
||||
//CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Documento" 0 0 0 2
|
||||
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
@ -183,7 +183,7 @@ class TLetint_report : public TReport
|
||||
word _last_printed_page;
|
||||
|
||||
protected:
|
||||
virtual bool use_mask() { return false;}
|
||||
virtual bool use_mask() { return false; }
|
||||
virtual word last_printed_page() const { return _last_printed_page; }
|
||||
|
||||
public:
|
||||
|
@ -5,12 +5,12 @@
|
||||
|
||||
void TLi_manager::elabTipiStati(TToken_string& tipi, TToken_string& stati)
|
||||
{
|
||||
for(int i = 0; i < tipidoc.items(); i++)
|
||||
for(int i = 0; i < tipidoc->items(); i++)
|
||||
{
|
||||
TToken_string statidoc(ini_get_string(CONFIG_DITTA, "li", tipidoc.get(i)), ',');
|
||||
TToken_string statidoc(ini_get_string(CONFIG_DITTA, "li", tipidoc->get(i)), ',');
|
||||
for(int j = statidoc.get_int(0); j <= statidoc.get_int(1); j++)
|
||||
{
|
||||
tipi.add(tipidoc.get(i));
|
||||
tipi.add(tipidoc->get(i));
|
||||
stati.add(j);
|
||||
}
|
||||
}
|
||||
@ -29,31 +29,42 @@ void TLi_manager::elabPlafond()
|
||||
TSorted_cursor c_dicint(&letint, "ANNO-|NUMPROT-", "", 2, &filtro, &filtro);
|
||||
|
||||
validPlafond = false;
|
||||
bool done = false;
|
||||
|
||||
if(c_dicint.items() > 0)
|
||||
{
|
||||
for(c_dicint = 0; c_dicint.pos() < c_dicint.items(); ++c_dicint)
|
||||
for(c_dicint = 0; c_dicint.pos() < c_dicint.items() && !done; ++c_dicint)
|
||||
{
|
||||
TRectype row = c_dicint.curr();
|
||||
if(!row.get_bool("CHIUSA"))
|
||||
{
|
||||
if(row.get_int("TIPOOP") != FINO_A_PLAFOND)
|
||||
{
|
||||
plafond = -UNO;
|
||||
return;
|
||||
}
|
||||
done = true;
|
||||
if(row.get_int("TIPOOP") != FINO_A_PLAFOND) continue;
|
||||
|
||||
year = row.get_int("ANNO");
|
||||
iniDicInt = row.get_date("VSDATA");
|
||||
plafond = row.get_real("IMPORTO");
|
||||
validPlafond = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
plafond = -UNO;
|
||||
if(!validPlafond)
|
||||
plafond = -UNO;
|
||||
}
|
||||
|
||||
const real TLi_manager::getPlaRes()
|
||||
{
|
||||
TToken_string tipi, stati;
|
||||
elabTipiStati(tipi, stati);
|
||||
return elabPlaRes(tipi, stati);
|
||||
}
|
||||
|
||||
const real TLi_manager::getPlaRes(TToken_string tipi, TToken_string stati)
|
||||
{
|
||||
return elabPlaRes(tipi, stati);
|
||||
}
|
||||
|
||||
const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati)
|
||||
{
|
||||
if(!validPlafond)
|
||||
return -UNO;
|
||||
@ -61,8 +72,6 @@ const real TLi_manager::getPlaRes()
|
||||
real resPlafond = plafond;
|
||||
|
||||
TLista_documenti din; // Legge tutti i documenti di input
|
||||
TToken_string tipi, stati;
|
||||
elabTipiStati(tipi, stati);
|
||||
TDate ad(31, 12, year);
|
||||
|
||||
// Trovo tutti i documenti che mi interessano e sottraggo l'imponibile al plafond
|
||||
@ -74,8 +83,9 @@ const real TLi_manager::getPlaRes()
|
||||
TString numerazione = din[i].numerazione();
|
||||
int numdoc = din[i].numero();
|
||||
int anno = din[i].anno();
|
||||
TRiepilogo_iva * totali = static_cast<TRiepilogo_iva *>(tabIva.get());
|
||||
if(totali->cod_iva() == codiva)
|
||||
TRiepilogo_iva * totali = dynamic_cast<TRiepilogo_iva *>(tabIva.get());
|
||||
|
||||
if(totali->cod_iva().codice() == *codiva)
|
||||
{
|
||||
resPlafond -= cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig();
|
||||
}
|
||||
@ -101,7 +111,7 @@ bool TLi_manager::testPlafond(TLista_documenti dout, TLog_report& lerr)
|
||||
int numdoc = dout[i].numero();
|
||||
int anno = dout[i].anno();
|
||||
TRiepilogo_iva * totali = static_cast<TRiepilogo_iva *>(tabIva.get());
|
||||
if(totali->cod_iva() == codiva)
|
||||
if(totali->cod_iva().codice() == *codiva)
|
||||
{
|
||||
resPlafond -= totali->imp_orig();
|
||||
totFatt += totali->imp_orig();
|
||||
@ -121,10 +131,16 @@ bool TLi_manager::testPlafond(TLista_documenti dout, TLog_report& lerr)
|
||||
|
||||
// TIPOCF, CODCLI, ANNO
|
||||
TLi_manager::TLi_manager(const char t, const long c, int y)
|
||||
: tipocf(t), codcli(c), year(y), iniDicInt()
|
||||
: tipocf(t), codcli(c), year(y), iniDicInt(), plafond(-UNO), validPlafond(false)
|
||||
{
|
||||
tipidoc = ini_get_string(CONFIG_DITTA, "li", "TIPIDOC");
|
||||
tipidoc = new TToken_string(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
|
||||
elabPlafond();
|
||||
// Estrapolo il codice iva
|
||||
codiva = TCodiceIVA(ini_get_string(CONFIG_DITTA, "li", "CODIVA"));
|
||||
codiva = new TString(ini_get_string(CONFIG_DITTA, "li", "CODIVA"));
|
||||
}
|
||||
|
||||
TLi_manager::~TLi_manager()
|
||||
{
|
||||
delete codiva;
|
||||
delete tipidoc;
|
||||
}
|
@ -1,10 +1,6 @@
|
||||
#ifndef __LILIB01_H
|
||||
#define __LILIB01_H
|
||||
/*
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifndef __DATE_H
|
||||
#include <date.h>
|
||||
#endif
|
||||
@ -29,24 +25,26 @@ class TLi_manager : TObject
|
||||
const long codcli;
|
||||
|
||||
TDate iniDicInt;
|
||||
TToken_string tipidoc;
|
||||
TToken_string* tipidoc;
|
||||
real plafond;
|
||||
|
||||
TCodiceIVA codiva;
|
||||
TString* codiva;
|
||||
|
||||
void elabTipiStati(TToken_string& tipi, TToken_string& stati); // Preparo due token string con le tipi[0] -> stati[0], ...
|
||||
void elabPlafond(); // Vado a estrapolare il plafond
|
||||
const real getPlaRes(); // Calcolo il rimanente del plafond
|
||||
|
||||
public:
|
||||
const real getPlafond() { return plafond; }; // Rirno il plafond
|
||||
bool hasValidPlafond() { return validPlafond;} // Ritorno se il plafond è valido
|
||||
bool testPlafond(TLista_documenti dout, TLog_report& lerr); // Testo se con i documenti passati supero il plafond
|
||||
bool checkModule(); // Controllo se il modulo è attivo
|
||||
void elabPlafond(); // Vado a estrapolare il plafond
|
||||
const real getPlaRes(); // Calcolo il rimanente del plafond
|
||||
const real getPlaRes(TToken_string tipi, TToken_string stati); // Calcolo il rimanente del plafond su tipi e stati documento passati
|
||||
const real elabPlaRes(TToken_string tipi, TToken_string stati); // Funzione che effettivamente effettua il calcolo
|
||||
const real getPlafond() { return plafond; } // Ritorno il plafond
|
||||
bool hasValidPlafond() { return validPlafond; } // Ritorno se il plafond è valido
|
||||
bool testPlafond(TLista_documenti dout, TLog_report& lerr); // Testo se con i documenti passati supero il plafond
|
||||
bool checkModule(); // Controllo se il modulo è attivo
|
||||
|
||||
// Costructors/Destructors
|
||||
TLi_manager(const char t, const long c, int y = -1);
|
||||
virtual ~TLi_manager() {};
|
||||
~TLi_manager();
|
||||
|
||||
void setYear(int y) { year = y; }
|
||||
};
|
||||
|
@ -5,5 +5,6 @@ Module = 16
|
||||
Flags = "F"
|
||||
Item_01 = "Dichiarazioni d'intento", "li0 -3", ""
|
||||
Item_02 = "Stampa dichiarazioni", "li0 -4", ""
|
||||
Item_03 = "Riepilogo dichiarazioni", li0 -1", ""
|
||||
Item_03 = "Impostazioni", "li0 -2", ""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user