diff --git a/cg/cg4300.cpp b/cg/cg4300.cpp index 8d1e7e933..127b638bb 100755 --- a/cg/cg4300.cpp +++ b/cg/cg4300.cpp @@ -34,6 +34,15 @@ bool _BolgArray::sub(const real& val, const char* fld_name, int num_file) return add(v1,fld_name, num_file); } +void _BolgArray::zero(const char* fld_name) +{ + _BolgItem bolg; + const bool is_key = TAssoc_array::is_key(fld_name); + _BolgItem& bi = is_key ? (_BolgItem&)find(fld_name) : bolg; + bi.value() = 0.0; + TAssoc_array::add(fld_name,bi,is_key); +} + // Methods of application! real TLiquidazione_app::CENTO(100.0); diff --git a/cg/cg4300.h b/cg/cg4300.h index a6035d9df..50fb9ea9c 100755 --- a/cg/cg4300.h +++ b/cg/cg4300.h @@ -196,6 +196,7 @@ class _BolgArray : public TAssoc_array public: bool add(const real& val, const char* fld_name, int num_file = LF_TAB1100A); bool sub(const real& val, const char* fld_name, int num_file = LF_TAB1100A); + void zero(const char* fld_name); _BolgArray() {} virtual ~_BolgArray() {} }; @@ -260,8 +261,10 @@ class TLiquidazione_app : public TPrint_application TAssoc_array _codiva_arr; // cache dei codici IVA. TAssoc_array _reg_arr; // cache dei registri. - _BolgArray _iva11_arr; // array contenente le informazioni da trasferire. - // La chiave di ordinamento e' sul nome del campo. + TAssoc_array _iva11_arr; // array contenente le informazioni da trasferire. + // La chiave di ordinamento e' sulcodice attivita'. + // Ogni elemento dell'array e' un _BolgArray + // La cui chiave e' a sua volta sul nome campo // totali vari per attivita' real _p8, _p8b, _p9; // totali plafond @@ -407,10 +410,9 @@ public: void iva11_set_arr (const TString& codatt); // Scorre tutti i PIM della ditta, per completare _iva11_arr prima di chiamare write_IVA11() void iva11_set_arr_pim (const TString& codatt); - // Resetta i valori di R1 ed R2 per ogni attivita' della ditta corrente se non e' stato stampato il rimborso - void iva11_reset_R1R2(); // Scrive per la ditta/attivita' corrente, i dati relativi al trasferimento IVA11 - void iva11_write (); + // Se viene passato TRUE come parametro, azzera i campi R1 ed R2. + void iva11_write (bool reset_r1r2 = FALSE); // ricalcolo liquidazioni dai progressivi mensili void write_liq (int month, const char* atts); diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 9407b3906..ad8c7502d 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -46,6 +46,7 @@ bool TLiquidazione_app::recalc_all() * -------------------------------------------------------------- */ + _reg_arr.destroy(); // Azzera la cache dei registri per ogni ditta. _nditte->zero(); _nditte->curr().put("CODDITTA",nomeditta.get_long(1)); _nditte->read(); @@ -321,12 +322,8 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) // se sta calcolando l'annuale, scrive tutti i dati calcolati per il trasferimento // sui files adibiti a mantenere le informazioni per IVA 11: tab1100a e tab1100b - // Scrive le informazioni per la ditta/attivita' corrente if (_is_interactive && month == 13) - { - iva11_set_arr_pim(codatt); // scorre tutti i maledetti PIM di questa ditta per completare _iva11_arr - iva11_write(); // scrive su tab1100 at last. - } + iva11_set_arr_pim(codatt); // scorre tutti i maledetti PIM di questa ditta/attivita' per completare _iva11_arr } while (_nditte->next_match(LF_ATTIV)); @@ -355,8 +352,6 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) // un bel descritem (NULL se non si rimborsa un cas) // da passare a describe_liq rimb_d = recalc_rimborso(month,atts, stliq); - if (_is_interactive && month == 13 && rimb_d == NULL) - iva11_reset_R1R2(); } if (month == _month && stliq) @@ -1366,12 +1361,18 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) const TString tipoes_v = _iva->get("S2"); const TString tipoes_a = _iva->get("S9"); const int tipoagr = atoi(_iva->get("S4")); - const TRectype& rcs = _cur->curr(LF_CAUSALI); - const bool autofattura = rcs.get_bool("AUTOFATT"); - const bool sosp_imp = _reg->get_bool("B1"); - tiporeg tipomov = (tiporeg)_reg->get_long("I0"); - const bool is_vendita = tipomov == vendita; - const bool is_acquisto = tipomov == acquisto; + const TRectype& rcs = _cur->curr(LF_CAUSALI); + const bool autofattura = rcs.get_bool("AUTOFATT"); + const bool valintra = rcs.get_bool("VALINTRA"); + const bool sosp_imp = _reg->get_bool("B1"); + tiporeg tipomov = (tiporeg)_reg->get_long("I0"); + const bool is_vendita = tipomov == vendita; + const bool is_acquisto = tipomov == acquisto; + + _BolgArray b_arr; + const bool is_key = _iva11_arr.is_key(codatt); + _BolgArray& array = is_key ? (_BolgArray&)_iva11_arr.find(codatt) : b_arr; + // TAB11_RQA34 ovvero "RQA34" non viene trasferito! // Sebbene per motivi di pieta' viene comunque lasciato nel tracciato record (esigenze PRASSI) @@ -1385,157 +1386,223 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) { if (tipocr == 2 || tipocr == 3 || tipocr == 8) { - _iva11_arr.sub(imponibile,TAB11_G30I,LF_TAB1100B); - _iva11_arr.sub(imposta,TAB11_G30V,LF_TAB1100B); + array.sub(imponibile,TAB11_G30I,LF_TAB1100B); + array.sub(imposta,TAB11_G30V,LF_TAB1100B); } else { - _iva11_arr.add(imponibile,TAB11_G30I,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_G30V,LF_TAB1100B); + array.add(imponibile,TAB11_G30I,LF_TAB1100B); + array.add(imposta,TAB11_G30V,LF_TAB1100B); } } else if (tipoagr == 3 && tipocr !=2 && tipocr != 3 && tipocr != 8) { - _iva11_arr.add(imponibile,TAB11_G31I,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_G31V,LF_TAB1100B); + array.add(imponibile,TAB11_G31I,LF_TAB1100B); + array.add(imposta,TAB11_G31V,LF_TAB1100B); } } if (!sosp_imp && tipodet == 0 && (tipocr == 2 || tipocr == 8)) { - _iva11_arr.add(imposta,TAB11_R6,LF_TAB1100B); + array.add(imposta,TAB11_R6,LF_TAB1100B); } - if (!sosp_imp && tipodet == 9) - if (tipodoc == "BD") + if (!sosp_imp) + { + if (tipodoc == "BD" && tipodet == 9) { - _iva11_arr.add(imponibile,TAB11_F76); + array.add(imponibile,TAB11_F76); if (_sind11) - _iva11_arr.add(imposta,TAB11_F76); + array.add(imposta,TAB11_F76); } - else + + if (tipodoc != "BD") { // Compila prima i campi FC1nn ed FC2nn, poi i campi SBFnn ed SBInn if (ali == 2.00) { - _iva11_arr.add(imponibile,TAB11_FC101); - _iva11_arr.add(imposta,TAB11_FC201); + array.add(imponibile,TAB11_FC101); + array.add(imposta,TAB11_FC201); } else if (ali == 4.00) { - _iva11_arr.add(imponibile,TAB11_FC102); - _iva11_arr.add(imposta,TAB11_FC202); + array.add(imponibile,TAB11_FC102); + array.add(imposta,TAB11_FC202); } else if (ali == 8.50) { - _iva11_arr.add(imponibile,TAB11_FC103); - _iva11_arr.add(imposta,TAB11_FC203); + array.add(imponibile,TAB11_FC103); + array.add(imposta,TAB11_FC203); } else if (ali == 9.00) { - _iva11_arr.add(imponibile,TAB11_FC104); - _iva11_arr.add(imposta,TAB11_FC204); + array.add(imponibile,TAB11_FC104); + array.add(imposta,TAB11_FC204); } else if (ali == 10.00) { - _iva11_arr.add(imponibile,TAB11_FC105); - _iva11_arr.add(imposta,TAB11_FC205); + array.add(imponibile,TAB11_FC105); + array.add(imposta,TAB11_FC205); } else if (ali == 13.00) { - _iva11_arr.add(imponibile,TAB11_FC106); - _iva11_arr.add(imposta,TAB11_FC206); + array.add(imponibile,TAB11_FC106); + array.add(imposta,TAB11_FC206); } else if (ali == 16.00) { - _iva11_arr.add(imponibile,TAB11_FC107); - _iva11_arr.add(imposta,TAB11_FC207); + array.add(imponibile,TAB11_FC107); + array.add(imposta,TAB11_FC207); } else if (ali == 19.00) { - _iva11_arr.add(imponibile,TAB11_FC108); - _iva11_arr.add(imposta,TAB11_FC208); + array.add(imponibile,TAB11_FC108); + array.add(imposta,TAB11_FC208); } if (tipoes_a == "01") - _iva11_arr.add(imponibile,TAB11_FC109); + array.add(imponibile,TAB11_FC109); else if (tipoes_a == "12") - _iva11_arr.add(imponibile,TAB11_FC110); + array.add(imponibile,TAB11_FC110); else if (tipoes_a == "13") - _iva11_arr.add(imponibile,TAB11_FC111); + array.add(imponibile,TAB11_FC111); else if (tipoes_a == "14") - _iva11_arr.add(imponibile,TAB11_FC112); + array.add(imponibile,TAB11_FC112); else if (tipoes_a == "15") - _iva11_arr.add(imponibile,TAB11_FC113); - - _iva11_arr.add(imponibile,TAB11_FC114); - if (_sind11) - _iva11_arr.add(imposta,TAB11_FC114); + array.add(imponibile,TAB11_FC113); + + if (tipodet == 9) + { + array.add(imponibile,TAB11_FC114); + if (_sind11) + array.add(imposta,TAB11_FC114); + } if (intra) // Compila i campi SBFnn { if (ali == 4.00) { - _iva11_arr.add(imponibile,TAB11_SBF01); - _iva11_arr.add(imposta,TAB11_SBI01); + array.add(imponibile,TAB11_SBF01); + array.add(imposta,TAB11_SBI01); } else if (ali == 9.00) { - _iva11_arr.add(imponibile,TAB11_SBF02); - _iva11_arr.add(imposta,TAB11_SBI02); + array.add(imponibile,TAB11_SBF02); + array.add(imposta,TAB11_SBI02); } else if (ali == 10.00) { - _iva11_arr.add(imponibile,TAB11_SBF03); - _iva11_arr.add(imposta,TAB11_SBI03); + array.add(imponibile,TAB11_SBF03); + array.add(imposta,TAB11_SBI03); } else if (ali == 13.00) { - _iva11_arr.add(imponibile,TAB11_SBF04); - _iva11_arr.add(imposta,TAB11_SBI04); + array.add(imponibile,TAB11_SBF04); + array.add(imposta,TAB11_SBI04); } else if (ali == 16.00) { - _iva11_arr.add(imponibile,TAB11_SBF05); - _iva11_arr.add(imposta,TAB11_SBI05); + array.add(imponibile,TAB11_SBF05); + array.add(imposta,TAB11_SBI05); } else if (ali == 19.00) { - _iva11_arr.add(imponibile,TAB11_SBF06); - _iva11_arr.add(imposta,TAB11_SBI06); + array.add(imponibile,TAB11_SBF06); + array.add(imposta,TAB11_SBI06); } if (tipoes_a == "01") - _iva11_arr.add(imponibile,TAB11_SBF07); + array.add(imponibile,TAB11_SBF07); else if (tipoes_a == "12") - _iva11_arr.add(imponibile,TAB11_SBF08); + array.add(imponibile,TAB11_SBF08); else if (tipoes_a == "13") - _iva11_arr.add(imponibile,TAB11_SBF09); + array.add(imponibile,TAB11_SBF09); else if (tipoes_a == "14") - _iva11_arr.add(imponibile,TAB11_SBF10); - - _iva11_arr.add(imponibile,TAB11_SBF11); - if (_sind11) - _iva11_arr.add(imposta,TAB11_SBF11); + array.add(imponibile,TAB11_SBF10); + + if (tipodet == 9) + { + array.add(imponibile,TAB11_SBF11); + if (_sind11) + array.add(imposta,TAB11_SBF11); + } } } + } } if (is_vendita) { + if (!valintra) + { + if ((_isagricolo && tipoagr==2) || !_isagricolo) + { + if (ali == 4.00) + { + array.add(imponibile,TAB11_EC101); + array.add(imposta,TAB11_EC201); + } + else if (ali == 9.00) + { + array.add(imponibile,TAB11_EC102); + array.add(imposta,TAB11_EC202); + } + else if (ali == 10.00) + { + array.add(imponibile,TAB11_EC103); + array.add(imposta,TAB11_EC203); + } + else if (ali == 13.00) + { + array.add(imponibile,TAB11_EC104); + array.add(imposta,TAB11_EC204); + } + else if (ali == 16.00) + { + array.add(imponibile,TAB11_EC105); + array.add(imposta,TAB11_EC205); + } + else if (ali == 19.00) + { + array.add(imponibile,TAB11_EC106); + array.add(imposta,TAB11_EC206); + } + } + + if (tipoes_v == "10") + array.add(imponibile,TAB11_EC107); + if (tipoes_v == "24") + array.add(imponibile,TAB11_EC108); + else if (tipoes_v == "B1") + array.add(imponibile,TAB11_EC109); + else if (tipoes_v == "B2") + array.add(imponibile,TAB11_EC110); + else if (tipoes_v == "B3") + array.add(imponibile,TAB11_EC111); + else if (tipoes_v == "26") + array.add(imponibile,TAB11_EC112); + else if (tipoes_v == "24B") + array.add(imponibile,TAB11_EC114); + else if (tipoes_v == "23") + array.add(imponibile,TAB11_EC115); + + if (tipocr == 4) + array.add(imponibile,TAB11_EC113); + } + if (!autofattura && tipoiva != "NS") if (tipodoc == "AF") { - _iva11_arr.add(imponibile,TAB11_A35); - _iva11_arr.add(imposta,TAB11_L2); + array.add(imponibile,TAB11_A35); + array.add(imposta,TAB11_L2); } - else if (rcs.get_bool("VALINTRA") && !intra) + else if (valintra && !intra) { - _iva11_arr.add(imponibile,TAB11_A35BIS); - _iva11_arr.add(imposta,TAB11_L2BIS); + array.add(imponibile,TAB11_A35BIS); + array.add(imposta,TAB11_L2BIS); } if (!autofattura && !sosp_imp && intra && tipoes_v == "24B") - _iva11_arr.add(imponibile,TAB11_E52); + array.add(imponibile,TAB11_E52); if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS")) { @@ -1545,52 +1612,52 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) { if (t1) { - _iva11_arr.add(imponibile,TAB11_AGME01,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_AGVE01,LF_TAB1100B); + array.add(imponibile,TAB11_AGME01,LF_TAB1100B); + array.add(imposta,TAB11_AGVE01,LF_TAB1100B); } if (intra && t1_3) { - _iva11_arr.add(imponibile,TAB11_ABME01); - _iva11_arr.add(imposta,TAB11_ABVE01); + array.add(imponibile,TAB11_ABME01); + array.add(imposta,TAB11_ABVE01); } } else if (ali == 4.00) { if (t1) { - _iva11_arr.add(imponibile,TAB11_AGME02,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_AGVE02,LF_TAB1100B); + array.add(imponibile,TAB11_AGME02,LF_TAB1100B); + array.add(imposta,TAB11_AGVE02,LF_TAB1100B); } if (intra && t1_3) { - _iva11_arr.add(imponibile,TAB11_ABME02); - _iva11_arr.add(imposta,TAB11_ABVE02); + array.add(imponibile,TAB11_ABME02); + array.add(imposta,TAB11_ABVE02); } } else if (ali == 8.50) { if (t1) { - _iva11_arr.add(imponibile,TAB11_AGME03,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_AGVE03,LF_TAB1100B); + array.add(imponibile,TAB11_AGME03,LF_TAB1100B); + array.add(imposta,TAB11_AGVE03,LF_TAB1100B); } if (intra && t1_3) { - _iva11_arr.add(imponibile,TAB11_ABME03); - _iva11_arr.add(imposta,TAB11_ABVE03); + array.add(imponibile,TAB11_ABME03); + array.add(imposta,TAB11_ABVE03); } } else if (ali == 9.00) { if (t1) { - _iva11_arr.add(imponibile,TAB11_AGME04,LF_TAB1100B); - _iva11_arr.add(imposta,TAB11_AGVE04,LF_TAB1100B); + array.add(imponibile,TAB11_AGME04,LF_TAB1100B); + array.add(imposta,TAB11_AGVE04,LF_TAB1100B); } if (intra && t1_3) { - _iva11_arr.add(imponibile,TAB11_ABME04); - _iva11_arr.add(imposta,TAB11_ABVE04); + array.add(imponibile,TAB11_ABME04); + array.add(imposta,TAB11_ABVE04); } } } @@ -1598,7 +1665,9 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) if (is_acquisto || is_vendita) if (autofattura) - _iva11_arr.add(imponibile,TAB11_A35TER); + array.add(imponibile,TAB11_A35TER); + + _iva11_arr.add(codatt,array,is_key); } void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) @@ -1613,7 +1682,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) int tipocr,tipodet,tagr; real aliq, imp, iva, vtot, atot, ivav, ivaa; TString cur_att; - + _BolgArray b_arr; + const bool is_key = _iva11_arr.is_key(codatt); + _BolgArray& array = is_key ? (_BolgArray&)_iva11_arr.find(codatt) : b_arr; + for (_pim->first(); !_pim->eof(); _pim->next()) { if (_year != *_pim_anno) continue; @@ -1644,150 +1716,101 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) switch (tipocr) { case 2: - _iva11_arr.add(imp,TAB11_IMA01); + array.add(imp,TAB11_IMA01); break; case 8: - _iva11_arr.add(imp,TAB11_IMA02); + array.add(imp,TAB11_IMA02); break; case 1: case 5: - _iva11_arr.add(imp,TAB11_IMA03); + array.add(imp,TAB11_IMA03); break; default: break; } if (tipodet == 1) - _iva11_arr.add(iva,TAB11_B14); + array.add(iva,TAB11_B14); if (aliq == 4.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC101); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC201); + array.add(_pim->get_real("R9"),TAB11_FBC101); + array.add(_pim->get_real("R10"),TAB11_FBC201); } else if (aliq == 9.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC102); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC202); + array.add(_pim->get_real("R9"),TAB11_FBC102); + array.add(_pim->get_real("R10"),TAB11_FBC202); } else if (aliq == 10.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC103); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC203); + array.add(_pim->get_real("R9"),TAB11_FBC103); + array.add(_pim->get_real("R10"),TAB11_FBC203); } else if (aliq == 13.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC104); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC204); + array.add(_pim->get_real("R9"),TAB11_FBC104); + array.add(_pim->get_real("R10"),TAB11_FBC204); } else if (aliq == 16.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC105); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC205); + array.add(_pim->get_real("R9"),TAB11_FBC105); + array.add(_pim->get_real("R10"),TAB11_FBC205); } else if (aliq == 19.00) { - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC106); - _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC206); + array.add(_pim->get_real("R9"),TAB11_FBC106); + array.add(_pim->get_real("R10"),TAB11_FBC206); } if (a11 == "12") - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC107); + array.add(_pim->get_real("R9"),TAB11_FBC107); if (a11 == "13" || a11 == "14") - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC108); + array.add(_pim->get_real("R9"),TAB11_FBC108); if (a11 == "15") - _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC109); + array.add(_pim->get_real("R9"),TAB11_FBC109); } // is_acquisto - if (is_vendita && ((_isagricolo && tagr==2) || !_isagricolo)) - { - if (aliq == 4.00) - { - _iva11_arr.add(imp,TAB11_EC101); - _iva11_arr.add(iva,TAB11_EC201); - } - else if (aliq == 9.00) - { - _iva11_arr.add(imp,TAB11_EC102); - _iva11_arr.add(iva,TAB11_EC202); - } - else if (aliq == 10.00) - { - _iva11_arr.add(imp,TAB11_EC103); - _iva11_arr.add(iva,TAB11_EC203); - } - else if (aliq == 13.00) - { - _iva11_arr.add(imp,TAB11_EC104); - _iva11_arr.add(iva,TAB11_EC204); - } - else if (aliq == 16.00) - { - _iva11_arr.add(imp,TAB11_EC105); - _iva11_arr.add(iva,TAB11_EC205); - } - else if (aliq == 19.00) - { - _iva11_arr.add(imp,TAB11_EC106); - _iva11_arr.add(iva,TAB11_EC206); - } - } if (is_vendita) { - if (v11 == "10") - _iva11_arr.add(imp,TAB11_EC107); - if (v11 == "24") - _iva11_arr.add(imp,TAB11_EC108); - else if (v11 == "B1") - _iva11_arr.add(imp,TAB11_EC109); - else if (v11 == "B2") - _iva11_arr.add(imp,TAB11_EC110); - else if (v11 == "B3") - _iva11_arr.add(imp,TAB11_EC111); - else if (v11 == "26") - _iva11_arr.add(imp,TAB11_EC112); - else if (v11 == "24B") - _iva11_arr.add(imp,TAB11_EC114); - else if (v11 == "23") - _iva11_arr.add(imp,TAB11_EC115); - else if (v11 == "E50") - _iva11_arr.add(imp,TAB11_EC116); + if (v11 == "E50") + array.add(imp,TAB11_EC116); else if (v11 == "E51") - _iva11_arr.add(imp,TAB11_EC117); + array.add(imp,TAB11_EC117); else if (v11 == "R9") - _iva11_arr.add(imp,TAB11_R9,LF_TAB1100B); - } - if (is_vendita && tipocr == 4) - _iva11_arr.add(imp,TAB11_EC113); + array.add(imp,TAB11_R9,LF_TAB1100B); + - if (is_vendita && _isagricolo && (tagr == 1 || tagr == 3)) - { - if (aliq == 2.00) + if (_isagricolo && (tagr == 1 || tagr == 3)) { - _iva11_arr.add(imp,TAB11_AGME01,LF_TAB1100B); - _iva11_arr.add(iva,TAB11_AGVE01,LF_TAB1100B); + if (aliq == 2.00) + { + array.add(imp,TAB11_AGME01,LF_TAB1100B); + array.add(iva,TAB11_AGVE01,LF_TAB1100B); + } + else if (aliq == 4.00) + { + array.add(imp,TAB11_AGME02,LF_TAB1100B); + array.add(iva,TAB11_AGVE02,LF_TAB1100B); + } + else if (aliq == 8.50) + { + array.add(imp,TAB11_AGME03,LF_TAB1100B); + array.add(iva,TAB11_AGVE03,LF_TAB1100B); + } + else if (aliq == 9.00) + { + array.add(imp,TAB11_AGME04,LF_TAB1100B); + array.add(iva,TAB11_AGVE04,LF_TAB1100B); + } } - else if (aliq == 4.00) - { - _iva11_arr.add(imp,TAB11_AGME02,LF_TAB1100B); - _iva11_arr.add(iva,TAB11_AGVE02,LF_TAB1100B); - } - else if (aliq == 8.50) - { - _iva11_arr.add(imp,TAB11_AGME03,LF_TAB1100B); - _iva11_arr.add(iva,TAB11_AGVE03,LF_TAB1100B); - } - else if (aliq == 9.00) - { - _iva11_arr.add(imp,TAB11_AGME04,LF_TAB1100B); - _iva11_arr.add(iva,TAB11_AGVE04,LF_TAB1100B); - } - } + } // is_vendita + // Boia chi linka! // Sommatoria per il calcolo aliquote medie vendite/acquisti... if (_pim->get_bool("B3")) // E' un record valido per fare questa cosa? @@ -1808,20 +1831,20 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) // Hisss... Rettifica l'importo di EC115: EC115 = EC116 + EC117 + EC115 // Va beh... real r16, r17; - if (_iva11_arr.is_key(TAB11_EC116)) - r16 = ((_BolgItem&)_iva11_arr[TAB11_EC116]).value(); - if (_iva11_arr.is_key(TAB11_EC117)) - r17 = ((_BolgItem&)_iva11_arr[TAB11_EC117]).value(); + if (array.is_key(TAB11_EC116)) + r16 = ((_BolgItem&)array[TAB11_EC116]).value(); + if (array.is_key(TAB11_EC117)) + r17 = ((_BolgItem&)array[TAB11_EC117]).value(); r17+=r16; - _iva11_arr.add(r17,TAB11_EC115); + array.add(r17,TAB11_EC115); // Calcola le maledette aliquote medie... real alv,ala; if (vtot != 0.0) { alv = ivav/vtot; alv *= CENTO; alv.round(2); } if (atot != 0.0) { ala = ivaa/atot; ala *= CENTO; ala.round(2); } - _iva11_arr.add(ala,TAB11_R1,LF_TAB1100B); - _iva11_arr.add(alv,TAB11_R2,LF_TAB1100B); + array.add(ala,TAB11_R1,LF_TAB1100B); + array.add(alv,TAB11_R2,LF_TAB1100B); // Uargh, Uargh. Mo' mi pappo i PLM per compilare T1, T1C, T2, T2C, T3, T5 e T6 // Ah, Ah, Ah! @@ -1834,59 +1857,59 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) if (codatt != cur_att) continue; if (_isviaggio) { - _iva11_arr.add(_plm->get_real("R5"),TAB11_T1,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R7"),TAB11_T1C,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R6"),TAB11_T2,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R8"),TAB11_T2C,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R9"),TAB11_T3,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R10"),TAB11_T5,LF_TAB1100B); - _iva11_arr.add(_plm->get_real("R11"),TAB11_T6,LF_TAB1100B); + array.add(_plm->get_real("R5"),TAB11_T1,LF_TAB1100B); + array.add(_plm->get_real("R7"),TAB11_T1C,LF_TAB1100B); + array.add(_plm->get_real("R6"),TAB11_T2,LF_TAB1100B); + array.add(_plm->get_real("R8"),TAB11_T2C,LF_TAB1100B); + array.add(_plm->get_real("R9"),TAB11_T3,LF_TAB1100B); + array.add(_plm->get_real("R10"),TAB11_T5,LF_TAB1100B); + array.add(_plm->get_real("R11"),TAB11_T6,LF_TAB1100B); } - _iva11_arr.add(_plm->get_real("R0"),TAB11_IVVENR); + array.add(_plm->get_real("R0"),TAB11_IVVENR); } + _iva11_arr.add(codatt,array,is_key); } -void TLiquidazione_app::iva11_reset_R1R2() -// Azzera su file i valori di R1 ed R2 se non e' stato stampato il rimborso. -{ - TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B); - TString ditta,ditta_read; - ditta.format("%05ld",_nditte->curr().get_long(NDT_CODDITTA)); - tab1100b.put(TAB11_TADITT,ditta); - for (tab1100b.read(_isgteq); !tab1100b.eof(); tab1100b.next()) - { - ditta_read = tab1100b.get(TAB11_TADITT); - if (ditta != ditta_read) break; - tab1100b.zero(TAB11_R1); - tab1100b.zero(TAB11_R2); - tab1100b.rewrite(); - } -} - -void TLiquidazione_app::iva11_write() +void TLiquidazione_app::iva11_write(bool reset_r1r2) // Trasferisce i dati IVA11 annuali dall'assoc_array al file tab1100 { const int items = _iva11_arr.items(); if (items == 0) return; - // Setta i campi chiave per entrambi i files della relazione - TString ditta,attiv; - ditta.format("%05ld",_nditte->curr().get_long(NDT_CODDITTA)); - attiv = _nditte->curr(LF_ATTIV).get(ATT_CODATT); - _tab11->lfile().zero(); - _tab11->lfile().put(TAB11_TADITT,ditta); - _tab11->lfile().put(TAB11_TACATT,attiv); - _tab11->lfile(LF_TAB1100B).zero(); - _tab11->lfile(LF_TAB1100B).put(TAB11_TADITT,ditta); - _tab11->lfile(LF_TAB1100B).put(TAB11_TACATT,attiv); + TString ditta,attiv,fld_name; + _BolgArray * bolg_arr; _BolgItem * bolg; int i=0,err; - for (bolg = (_BolgItem *)_iva11_arr.first_item(); bolg != NULL && ilfile(bolg->file()).put(_iva11_arr.get_hashobj()->key(),bolg->value()); - if (_tab11->write() != NOERR) - if ((err=_tab11->rewrite()) != NOERR) - error_box("Errore %d tentando di scrivere sul file tab1100.",err); + // Ciclo sulle attivita' + for (bolg_arr = (_BolgArray *) _iva11_arr.first_item(); bolg_arr != NULL && i < items; i++,bolg_arr = (_BolgArray*)_iva11_arr.succ_item()) + { + // Setta i campi chiave per entrambi i files della relazione + ditta.format("%05ld",_nditte->curr().get_long(NDT_CODDITTA)); + attiv = _iva11_arr.get_hashobj()->key(); + TLocalisamfile& tab1100a = _tab11->lfile(); + TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B); + tab1100a.zero(); + tab1100a.put(TAB11_TADITT,ditta); + tab1100a.put(TAB11_TACATT,attiv); + tab1100b.zero(); + tab1100b.put(TAB11_TADITT,ditta); + tab1100b.put(TAB11_TACATT,attiv); + + const int bolg_items = bolg_arr->items(); + int j=0; + // Ciclo sugli elementi per compilare i campi della relazione + for (bolg = (_BolgItem *)bolg_arr->first_item(); bolg != NULL && jsucc_item()) + { + fld_name = bolg_arr->get_hashobj()->key(); + if (reset_r1r2 && (fld_name == TAB11_R1 || fld_name == TAB11_R2)) continue; // salta R1/R2 se devono rimanere a zero + _tab11->lfile(bolg->file()).put(fld_name,bolg->value()); + } + + if (_tab11->write() != NOERR) + if ((err=_tab11->rewrite()) != NOERR) + error_box("Errore %d tentando di scrivere sul file tab1100.",err); + } _iva11_arr.destroy(); // resetta l'array. } diff --git a/cg/cg4303.cpp b/cg/cg4303.cpp index 830708056..0b5694670 100755 --- a/cg/cg4303.cpp +++ b/cg/cg4303.cpp @@ -397,6 +397,12 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) //}; +// defines per stabilire quale cazzo di metodo piace oggi alla prassi +// ------------------------------------------------------------------ +// Considera tutti i mesi del trimestre fino a quello indicato +// se lasciato indefinito usa solo il mese passato +#define OGGI_GLI_TIRA_DI_USARE_TRE_MESI + _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, bool stliq) { @@ -417,22 +423,19 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, while ((tmpatt = atts.get()) != NULL) { att = tmpatt; - if (!is_mens) // Trimestrali - for (int m = (month == 13 ? 1 : (next_trim(month)-2)); m <= month; m++) - { - if (!look_plm(m,att)) continue; - - vol_aff += _pam->get_real("R1"); - es_ni += _pum->get_real("R12"); - } - else - { // Mensili +#ifdef OGGI_GLI_TIRA_DI_USARE_TRE_MESI + for (int m = (month == 13 ? 1 : (next_trim(month)-2)); m <= month; m++) + { +#else int m = month; +#endif if (!look_plm(m,att)) continue; vol_aff += _pam->get_real("R1"); es_ni += _pum->get_real("R12"); - } +#ifdef OGGI_GLI_TIRA_DI_USARE_TRE_MESI + } +#endif } // condizione 1 @@ -593,7 +596,7 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts, (month != 13 && (rmese < (next_trim(month)-2) || rmese > month))) continue; } else // Mensili - if (year != ryear || (month != rmese)) + if (year != ryear || (month != rmese && month != 13)) continue; int tipomov = (tiporeg)_pim->get_long("I1"); diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index 0dbba1937..05ceafcea 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -857,6 +857,7 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, d->_arr.add(di); else delete di; } + iva11_write(di == NULL || d->_r0.sign() >= 0); // scrive su tab1100 at last. if (!_is_visliq) {