diff --git a/cg/cg4300.cpp b/cg/cg4300.cpp index 05b0123eb..9cc4361e2 100755 --- a/cg/cg4300.cpp +++ b/cg/cg4300.cpp @@ -20,12 +20,13 @@ // Methods of _Iva11Array bool _Iva11Array::add(const real& val, const char* fld_name, int num_file) { - _Iva11Item iva11; const bool is_key = TAssoc_array::is_key(fld_name); - _Iva11Item& bi = is_key ? (_Iva11Item&)find(fld_name) : iva11; + if (!is_key) + TAssoc_array::add(fld_name,(_Iva11Item*)new _Iva11Item,is_key); + _Iva11Item& bi = (_Iva11Item&)find(fld_name); bi.value() += val; if (num_file != LF_TAB1100A) bi.file() = num_file; - return TAssoc_array::add(fld_name,bi,is_key); + return TRUE; } bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file) @@ -36,11 +37,11 @@ bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file) void _Iva11Array::zero(const char* fld_name) { - _Iva11Item iva11; const bool is_key = TAssoc_array::is_key(fld_name); - _Iva11Item& bi = is_key ? (_Iva11Item&)find(fld_name) : iva11; + if (!is_key) + TAssoc_array::add(fld_name,(_Iva11Item*) new _Iva11Item,is_key); + _Iva11Item& bi = (_Iva11Item&)find(fld_name); bi.value() = 0.0; - TAssoc_array::add(fld_name,bi,is_key); } // Methods of application! diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 5c0498b9c..1a4ec9fbe 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -1466,9 +1466,10 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) const bool is_acquisto = tipomov == acquisto; - _Iva11Array b_arr; const bool is_key = _iva11_arr.is_key(codatt); - _Iva11Array& array = is_key ? (_Iva11Array&)_iva11_arr.find(codatt) : b_arr; + if (!is_key) // Aggiunge l'elemento se non c'e' + _iva11_arr.add(codatt,(_Iva11Array*)new _Iva11Array,is_key); + _Iva11Array& array = (_Iva11Array&)_iva11_arr[codatt] ; // TAB11_RQA34 ovvero "RQA34" non viene trasferito! @@ -1635,108 +1636,111 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) { if (tipodoc == "CN" || tipodoc == "SN" || tipodoc == "RN") // salta i non incassati return; + if (intracom || !valintra) { - if (tipoes_v == "24") - array.add(imponibile,TAB11_EC107); - if (tipoes_v == "21") - 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 == "25") - array.add(imponibile,TAB11_EC112); - else if (tipoes_v == "22") - array.add(imponibile,TAB11_EC114); - else if (tipoes_v == "20") - array.add(imponibile,TAB11_EC115); - else if (tipoes_v == "G7A") - array.add(imponibile,TAB11_EC116); - else if (tipoes_v == "G7B") - array.add(imponibile,TAB11_EC117); - else if (tipoes_v == "R9") // Divenuto obsoleto prima ancora di utilizzarlo... - array.add(imponibile,TAB11_R9,LF_TAB1100B); - + if (tipoes_v.not_empty()) // Inutile fare troppi controlli... + { + if (tipoes_v == "24") + array.add(imponibile,TAB11_EC107); + if (tipoes_v == "21") + 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 == "25") + array.add(imponibile,TAB11_EC112); + else if (tipoes_v == "22") + array.add(imponibile,TAB11_EC114); + else if (tipoes_v == "20") + array.add(imponibile,TAB11_EC115); + else if (tipoes_v == "G7A") + array.add(imponibile,TAB11_EC116); + else if (tipoes_v == "G7B") + array.add(imponibile,TAB11_EC117); + else if (tipoes_v == "R9") // Divenuto obsoleto prima ancora di utilizzarlo... + array.add(imponibile,TAB11_R9,LF_TAB1100B); + } if (tipocr == 4 && tipodoc != "AF" && !sosp_imp) array.add(imponibile,TAB11_EC113); } - if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") ) - return; - - if (!autofattura && tipoiva != "NS") - if (tipodoc == "AF") - { - array.add(imponibile,TAB11_A35); - array.add(imposta,TAB11_L2); - } - else if (valintra && !intra) - { - array.add(imponibile,TAB11_A35BIS); - array.add(imposta,TAB11_L2BIS); - } - - if (!autofattura && !sosp_imp && intra && tipoes_v == "22") - array.add(imponibile,TAB11_E52); - - if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS")) + if (!(corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC"))) { - const bool t1 = tipoagr == 1; - const bool t1_3 = tipoagr == 1 || tipoagr == 3; - if (ali == 2.00) + if (!autofattura && tipoiva != "NS") + if (tipodoc == "AF") + { + array.add(imponibile,TAB11_A35); + array.add(imposta,TAB11_L2); + } + else if (valintra && !intra) + { + array.add(imponibile,TAB11_A35BIS); + array.add(imposta,TAB11_L2BIS); + } + + if (!autofattura && !sosp_imp && intra && tipoes_v == "22") + array.add(imponibile,TAB11_E52); + + if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS")) { - if (t1) + const bool t1 = tipoagr == 1; + const bool t1_3 = tipoagr == 1 || tipoagr == 3; + if (ali == 2.00) { - array.add(imponibile,TAB11_AGME01,LF_TAB1100B); - array.add(imposta,TAB11_AGVE01,LF_TAB1100B); + if (t1) + { + array.add(imponibile,TAB11_AGME01,LF_TAB1100B); + array.add(imposta,TAB11_AGVE01,LF_TAB1100B); + } + if (intra && t1_3) + { + array.add(imponibile,TAB11_ABME01); + array.add(imposta,TAB11_ABVE01); + } } - if (intra && t1_3) + else if (ali == 4.00) { - array.add(imponibile,TAB11_ABME01); - array.add(imposta,TAB11_ABVE01); + if (t1) + { + array.add(imponibile,TAB11_AGME02,LF_TAB1100B); + array.add(imposta,TAB11_AGVE02,LF_TAB1100B); + } + if (intra && t1_3) + { + array.add(imponibile,TAB11_ABME02); + array.add(imposta,TAB11_ABVE02); + } } - } - else if (ali == 4.00) - { - if (t1) + else if (ali == 8.50) { - array.add(imponibile,TAB11_AGME02,LF_TAB1100B); - array.add(imposta,TAB11_AGVE02,LF_TAB1100B); + if (t1) + { + array.add(imponibile,TAB11_AGME03,LF_TAB1100B); + array.add(imposta,TAB11_AGVE03,LF_TAB1100B); + } + if (intra && t1_3) + { + array.add(imponibile,TAB11_ABME03); + array.add(imposta,TAB11_ABVE03); + } } - if (intra && t1_3) + else if (ali == 9.00) { - array.add(imponibile,TAB11_ABME02); - array.add(imposta,TAB11_ABVE02); - } - } - else if (ali == 8.50) - { - if (t1) - { - array.add(imponibile,TAB11_AGME03,LF_TAB1100B); - array.add(imposta,TAB11_AGVE03,LF_TAB1100B); - } - if (intra && t1_3) - { - array.add(imponibile,TAB11_ABME03); - array.add(imposta,TAB11_ABVE03); - } - } - else if (ali == 9.00) - { - if (t1) - { - array.add(imponibile,TAB11_AGME04,LF_TAB1100B); - array.add(imposta,TAB11_AGVE04,LF_TAB1100B); - } - if (intra && t1_3) - { - array.add(imponibile,TAB11_ABME04); - array.add(imposta,TAB11_ABVE04); + if (t1) + { + array.add(imponibile,TAB11_AGME04,LF_TAB1100B); + array.add(imposta,TAB11_AGVE04,LF_TAB1100B); + } + if (intra && t1_3) + { + array.add(imponibile,TAB11_ABME04); + array.add(imposta,TAB11_ABVE04); + } } } } @@ -1745,8 +1749,6 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) if (is_acquisto || is_vendita) if (autofattura) array.add(imponibile,TAB11_A35TER); - - _iva11_arr.add(codatt,array,is_key); } void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) @@ -1760,14 +1762,16 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) TToken_string tt("",'!'); tiporeg treg; int tipocr,tipodet,tagr; - real aliq, imp, iva, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v; + real aliq, imp, iva, lor, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v; TString16 cur_att; - _Iva11Array b_arr; + const bool is_key = _iva11_arr.is_key(codatt); - _Iva11Array& array = is_key ? (_Iva11Array&)_iva11_arr.find(codatt) : b_arr; + if (!is_key) + _iva11_arr.add(codatt,(_Iva11Array*)new _Iva11Array,is_key); + _Iva11Array& array = (_Iva11Array&)_iva11_arr[codatt]; + // Scorporo corretto dei corrispettivi in R3 TAssoc_array corr_ann; - _CorrItem cx,*cc; bool is_present; for (_pim->first(); !_pim->eof(); _pim->next()) @@ -1795,6 +1799,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) tipodet = atoi(*_pim_tipodet); imp = _pim->get_real("R0"); iva = _pim->get_real("R1"); + lor = _pim->get_real("R3"); if (is_acquisto) { @@ -1870,15 +1875,17 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) if ((_isagricolo && tagr==2) || !_isagricolo) { // Accumula i corrispettivi da scorporare per codice iva - is_present = corr_ann.is_key(codiva); - cx._totale = 0; - _CorrItem& ca = is_present ? (_CorrItem&) corr_ann[codiva] : cx; - ca._totale += _pim->get_real("R3"); - if (!is_present && ca._totale != ZERO) // se non c'e' lo aggiunge (evita i vuoti) + if (lor != ZERO) { - ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota - corr_ann.add(codiva,ca); + is_present = corr_ann.is_key(codiva); + if (!is_present) // Aggiungilo se non c'e' + corr_ann.add(codiva,(_CorrItem*)new _CorrItem,is_present); + _CorrItem& ca = (_CorrItem&) corr_ann[codiva]; + ca._totale += lor; + if (!is_present) + ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota } + tt = _pim->get("S0"); a13i = tt.get(0); a13v = tt.get(1); @@ -1935,6 +1942,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) } // Scorre i corrispettivi lordi accumulati, li scorpora ed aggiorna i righi relativi + _CorrItem* cc; for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) { lordo2netto(cc->_totale,imp,iva,cc->_aliquota/CENTO); @@ -2009,7 +2017,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) } array.add(_plm->get_real("R0"),TAB11_IVVENR); } - _iva11_arr.add(codatt,array,is_key); + //_iva11_arr.add(codatt,array,is_key); } void TLiquidazione_app::iva11_write(bool reset_r1r2) @@ -2022,15 +2030,16 @@ void TLiquidazione_app::iva11_write(bool reset_r1r2) _Iva11Array * iva11_arr; _Iva11Item * iva11; - int i=0,err; + TLocalisamfile& tab1100a = _tab11->lfile(); + TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B); + + int err; // Ciclo sulle attivita' - for (iva11_arr = (_Iva11Array *) _iva11_arr.first_item(); iva11_arr != NULL && i < items; i++,iva11_arr = (_Iva11Array*)_iva11_arr.succ_item()) + for (iva11_arr = (_Iva11Array *) _iva11_arr.first_item(); iva11_arr != NULL; iva11_arr = (_Iva11Array*)_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); @@ -2039,9 +2048,8 @@ void TLiquidazione_app::iva11_write(bool reset_r1r2) tab1100b.put(TAB11_TACATT,attiv); const int iva11_items = iva11_arr->items(); - int j=0; // Ciclo sugli elementi per compilare i campi della relazione - for (iva11 = (_Iva11Item *)iva11_arr->first_item(); iva11 != NULL && jsucc_item()) + for (iva11 = (_Iva11Item *)iva11_arr->first_item(); iva11 != NULL;iva11 = (_Iva11Item *)iva11_arr->succ_item()) { fld_name = iva11_arr->get_hashobj()->key(); if (reset_r1r2 && (fld_name == TAB11_R1 || fld_name == TAB11_R2)) continue; // salta R1/R2 se devono rimanere a zero diff --git a/cg/cg4303.cpp b/cg/cg4303.cpp index a7f1b1200..007f8783e 100755 --- a/cg/cg4303.cpp +++ b/cg/cg4303.cpp @@ -307,7 +307,8 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) // Di seguito l'implementazione del sistema (errata come spiegato sopra). - const real moltiplicatore = totven / totacq; + real moltiplicatore = totven / totacq; + moltiplicatore.round(9); real imponibile, imposta; _VendItem* vi = (_VendItem*)&_vend_arr[0]; diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index a6de3538f..677b99679 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -320,7 +320,11 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt) } } } - } + } + + d->_r0 = _pam->get_real("R2"); // Totale acquisti + d->_r1 = _pam->get_real("R3"); // Totale vendite + if (d->_r1.is_zero() || d->_r0.is_zero()) delete d; else