Patch level : 12.0 344
Files correlati : li0 Commento : Modificato programma resoconto plafond: - Aggiunta distinzione tra fatture e altri documenti: adesso i documenti hanno una data massima mentre le fatture no. - Aggiunta funzione elabUtil() che ritorna quanto plafond è stato utilizzato senza verificare se è stato superato - Aggiunta variabile aData in elabPlaRes() git-svn-id: svn://10.65.10.50/branches/R_10_00@23634 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4e67181b00
commit
6d9295525a
@ -7,7 +7,7 @@ int main(int argc,char** argv)
|
|||||||
switch (r)
|
switch (r)
|
||||||
{
|
{
|
||||||
case 1: li0200(argc,argv) ; break; // Visualizzazione riepilogo plafond
|
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 2: li0300(argc,argv) ; break; // Impostazioni dichiarazione d'intento
|
||||||
case 3: li0400(argc,argv) ; break; // Gestione archivio
|
case 3: li0400(argc,argv) ; break; // Gestione archivio
|
||||||
case 4: li0500(argc,argv) ; break; // Stampa archivio
|
case 4: li0500(argc,argv) ; break; // Stampa archivio
|
||||||
case 5:
|
case 5:
|
||||||
|
@ -21,15 +21,15 @@ public:
|
|||||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; };
|
bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; };
|
||||||
TResDI_mask() : TAutomask("li0200a"), sheet(sfield(DOCUMENTI_STATO)) { load_config(); };
|
TResDI_mask() : TAutomask("li0200a"), sheet(sfield(DOCUMENTI_STATO)) { load_config(); };
|
||||||
void load_config();
|
void load_config();
|
||||||
void elabTipiDoc(TToken_string& tipi, TToken_string& stati);
|
void elabTipiDoc(TToken_string& tipi, TToken_string& stati, TToken_string& tipif, TToken_string& statif);
|
||||||
};
|
};
|
||||||
|
|
||||||
void TResDI_mask::load_config()
|
void TResDI_mask::load_config()
|
||||||
{
|
{
|
||||||
//Anno
|
//Anno
|
||||||
set(FLD_ANNO, TDate(TODAY).year());
|
set(F_A_DATA, TDate(TODAY));
|
||||||
|
|
||||||
set(FLD_TABIVA_CODTAB, ini_get_string(CONFIG_DITTA, "li", "CODIVA"));
|
set(F_TABIVA_CODTAB, ini_get_string(CONFIG_DITTA, "li", "CODIVA"));
|
||||||
TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
|
TToken_string tipidoc(ini_get_string(CONFIG_DITTA, "li", "TIPIDOC"));
|
||||||
|
|
||||||
TString_array& strarr = sheet.rows_array();
|
TString_array& strarr = sheet.rows_array();
|
||||||
@ -53,18 +53,36 @@ void TResDI_mask::load_config()
|
|||||||
sheet.show();
|
sheet.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TResDI_mask::elabTipiDoc(TToken_string& tipi, TToken_string& stati)
|
void TResDI_mask::elabTipiDoc(TToken_string& tipi, TToken_string& stati, TToken_string& tipif, TToken_string& statif)
|
||||||
{
|
{
|
||||||
|
bool fattura;
|
||||||
|
TString tipo;
|
||||||
for(int i = 0; i < sheet.items(); i++)
|
for(int i = 0; i < sheet.items(); i++)
|
||||||
{
|
{
|
||||||
TToken_string row = sheet.row(i);
|
TToken_string row = sheet.row(i); // Es. "F01|1|5"
|
||||||
int statoin = row.get_int(1), statoout = row.get_int(2);
|
int statoin = row.get_int(1), statoout = row.get_int(2);
|
||||||
|
tipo = row.get(0);
|
||||||
|
|
||||||
|
if(cache().get("%TIP", tipo).get_int("I1") == 2) // Se il tipo è una fattura
|
||||||
|
fattura = true;
|
||||||
|
else
|
||||||
|
fattura = false;
|
||||||
|
|
||||||
for(; statoin <= statoout; statoin++)
|
for(; statoin <= statoout; statoin++)
|
||||||
{
|
{
|
||||||
|
// Aggiornamento: Ci sono 4 token string ora, due per le fatture e due per il resto.
|
||||||
// Immetto nelle due TToken_string i valori per gestire la classe TLista_documenti
|
// 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}
|
// 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));
|
if (fattura)
|
||||||
stati.add(statoin);
|
{
|
||||||
|
tipif.add(tipo);
|
||||||
|
statif.add(statoin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tipi.add(tipo);
|
||||||
|
stati.add(statoin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,11 +99,11 @@ void TResDI_app::elab(TResDI_mask& m)
|
|||||||
{
|
{
|
||||||
int clifoda = m.get_long(F_CODICE_CLIFO_DA);
|
int clifoda = m.get_long(F_CODICE_CLIFO_DA);
|
||||||
int clifoa = m.get_long(F_CODICE_CLIFO_A);
|
int clifoa = m.get_long(F_CODICE_CLIFO_A);
|
||||||
int anno = m.get_int(FLD_ANNO);
|
TDate aData(m.get_date(F_A_DATA));
|
||||||
|
|
||||||
// Creo le TToken_string necessarie per filtrare i documenti
|
// Creo le TToken_string necessarie per filtrare i documenti
|
||||||
TToken_string tipi, stati;
|
TToken_string tipi, stati, tipif, statif;
|
||||||
m.elabTipiDoc(tipi, stati);
|
m.elabTipiDoc(tipi, stati, tipif, statif);
|
||||||
|
|
||||||
TRelation r_clifo(LF_CLIFO);
|
TRelation r_clifo(LF_CLIFO);
|
||||||
TRectype fil_from(r_clifo.curr()), fil_to(r_clifo.curr());
|
TRectype fil_from(r_clifo.curr()), fil_to(r_clifo.curr());
|
||||||
@ -105,11 +123,11 @@ void TResDI_app::elab(TResDI_mask& m)
|
|||||||
{
|
{
|
||||||
TRectype row_clifo(c_clifo.curr());
|
TRectype row_clifo(c_clifo.curr());
|
||||||
|
|
||||||
TLi_manager currentCli(row_clifo.get_char("TIPOCF"), row_clifo.get_long("CODCF"), anno); // Inizializzo l'oggetto per la gestione del plafond
|
TLi_manager currentCli(row_clifo.get_char("TIPOCF"), row_clifo.get_long("CODCF")); // Inizializzo l'oggetto per la gestione del plafond
|
||||||
if(currentCli.hasValidPlafond())
|
if(currentCli.hasValidPlafond())
|
||||||
{
|
{
|
||||||
real plafond = currentCli.getPlafond();
|
real plafond = currentCli.getPlafond();
|
||||||
real resPlafond = currentCli.getPlaRes(tipi, stati);
|
real resPlafond = plafond - currentCli.elabUtil(tipi, stati, aData) - currentCli.elabUtil(tipif, statif);
|
||||||
|
|
||||||
TString msg;
|
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";
|
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";
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#define FLD_TIPODOC 101
|
#define F_TIPODOC 101
|
||||||
#define FLD_STATODOCDA 102
|
#define F_STATODOCDA 102
|
||||||
#define FLD_STATODOCA 103
|
#define F_STATODOCA 103
|
||||||
|
|
||||||
#define DOCUMENTI_STATO 201
|
#define DOCUMENTI_STATO 201
|
||||||
|
|
||||||
#define FLD_TABIVA_CODTAB 301
|
#define F_TABIVA_CODTAB 301
|
||||||
#define FLD_ANNO 302
|
#define F_A_DATA 303
|
||||||
#define F_CODICE_CLIFO_DA 303
|
#define F_CODICE_CLIFO_DA 304
|
||||||
#define F_CODICE_CLIFO_A 304
|
#define F_CODICE_CLIFO_A 305
|
@ -6,34 +6,30 @@ ENDPAGE
|
|||||||
|
|
||||||
PAGE "Impostazioni dichiarazioni d'intento" 0 2 0 0
|
PAGE "Impostazioni dichiarazioni d'intento" 0 2 0 0
|
||||||
|
|
||||||
STRING FLD_TABIVA_CODTAB 4
|
STRING F_TABIVA_CODTAB 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 "Codice IVA plafond:"
|
PROMPT 1 1 "Codice IVA plafond:"
|
||||||
FIELD CODTAB
|
FIELD CODTAB
|
||||||
KEY 1
|
KEY 1
|
||||||
USE %IVA
|
USE %IVA
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
INPUT CODTAB FLD_TABIVA_CODTAB
|
INPUT CODTAB F_TABIVA_CODTAB
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
DISPLAY "Tipo" S1
|
DISPLAY "Tipo" S1
|
||||||
DISPLAY "%@5" R0
|
DISPLAY "%@5" R0
|
||||||
DISPLAY "Vent." S6
|
DISPLAY "Vent." S6
|
||||||
DISPLAY "Sospeso" B2
|
DISPLAY "Sospeso" B2
|
||||||
OUTPUT FLD_TABIVA_CODTAB CODTAB
|
OUTPUT F_TABIVA_CODTAB CODTAB
|
||||||
HELP "Inserire il codice IVA"
|
HELP "Inserire il codice IVA"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
VALIDATE ZEROFILL_FUNC 2
|
VALIDATE ZEROFILL_FUNC 2
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER FLD_ANNO 4
|
DATE F_A_DATA
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 2 "Anno:"
|
PROMPT 1 2 "A data "
|
||||||
HELP "Inserire l'anno"
|
|
||||||
FIELD ANNO
|
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
WARNING "Inserire l'anno"
|
|
||||||
NUM_EXPR #FLD_ANNO>0
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_CODICE_CLIFO_DA 6
|
NUMBER F_CODICE_CLIFO_DA 6
|
||||||
@ -77,45 +73,45 @@ ENDMASK
|
|||||||
|
|
||||||
PAGE "Riga tipo numerazione" -1 -1 78 8
|
PAGE "Riga tipo numerazione" -1 -1 78 8
|
||||||
|
|
||||||
STRING FLD_TIPODOC 4
|
STRING F_TIPODOC 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 1 "Tipo Documento "
|
PROMPT 2 1 "Tipo Documento "
|
||||||
FIELD TIPODOC
|
FIELD TIPODOC
|
||||||
HELP "Codice tipo documento"
|
HELP "Codice tipo documento"
|
||||||
USE %TIP
|
USE %TIP
|
||||||
INPUT CODTAB FLD_TIPODOC
|
INPUT CODTAB F_TIPODOC
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT FLD_TIPODOC CODTAB
|
OUTPUT F_TIPODOC CODTAB
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING FLD_STATODOCDA 4
|
STRING F_STATODOCDA 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Da Numerazione "
|
PROMPT 2 2 "Da Numerazione "
|
||||||
FIELD CODTAB
|
FIELD CODTAB
|
||||||
KEY 1
|
KEY 1
|
||||||
USE %STD
|
USE %STD
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
INPUT CODTAB FLD_STATODOCA
|
INPUT CODTAB F_STATODOCA
|
||||||
DISPLAY "Stato" CODTAB
|
DISPLAY "Stato" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT FLD_STATODOCDA CODTAB
|
OUTPUT F_STATODOCDA CODTAB
|
||||||
//CHECKTYPE REQUIRED
|
//CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING FLD_STATODOCA 4
|
STRING F_STATODOCA 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 3 "A Numerazione "
|
PROMPT 2 3 "A Numerazione "
|
||||||
FIELD CODTAB
|
FIELD CODTAB
|
||||||
KEY 1
|
KEY 1
|
||||||
USE %STD
|
USE %STD
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
INPUT CODTAB FLD_STATODOCA
|
INPUT CODTAB F_STATODOCA
|
||||||
DISPLAY "Stato" CODTAB
|
DISPLAY "Stato" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT FLD_STATODOCA CODTAB
|
OUTPUT F_STATODOCA CODTAB
|
||||||
NUM_EXPR #FLD_STATODOCA>=#FLD_STATODOCDA
|
NUM_EXPR #F_STATODOCA>=#F_STATODOCDA
|
||||||
//CHECKTYPE REQUIRED
|
//CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ const real TLi_manager::getPlaRes(TToken_string tipi, TToken_string stati)
|
|||||||
return elabPlaRes(tipi, stati);
|
return elabPlaRes(tipi, stati);
|
||||||
}
|
}
|
||||||
|
|
||||||
const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati)
|
const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati, TDate ad)
|
||||||
{
|
{
|
||||||
if(!validPlafond)
|
if(!validPlafond)
|
||||||
return -UNO;
|
return -UNO;
|
||||||
@ -77,7 +77,6 @@ const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati)
|
|||||||
real resPlafond = plafond;
|
real resPlafond = plafond;
|
||||||
|
|
||||||
TLista_documenti din; // Legge tutti i documenti di input
|
TLista_documenti din; // Legge tutti i documenti di input
|
||||||
TDate ad(31, 12, year);
|
|
||||||
|
|
||||||
// Trovo tutti i documenti che mi interessano e sottraggo l'imponibile al plafond
|
// Trovo tutti i documenti che mi interessano e sottraggo l'imponibile al plafond
|
||||||
din.read('D', tipocf, codcli, year, tipi, stati, iniDicInt, ad);
|
din.read('D', tipocf, codcli, year, tipi, stati, iniDicInt, ad);
|
||||||
@ -94,7 +93,6 @@ const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati)
|
|||||||
{
|
{
|
||||||
resPlafond -= cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig();
|
resPlafond -= cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig();
|
||||||
}
|
}
|
||||||
//if(resPlafond < 0) break;
|
|
||||||
|
|
||||||
// Nel caso il plafond trovato fosse una soluzione unica e ho già trovato dei documenti vuol dire che il plafond non è più valido
|
// Nel caso il plafond trovato fosse una soluzione unica e ho già trovato dei documenti vuol dire che il plafond non è più valido
|
||||||
if(soluzione)
|
if(soluzione)
|
||||||
@ -107,6 +105,42 @@ const real TLi_manager::elabPlaRes(TToken_string tipi, TToken_string stati)
|
|||||||
return resPlafond;
|
return resPlafond;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const real TLi_manager::elabUtil(TToken_string tipi, TToken_string stati, TDate ad)
|
||||||
|
{
|
||||||
|
if(!validPlafond)
|
||||||
|
return -UNO;
|
||||||
|
|
||||||
|
real utilizzato = ZERO;
|
||||||
|
|
||||||
|
TLista_documenti din; // Legge tutti i documenti di input
|
||||||
|
|
||||||
|
// Trovo tutti i documenti che mi interessano e sottraggo l'imponibile al plafond
|
||||||
|
din.read('D', tipocf, codcli, year, tipi, stati, iniDicInt, ad);
|
||||||
|
|
||||||
|
for(int i = 0; i < din.items(); i++)
|
||||||
|
{
|
||||||
|
TAssoc_array tabIva = din[i].tabella_iva(true);
|
||||||
|
TString numerazione = din[i].numerazione();
|
||||||
|
int numdoc = din[i].numero();
|
||||||
|
int anno = din[i].anno();
|
||||||
|
TRiepilogo_iva * totali = dynamic_cast<TRiepilogo_iva *>(tabIva.get());
|
||||||
|
|
||||||
|
if(totali->cod_iva().codice() == codiva)
|
||||||
|
{
|
||||||
|
utilizzato += cache().get("%TIP", din[i].tipo().codice()).get_bool("B7") ? -totali->imp_orig() : totali->imp_orig();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nel caso il plafond trovato fosse una soluzione unica e ho già trovato dei documenti vuol dire che il plafond non è più valido
|
||||||
|
if(soluzione)
|
||||||
|
{
|
||||||
|
utilizzato = -UNO;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return utilizzato;
|
||||||
|
}
|
||||||
|
|
||||||
bool TLi_manager::testPlafond(TLista_documenti dout, TLog_report& lerr)
|
bool TLi_manager::testPlafond(TLista_documenti dout, TLog_report& lerr)
|
||||||
{
|
{
|
||||||
bool err = false;
|
bool err = false;
|
||||||
|
@ -34,21 +34,25 @@ class TLi_manager : TObject
|
|||||||
void elabTipiStati(TToken_string& tipi, TToken_string& stati); // Preparo due token string con le tipi[0] -> stati[0], ...
|
void elabTipiStati(TToken_string& tipi, TToken_string& stati); // Preparo due token string con le tipi[0] -> stati[0], ...
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
// Getters
|
||||||
|
const real getPlafond() { return plafond; } // Ritorno il plafond
|
||||||
|
bool hasValidPlafond() { return validPlafond; } // Ritorno se il plafond è valido
|
||||||
|
bool isSoluzione() { return soluzione; } // Ritorna se è una dichiarazione di tipo soluzione
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
void setYear(int y) { year = y; } // Imposta l'anno, mai usata
|
||||||
|
|
||||||
|
// Functions
|
||||||
void elabPlafond(); // Vado a estrapolare il plafond
|
void elabPlafond(); // Vado a estrapolare il plafond
|
||||||
|
bool testPlafond(TLista_documenti dout, TLog_report& lerr); // Testo se con i documenti passati supero il plafond
|
||||||
const real getPlaRes(); // Calcolo il rimanente del 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 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 elabPlaRes(TToken_string tipi, TToken_string stati, TDate ad = 0L); // Funzione che effettivamente effettua il calcolodalla data della dichiarazione alla data passata
|
||||||
const real getPlafond() { return plafond; } // Ritorno il plafond
|
const real elabUtil(TToken_string tipi, TToken_string stati, TDate ad = 0L); // Ritorna la quantità di plafond utilizzato dalla data della dichiarazione alla data passata
|
||||||
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
|
|
||||||
bool isSoluzione() { return soluzione; } // Ritorna se è una dichiarazione di tipo soluzione
|
|
||||||
|
|
||||||
// Costructors/Destructors
|
// Costructors/Destructors
|
||||||
TLi_manager(const char t, const long c, int y = -1);
|
TLi_manager(const char t, const long c, int y = -1);
|
||||||
~TLi_manager();
|
~TLi_manager();
|
||||||
|
|
||||||
void setYear(int y) { year = y; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user