diff --git a/cg/cg4300.h b/cg/cg4300.h index 484e3a0a3..859513247 100755 --- a/cg/cg4300.h +++ b/cg/cg4300.h @@ -137,6 +137,7 @@ public: // vedi sopra per le fisime morali TString _codiva; // codice iva TString _codatt; // codice attivita' int _tipodet; // tipo detraibilita' + virtual TObject* dup() const { return new _CorrItem(*this); } _CorrItem() : _codreg(5) {} virtual ~_CorrItem() {} }; @@ -262,7 +263,7 @@ class TLiquidazione_app : public TPrint_application TAssoc_array _codiva_arr; // cache dei codici IVA. TAssoc_array _reg_arr; // cache dei registri. TAssoc_array _iva11_arr; // array contenente le informazioni da trasferire. - // La chiave di ordinamento e' sulcodice attivita'. + // La chiave di ordinamento e' sul codice attivita'. // Ogni elemento dell'array e' un _BolgArray // La cui chiave e' a sua volta sul nome campo diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index ad622e1ab..5226b77b4 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -369,14 +369,20 @@ 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 (stliq) + { + describe_firm(month); + //describe_liq(_month, atts, _isregis ? NULL : rimb_d); + describe_liq(_month, atts, rimb_d); + } + if (_month == 13 && look_lim(_month)) // scrive i risultati solo in annuale + { + real r0 = _lim->get_real("R0"); + iva11_write(rimb_d == NULL || r0.sign() >= 0); // scrive su tab1100 at last. + } } - if (month == _month && stliq) - { - describe_firm(month); - //describe_liq(_month, atts, _isregis ? NULL : rimb_d); - describe_liq(_month, atts, rimb_d); - } + //in caso di stampa registri e in caso sia //stato calcolato l'acconto (metodo analitico) @@ -1598,16 +1604,22 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) if (is_vendita) { if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") ) +// x13 + return; +/* { + return; real p = ali/CENTO; lordo2netto(imponibile,imposta,p);// In tal caso scorpora l'iva dall'imponibile... } - +*/ +// fine x13 if (tipodoc == "CN" || tipodoc == "SN" || tipodoc == "RN") // salta i non incassati return; if (!valintra) { - if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo)) +// x13 +/* if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo)) { if (ali == 4.00) { @@ -1640,7 +1652,8 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt) array.add(imposta,TAB11_EC206); } } - +*/ +// fine x13 if (tipoes_v == "24") array.add(imponibile,TAB11_EC107); if (tipoes_v == "21") @@ -1751,9 +1764,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) TString16 codiva, reg, tiva; TString16 tpla, tvia; TString16 v11, a11; + TToken_string tt("",'!'); tiporeg treg; int tipocr,tipodet,tagr; - real aliq, imp, iva, vtot, atot, ivav, ivaa; + real aliq, imp, iva, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v; TString16 cur_att; _BolgArray b_arr; const bool is_key = _iva11_arr.is_key(codatt); @@ -1862,7 +1876,45 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt) else if (v11 == "R9") // Divenuto obsoleto prima ancora di utilizzarlo... array.add(imp,TAB11_R9,LF_TAB1100B); - + if ((_isagricolo && tagr==2) || !_isagricolo) + { + tt = _pim->get("S0"); + a13i = tt.get(0); + a13v = tt.get(1); + adf = imp - _pim->get_real("R7") - a13i; + adi = iva - _pim->get_real("R8") - a13v; + if (aliq == 4.00) + { + array.add(adf,TAB11_EC101); + array.add(adi,TAB11_EC201); + } + else if (aliq == 9.00) + { + array.add(adf,TAB11_EC102); + array.add(adi,TAB11_EC202); + } + else if (aliq == 10.00) + { + array.add(adf,TAB11_EC103); + array.add(adi,TAB11_EC203); + } + else if (aliq == 13.00) + { + array.add(adf,TAB11_EC104); + array.add(adi,TAB11_EC204); + } + else if (aliq == 16.00) + { + array.add(adf,TAB11_EC105); + array.add(adi,TAB11_EC205); + } + else if (aliq == 19.00) + { + array.add(adf,TAB11_EC106); + array.add(adi,TAB11_EC206); + } + } + if (_isagricolo && (tagr == 1 || tagr == 3)) { if (aliq == 2.00) diff --git a/cg/cg4303.cpp b/cg/cg4303.cpp index 1a066d879..2ccb18a7b 100755 --- a/cg/cg4303.cpp +++ b/cg/cg4303.cpp @@ -6,17 +6,22 @@ #include "cg4300.h" -struct Annual_item : public TObject +class Annual_item : public TObject { - real imposta; - real imponibile; - TString codiva; - TString other; + real _imposta; + real _imponibile; + TString _codiva; + TString _other; +public: virtual TObject* dup() const { return new Annual_item(*this); } - Annual_item() { imposta = 0.0; imponibile = 0.0; codiva = ""; other = ""; } + real& imposta() { return _imposta;} + real& imponibile() { return _imponibile;} + TString& codiva() { return _codiva;} + TString& other() { return _other;} + Annual_item() { _imposta = 0.0; _imponibile = 0.0; _codiva = ""; _other = ""; } + virtual ~Annual_item() {} }; - void TLiquidazione_app::add_plafond(int month, const char* codatt, int type, real& howmuch, bool intra) { @@ -92,18 +97,51 @@ void TLiquidazione_app::zero_plafond (int month, const char* codatt) // ricalcolo dei corrispettivi void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) { - if (_corr_arr.items() == 0) return; + const int items = _corr_arr.items(); + if (items == 0) return; real imponibile,imposta; + // Nota: i commenti marcati con x13 indicano modifiche da rimuovere non appena implementato + // correttamente il mese 13 + // x13 + TString key; + bool is_key; + TAssoc_array corr_ann; // Contiene corrispettivi annuali (temporaneo, da rimuovere + // non appena implementato correttamente il mese 13) + _CorrItem cx; + + // Se siamo in annuale non aggiornare i PIM/PAM/PLM dei mesi calcolati + if (_month == 13 && month < 13) return; + // fine x13 // ricalcola (solo per il mese in corso!) operando sull'array - for (int i = 0; i < _corr_arr.items(); i++) + for (int i = 0; i < items; i++) { _CorrItem* ci = (_CorrItem*)&_corr_arr[i]; + // Se e' annuale memorizza in un assoc_array i corrispettivi annuali + // memorizza per attivita'+registro+codiva+tipodet + // x13 + if (month == 13) + { + key = ci->_codiva; + is_key = corr_ann.is_key(key); + cx._totale = 0; + _CorrItem& ca = is_key ? (_CorrItem&) corr_ann[key] : cx; + ca._totale += ci->_totale; + if (!is_key) // se non c'e' lo aggiunge + { + ca._aliquota = ci->_aliquota; + ca._codreg = ci->_codreg; + ca._tipodet = ci->_tipodet; + corr_ann.add(key,ca); + } + continue; + } + // fine x13 + if (ci->_month != month || ci->_codatt != codatt) continue; - lordo2netto(ci->_totale, imponibile, imposta, ci->_aliquota); - + // aggiusto l'IVA vendite nei plm look_plm(month, codatt); real ive = _plm->get_real("R0"); @@ -124,8 +162,41 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) _pim->put("R0", imponibile); _pim->put("R1", imposta); _pim->rewrite(); - - } + } + // Dopo aver calcolato la somma dei corrispettivi annualmente, li scorpora + // x13 + if (month == 13) + { + real imp,iva,imp1,iva1; + _CorrItem* cc; + // Per le prossime scritture uso impropriamente il mese 12, lo so e' terribile... + // ma non appena possibile il mese 13 sara' disponibile tutto sara' piu' bello. + for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item()) + { + lordo2netto(cc->_totale, imp, iva, cc->_aliquota); + imponibile += imp; + imposta += iva; + look_pim(12, codatt, cc->_codreg, "", corr_ann.get_hashobj()->key(), cc->_tipodet, TRUE); + imp1 = _pim->get_real("R0"); + iva1 = _pim->get_real("R1"); + imp1 += imp; + iva1 += iva; + _pim->put("R0",imp1); + _pim->put("R1",iva1); + _pim->rewrite(); + } + look_plm(12, codatt); // Aggiorna l'iva vendite in PLM... + real ive = _plm->get_real("R0"); + ive += imposta; + _plm->put("R0",ive); + // ed il volume d'affari in PAM + real vaf = _pam->get_real("R1"); + vaf += imponibile; + _pam->put("R1",vaf); + _plm->rewrite(); + _pam->rewrite(); + } + // fine x13 } // ricalcolo della malefica ventilazione @@ -258,10 +329,10 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) if (is_annual) { // memorizza i dati della ventilazione annuale in un TArray - a_item.imposta = imposta; - a_item.imponibile = imponibile; - a_item.codiva = vv->_codiva; - a_item.other = vv->_other; + a_item.imposta() = imposta; + a_item.imponibile() = imponibile; + a_item.codiva() = vv->_codiva; + a_item.other() = vv->_other; annual_vent.add(a_item); continue; } else if (_month != 13) @@ -310,8 +381,8 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) for (i = 0; i < a_items; i++) { Annual_item& item = (Annual_item&) annual_vent[i]; - TDistrib imp_s(item.imponibile,ROUND_LIRA); - TDistrib iva_s(item.imposta,ROUND_LIRA); + TDistrib imp_s(item.imponibile(),ROUND_LIRA); + TDistrib iva_s(item.imposta(),ROUND_LIRA); tot_imp = 0.0; tot_iva = 0.0; for (j = 0; j < slices; j++) { @@ -325,9 +396,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) tot_imp += imp_fetta; tot_iva += iva_fetta; // Serve per eventuali perdite di lirette... if (j == (slices - 1)) { - delta = item.imponibile - tot_imp; + delta = item.imponibile() - tot_imp; if (!delta.is_zero()) imp_fetta += delta; // Aggiusta l'ultima fetta(IVA e IMPONIBILE) - delta = item.imposta - tot_iva; // per eventali perdite di lire nella ripartizione + delta = item.imposta() - tot_iva; // per eventali perdite di lire nella ripartizione if (!delta.is_zero()) iva_fetta += delta; } // aggiusto l'IVA vendite nei plm @@ -342,20 +413,20 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) _pam->put("R1", vaf); _pam->rewrite(); // Aggiorno i luridi pim - bool was = look_pim(vi->_month, codatt, vi->_codreg, "0", item.codiva, vi->_tipodet, TRUE); + bool was = look_pim(vi->_month, codatt, vi->_codreg, "0", item.codiva(), vi->_tipodet, TRUE); imp_fetta += _pim->get_real("R0"); iva_fetta += _pim->get_real("R1"); _pim->put("R0", imp_fetta); _pim->put("R1", iva_fetta); - _pim->put("S4", item.other); + _pim->put("S4", item.other()); // segnale per comodita' in stampa prospetto _pim->put("B1","X"); // se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso // viene amorosamente messo a quanto il codice IVA prevede if (!was) { - look_iva(item.codiva); + look_iva(item.codiva()); _pim->put("I1", (long)vendita); if (!_iva->get_bool("B4")) _pim->put("B3", "X"); } diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index 307e41f86..6d8e64e54 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -921,7 +921,6 @@ 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) {