diff --git a/cg/cg4300.h b/cg/cg4300.h index 90949abd5..80b4ec9e1 100755 --- a/cg/cg4300.h +++ b/cg/cg4300.h @@ -87,6 +87,7 @@ enum tbc { precedente = 1, incorso = 2}; #define DELDEB 15 // righe tabulato deleghe ditte a debito #define DELCRED 16 // header tabulato deleghe ditte a credito #define DELEGA 17 // descrizione versamenti +#define PIM_HEAD 18 // bytes sprecati per far vedere l'intestazione pim // ............................................................... // support structs @@ -429,6 +430,7 @@ public: void set_plm(_DescrItem& d); bool set_annual(_DescrItem& d); void set_grand(_DescrItem& d); + void set_pim_head(); // cercapalle in tabelle con opzione di creazione se serve bool look_pim(int m, const char* a, const char* r, const char* cr, diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 3b87b2bca..2c32c0212 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -450,7 +450,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real esenti_b2 = 0.0; real esenti_b3 = 0.0; real esenti_b14 = 0.0; - real nonimp = 0.0; // ci sommo tutti esenti e ni validi per rimborso + real esni_rimb = 0.0; // ci sommo tutti esenti e ni validi per rimborso real corr_CEE = 0.0; real corr_noCEE = 0.0; real acq_CEE = 0.0; @@ -496,10 +496,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) /* * check register present, rmoviva present and date OK */ - const bool dok = !is_date_ok(date, month); - const bool sreg = !isreg; - const bool rs8 = _reg->get("S8") != trueatt; - const bool cmt = !_cur->is_first_match(LF_RMOVIVA); + const bool dok = !is_date_ok(date, month); + const bool sreg = !isreg; + const bool rs8 = _reg->get("S8") != trueatt; + const bool cmt = !_cur->is_first_match(LF_RMOVIVA); const bool sosp_imp = _reg->get_bool("B1"); const TRectype& rcs = _cur->curr(LF_CAUSALI); const bool fattrit = rcs.get_bool("RITFATT"); @@ -558,7 +558,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // autofatture art. 17 per non residenti, con trattamento // speciale in liquidazione annuale bool autodafe = (tipodoc == "AF" && tipocr == 4); - + // indica acquisti per rivendita; viene messo in B4 di PIM per + // indicare che e' soggetto al ricalcolo IVA (se voluto) in modo + // da evitare di dover controllare mese e anno sul PIM + bool was_riv = FALSE; /* * puo' capitare per motivi brutalmente prassici * SENSU Sergio 1995, Guido @@ -631,14 +634,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // Altre cose di cui tener conto if (tipomov == acquisto && (tipocr == 1 || tipocr == 5)) /* - * Acquisto beni per rivendita: sono comunque sommati, ma - * vengono considerati in ventilazione solo se l'apposito - * parametro ditta e' settato, piu' altre condizioni (vedi - * recalc_ventilation() for spulcing) + * Acquisto beni per rivendita */ { acq_riv += imponibile; acq_riv_iva += imposta; + was_riv = TRUE; } else if (tipomov == acquisto && tipocr == 2 && tipodet == 0) @@ -685,6 +686,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // operazioni per calcolo rimborso infracazzuale // Scudler 1995 + // La breve estate vissuta dal metodo del 51% renderebbe + // ora superflua la tabella rimborsi, ma, come diceva + // Garcia Lorca, me ne sbatto il culo e se non ti piace + // vatti a far chiavare da un coyote if (ivarimb) { bool ok = _isagricolo ? tipoagr == 2 : FALSE; @@ -730,7 +735,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) } // se e' il caso sommare esenti per rimborso if (isrimbinfr) - nonimp += imponibile; + esni_rimb += imponibile; } else if (tipoes_a == 14) esenti_b14 += imponibile; @@ -738,7 +743,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // non imponibili per rimborso if (tipoiva == "NI" && tipomov == vendita && isrimbinfr) - nonimp += imponibile; + esni_rimb += imponibile; // bolle doganali if (tipodoc == "BD") @@ -865,6 +870,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real imp = _pim->get_real("R0"); // imponibile real ivp = _pim->get_real("R1"); // IVA su imp. real lor = _pim->get_real("R2"); // lordo + /* * le maledette fatture con scontrino sono sul registro dei * corrispettivi, ma vanno riportate nelle vendite in stampa; @@ -874,6 +880,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) */ real ifs = _pim->get_real("R5"); // imponibile fatture con scontrino real vfs = _pim->get_real("R6"); // IVA fatt. con scontrino + /* * le maledette autofatture non residenti art. 17 * vedi al calcolo if (autodafe) si tengono da parte @@ -891,7 +898,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real bdi = _pim->get_real("R9"); real bdv = _pim->get_real("R10"); - /* i falsi corrispettivi */ + /* i luridi falsi corrispettivi */ real fci = _pim->get_real("R13"); real fcv = _pim->get_real("R14"); @@ -900,8 +907,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real rti(fr.get(0)); real rtv(fr.get(1)); - /* le stramadonne delle cazzate di corrispettivi gia' scorporati - che servono all'Enrica e non a me */ + /* la stramadonna dei corrispettivi gia' scorporati */ TToken_string cs(_pim->get("S2")); real csi(cs.get(0)); real csv(cs.get(1)); @@ -946,7 +952,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) * non sono corrispettivi. Ci si potrebbe domandare * se gli altri corrispettivi sono corrispettivi o * no; ebbene, gli altri corrispettivi risultano - * fortunatamente essere corrispettivi. + * fortunatamente essere corrispettivi, a meno di + * indicazioni contrarie. */ if (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") { @@ -980,11 +987,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) vendite += rr; add_vendite(month, reg, tipodet, rr); } - if (liq) - { -// vendite -= imponibile; -// vendite_iva -= imposta; - } imp -= imponibile; ivp -= imposta; lor -= imponibile + imposta; @@ -1000,12 +1002,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) vendite += imponibile; vendite_iva += imposta; } - imp += imponibile; - ivp += imposta; - fci += imponibile; - fcv += imposta; - csi += imponibile; - csv += imposta; + imp += imponibile; + ivp += imposta; + fci += imponibile; + fcv += imposta; + csi += imponibile; + csv += imposta; _pim->put("I0",NETTO); } } // if corrisp @@ -1052,12 +1054,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) _pim->put("R14",fcv); } - // questi servono per i ricalcoli altrui (classify_pim) + // questi servono per i ricalcoli altrui (classify_pim) o + // per trucchetti di ricalcolo successivi _pim->put("R11",fsi); _pim->put("R12",fsv); _pim->put("I1", (long)tipomov); _pim->put("B3", ivarimb ? "X" : ""); - _pim->put("B4", _isricacq ? "X" : ""); + _pim->put("B4", _isricacq && was_riv? "X" : ""); _pim->put("S5", tipoiva); // fatture in ritardo @@ -1065,16 +1068,52 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) fr.add(rtv.string(), 1); _pim->put("S1",fr); - // corrispettivi gia' scorporati + // corrispettivi gia' scorporati; anche questi servono per + // non cannare la stampa dei registri cs.add(csi.string(), 0); - cs.add(csv.string(), 0); + cs.add(csv.string(), 1); _pim->put("S2",cs); _pim->rewrite(); } while (_cur->next_match(LF_RMOVIVA)); - } - - // calcolati tutti i movimenti e aggiornati i pim + } // fine calcolo progressivi IVA + + /* + * calcolati tutti i movimenti e aggiornati i pim + * se necessario risistema le imposte acquisti beni + * per rivendita + */ + + if (_isricacq) // flag settato parametri studio + { + for (_pim->first(); !_pim->eof(); _pim->next()) + { + // this is much furber than doing all of the checks + if (_pim->get_bool("B4")) + { + // ricalcola l'imposta a partire dal codice IVA + look_iva(*_pim_codiva); + real old_iva = _pim->get_real("R1"); + real perc = _iva->get_real("R0"); + + real new_iva = (_pim->get_real("R0") * perc)/CENTO; + new_iva.round(ROUND_LIRA); + + if (new_iva != old_iva) + { + // ricalcola: acquisti_iva, acq_riv_iva + acquisti_iva -= old_iva; + acquisti_iva += new_iva; + acq_riv_iva -= old_iva; + acq_riv_iva += new_iva; + _pim->put("R1", new_iva); + // resetta in modo da non vederlo il mese dopo + _pim->put("B4", ""); + _pim->rewrite(); + } + } + } + } /* * calcola il lercio prorata @@ -1174,7 +1213,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) _pum->put("R5", esenti_b2); _pum->put("R6", esenti_b3); _pum->put("R7", esenti_b14); - _pum->put("R12", nonimp); + _pum->put("R12", esni_rimb); _pam->put("R0", acquisti); _pam->put("R1", vendite); _pam->put("R6", assp_imp); diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index fe16ad8bf..7e8256b45 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -11,6 +11,7 @@ // flags per annuale #define IS_PRORATA 0x0001 + // minchietta per prospetto ventilazione class _vDesc : public TObject { @@ -45,6 +46,9 @@ void TLiquidazione_app::set_page(int file, int cnt) case PIM_ROW: set_pim(d); break; + case PIM_HEAD: + set_pim_head(); + break; case MISC_LIQ: set_pumpam(d); break; @@ -362,10 +366,17 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) // descrittore riga autodafe' _DescrItem* ads = NULL; + // questa cazzata serve per far apparire l'intestazione delle colonne + // anche se le colonne non ci sono; in tal modo si ottiene una peggior + // chiarezza, una peggiore efficienza, una gran rottura di coglioni, + // ma risulta identico al dio Sistema. + _DescrItem* hea = new _DescrItem(PIM_HEAD); + _descr_arr.add(hea); while ((tmpatt = atts.get()) != NULL) { - TString att(tmpatt); + TString att(tmpatt); + for (_pim->first(); !_pim->eof(); _pim->next()) { _DescrItem* d = NULL; @@ -981,6 +992,15 @@ void TLiquidazione_app::set_plafond(_DescrItem& d) set_auto_ff(); } +void TLiquidazione_app::set_pim_head() +{ + set_bookmark("Riepilogo progressivi", _att_bookmark); + set_row(1," Cod.@41gVENDITE@71gCORRISPETTIVI@106gACQUISTI"); + set_row(2," IVA Descrizione@30gImponibile@49gImposta@63gImponibile" + "@82gImposta@96gImponibile@115gImposta"); + set_row(3,""); +} + void TLiquidazione_app::set_pim(_DescrItem& d) { int rw = 1; @@ -994,16 +1014,10 @@ void TLiquidazione_app::set_pim(_DescrItem& d) d._s2 = _iva->get("S0"); } - if (d._f0) // e' il primo - { - // intestazioncina - set_bookmark("Riepilogo progressivi", _att_bookmark); - - set_row(rw++," Cod.@41gVENDITE@71gCORRISPETTIVI@106gACQUISTI"); - set_row(rw++," IVA Descrizione@30gImponibile@49gImposta@63gImponibile" - "@82gImposta@96gImponibile@115gImposta"); - set_row(rw++,""); - } + if (d._f0) // e' il primo: non fa piu' nulla perche' l'intestazione + // viene fatta comunque da set_pim_head + {} + set_row(rw++,"%4s %-20s@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r", (const char*)d._s1, (const char*)d._s2, @@ -1061,13 +1075,6 @@ void TLiquidazione_app::set_plm(_DescrItem& d) &acq_pint_iva); } - // real iva74ter(d._s2); - // if (!iva74ter.is_zero()) - // { - // set_row(rw++, "Iva dovuta - 74ter@41g%r", &iva74ter); - // d._r1 += iva74ter; - // } - real tot1 = d._r7 + d._r4 + d._r9 + acq_pint; real tot2 = d._r8 + d._r5 + d._r10 + acq_pint_iva; @@ -1202,11 +1209,11 @@ void TLiquidazione_app::set_pumpam(_DescrItem& d) "@77gimposta@91gdetrazione"); set_row(4,""); } - else if (!d._f1) + else /* if (!d._f1) */ set_row(1,""); // form feed - if (printed || !d._f1) set_auto_ff(TRUE); + /* if (printed || !d._f1) */ set_auto_ff(TRUE); } void TLiquidazione_app::set_grand(_DescrItem& d) @@ -1344,11 +1351,12 @@ void TLiquidazione_app::set_grand(_DescrItem& d) if (di._flags == RIMBORSO) { - set_bookmark("Prospetto di rimborso", _firm_bookmark); - set_print_zero(TRUE); set_row(rw++,""); set_row(rw++,""); + + set_bookmark("Prospetto di rimborso", _firm_bookmark); + set_row(rw++, " PROSPETTO DI RIMBORSO"); set_row(rw++,"");