From f498fdfba232a29ff40348adbdf29ee65d7f698d Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 4 Sep 2012 12:40:50 +0000 Subject: [PATCH] Aggiunta selezione per partita IVA in stampa e visualizzazione mastrini Migliorata stampa liquidazione IVA differita git-svn-id: svn://10.65.10.50/branches/R_10_00@22719 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg2104.cpp | 3 +- cg/cg3200.cpp | 151 ++++++++++++++--------------- cg/cg3200.h | 6 ++ cg/cg3200a.uml | 137 ++++++++++++++++++++------ cg/cg3600.h | 7 ++ cg/cg3600a.uml | 90 ++++++++++++++--- cg/cg4100.cpp | 10 +- cg/cg4300.cpp | 31 +++--- cg/cg4300.h | 3 +- cg/cg4301.cpp | 252 ++++++++++++++++++++++++------------------------ cg/cg4302.cpp | 2 +- cg/cg4304.cpp | 97 +++++++++++++------ cg/cg7100.cpp | 23 +---- cg/cg7100p.uml | 2 +- cg/cglib01.cpp | 4 +- cg/cgsaldac.cpp | 190 ++++++++++++++++++++++++++---------- cg/cgsaldac.h | 7 +- 17 files changed, 639 insertions(+), 376 deletions(-) diff --git a/cg/cg2104.cpp b/cg/cg2104.cpp index 54edc775e..30563ac27 100755 --- a/cg/cg2104.cpp +++ b/cg/cg2104.cpp @@ -1021,8 +1021,7 @@ void TPrimanota_application::write_scadenze(const TMask& m) for (int i = 0; i < new_rate; i++) { - real * r = new real; - + real* r = new real; ant.add(r); if (i < nrate) *r = partita.rata(i + 1).get_real(SCAD_IMPORTOANT); diff --git a/cg/cg3200.cpp b/cg/cg3200.cpp index f4cb5ce8a..d8b2fab9a 100755 --- a/cg/cg3200.cpp +++ b/cg/cg3200.cpp @@ -155,7 +155,7 @@ public: int ricerca_clifo(int riga); int ricerca_gruppo(int riga); - void calcola_progressivi(bool finali = FALSE); + void calcola_progressivi(bool finali = false); void calcola_progressivi_al(const TDate& data); int stampa_progressivi(int start_riga); int stampa_progre_riporto(int start_riga); @@ -554,7 +554,7 @@ int TMastrini_application::date2esc(const TDate& d) bool TMastrini_application::almeno_un_record() { - bool trovato=FALSE; + bool trovato = false; if (current_cursor()->is_first_match(LF_RMOV)) { @@ -564,6 +564,7 @@ bool TMastrini_application::almeno_un_record() TRelation rel(LF_RMOV); rel.add(LF_MOV, "NUMREG==NUMREG"); TRectype& rmov = rel.curr(); + const TRectype& mov = rel.curr(LF_MOV); rmov.zero(); rmov.put(RMV_GRUPPO, _gruppo); @@ -575,28 +576,17 @@ bool TMastrini_application::almeno_un_record() for (cur = 0L; cur.pos() < items; ++cur) { const int annoes = rmov.get_int (RMV_ANNOES); - const long numreg = rmov.get_long(RMV_NUMREG); - - const TRectype & mov = cache().get(LF_MOV, numreg); - - const TDate datacomp = (mov.get_date(MOV_DATACOMP)); - const TString16 provvis (mov.get(MOV_PROVVIS)); - - - TDate datareg; - if (_annomsk == 0) - datareg = rmov.get_date(RMV_DATAREG); - else - datareg = datacomp; - + const TString4 provvis (mov.get(MOV_PROVVIS)); + const TDate datareg = _annomsk ? mov.get_date(MOV_DATACOMP) : rmov.get_date(RMV_DATAREG); if ( ((annoes==_annomsk) || (_annomsk==0)) && ((datareg>=_data_ini) && (datareg<=_data_fine)) && (_stampa_mov_prov || provvis.blank())) { - trovato = TRUE; + trovato = true; break; } } rmov_file.readat(record); } + return trovato; } @@ -2186,24 +2176,28 @@ void TMastrini_application::descrizione_causale() void TMastrini_application::documenti_iva() { - TString dep; - - _tabtpd->curr().zero(); - dep << format ("%2s",(const char*) _tipodoc); - _tabtpd->curr().put("CODTAB", (const char*) dep); - _tabtpd->read(); - _descrdociva = _tabtpd->curr().get("S0"); - _natdoc = atoi(_tabtpd->curr().get("I0")); + _tabtpd->zero(); + if (_tipodoc.full()) + { + TString4 dep; + dep.format("%2s",(const char*) _tipodoc); + _tabtpd->put("CODTAB", dep); + _tabtpd->read(); + } + _descrdociva = _tabtpd->get("S0"); + _natdoc = atoi(_tabtpd->get("I0")); } void TMastrini_application::ricerca_regiva() { - TString16 dep; - _tabreg->curr().zero(); - dep << format("%04d", _annoiva); - dep << format("%3s" , (const char*) _regiva); - _tabreg->curr().put("CODTAB", (const char*) dep); - _tabreg->read(); + _tabreg->zero(); + if (_annoiva > 0 && _regiva.full()) + { + TString8 dep; + dep.format("%04d%3s", _annoiva, (const char*)_regiva); + _tabreg->put("CODTAB", dep); + _tabreg->read(); + } _tipo = _tabreg->get_int("I0"); } @@ -2501,11 +2495,9 @@ void TMastrini_application::conto(int gruppo, int conto, bool no_contropartita) void TMastrini_application::ricerca_dati_ditta() { - long app; - const TRectype & nditte = cache().get(LF_NDITTE, _codice_ditta); - app = nditte.get_long(NDT_CODDITTA); + const long app = nditte.get_long(NDT_CODDITTA); _ragsoc = nditte.get(NDT_RAGSOC); TString16 key; @@ -2923,20 +2915,35 @@ int TMastrini_application::stampa_progre_riporto(int start_riga) } return r; } - + + void TMastrini_application::calcola_progressivi_al(const TDate& data_fin) { + static TBill _last_bill; + static TDate _last_date, _last_inizio; + static int _last_year; + static bool _last_provv; + static real _last_dare, _last_avere; + + const TDate data_inizio = _annomsk ? _data_inizioese : _inizioes; + + if (_annomsk == _last_year && data_inizio == _last_inizio && data_fin == _last_date && + _last_provv == _stampa_mov_prov && _last_bill == TBill(_gruppo, _conto, _sottoc)) + { + _totale_prima_dare = _last_dare; + _totale_prima_avere = _last_avere; + return; + } + TLocalisamfile& rmov_file = current_cursor()->file(LF_RMOV); const TRecnotype record = rmov_file.recno(); - - _totale_prima_dare = ZERO; - _totale_prima_avere = ZERO; TRelation rel(LF_RMOV); rel.add(LF_MOV, "NUMREG==NUMREG"); - TRectype& rmov = rel.curr(); -// const TRectype& mov = rel.curr(LF_MOV); + const TRectype& mov = rel.curr(LF_MOV); + TRectype& rmov = rel.curr(); + rmov.zero(); rmov.put(RMV_GRUPPO, _gruppo); rmov.put(RMV_CONTO, _conto); @@ -2944,52 +2951,40 @@ void TMastrini_application::calcola_progressivi_al(const TDate& data_fin) TCursor cur(&rel, "", 2, &rmov, &rmov); const long items = cur.items(); cur.freeze(); + + _totale_prima_dare = ZERO; + _totale_prima_avere = ZERO; + for (cur = 0L; cur.pos() < items; ++cur) { - const int annoes = rmov.get_int (RMV_ANNOES); - TDate datareg = rmov.get_date(RMV_DATAREG); - const char sezione = rmov.get_char(RMV_SEZIONE); - const real importo = rmov.get_real(RMV_IMPORTO); - long numreg = rmov.get_long(RMV_NUMREG); - - const TRectype & mov = cache().get(LF_MOV, numreg); - const TDate datacomp = (mov.get_date(MOV_DATACOMP)); - TDate data; - const TString16 provvis (mov.get(MOV_PROVVIS)); - - - if (_stampa_mov_prov || (!_stampa_mov_prov && provvis.blank())) + if (_stampa_mov_prov || mov.get(MOV_PROVVIS).blank()) { - if (_annomsk == 0) + const int annoes = rmov.get_int (RMV_ANNOES); + const TDate datareg = mov.get_date(_annomsk ? MOV_DATACOMP : RMV_DATAREG); + + //Legge movimenti con data > inizio esercizio e < data_fin + if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data_inizio)&&(datareg <= data_fin)) { - datareg = rmov.get_date(RMV_DATAREG); - data = _inizioes; + const char sezione = rmov.get_char(RMV_SEZIONE); + const real importo = rmov.get_real(RMV_IMPORTO); + if (sezione == 'D') + _totale_prima_dare += importo; + else + _totale_prima_avere += importo; } - else - { - datareg = datacomp; - data = _data_inizioese; - } - - const int gruppo = rmov.get_int(RMV_GRUPPO); - const int conto = rmov.get_int(RMV_CONTO); - const long sottoc = rmov.get_long(RMV_SOTTOCONTO); - if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) - break; - else - { - //Legge movimenti con data > inizio esercizio e < data_fin - if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data)&&(datareg <= data_fin)) - if (sezione == 'D') - _totale_prima_dare += importo; - else - _totale_prima_avere += importo; - } - } // if ((_stampa_mov_prov) || ((!_stampa_mov_prov) && (provvis.trim().empty()))) + } } // Riposiziona rmov rmov_file.readat(record); + + _last_year = _annomsk; + _last_date = data_fin; + _last_inizio = data_inizio; + _last_bill.set(_gruppo, _conto, _sottoc); + _last_provv = _stampa_mov_prov; + _last_dare = _totale_prima_dare; + _last_avere = _totale_prima_avere; } void TMastrini_application::calcola_progressivi(bool finali) @@ -3022,7 +3017,7 @@ void TMastrini_application::calcola_progressivi(bool finali) { const int annoes_saldi = saldi.curr().get_int(SLD_ANNOES); -//Calcola i progressivi dell'esercizio attuale + //Calcola i progressivi dell'esercizio attuale if (annoes_saldi == _anno_corrente) { progdare_attuale = saldi.get_real(SLD_PDARE); diff --git a/cg/cg3200.h b/cg/cg3200.h index c4c20a459..19f9749ac 100755 --- a/cg/cg3200.h +++ b/cg/cg3200.h @@ -15,6 +15,9 @@ #define F_SOTTOCINI_CONTO 105 #define F_SOTTOCINI_CLIENTE 205 #define F_SOTTOCINI_FORN 305 +#define F_PAIVINI_CLIENTE 206 +#define F_PAIVINI_FORN 306 + #define F_TIPOCF_FINE 106 #define F_GRUPPOFINE 107 #define F_CONTOFINE_CONTO 108 @@ -23,6 +26,9 @@ #define F_SOTTOCFINE_CONTO 109 #define F_SOTTOCFINE_CLIENTE 209 #define F_SOTTOCFINE_FORN 309 +#define F_PAIVFINE_CLIENTE 210 +#define F_PAIVFINE_FORN 310 + #define F_DESCRINI_CONTO 125 #define F_DESCRINI_CLIENTE 135 #define F_DESCRINI_FORN 145 diff --git a/cg/cg3200a.uml b/cg/cg3200a.uml index abc4e7fa9..1f523d7df 100755 --- a/cg/cg3200a.uml +++ b/cg/cg3200a.uml @@ -29,24 +29,13 @@ END DATE F_DATASTAMPA BEGIN - PROMPT 1 2 "Data di stampa " + PROMPT 1 2 "Data di stampa " FLAGS "A" END -LIST F_TIPOCF_INI 25 -BEGIN - PROMPT 1 3 "Ricerca " - ITEM " |Gruppo/conto/sottoconto" - MESSAGE HIDE,2@|HIDE,3@|SHOW,1@ - ITEM "C|Clienti" - MESSAGE HIDE,1@|HIDE,3@|SHOW,2@ - ITEM "F|Fornitori" - MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ -END - NUMBER F_ANNO 4 BEGIN - PROMPT 55 3 "Esercizio " + PROMPT 51 2 "Esercizio " USE ESC INPUT CODTAB F_ANNO DISPLAY "Codice Esercizio" CODTAB @@ -60,15 +49,26 @@ BEGIN ADD NONE END +LIST F_TIPOCF_INI 25 +BEGIN + PROMPT 1 3 "Ricerca " + ITEM " |Gruppo/conto/sottoconto" + MESSAGE HIDE,2@|HIDE,3@|SHOW,1@ + ITEM "C|Clienti" + MESSAGE HIDE,1@|HIDE,3@|SHOW,2@ + ITEM "F|Fornitori" + MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ +END + NUMBER F_GRUPPOINI 3 BEGIN - PROMPT 1 4 "Da Gruppo - Conto - Sottoconto " + PROMPT 1 4 "Dal Conto " GROUP 9 END NUMBER F_CONTOINI_CONTO 3 BEGIN - PROMPT 39 4 "" + PROMPT 22 4 "" USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="") INPUT GRUPPO F_GRUPPOINI INPUT CONTO F_CONTOINI_CONTO @@ -87,7 +87,7 @@ END NUMBER F_SOTTOCINI_CONTO 6 BEGIN - PROMPT 48 4 "" + PROMPT 29 4 "" USE LF_PCON SELECT SOTTOCONTO!="" INPUT GRUPPO F_GRUPPOINI INPUT CONTO F_CONTOINI_CONTO @@ -106,7 +106,7 @@ END STRING F_DESCRINI_CONTO 50 BEGIN - PROMPT 1 5 "Descrizione " + PROMPT 1 5 "Descrizione " USE LF_PCON KEY 2 CHECKTYPE NORMAL INPUT DESCR F_DESCRINI_CONTO @@ -120,7 +120,7 @@ END NUMBER F_SOTTOCINI_CLIENTE 6 BEGIN - PROMPT 48 4 "" + PROMPT 29 4 "" USE LF_CLIFO CHECKTYPE NORMAL INPUT TIPOCF "C" @@ -129,15 +129,34 @@ BEGIN DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO + DISPLAY "Partita IVA" PAIV OUTPUT F_SOTTOCINI_CLIENTE CODCF OUTPUT F_DESCRINI_CLIENTE RAGSOC + OUTPUT F_PAIVINI_CLIENTE PAIV MESSAGE COPY,F_SOTTOCINI_CONTO GROUP 2 9 END +STRING F_PAIVINI_CLIENTE 12 +BEGIN + PROMPT 43 4 "Partita IVA " + USE LF_CLIFO KEY 5 + CHECKTYPE NORMAL + WARNING "Cliente inesistente o mancante" + INPUT TIPOCF "C" + INPUT PAIV F_PAIVINI_CLIENTE + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + COPY OUTPUT F_SOTTOCINI_CLIENTE + GROUP 2 9 +END + STRING F_DESCRINI_CLIENTE 50 BEGIN - PROMPT 1 5 "Ragione sociale " + PROMPT 1 5 "Ragione sociale " FIELD LF_CLIFO->RAGSOC USE LF_CLIFO KEY 2 INPUT TIPOCF "C" @@ -153,7 +172,7 @@ END NUMBER F_SOTTOCINI_FORN 6 BEGIN - PROMPT 48 4 "" + PROMPT 29 4 "" USE LF_CLIFO CHECKTYPE NORMAL INPUT TIPOCF "F" @@ -162,16 +181,34 @@ BEGIN DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO + DISPLAY "Partita IVA" PAIV OUTPUT F_SOTTOCINI_FORN CODCF OUTPUT F_DESCRINI_FORN RAGSOC - FLAGS "R" + OUTPUT F_PAIVINI_FORN PAIV GROUP 3 9 MESSAGE COPY,F_SOTTOCINI_CONTO END +STRING F_PAIVINI_FORN 12 +BEGIN + PROMPT 43 4 "Partita IVA " + USE LF_CLIFO KEY 5 + CHECKTYPE NORMAL + WARNING "Fornitore inesistente o mancante" + INPUT TIPOCF "F" + INPUT PAIV F_PAIVINI_FORN + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + COPY OUTPUT F_SOTTOCINI_FORN + GROUP 3 9 +END + STRING F_DESCRINI_FORN 50 BEGIN - PROMPT 1 5 "Ragione Sociale " + PROMPT 1 5 "Ragione Sociale " USE LF_CLIFO KEY 2 INPUT TIPOCF "F" INPUT RAGSOC F_DESCRINI_FORN @@ -186,7 +223,7 @@ END LIST F_TIPOCF_FINE 25 BEGIN - PROMPT 1 6 "Ricerca " + PROMPT 1 6 "Ricerca " ITEM " |Gruppo/conto/sottoconto" MESSAGE HIDE,5@|HIDE,6@|SHOW,4@ ITEM "C|Clienti" @@ -197,13 +234,13 @@ END NUMBER F_GRUPPOFINE 3 BEGIN - PROMPT 1 7 "A Gruppo - Conto - Sottoconto " + PROMPT 1 7 "Al Conto " GROUP 9 END NUMBER F_CONTOFINE_CONTO 3 BEGIN - PROMPT 39 7 "" + PROMPT 22 7 "" USE LF_PCON SELECT (CONTO!="")&&(SOTTOCONTO="") /* &&(TMCF="") */ INPUT GRUPPO F_GRUPPOFINE INPUT CONTO F_CONTOFINE_CONTO @@ -223,7 +260,7 @@ END NUMBER F_SOTTOCFINE_CONTO 6 BEGIN - PROMPT 48 7 "" + PROMPT 29 7 "" USE LF_PCON SELECT SOTTOCONTO!="" INPUT GRUPPO F_GRUPPOFINE INPUT CONTO F_CONTOFINE_CONTO @@ -243,7 +280,7 @@ END STRING F_DESCRFINE_CONTO 50 BEGIN - PROMPT 1 8 "Descrizione " + PROMPT 1 8 "Descrizione " USE LF_PCON KEY 2 CHECKTYPE NORMAL INPUT DESCR F_DESCRFINE_CONTO @@ -257,7 +294,7 @@ END NUMBER F_SOTTOCFINE_CLIENTE 6 BEGIN - PROMPT 48 7 "" + PROMPT 29 7 "" USE LF_CLIFO CHECKTYPE NORMAL WARNING "Cliente inesistente o mancante" @@ -265,17 +302,36 @@ BEGIN INPUT CODCF F_SOTTOCFINE_CLIENTE DISPLAY "Codice" CODCF DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Partita IVA" PAIV DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO OUTPUT F_SOTTOCFINE_CLIENTE CODCF OUTPUT F_DESCRFINE_CLIENTE RAGSOC + OUTPUT F_PAIVFINE_CLIENTE PAIV MESSAGE COPY,F_SOTTOCFINE_CONTO GROUP 5 9 END +STRING F_PAIVFINE_CLIENTE 12 +BEGIN + PROMPT 43 7 "Partita IVA " + USE LF_CLIFO KEY 5 + CHECKTYPE NORMAL + WARNING "Cliente inesistente o mancante" + INPUT TIPOCF "C" + INPUT PAIV F_PAIVFINE_CLIENTE + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + COPY OUTPUT F_SOTTOCFINE_CLIENTE + GROUP 5 9 +END + STRING F_DESCRFINE_CLIENTE 50 BEGIN - PROMPT 1 8 "Ragione sociale " + PROMPT 1 8 "Ragione sociale " FIELD LF_CLIFO->RAGSOC CHECKTYPE NORMAL USE LF_CLIFO KEY 2 @@ -292,7 +348,7 @@ END NUMBER F_SOTTOCFINE_FORN 6 BEGIN - PROMPT 48 7 "" + PROMPT 29 7 "" USE LF_CLIFO CHECKTYPE NORMAL WARNING "Fornitore inesistente o mancante" @@ -300,17 +356,36 @@ BEGIN INPUT CODCF F_SOTTOCFINE_FORN DISPLAY "Codice" CODCF DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Partita IVA" PAIV DISPLAY "Gruppo" GRUPPO DISPLAY "Conto" CONTO OUTPUT F_SOTTOCFINE_FORN CODCF OUTPUT F_DESCRFINE_FORN RAGSOC + OUTPUT F_PAIVFINE_FORN PAIV MESSAGE COPY,F_SOTTOCFINE_CONTO GROUP 6 9 END +STRING F_PAIVFINE_FORN 12 +BEGIN + PROMPT 43 7 "Partita IVA " + USE LF_CLIFO KEY 5 + CHECKTYPE NORMAL + WARNING "Cliente inesistente o mancante" + INPUT TIPOCF "F" + INPUT PAIV F_PAIVFINE_CLIENTE + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + COPY OUTPUT F_SOTTOCFINE_FORN + GROUP 6 9 +END + STRING F_DESCRFINE_FORN 50 BEGIN - PROMPT 1 8 "Ragione Sociale " + PROMPT 1 8 "Ragione Sociale " USE LF_CLIFO KEY 2 CHECKTYPE NORMAL INPUT TIPOCF "F" diff --git a/cg/cg3600.h b/cg/cg3600.h index fa12f7d40..63e13199b 100755 --- a/cg/cg3600.h +++ b/cg/cg3600.h @@ -7,10 +7,17 @@ #define F_DESCONTO 107 #define F_SOTTOCONTO 108 #define F_DESSOTTOC 109 + #define F_CLIENTE 206 #define F_RAGSOCCLI 207 +#define F_PAIVCLI 208 +#define F_COFICLI 209 + #define F_FORNITORE 306 #define F_RAGSOCFOR 307 +#define F_PAIVFOR 308 +#define F_COFIFOR 309 + #define F_ESERCIZIO 110 #define F_DADATA 111 #define F_ADATA 112 diff --git a/cg/cg3600a.uml b/cg/cg3600a.uml index 0e7e47ba8..21d93ead9 100755 --- a/cg/cg3600a.uml +++ b/cg/cg3600a.uml @@ -46,7 +46,7 @@ BEGIN FLAGS "D" END -GROUPBOX DLG_NULL 76 6 +GROUPBOX DLG_NULL 76 7 BEGIN PROMPT 1 4 "@bConto del mastrino" FLAGS "R" @@ -122,6 +122,8 @@ BEGIN DISPLAY "Codice Fiscale" COFI OUTPUT F_CLIENTE CODCF OUTPUT F_RAGSOCCLI RAGSOC + OUTPUT F_PAIVCLI PAIV + OUTPUT F_COFICLI COFI CHECKTYPE REQUIRED WARNING "Cliente assente" GROUP 2 4 @@ -136,6 +138,8 @@ BEGIN COPY DISPLAY F_CLIENTE OUTPUT F_FORNITORE CODCF OUTPUT F_RAGSOCFOR RAGSOC + OUTPUT F_PAIVFOR PAIV + OUTPUT F_COFIFOR COFI CHECKTYPE REQUIRED WARNING "Fornitore assente" GROUP 3 4 @@ -208,15 +212,75 @@ BEGIN GROUP 3 4 END +STRING F_COFICLI 16 +BEGIN + PROMPT 2 9 "Codice Fiscale " + USE LF_CLIFO KEY 4 + INPUT TIPOCF "C" + INPUT COFI F_COFICLI + DISPLAY "Codice Fiscale" COFI + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Partita IVA" PAIV + COPY OUTPUT F_CLIENTE + CHECKTYPE NORMAL + GROUP 2 4 +END + +STRING F_PAIVCLI 12 +BEGIN + PROMPT 49 9 "Partita IVA " + USE LF_CLIFO KEY 5 + INPUT TIPOCF "C" + INPUT PAIV F_PAIVCLI + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Codice Fiscale" COFI + COPY OUTPUT F_CLIENTE + CHECKTYPE NORMAL + GROUP 2 4 +END + +STRING F_COFIFOR 16 +BEGIN + PROMPT 2 9 "Codice Fiscale " + USE LF_CLIFO KEY 4 + INPUT TIPOCF "F" + INPUT COFI F_COFIFOR + DISPLAY "Codice Fiscale" COFI + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Partita IVA" PAIV + COPY OUTPUT F_FORNITORE + CHECKTYPE NORMAL + GROUP 3 4 +END + +STRING F_PAIVFOR 12 +BEGIN + PROMPT 49 9 "Partita IVA " + USE LF_CLIFO KEY 5 + INPUT TIPOCF "F" + INPUT PAIV F_PAIVFOR + DISPLAY "Partita IVA" PAIV + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Codice Fiscale" COFI + COPY OUTPUT F_FORNITORE + CHECKTYPE NORMAL + GROUP 3 4 +END + GROUPBOX DLG_NULL 76 4 BEGIN - PROMPT 1 10 "@bPeriodo" + PROMPT 1 11 "@bPeriodo" FLAGS "R" END NUMBER F_ESERCIZIO 4 BEGIN - PROMPT 2 11 "Cod. esercizio " + PROMPT 2 12 "Cod. esercizio " FLAGS "Z" USE ESC INPUT CODTAB F_ESERCIZIO @@ -230,35 +294,35 @@ END DATE F_DADATA BEGIN - PROMPT 26 11 "Dalla data " + PROMPT 26 12 "Dalla data " END DATE F_ADATA BEGIN - PROMPT 52 11 "Alla data " + PROMPT 52 12 "Alla data " VALIDATE DATE_CMP_FUNC >= F_DADATA WARNING "La data finale deve essere maggiore di quella iniziale" END BOOLEAN F_PROVVIS BEGIN - PROMPT 2 12 "Includi movimenti provvisori" + PROMPT 2 13 "Includi movimenti provvisori" END BOOLEAN F_END BEGIN - PROMPT 40 12 "Posizionamento in fondo al mastrino" + PROMPT 40 13 "Posizionamento in fondo al mastrino" END GROUPBOX DLG_NULL 76 5 BEGIN - PROMPT 1 14 "@bCausali" + PROMPT 1 15 "@bCausali" FLAGS "R" END STRING F_DACAUSALE 3 BEGIN - PROMPT 2 15 "Da causale " + PROMPT 2 16 "Da causale " FLAGS "UZ" USE LF_CAUSALI INPUT CODCAUS F_DACAUSALE @@ -274,7 +338,7 @@ END STRING F_DADESCAUS 50 BEGIN - PROMPT 23 15 "" + PROMPT 23 16 "" USE LF_CAUSALI KEY 2 INPUT DESCR F_DADESCAUS DISPLAY "Descrizione@50" DESCR @@ -286,7 +350,7 @@ END STRING F_ACAUSALE 3 BEGIN - PROMPT 2 16 "A causale " + PROMPT 2 17 "A causale " FLAGS "UZ" COPY USE F_DACAUSALE INPUT CODCAUS F_ACAUSALE @@ -301,7 +365,7 @@ END STRING F_ADESCAUS 50 BEGIN - PROMPT 23 16 "" + PROMPT 23 17 "" COPY USE F_DADESCAUS INPUT DESCR F_ADESCAUS COPY DISPLAY F_DADESCAUS @@ -312,7 +376,7 @@ END BOOLEAN F_ST_CONTSEP BEGIN - PROMPT 2 17 "Visualizzare contabilità separata" + PROMPT 2 18 "Visualizzare contabilità separata" MODULE NP END diff --git a/cg/cg4100.cpp b/cg/cg4100.cpp index 0c33a6e9a..f537d4fd2 100755 --- a/cg/cg4100.cpp +++ b/cg/cg4100.cpp @@ -24,7 +24,8 @@ #include "cglib02.h" -struct therec { +struct therec +{ char DATAREG[9]; char REG[4]; char DATADOC[9]; @@ -44,9 +45,6 @@ public: void sort_all(); bool sort_sal(); - - CG4100_App() {} - virtual ~CG4100_App() {} }; bool CG4100_App::set_parms() @@ -58,10 +56,8 @@ bool CG4100_App::set_parms() void CG4100_App::main_loop() { - if (fexist("__sal__.sav")) - warning_box(TR("Un'operazione di riordino saldi si e' conclusa" - " impropriamente. Si raccomanda di rieseguirla")); + warning_box(TR("Un'operazione di riordino saldi si e' conclusa impropriamente. Si raccomanda di rieseguirla")); _msk = new TMask("cg4100b"); diff --git a/cg/cg4300.cpp b/cg/cg4300.cpp index 95816462d..6a711d0ab 100755 --- a/cg/cg4300.cpp +++ b/cg/cg4300.cpp @@ -31,7 +31,7 @@ bool _Iva11Array::add(const real& val, const char* fld_name, int num_file) bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file) { - const real v1 = val * (-1.0); + const real v1 = -val; return add(v1,fld_name, num_file); } @@ -51,21 +51,26 @@ void _Iva11Array::zero(const char* fld_name) // se la % prorata relativa all'anno indicato non esiste, ritorna 0 real _ProrataItem::calc_prorata(const real& acq, const char* year) { - const real* perc = (const real*)_percentuali.objptr(year); - if (perc) + real prorata; + const real& perc = percentuale(year); + if (perc != INVALID_PRORATA && perc > ZERO) { - real prorata = acq * (*perc) / CENTO; - prorata.round(TCurrency::get_firm_dec()); - return prorata; + if (perc < CENTO) + { + prorata = acq * perc / CENTO; + prorata.round(TCurrency::get_firm_dec()); + } + else + prorata = acq; } - return ZERO; + return prorata; } // Ritorna la % prorata relativa all'anno indicato. Se non esiste internamente // viene ritornato INVALID_PRORATA -const real& _ProrataItem::percentuale(const char * year) const +const real& _ProrataItem::percentuale(const char* year) const { - const real* p = (real*)_percentuali.objptr(year); + const real* p = (const real*)_percentuali.objptr(year); if (p && !p->is_zero()) return *p; return INVALID_PRORATA; @@ -616,9 +621,10 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd) if (!look_lia(dt.get_long("CODDITTA"))) good = FALSE; } - else continue; + else + continue; - TToken_string* d = new TToken_string(64); + TToken_string* d = new TToken_string(63); // add record d->add(dt.get("CODDITTA")); @@ -635,7 +641,8 @@ void TLiquidazione_app::build_nomiditte(TProgind* pnd) } _nomiditte.add(d); } - if (pnd) pnd->addstatus(1); + if (pnd) + pnd->addstatus(1); } bool TLiquidazione_app::to_ditt_handler(TMask_field& f, KEY key) diff --git a/cg/cg4300.h b/cg/cg4300.h index dbcfe3a6d..7ee308f20 100755 --- a/cg/cg4300.h +++ b/cg/cg4300.h @@ -450,7 +450,8 @@ protected: static bool chk_final_handler(TMask_field& f, KEY key); static TLiquidazione_app& app() { return (TLiquidazione_app&)main_app(); } - + bool print_diff_log(int& rw); + public: virtual bool user_create(); diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 9957f626b..d0d9f06ea 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -160,6 +160,12 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) TConfig c(CONFIG_DITTA); _isdiff = c.get_bool("GesLiqDiff"); + if (_isdiff) + { + TFilename tmp; tmp.tempdir(); + tmp.add("liqdiff.txt"); + ofstream log(tmp); + } if (month == 13 && recalc) { @@ -546,7 +552,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt) for (_pia->first(); !_pia->eof(); _pia->next()) { const int m = atoi(*_pia_mese); - const TString16 att = (const char*)*_pia_codatt; + const TString8 att = (const char*)*_pia_codatt; if (m == month && att == codatt && (_year == *_pia_anno)) { _pia->put("R0",""); // Imponibile @@ -561,9 +567,9 @@ void TLiquidazione_app::zero_att(int month, const char* codatt) } void TLiquidazione_app::recalc_att(int month, const char* codatt) - // il codatt passato e' codice att + tipo att ( IN {1|2} ) - // occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati - // saranno solo quelli di dicembre per data <= 20/12; +// il codatt passato e' codice att + tipo att ( IN {1|2} ) +// occhecasino. Se _comp_acconto e' TRUE, i movimenti considerati +// saranno solo quelli di dicembre per data <= 20/12; { const bool has_sc = has_module(SCAUT, CHK_DONGLE); real totintra = ZERO; @@ -709,8 +715,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) TString8 fromreg("~"), toreg("0"); { - TRelation * regrel = new TRelation("REG"); - TCursor reg(regrel); + TRelation regrel("REG"); + TCursor reg(®rel); TString4 codreg; const int items = reg.items(); @@ -723,8 +729,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) if (codreg > toreg) toreg = codreg; } - - delete regrel; } //TDate f(1, month == 13 ? 1 : month, year_int); @@ -813,17 +817,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) const bool fattrit = rcs.get_bool("RITFATT"); const bool cau_intra = rcs.get_bool("INTRACOM"); const bool cau_valintra = rcs.get_bool("VALINTRA"); + + // Inizio gestione IVA differita const bool movdiff = _isdiff && _mov->get_bool(MOV_LIQDIFF); + // Se c'è data incasso, normalmente vuol dire che: NO saldaconto e pagamento completo TDate datainc = _mov->get_date(MOV_DATAINC); - if (movdiff && !datainc.ok()) { const long codcf = _mov->get_long(MOV_CODCF); TString8 key(_mov->get(MOV_TIPO)); key << "|" << codcf; const TRectype & clifo = cache().get(LF_CLIFO, key); - if (clifo.get_int(CLI_ALLEG) < 7) // non e' un ente pubblico + // se non e' un ente pubblico forzo data incasso un anno dopo il documento + if (clifo.get_int(CLI_ALLEG) < 7) { datainc = _mov->get_date(MOV_DATADOC); if (datainc.ok()) @@ -831,70 +838,67 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) } } + // datainc_ok significa che la data incasso è compresa nel periodo di liquidazione in corso di calcolo bool datainc_ok = is_date_ok(datainc, month, liqmonth, year_int); const bool diffpayed = movdiff && datainc_ok; const bool difftopay = movdiff && !diffpayed; + // Se ho fatto un pagamento differito porto la data di registrazione alla data incasso if (diffpayed) date = datainc; - real pagatt; - real ncatt; - real totfat; - TImporto pagprec; - TImporto pag; - TImporto ncprec; - TImporto nc; + real totfat, pagatt, ncatt; bool dok = is_date_ok(date, month, liqmonth, year_int); - TPartite_array arrpart; - const long numreg = _mov->get_long(MOV_NUMREG); + TPartite_array arrpart; // Partite interessate + TPointer_array pagscatt; // Righe di pagsca interessate + + const long numreg = _mov->get_long(MOV_NUMREG); + + // In presenza di saldaconto determino meglio la data incasso in base alle righe di pagamento if (has_sc && movdiff && (!datainc.ok() || datainc > inizio)) { - arrpart.add_numreg(numreg); - if (arrpart.utilizzata(numreg, 1)) + //arrpart.add_numreg(numreg); + //if (arrpart.utilizzata(numreg, 1)) + if (arrpart.add_numreg(numreg)) // Ovviamente più efficiente di quanto sopra { - const int items = arrpart.items(); - const char sez = (tipomov == vendita ? 'A' : 'D'); - + // Sezione preferita per fatture decisa in base a vendita->'A' o acquisto->'D' + const char sezfat = tipomov == vendita ? 'D' : 'A'; + const char sezpag = tipomov == vendita ? 'A' : 'D'; for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) { - int row = p->mov2rig(numreg, 1); - - if (row >= 0) + const int row = p->mov2rig(numreg, 0); + if (row > 0) { const TRiga_partite& rp = p->riga(row); - TImporto importo(rp.get_char(PART_SEZ), rp.get_real(PART_IMPORTO)); importo.normalize(); importo.swap_section(); - - totfat += importo.valore(); - pagprec += rp.calcola_pagato_al(false, inizio, inizio, inizio); pagprec.normalize(sez); - pag += rp.calcola_pagato_al(false, fine, fine, fine); pag.normalize(sez); - - // Inizio aggiunte di Bonazzi del 16/02/2012 - ncprec += rp.calcola_pagato_al(false, inizio, inizio, inizio, 0x1F); ncprec.normalize(sez); - nc += rp.calcola_pagato_al(false, fine, fine, fine, 0x1F); nc.normalize(sez); - // Fine aggiunte di Bonazzi del 16/02/2012 + TImporto pg, nc; + TDate lastpg, lastnc; + const int flag = rp.calcola_pagato_periodo(inizio+1L, fine, pg, nc, &pagscatt); + if (flag) + { + TImporto importo = rp.importo(false, 0x1); + importo.normalize(sezfat); + totfat = importo.valore(); + CHECK(totfat >= ZERO, "Fattura negativa inattesa qui"); + if (flag & 1) + { + pg.normalize(sezpag); + pagatt += pg.valore(); + } + if (flag & 2) + { + nc.normalize(sezpag); + ncatt += nc.valore(); + } + } } } - if ((diffpayed && dok) || (pag.valore() > totfat)) - pag.set(sez, totfat); - pagatt = pag.valore() - pagprec.valore(); - - // Spostato sotto 26/03/2012 - //if (pagatt > ZERO) - // dok = true; - - // Inizio aggiunte di Bonazzi del 16/02/2012 - ncatt = nc.valore() - ncprec.valore(); - pagatt -= ncatt; - // Fine aggiunte di Bonazzi del 16/02/2012 - + if ((diffpayed && dok) || (pagatt > totfat)) + pagatt = totfat; if (pagatt > ZERO) dok = true; } - } - - + } /* * check register present, rmoviva present and date OK * @@ -907,10 +911,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) const bool sreg = !isreg; const bool rs8 = _reg->get("S8") != trueatt; const bool cmt = !_cur->is_first_match(LF_RMOVIVA); -// const bool dok1 = dok || diffpayed; if (!dok || sreg || rs8 || cmt) - continue; const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; @@ -964,20 +966,20 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real nin_iva = ZERO; // imposta non incassati look_iva(_rmoviva->get(RMI_CODIVA)); - TString4 codiva = _iva->get("CODTAB"); - TString4 tipoiva = _iva->get("S1"); - TString8 tipoes_v = _iva->get("S2"); - TString8 tipoes_a = _iva->get("S9"); - const int tipoagr = _iva->get_int("S4"); - const int tipoag = _iva->get_int("S5"); - const int tipopla = _iva->get_int("S3"); - int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI - const real perciva = _iva->get_real("R0") / CENTO; - int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media + const TString4 codiva = _iva->get("CODTAB"); + const TString4 tipoiva = _iva->get("S1"); + const TString8 tipoes_v = _iva->get("S2"); + const TString8 tipoes_a = _iva->get("S9"); + const int tipoagr = _iva->get_int("S4"); + const int tipoag = _iva->get_int("S5"); + const int tipopla = _iva->get_int("S3"); + int isrimbinfr = _iva->get_bool("B3"); // vale per calcolo rimborso se ES o NI + const real perciva = _iva->get_real("R0") / CENTO; + int ivarimb = !_iva->get_bool("B4"); // non escluso calcolo rimb. per al. media - const TString8 tipocr_s = _rmoviva->get(RMI_TIPOCR); - const int tipocr = atoi(tipocr_s); - const bool intra = _rmoviva->get_bool(RMI_INTRA); + const TString4 tipocr_s = _rmoviva->get(RMI_TIPOCR); + const int tipocr = atoi(tipocr_s); + const bool intra = _rmoviva->get_bool(RMI_INTRA); // autofatture art. 17 per non residenti, con trattamento // speciale in liquidazione annuale @@ -991,11 +993,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) const bool was_riv = (tipoiva != "NS") && (tipocr == 1 || tipocr ==5); real percind; const int tipoind = get_tipodet_from_rmi(_rmoviva->curr(), _mov->curr(), percind, true); + const int decimals = TCurrency::get_firm_dec(); const real imponibile_orig = _rmoviva->get_real(RMI_IMPONIBILE); - const real imposta_orig = _rmoviva->get_real(RMI_IMPOSTA); - - const int decimals = TCurrency::get_firm_dec(); + const real imposta_orig = _rmoviva->get_real(RMI_IMPOSTA); real diff_imp; // Liquidazione differita imponibile real diff_iva; // Liquidazione differita imposta @@ -1007,15 +1008,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real impos_det; // Imposta detraibile if (pagatt > ZERO || ncatt > ZERO) - { - if (pag.valore() >= totfat) + { + // Il totale dei pagamenti chiude la fattura? + if (pagatt >= totfat) // Calcolo del cavolo: dovrebbe guardare il saldo fattura, no? { TDate from(_mov->get(MOV_DATAREG)); - real impprec; - real ivaprec; - real ncprec; - real val; - + real impprec, ivaprec, ncprec; if (month < 13) { TDate to(inizio); @@ -1040,32 +1038,22 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) TImporto nctmp; // Fine aggiunte di Bonazzi del 16/02/2012 - for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) + for (TPartita* p = arrpart.first(); p != NULL; p = arrpart.next()) { - int row = p->mov2rig(numreg, 1); - - if (row >= 0) + const int row = p->mov2rig(numreg, 1); + if (row > 0) { - TRiga_partite rp = p->riga(row); - - pagtmp += rp.calcola_pagato_al(false, endp, endp, endp, 9); - pagtmp -= rp.calcola_pagato_al(false, from, from, from, 9); - pagtmp.normalize(sez); - - // Inizio aggiunte di Bonazzi del 16/02/2012 - nctmp += rp.calcola_pagato_al(false, endp, endp, endp, 0x19); - nctmp -= rp.calcola_pagato_al(false, from, from, from, 0x19); - nctmp.normalize(sez); - pagtmp -= nctmp; - // Fine aggiunte di Bonazzi del 16/02/2012 - + const TRiga_partite& rp = p->riga(row); + rp.calcola_pagato_periodo(from+1L, endp, pagtmp, nctmp); } } + pagtmp.normalize(sez); + if (!pagtmp.is_zero()) { const real perc = pagtmp.valore() / totfat; - val = imponibile_orig * perc; + real val = imponibile_orig * perc; val.round(TCurrency::get_firm_dec()); impprec += val; val = imposta_orig * perc; @@ -1089,22 +1077,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) TDate to(31,12, from.year()); const int items = arrpart.items(); const char sez = (tipomov == vendita ? 'A' : 'D'); - TImporto pagtmp; - TImporto nctmp; - + TImporto pagtmp, nctmp; for (TPartita * p = arrpart.first(); p != NULL; p = arrpart.next()) { - int row = p->mov2rig(numreg, 1); - + const int row = p->mov2rig(numreg, 1); if (row >= 0) { - TRiga_partite rp = p->riga(row); - - pagtmp += rp.calcola_pagato_al(false, to, to, to, 9); - pagtmp.normalize(sez); - nctmp += rp.calcola_pagato_al(false, to, to, to, 0x19); - nctmp.normalize(sez); - pagtmp -= nctmp; + const TRiga_partite& rp = p->riga(row); + rp.calcola_pagato_periodo(botime, to, pagtmp, nctmp); } } if (!pagtmp.is_zero()) @@ -1112,10 +1092,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) const real perc = pagtmp.valore() / totfat; real val = imponibile_orig * perc; - val.round(TCurrency::get_firm_dec()); + val.round(decimals); impprec = val; val = imposta_orig * perc; - val.round(TCurrency::get_firm_dec()); + val.round(decimals); ivaprec = val; } if (!nctmp.is_zero()) @@ -1129,30 +1109,33 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) const real ncperc = ncatt / totfat; - val = imponibile_orig * ncperc; - val.round(TCurrency::get_firm_dec()); + real val = imponibile_orig * ncperc; + val.round(decimals); diff_imp = -val; incdiff_imp -= val; val = imposta_orig * ncperc; - val.round(TCurrency::get_firm_dec()); + val.round(decimals); diff_iva = -val; incdiff_iva -= val; } else - { - real perc = pagatt / totfat; + { // La fattura è ancora aperta + // Calcolo rapporto tra pagamento e totale fattura + const real perc = pagatt / totfat; incdiff_imp = imponibile_orig * perc; - incdiff_imp.round(TCurrency::get_firm_dec()); + incdiff_imp.round(decimals); incdiff_iva = imposta_orig * perc; - incdiff_iva.round(TCurrency::get_firm_dec()); + incdiff_iva.round(decimals); if (month == 13) { diff_imp = imponibile_orig - incdiff_imp; diff_iva = imposta_orig - incdiff_iva; } + + /* Guy 08-08-2012: Mi pare una cosa inutile + // Calcolo rapporto tra nota credito e totale fattura const real ncperc = ncatt / totfat; - real val = imponibile_orig * ncperc; val.round(TCurrency::get_firm_dec()); diff_imp = -val; @@ -1161,16 +1144,34 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) val.round(TCurrency::get_firm_dec()); diff_iva = -val; incdiff_iva -= val; - } + */ + if (pagatt > ZERO && !pagscatt.empty()) + { + TFilename tmp; tmp.tempdir(); + tmp.add("liqdiff.txt"); + ofstream log(tmp, ios_base::app); + + const TRectype& rec = (TRectype&)pagscatt[pagscatt.last()]; + const TPartita& par = arrpart.partita(rec); + const TRiga_partite& sum = par.riga(rec.get_int(PAGSCA_NRIGP)); + + log << codiva << '\t' << pagatt.string() << '\t' + << incdiff_imp.string() << '\t' << incdiff_iva.string() << '\t' + << sum.get(PART_NREG) << '\t' << sum.get_date(PART_DATAPAG) << '\t' + << numreg << '\t' << date.string() << endl; + } + } } else + { if (difftopay) { diff_imp = imponibile_orig; diff_iva = imposta_orig; } else + { if (diffpayed) { incdiff_imp = imponibile_orig; @@ -1179,9 +1180,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) else analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva, impon_det, impos_det, impon_ind, impos_ind); + } + } - -// qui + // qui for (int is_detraibile = 0; is_detraibile < 2; is_detraibile++) { const int tipodet = is_detraibile ? 0 : tipoind; @@ -2025,10 +2027,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) if (tipomov == vendita) { // fatture a liquidazione differita - tab->put("R26", tab->get_real("R26") + diff_imp); - tab->put("R27", tab->get_real("R27") + diff_iva); - tab->put("R28", tab->get_real("R28") + incdiff_imp); - tab->put("R29", tab->get_real("R29") + incdiff_iva); + tab->curr().add("R26", diff_imp); + tab->curr().add("R27", diff_iva); + tab->curr().add("R28", incdiff_imp); + tab->curr().add("R29", incdiff_iva); fdiff_imp += diff_imp; fdiff_iva += diff_iva; fdiffinc_imp += incdiff_imp; diff --git a/cg/cg4302.cpp b/cg/cg4302.cpp index eda98bebe..df7a349e2 100755 --- a/cg/cg4302.cpp +++ b/cg/cg4302.cpp @@ -259,7 +259,7 @@ bool TLiquidazione_app::look_pim(int month, const char* codatt, const char* codr (*_pim_tipodet) = tipodet; const TString80 s = _pim_r->get("CODTAB"); - bool ok = _pim->read() == NOERR; + const bool ok = _pim->read() == NOERR; if (!ok && create) { _pim_r->zero(); diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index 1ea8414de..b6c38f7cd 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -141,7 +141,7 @@ void TLiquidazione_app::describe_att(int month, const char* codatt, if (atts.items() == 1 && _isviaggio) describe_viaggio(month, codatt); describe_pims(month,codatt,FALSE); - if (atoi(_year) > 1997) // Descrive anche i PIS se esistono + // if (atoi(_year) > 1997) // Descrive anche i PIS se esistono describe_pims(month,codatt,TRUE); if (atts.items() == 1) describe_consistence(codatt); @@ -499,8 +499,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool // L'ultimo parametro serve per calcolare i PIS (progressivi del periodo successivo) { TToken_string atts(codatt); - TString ref(atts.items() == 1 ? codatt : "ALL"); - const char* tmpatt; + const TString8 ref(atts.items() == 1 ? codatt : "ALL"); int last = _descr_arr.last(); bool issosp = false; real t0, t1, t2, t3, t4, t5, t26, t27, t28, t29, t30, t31, t32, t33; @@ -516,7 +515,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool _DescrItem* iads = NULL; // Seleziona la tabella corretta: PIM o PIS e l'identificatore - TTable * tab = describe_pis ? _pis : _pim; + TTable* tab = describe_pis ? _pis : _pim; const word PIM_PIS = describe_pis ? PIS_ROW : PIM_ROW; // questa cazzata serve per far apparire l'intestazione delle colonne @@ -538,12 +537,14 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool bool is_key; // Never mind the bollox - TString codtab, codreg, codiva, activity, anno; + TString80 codtab; + TString8 activity; + TString4 codreg, codiva, anno; int mese; - while ((tmpatt = atts.get()) != NULL) + FOR_EACH_TOKEN(atts, tmpatt) { - TString att(tmpatt); + const TString8 att(tmpatt); for (tab->first(); !tab->eof(); tab->next()) { @@ -569,17 +570,15 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool real rit_imp(s1.get(0)); real rit_iva(s1.get(1)); -// if (tipomov == vendita) -// { - diffimp = _pim->get_real("R26"); - diffiva = _pim->get_real("R27"); - diffincimp = _pim->get_real("R28"); - diffinciva = _pim->get_real("R29"); - diffimp_acq = _pim->get_real("R30"); - diffiva_acq = _pim->get_real("R31"); - diffincimp_acq = _pim->get_real("R32"); - diffinciva_acq = _pim->get_real("R33"); -// } + diffimp = _pim->get_real("R26"); + diffiva = _pim->get_real("R27"); + diffincimp = _pim->get_real("R28"); + diffinciva = _pim->get_real("R29"); + + diffimp_acq = _pim->get_real("R30"); + diffiva_acq = _pim->get_real("R31"); + diffincimp_acq = _pim->get_real("R32"); + diffinciva_acq = _pim->get_real("R33"); const bool is_rit= tipodet != 0 && month == 13 && rit_imp != 0.0; //Se fattura in ritardo con tipo detr. != 0 e si sta calcolando l'annuale const tipo_sospensione sosp_imp = _reg->get_bool("B1") ? (tipo_sospensione) _reg->get_int("I9") : nessuna; @@ -594,11 +593,13 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool } // se e' corrispettivo da ventilare non // scrivo un cannolo ripieno visto che e' stato ventilato - if (tipomov == vendita && tipoiva == "VE" && !describe_pis) continue; + if (tipomov == vendita && tipoiva == "VE" && !describe_pis) + continue; // se e' il dettaglio di una attivita' mista non stampa // gli acquisti, il perche' losalamadonna - if (tipomov == acquisto && skip_acq) continue; + if (tipomov == acquisto && skip_acq) + continue; // questi non vanno in liquidazione, i totali sono // gia' calcolati altrove @@ -1005,12 +1006,12 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt, const bool int m = annual ? month : 1; for (; m <= limit; m++) { - if (!is_month_ok(m,month)) continue; + if (!is_month_ok(m,month)) + continue; - atts.restart(); - while ((tmpatt = atts.get()) != NULL) + FOR_EACH_TOKEN (atts, tmpatt) { - TString att(tmpatt); + const TString8 att(tmpatt); look_plm(m, att); real ad1, ad2; @@ -1479,12 +1480,12 @@ void TLiquidazione_app::set_att(_DescrItem& d) if (d._s3.empty()) { - att_title = flags == 'M' ? TR("Riepilogo attivita' mista") : + att_title = flags == 'M' ? TR("Riepilogo attività mista") : TR("Riepilogo quater"); // att_title << d._s2; } else - att_title = format(FR("Attivita' %s %s %s"), + att_title = format(FR("Attività %s %s %s"), (const char*)(d._s2), (const char*)(d._s3), (const char*)tipatt); @@ -1696,6 +1697,46 @@ void TLiquidazione_app::set_liqacc_2000(_DescrItem& d) set_auto_ff(); } +bool TLiquidazione_app::print_diff_log(int& rw) +{ + if (_isregis || _isfinal) + return false; + + TFilename tmp; tmp.tempdir(); + tmp.add("liqdiff.txt"); + ifstream f(tmp); + TToken_string str(256, '\t'); + + bool header = false; + + while (f.good()) + { + f.getline(str.get_buffer(), str.size()); str.trim(); + if (str.full()) + { + if (!header) + { + header = true; + set_row(rw++, "IVA@17gImporto@30gImponibile@49gImposta@64gPagamento@96gFattura"); + } + + const TString4 codiva = str.get(0); + const real importo = str.get(); + const real imponibile = str.get(); + const real imposta = str.get(); + const TString16 numpag = str.get(); + const TString16 datapag = str.get(); + const TString16 numfat = str.get(); + const TString16 datafat = str.get(); + set_row(rw++, "%s@9g%r@25g%r@41g%r@64g%s@80g%s@96g%s@112g%s", + (const char*)codiva, &importo, &imponibile, &imposta, + (const char*)numpag, (const char*)datapag, (const char*)numfat, (const char*)datafat); + str.cut(0); + } + } + + return header; +} void TLiquidazione_app::set_pim_head(_DescrItem& d) { @@ -1716,6 +1757,7 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d) { set_row(r++, TR("Fatture a liquidazione differita incassate")); set_bookmark(TR("Riepilogo progressivi a liquidazione differita incassati"), _att_bookmark); + print_diff_log(r); } else // PIS_HEAD { @@ -1735,7 +1777,8 @@ void TLiquidazione_app::set_pim_head(_DescrItem& d) if (d._flags == PIS_HEAD_DI) { set_row(r++, TR("Fatture a liquidazione differita incassate")); - set_bookmark(TR("Riepilogo progressivi successivi a liquidazione differita incassati"), _att_bookmark); + set_bookmark(TR("Riepilogo progressivi successivi a liquidazione differita incassati"), _att_bookmark); + print_diff_log(r); } } set_row(r++,""); diff --git a/cg/cg7100.cpp b/cg/cg7100.cpp index dabd28e39..fe7405244 100755 --- a/cg/cg7100.cpp +++ b/cg/cg7100.cpp @@ -1,27 +1,8 @@ -#include - #include "../ba/ba8500.h" -/////////////////////////////////////////////////////////// -// TBruceWayne_app -/////////////////////////////////////////////////////////// - -class TBruceWayne_app : public TKlarkKent_app -{ -protected: - virtual TReport* create_report(const char* name) const; -}; - -TReport* TBruceWayne_app::create_report(const char* name) const -{ - TReport* rep = new TReport; - rep->load(name); - return rep; -} - int cg7100(int argc, char* argv[]) { - TBruceWayne_app app; - app.run(argc, argv, TR("Stampa Report Contabilita'")); + TKlarkKent_app app; + app.run(argc, argv, TR("Stampa Report Contabilità")); return 0; } diff --git a/cg/cg7100p.uml b/cg/cg7100p.uml index 0c0bf07a1..5aff9863a 100755 --- a/cg/cg7100p.uml +++ b/cg/cg7100p.uml @@ -29,7 +29,7 @@ BEGIN FIELD #DATASTAMPA END -LIST F_TIPOELENCO 9 +LIST F_P_TIPOELENCO 9 BEGIN PROMPT 1 3 "Tipo elenco " HELP "Indicare cosa includere nella stampa" diff --git a/cg/cglib01.cpp b/cg/cglib01.cpp index 154ff5b6d..f05185863 100755 --- a/cg/cglib01.cpp +++ b/cg/cglib01.cpp @@ -43,7 +43,7 @@ int TEsercizio::compare(const TSortable& s) const int c = 0; if (_inizio != e._inizio) c = _inizio > e._inizio ? +1 : -1; - return c; + return c; } const TDate& TEsercizio::chiusura() const @@ -83,7 +83,7 @@ const TDate& TEsercizio::chiusura() const ((TDate&)_chiusura) = datacomp; // Forzatura TTable esc("ESC"); esc.put("CODTAB", codice()); - if (esc.read(_lock) == NOERR) + if (esc.read(_isequal, _lock) == NOERR) { esc.put("D3", datacomp); esc.rewrite(); diff --git a/cg/cgsaldac.cpp b/cg/cgsaldac.cpp index b4891015c..d702f1555 100755 --- a/cg/cgsaldac.cpp +++ b/cg/cgsaldac.cpp @@ -297,8 +297,63 @@ bool TRiga_scadenze::chiusa(bool update) const return chiusa; } +static TImporto extract_importo(const TRectype& pag, const TRiga_partite& sum, bool val, int mode) +{ + TImporto totale; + + // Inizio aggiunte di Bonazzi del 16/02/2012 + if (mode & 0x10) // solo le note di credito + { + const tipo_movimento tm = sum.tipo(); + if (tm != tm_nota_credito) + return totale; // = ZERO + } + // Fine aggiunte di Bonazzi del 16/02/2012 + + const bool in_val = sum.in_valuta(); + const char* imp_field = (val && in_val) ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO; + + const char sez = sum.sezione(); + if (mode & 0x1) + { + totale += TImporto(sez, pag.get_real(imp_field)); + } + + if (!in_val && (mode & 0x8)) // Le ritenute non esistono nei pagamenti in valuta + { + totale += TImporto(sez, pag.get_real(PAGSCA_RITENUTE)); + totale += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC)); + } + + if (mode & 0x2) // Voglio anche gli abbuoni + { + real abb = pag.get_real(PAGSCA_ABBUONI); + if (!abb.is_zero()) + { + if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi + { // devono essere convertiti opportunamente + const TExchange cmb(sum); + TCurrency cur(abb, cmb); + cur.change_to_firm_val(); + abb = cur.get_num(); + } + totale += TImporto(sez, abb); + } + } + + if (in_val && !val && (mode & 0x4)) // Voglio anche le differenze cambio + { // Esse esistono solo nei pagamenti in valuta + const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM)); + totale += diffcam; + } + + return totale; +} + +/* Funzione chiamata esclusivamente da altra funzione commentata + // Calcola il totale dei pagamenti alla data (eventualmente in valuta) -TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate & al, int mode) const +TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate& al, int mode) const { CHECKD(mode > 0x0 && mode <= 0xFF, "Bad importo_pagato mode ", mode); const TPartita& game = partita(); @@ -310,58 +365,16 @@ TImporto TRiga_scadenze::importo_pagato_al(bool val, const TDate & al, int mode) { const TRectype& pag = row(p); // Riga pagamento const TRiga_partite& sum = game.riga(p); // Riga partite - const TDate & datapag = sum.get_date(PART_DATAPAG); - + const TDate datapag = sum.get_date(PART_DATAPAG); if (datapag <= al) - { - // Inizio aggiunte di Bonazzi del 16/02/2012 - if (mode & 0x10) // solo le note di credito - { - const tipo_movimento tm = (tipo_movimento)sum.get_int(PART_TIPOMOV); - if (tm != tm_nota_credito) - continue; - } - // Fine aggiunte di Bonazzi del 16/02/2012 - - const char sez = sum.sezione(); - if (mode & 0x1) - { - totale += TImporto(sez, pag.get_real(imp_field)); - } - - if (!in_val && (mode & 0x8)) // Le ritenute non esistono nei pagamenti in valuta - { - totale += TImporto(sez, pag.get_real(PAGSCA_RITENUTE)); - totale += TImporto(sum.sezione_ritsoc(), pag.get_real(PAGSCA_RITSOC)); - } - - if (mode & 0x2) // Voglio anche gli abbuoni - { - real abb = pag.get_real(PAGSCA_ABBUONI); - if (!abb.is_zero()) - { - if (in_val && !val) // Gli abbuoni sono sempre in valuta e quindi - { // devono essere convertiti opportunamente - const TExchange cmb(sum); - TCurrency cur(abb, cmb); - cur.change_to_firm_val(); - abb = cur.get_num(); - } - totale += TImporto(sez, abb); - } - } - - if (in_val && !val && (mode & 0x4)) // Voglio anche le differenze cambio - { // Esse esistono solo nei pagamenti in valuta - const TImporto diffcam(sez, pag.get_real(PAGSCA_DIFFCAM)); - totale += diffcam; - } - } + totale += extract_importo(pag, sum, val, mode); } return totale.normalize(); } +*/ + // Calcola il totale dei pagamenti (eventualmente in valuta) TImporto TRiga_scadenze::importo_pagato(bool val, int mode) const { @@ -1052,6 +1065,7 @@ TImporto TRiga_partite::esposto(bool valuta, const TDate & data_scad, const TDat return esposto; } +/* TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode) const { TImporto pagato; @@ -1067,15 +1081,85 @@ TImporto TRiga_partite::calcola_pagato_al(bool valuta,const TDate& al, const TDa const TRiga_scadenze& scad = rata(r); const TImporto pag = scad.importo_pagato_al(valuta, al, mode); pagato += pag; - if (!pag.is_zero() && rischio) + if (rischio && !pag.is_zero()) { bool sbf = false; pagato -= scad.esposto_al(valuta, al, data_scaduto, data_rischio, sbf); } } + } return pagato; } +*/ + +int TRiga_partite::calcola_pagato_periodo(const TDate& dal, const TDate& al, TImporto& pg, TImporto& nc, TPointer_array* pagsca) const +{ + int flag = 0; + if (!is_fattura()) + return flag; + + TPointer_array pags; + + const int lastr = rate(); + for (int r = lastr; r > 0; r--) + { + const TRiga_scadenze& scad = rata(r); + for (int p = scad.last(); p > 0; p = scad.pred(p)) + { + const TRectype& pag = scad.row(p); // Riga pagamento + const TRiga_partite& sum = partita().riga(p); // Riga partite + const TDate datapag = sum.get_date(PART_DATAPAG); + if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al)) + pags.add((TRectype*)&pag); + } + } + + // Cerco di gestire anche i non assegnati sulla unica fattura di una partita + const TRecord_array& unas = partita().unassigned(); + if (unas.rows() > 0) + { + int fatture = 0; + for (int r = partita().last(); r > 0 && fatture < 2; r = partita().pred(r)) + { + if (partita().riga(r).tipo() == tm_fattura) + fatture++; + } + if (fatture == 1) + { + for(int r = unas.last_row(); r > 0; r = unas.pred_row(r)) + { + const TRectype& pag = unas.row(r); + const TRiga_partite& sum = partita().riga(r); + const TDate datapag = sum.get_date(PART_DATAPAG); + if ((!dal.ok() || datapag >= dal) && (!al.ok() || datapag <= al)) + pags.add((TRectype*)&pag); + } + } + } + + FOR_EACH_ARRAY_ITEM(pags, p, obj) + { + const TRectype& pag = *(TRectype*)obj; + const TRiga_partite& sum = partita().riga(pag.get_int(PAGSCA_NRIGP)); + const tipo_movimento tm = sum.tipo(); + const TImporto imp = extract_importo(pag, sum, false, 0xF); + if (tm == tm_nota_credito) + { + nc += imp; + flag |= 2; + } + else + { + pg += imp; + flag |= 1; + if (pagsca != NULL && tm == tm_pagamento || tm == tm_pagamento_insoluto) + pagsca->add(obj); + } + } + + return flag; +} /////////////////////////////////////////////////////////// // TRiga_partite_array @@ -1750,6 +1834,9 @@ TImporto TPartita::calcola_saldo(bool valuta) const return saldo; } +/* +Funzione completamente inutile e certamente NON utilizzata nei moduli cg, sc e ve + TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const { TImporto pagato; @@ -1757,15 +1844,13 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate & for (int r = last(); r > 0; r = pred(r)) { const TRiga_partite& row = riga(r); - const TDate data(row.get(PART_DATAREG)); - - if (data <= al) + const TDate data(row.get(PART_DATAREG)); + if (data <= al) { pagato += row.importo(valuta); if (!row.is_fattura()) { const tipo_pagamento tipopag = row.tipo_pag(); - if (tipopag >= tp_tratta && tipopag <= tp_rid) { bool sbf = false; @@ -1776,6 +1861,7 @@ TImporto TPartita::calcola_pagato_al(bool valuta,const TDate& al, const TDate & } return pagato; } +*/ TImporto TPartita::calcola_saldo_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const { diff --git a/cg/cgsaldac.h b/cg/cgsaldac.h index a2d41e456..537a41e2b 100755 --- a/cg/cgsaldac.h +++ b/cg/cgsaldac.h @@ -135,6 +135,7 @@ protected: protected: // TRecord_tree virtual TObject* dup() const; + // TImporto importo_pagato_al(bool val, const TDate & al, int mode = 0xF) const; public: bool chiusa(bool update = false) const; @@ -145,7 +146,6 @@ public: TPartita& partita() const; TRiga_partite& riga() const { return *_riga; } // Riga partite - TImporto importo_pagato_al(bool val, const TDate & al, int mode = 0xF) const; TImporto importo_pagato(bool val, int mode = 0xF) const; TImporto importo(bool val) const; TImporto residuo(bool val, int mode = 0xF) const; // Differenza delle due funzioni precedenti @@ -194,7 +194,8 @@ public: TImporto importo(bool valuta, int mode = 0xF) const; TImporto esposto(bool valuta, const TDate & data_scad, const TDate & data_rischio, bool & sbf) const; - TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode = 0xF) const; + //TImporto calcola_pagato_al(bool valuta, const TDate& al, const TDate & data_scaduto, const TDate& data_rischio, int mode = 0xF) const; + int calcola_pagato_periodo(const TDate& dal, const TDate& al, TImporto& pag, TImporto& nc, TPointer_array* pagsca = NULL) const; const TString& codice_valuta() const; bool in_valuta() const; @@ -300,7 +301,7 @@ public: void update_reg(long nreg, const TRectype& mov, TPartite_array& pa); void calcola_saldo(TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) const; TImporto calcola_saldo(bool valuta) const; - TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const; + //TImporto calcola_pagato_al(bool valuta,const TDate& al, const TDate & data_scaduto, const TDate& data_rischio) const; TImporto calcola_saldo_al(bool valuta, const TDate& al, const TDate& data_scaduto, const TDate& data_rischio) const; real calcola_scaduto_al(bool valuta, const TDate& al = botime) const; TImporto importo_pagato_unassigned(bool val, int mode = 0xF) const;