From 59acd28d417f3847f79a4d97f3a4a84033b1eb5d Mon Sep 17 00:00:00 2001 From: villa Date: Thu, 12 Jan 1995 11:36:08 +0000 Subject: [PATCH] Corretti diversi cazzaroli git-svn-id: svn://10.65.10.50/trunk@855 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg4300.h | 2 +- cg/cg4301.cpp | 138 ++++++++++++++++++++++++++++++++++++-------------- cg/cg4302.cpp | 39 +++++++++++--- cg/cg4303.cpp | 9 ++-- cg/cg4304.cpp | 68 ++++++++++++++++++++----- 5 files changed, 194 insertions(+), 62 deletions(-) diff --git a/cg/cg4300.h b/cg/cg4300.h index ccf656a9b..9334b82a5 100755 --- a/cg/cg4300.h +++ b/cg/cg4300.h @@ -282,7 +282,6 @@ public: virtual bool user_destroy(); virtual bool set_print(int i); - // cazzatelle per handlers TArray_sheet* get_ditte_sheet() { return _ditte; } TBit_array& get_selected() { return _selected; } @@ -386,6 +385,7 @@ public: // tutti i controlli del mondo sui mesi da calcolare static bool is_trim (int x); + static bool is_in_trim (int x, int t); bool is_month_ok (int x, int month = -1); bool is_date_ok (TDate& d, int month); bool is_first_month (int m); diff --git a/cg/cg4301.cpp b/cg/cg4301.cpp index 83f2b82e0..35a9fccfe 100755 --- a/cg/cg4301.cpp +++ b/cg/cg4301.cpp @@ -11,6 +11,9 @@ // -------------------- QUI comincia l'avventura -------------------------- +// che nel gennaio 1995 non solo non e' finita, ma si fa +// ogni giorno piu' odiosa e nevrastenica + bool TLiquidazione_app::recalc_all() { _prind = new TProgind(_selected.ones()*2, _printonly ? @@ -169,12 +172,10 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) _isviaggio = _nditte->curr(LF_ATTIV).get_bool("REG74TER"); _isagricolo = _nditte->curr(LF_ATTIV).get_bool("REGAGR"); _isbenzinaro = _nditte->curr(LF_ATTIV).get_bool("ART74/4"); - // _freqviva = look_lia() ? _lia->get("S7") : _nditte->curr().get("FREQVIVA"); bool mens = _freqviva == "M"; _isannual = (_month == 12 && !mens && !_isbenzinaro) || - (_month == 13 && (mens || _isbenzinaro)); - _isriepilogo = _month == 13; - + (_month == 13 && (mens || _isbenzinaro)); + _isriepilogo = _month == 13; _isvent = FALSE; for (_reg->first(); !_isvent && _reg->good(); _reg->next()) @@ -212,7 +213,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc) while (_nditte->next_match(LF_ATTIV)); // se quater stampa riepilogo - if (/* atts.items() > 1*/ quater && month == _month) + if (quater && month == _month) describe_att(month,atts); // occorre poterla chiamare altre volte con mesi diversi @@ -403,6 +404,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) bool intra = _rmoviva->get_bool("INTRA"); int tipoatt = _rmoviva->get_int("TIPOATT"); int rigaimp = _rmoviva->get_int("RIGAIMP"); + // autofatture art. 17 per non residenti, con trattamento + // speciale in liquidazione annuale + bool autodafe = (tipodoc == "AF" && tipocr == 4); + + /* + * puo' capitare per flags prassiani + * SENSU Sergio 1995, Guido + */ + if (tipoatt == 0) tipoatt = 1; if(tipoatt != tipatt) continue; @@ -421,10 +431,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) totintra += imposta; // Altre cose di cui tener conto - if (tipomov == acquisto && (tipocr == 1 || tipocr == 5) - && _isricacq) - // Acquisto beni per rivendita (solo se l'apposito parametro ditta - // e' settato) + 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()) + */ { acq_riv += imponibile; acq_riv_iva += imposta; @@ -444,7 +457,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) ult_detr += imponibile * real(DETRAZIONE_6PERCENTO); } else if (tipomov == vendita && tipocr == 4) - // Vendite strum. art 17 (cess. amm.???) + // Vendite strum. art 17 (cess. amm.) + // anche autofatture e anche nell'annuale + // (Sergio 1995) { cess_amm += imponibile; cess_amm_iva += imposta; @@ -461,11 +476,24 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) spgen += imponibile; spgen_iva += imposta; } - + // operazioni per calcolo rimborso infracazzuale - if ((tipoiva == "ES" || tipoiva == "NI") && ivarimb) - { - for_rimb += imponibile; + if (tipomov == acquisto && + (tipoiva == "ES" || tipoiva == "NI") && + ivarimb) + { + /* + * solo determinati tipi costo (Scudler 1995) + */ + if (tipocr == 0 || tipocr == 1 || tipocr == 5) + { + /* + * se agricolo, vale solo se tipoagr == 2 + * cfr. disegnini Scudler 1995 + */ + if (!_isagricolo || (_isagricolo && tipoagr == 2)) + for_rimb += imponibile; + } } // operazioni esenti @@ -491,11 +519,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) } // plafond - if (_isplafond && tipomov == acquisto && + if (_isplafond && tipomov == acquisto && !_isannual && tipoiva == "NI" && tipopla != 0) { add_plafond(month, codatt, tipopla, imponibile, tipodoc == "BD"); } + // agenzie viaggio (CHECK imponibili etc.) if (_isviaggio) switch (tipoag) @@ -556,22 +585,34 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) look_pim(month, codatt, reg, tipocr_s, codiva, tipodet, TRUE); - // se liq == FALSE gli importi non contano ai fini - // del calcolo liquidazione + /* + * se liq == FALSE gli importi non contano ai fini + * del calcolo liquidazione + */ bool liq = !(tipodet == 1 || tipodet == 3 || tipodet == 9); real imp = _pim_r->get_real("R0"); // imponibile real ivp = _pim_r->get_real("R1"); // IVA su imp. - real lor = _pim_r->get_real("R2"); // lordo - // le maledette fatture con scontrino sono sul registro dei - // corrispettivi, ma vanno riportate nelle vendite in stampa; - // dunque, le sommiamo in R5 e R6 di PIM anche se continuiamo - // a riportare il totale in R0 e R1. La stampa (describe_pim) - // dovra' scorporare + real lor = _pim_r->get_real("R2"); // lordo + /* + * le maledette fatture con scontrino sono sul registro dei + * corrispettivi, ma vanno riportate nelle vendite in stampa; + * dunque, le sommiamo in R5 e R6 di PIM anche se continuiamo + * a riportare il totale in R0 e R1. La stampa (describe_pim) + * dovra' scorporare + */ real ifs = _pim_r->get_real("R5"); // imponibile fatture con scontrino real vfs = _pim_r->get_real("R6"); // IVA fatt. con scontrino + /* + * le maledette autofatture non residenti art. 17 + * vedi al calcolo if (autodafe) + */ + real adf = _pim_r->get_real("R7"); + real adi = _pim_r->get_real("R8"); - if (liq && tipomov == vendita && !corrisp) // i corrispettivi sono gestiti a parte + + if (liq && tipomov == vendita && !corrisp) + // i corrispettivi sono gestiti a parte { // totale vendite vendite += imponibile; @@ -652,12 +693,29 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) ivp += imposta; _pim_r->put("I0",NETTO); } + + if (autodafe) + { + /* + * Si devono riportare a parte in annuale + * e non comparire nel riepilogo del codice IVA + * corrispondente, solo se la liq. e' annuale + * Li metto in S0 di pim (imp|iva) e li sommo anche nelle + * vendite; la describe_pim() dovra' sommarli su tutti i + * pim, scorporarli dalle vendite corrispondenti + * e assegnarli al codice IVA A35 in caso di liq. annuale + */ + adf += imponibile; + adi += imposta; + } _pim_r->put("R0",imp); _pim_r->put("R1",ivp); _pim_r->put("R2",lor); _pim_r->put("R5",ifs); _pim_r->put("R6",vfs); + _pim_r->put("R7",adf); + _pim_r->put("R8",adi); _pim->rewrite(); } while (_cur->next_match(LF_RMOVIVA)); @@ -673,13 +731,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) prorata = acquisti_iva * (_prorata / CENTO); prorata.round(ROUND_LIRA); } - look_plm(month, codatt, TRUE); - - // ACHTUNG: l'iva sulle vendite e' calcolata sommando anche i - // corrispettivi; non tiene conto quindi delle imposte calcolate - // con la ventilazione (che vanno sottratte) ne' di quelle - // calcolate per le agenzie di viaggio (che sembra non vadano - // sottratte per il calcolo del volume di affari) + look_plm(month, codatt, TRUE); + + /* + * ACHTUNG: l'iva sulle vendite e' calcolata sommando anche i + * corrispettivi; non tiene conto quindi delle imposte calcolate + * con la ventilazione (che vanno sottratte) ne' di quelle + * calcolate per le agenzie di viaggio (che sembra non vadano + * sottratte per il calcolo del volume di affari) + */ _plm->put("R2", prorata); @@ -691,16 +751,18 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) _plm->put("R8", acq_noCEE); _plm->put("R9", corr_misCEE); _plm->put("R10",acq_misCEE); - _plm->put("R11",acq_misnoCEE); - // calcola base da base e credito di costo - // indi abilmente trova il codiva e calcola l'iva del caso + _plm->put("R11",acq_misnoCEE); + + /* + * calcola base da base e credito di costo + * indi abilmente trova il codiva e calcola l'iva del caso + */ real rip = acq_misCEE / (acq_misCEE + acq_misnoCEE); real corr_imp = corr_misCEE * rip; corr_imp.round(ROUND_LIRA); corr_imp += corr_CEE; real cost_detr = acq_misCEE * acq_CEE; real base_imp = corr_imp - (cost_detr + credito_costo_prec(month, codatt)); - real debito = 0.0; if (base_imp.sign() < 0) @@ -735,7 +797,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt) acquisti_iva -= (agr_acq + leasing_iva + ammort_iva + ammort_6_iva); vendite_iva -= (agr_ven + agr_conf + agr_acc); } - // COSA MI TOCCA FARE + + // COSA MI TOCCA FARE (per campare, of course) + // due numeri nello stesso campo TToken_string s(40); _plm->put("R0", vendite_iva); @@ -831,7 +895,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts) } } // toglie credito precedente decrementato di ev. rimborsi chiesti - // e acconto versato e rettifiche a debito + // e acconto versato e rettificato come da manuale risultato -= credito_prec(month); ris_cred += credito_prec(month); diff --git a/cg/cg4302.cpp b/cg/cg4302.cpp index e3bb58390..ef45c639d 100755 --- a/cg/cg4302.cpp +++ b/cg/cg4302.cpp @@ -13,6 +13,28 @@ bool TLiquidazione_app::is_trim(int x) // TRUE se il mese passato e' un trimestre { return x == 3 || x == 6 || x == 9 || x == 12; } +bool TLiquidazione_app::is_in_trim(int x, int t) + // TRUE se il mese passato e' nel trimestre t +{ + bool ret = FALSE; + switch(t) + { + case 3: + ret = x >= 1 && x <= 3; + break; + case 6: + ret = x >= 4 && x <= 6; + break; + case 9: + ret = x >= 7 && x <= 9; + break; + case 12: + ret = x >= 10 && x <= 12; + break; + } + return ret; +} + bool TLiquidazione_app::is_month_ok(int x, int month) // TRUE se il mese passato e' compatibile con il regime // di liquidazione e (opz) non e' maggiore di quello scelto @@ -386,7 +408,8 @@ real TLiquidazione_app::credito_prec(int month) { if (_recalc != needed) { - describe_error("Ricalcolo non eseguito: possibili errori credito precedente","ALL"); + describe_error("Ricalcolo non eseguito: possibili errori " + "credito precedente","ALL"); } else { @@ -405,7 +428,8 @@ real TLiquidazione_app::credito_prec(int month) } look_lim(month); - if (c.sign() < 0) c = abs(c); else c = real(0.0); + if (c.sign() < 0) c = abs(c); + else c = real(0.0); return c; } @@ -426,11 +450,12 @@ real TLiquidazione_app::credito_costo_prec(int month, const char* codatt) { bool ok = look_lim(previous_month(month)); if (!ok || !_lim->get_bool("B0")) - { - if (_recalc != needed) - { - describe_error("Ricalcolo non eseguito: possibili errori credito di costo","ALL"); - } + { + if (_recalc != needed) + { + describe_error("Ricalcolo non eseguito: possibili errori " + "credito di costo","ALL"); + } else { // Super Prassi a questo punto vorrebbe una update_firm diff --git a/cg/cg4303.cpp b/cg/cg4303.cpp index 0a66b3657..29e5b344a 100755 --- a/cg/cg4303.cpp +++ b/cg/cg4303.cpp @@ -145,9 +145,12 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt) int mese = atoi(*_pim_mese); int tipodet = atoi(*_pim_tipodet); - // se non si e' settato il ricalcolo nei parametri ditta - // considera soltanto quelli con detraibilita' == 3 - // (passaggi interni) + /* + * se non si e' settato il ricalcolo nei parametri ditta + * considera soltanto quelli con detraibilita' == 3 + * (passaggi interni) + * sensu Scudler 1994 + */ if (!_isricacq && tipodet != 3) continue; diff --git a/cg/cg4304.cpp b/cg/cg4304.cpp index 34ed3796b..772f8b17a 100755 --- a/cg/cg4304.cpp +++ b/cg/cg4304.cpp @@ -319,7 +319,11 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) int last = _descr_arr.last(); bool isfirst = TRUE; real t0, t1, t2, t3, t4, t5; - + real autodafe, autodafe_iva; + + // descrittore riga autodafe' + _DescrItem* ads = NULL; + while ((tmpatt = atts.get()) != NULL) { TString att(tmpatt); @@ -398,11 +402,24 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) t1 += vfs; } else - { - d->_r0 += _pim->get_real("R0"); - d->_r1 += _pim->get_real("R1"); - t0 += _pim->get_real("R0"); - t1 += _pim->get_real("R1"); + { + real adf, adi; + + // si scorporano solo per l'annuale, altrimenti + // vengono normalmente considerati nelle vendite + if (_isannual) + { + adf = _pim->get_real("R7"); + adi = _pim->get_real("R8"); + } + + d->_r0 += _pim->get_real("R0") - adf; + d->_r1 += _pim->get_real("R1") - adi; + t0 += _pim->get_real("R0") - adf; + t1 += _pim->get_real("R1") - adi; + + autodafe += adf; + autodafe_iva += adi; } } if (isnew) @@ -420,6 +437,21 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) } } } + + if (autodafe.sign() > 0 || autodafe_iva.sign() > 0) + { + _DescrItem* ads = new _DescrItem(PIM_ROW); + ads->_s0 = ref; + ads->_s1 = "A35"; // cosi' vollero + ads->_r0 = autodafe; + ads->_r1 = autodafe_iva; + if (isfirst) + { + isfirst = FALSE; + ads->_f0 = TRUE; + } + _descr_arr.add(ads); + } // prepara una bella riga di totali if (!isfirst) { @@ -490,8 +522,9 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt) spgnvp += spgnv; // ... t->_s2 = spgnp.string(); // risbatto ... t->_s3 = spgnvp.string(); // .. - } - } + } // while (attivita') + } // for (mese ok) + // annual follows in _arr if ((_isannual || _isriepilogo) && ref != "ALL") { @@ -594,10 +627,11 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts, look_lia(); // r8 = acconto dicembre - d->_r8 = _lia->get_real("R4"); - + d->_r8 = _lia->get_real("R4"); // r9 = conguaglio prorata - d->_r9 = conguaglio; + d->_r9 = conguaglio; + // TBI ci vogliono tutti i versamenti effettuati + // presi dalle deleghe } // aggiunge eventuale satellite per rimborso infraannuale @@ -787,9 +821,15 @@ void TLiquidazione_app::set_plafond(_DescrItem& d) void TLiquidazione_app::set_pim(_DescrItem& d) { - look_iva(d._s1); - d._s2 = _iva->get("S0"); - + if (d._s1 == "A35") + { + d._s2 = "Artt.17c3/74c1"; + } + else + { + look_iva(d._s1); + d._s2 = _iva->get("S0"); + } if (d._f0) // e' il primo { // intestazioncina