diff --git a/cg/cg4300.cpp b/cg/cg4300.cpp index d3e625c45..cd13fd47f 100755 --- a/cg/cg4300.cpp +++ b/cg/cg4300.cpp @@ -48,6 +48,7 @@ bool TLiquidazione_app::user_create() TDate printdate; TString filename; long ditta; + bool nocalc = FALSE; _prind = NULL; @@ -83,14 +84,20 @@ bool TLiquidazione_app::user_create() char rcl = *(subj.get(3)); _recalc_only = rcl == 'C'; _is_visliq = rcl == 'V'; - _isregis = (rcl == 'l' || rcl == 'L'); // stampa per registri - // TBI usare S s per stampa senza ricalcolo - _isfinal = rcl == 'l'; // se l minuscolo, definitivo + // S/s = stampa senza ricalcolo (minuscolo = definitivo) + // L/l = stampa con ricalcolo se necessario (minuscolo = definitivo) + // C = solo ricalcolo + // V = stampa ed ev. ricalcolo per visualizzazione + // s o l minuscoli = registro bollato (setta B1) + _isregis = (rcl == 'l' || rcl == 'L' || + rcl == 'S' || rcl == 's'); // stampa per registri + _isfinal = rcl == 'l' || rcl == 's'; // se l minuscolo, definitivo + nocalc = rcl == 'S' || rcl == 's'; printdate = subj.get(4); filename = subj.get(5); is_header = subj.items() == 6; } - + if(pnd) pnd->addstatus(1); _rel = new TRelation(LF_MOV); @@ -208,10 +215,11 @@ bool TLiquidazione_app::user_create() // calcola liquidazione printer().setdate(printdate); - _recalc = needed; + _recalc = nocalc ? never : needed; TApplication::set_firm(ditta); - if (!look_lia()) { end_wait(); return FALSE; } + if (!look_lia()) + { end_wait(); return FALSE; } _nditte->zero(); _nditte_r->put("CODDITTA", ditta); @@ -663,7 +671,20 @@ bool TLiquidazione_app::set_liquidazione() int cg4300(int argc, char* argv[]) { TLiquidazione_app main_app; - main_app.run(argc, argv, "Liquidazione IVA"); + + TApplication::check_parameters(argc, argv); + + const char* title = "Liquidazione IVA"; + + if (argc > 2) + { + if (strcmp(argv[2], "-S") == 0) + title = "Stampa liquidazione"; + else if (strcmp(argv[2], "-C") == 0) + title = "Ricalcolo corrispettivi"; + } + + main_app.run(argc, argv, title); return TRUE; } diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 47da47a35..f12edfae4 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -423,6 +423,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) 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"); if (dok || sreg || rs8 || cmt) continue; @@ -434,13 +435,6 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) tipodoc == "IN" || tipodoc == "PG") continue; - /* - * Fatture in ritardo vengono considerate solo in dichiarazione - * annuale - */ - if (_month != 13 && rcs.get_bool("RITFATT")) - continue; - /* * check date: se si calcola l'acconto, solo da 1/12 a 20/12 */ @@ -461,6 +455,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) real asimp_iva = 0.0; // imposta acquisti sosp. imposta real vsimp_imp = 0.0; // imponibile vendite sosp. imposta real vsimp_iva = 0.0; // imposta vendite sosp. imposta + real rit_imp = 0.0; // imponibile fatture in ritardo + real rit_iva = 0.0; // IVA fatture in ritardo TString codiva = _iva->get("CODTAB"); TString tipoiva = _iva->get("S1"); @@ -507,7 +503,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) * In liq. annuale si totalizzano * solo le stranezze che seguono */ - if (month == 13) + if (_month == 13) { // si contano soltanto le vendite. bool okc = tipomov == vendita; @@ -516,7 +512,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) // oppure ... bool cond2 = (rcs.get_bool("AUTOFATT") && tipoiva == "NS" && tipodoc != "AF" && rcs.get_bool("INTRACOM") && rcs.get_bool("VALINTRA")); - if (!(okc && (cond1 || cond2))) + /* + * Fatture in ritardo vengono considerate solo in dichiarazione + * annuale, ma vanno comunque sommate per i porci registri + */ + if (!(okc && (cond1 || cond2)) && !fattrit) continue; } @@ -525,14 +525,19 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) { if (tipomov == vendita) { - vsimp_imp = imponibile; - vsimp_iva = imposta; + vsimp_imp = imponibile; + vsimp_iva = imposta; } else { - asimp_imp = imponibile; - asimp_iva = imposta; + asimp_imp = imponibile; + asimp_iva = imposta; } + } + else if (fattrit && _month != 13) + { + rit_imp = imponibile; + rit_iva = imposta; } else // normale { @@ -776,7 +781,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) /* i falsi corrispettivi */ real fci = _pim_r->get_real("R13"); - real fcv = _pim_r->get_real("R14"); + real fcv = _pim_r->get_real("R14"); + + /* le porche fatture in ritardo */ + TToken_string fr(_pim_r->get("S1")); + real rti(fr.get(0)); + real rtv(fr.get(1)); + + rti += rit_imp; + rtv += rit_iva; if (tipomov == vendita) { @@ -927,7 +940,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) _pim_r->put("I1", (long)tipomov); _pim_r->put("B3", ivarimb ? "X" : ""); _pim_r->put("B4", _isricacq ? "X" : ""); - _pim_r->put("S5", tipoiva); + _pim_r->put("S5", tipoiva); + + // fatture in ritardo + fr.add(rti.string(), 0); + fr.add(rtv.string(), 1); + _pim_r->put("S1",fr); + _pim->rewrite(); } while (_cur->next_match(LF_RMOVIVA));