Skudlerations

git-svn-id: svn://10.65.10.50/trunk@910 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-01-26 13:11:45 +00:00
parent 9fb1deb9da
commit fbe1a7d7f3
6 changed files with 316 additions and 195 deletions

View File

@ -172,7 +172,9 @@ class TLiquidazione_app : public TPrint_application
bool _isbenzinaro; // regime benzinaro
bool _isannual; // dichiarazione annuale
bool _mixed; // attivita' mista
bool _isriepilogo; // 13a liq
bool _isriepilogo; // 13a liq
bool _isannual_12; // annuale con mese = 12 (trimestre)
bool _isendliq; // annuale o riepilogo
bool _isservizio; // servizi, professionisti, artisti
bool _isrimborso; // vuole il rimborso infraannuale
bool _isricacq; // ricalcolo imposte acq. riv (par. ditta)
@ -302,6 +304,7 @@ public:
bool update_firm (int month, bool recalc = TRUE);
bool update_att (int month, const char* codatt, bool recalc = TRUE);
void zero_att (int month, const char* codatt);
void zero_annual (int month);
void recalc_att (int month, const char* codatt);
void recalc_annual (const char* codatt);
_DescrItem* recalc_rimborso(int month, const char* codatts);
@ -400,7 +403,8 @@ public:
static bool is_trim (int x);
// is_month_ok controlla che il mese passato sia
// da prendere in considerazione per la liquidazione
// controllando il regime trimestrale o mensile
// controllando il regime trimestrale o mensile e
// il ricalcolo annuale
bool is_month_ok(int x, int mtocalc);
// is_month_ok_strict controlla che il mese sia OK per la
// liquidazione, ma ritorna TRUE per le trimestrali solo
@ -408,8 +412,9 @@ public:
bool is_month_ok_strict(int x, int month = -1);
bool is_date_ok (TDate& d, int month);
bool is_first_month (int m);
int liq_month(int x);
int previous_month (int m);
bool check_month(int m, int mref);
// Funzioni accessorie: estrazione deleghe
bool set_deleghe();

View File

@ -38,26 +38,62 @@ bool TLiquidazione_app::recalc_all()
if (_selected[(long)l])
{
TToken_string& nomeditta = _ditte->row(l);
int save_month = _month;
/* -------------------------------------------------------------
* leggi parametri ditta necessari; stabilisci se annuale,
* se si' metti _month a 13
* istanzia _freqviva, _isbenzinaro, _isannual, _isriepilogo
* --------------------------------------------------------------
*/
_nditte->zero();
_nditte->curr().put("CODDITTA",nomeditta.get_long(1));
_nditte->read();
_nditte->read();
_freqviva = nomeditta.get(3);
bool mens = _freqviva == "M";
// determina attivita' prevalente e istanzia cazzuole
// per vedere che Kazzo di liquidazione calcolare
TString attprev = _nditte->curr().get("CODATTPREV");
TLocalisamfile& atts = _nditte->lfile(LF_ATTIV);
atts.zero();
atts.put("CODDITTA",nomeditta.get_long(1));
atts.put("CODATT", attprev);
if (atts.read() != NOERR) atts.zero();
// istanzia benzinaro
_isbenzinaro = atts.get_bool("ART74/4");
// riaggiusta relazione
_nditte->read();
// decidi per stocazzo di annuale
// per QUALSIASI annuale il mese diventa 13
_isannual = (_month == 12 && !mens && !_isbenzinaro) ||
(_month == 13 && (mens || _isbenzinaro));
_isriepilogo = _month == 13 && !mens;
if (_isannual) _month = 13; // che ti piaccia o no
TApplication::set_firm(nomeditta.get_long(1));
_prind->addstatus(1);
_freqviva = nomeditta.get(3);
/*
* trimestrali impropriamente selezionate per mesi intermedi
* provocano il ricalcolo dei progressivi mensili ma non la stampa
*/
_canprint = is_month_ok_strict(_month);
_canprint = is_month_ok_strict(_month) || _month == 13;
/* --------------------------------------------------------------
* Ricalcola i mesi necessari, tutti se annuale
* --------------------------------------------------------------
*/
int need_refresh = FALSE;
if (_recalc != ever)
{
for (int m = 1; m < _month; m++)
if (!look_lim(m) || !_lim->get_bool("B0"))
if (is_month_ok_strict(m) && (!look_lim(m) || !_lim->get_bool("B0")))
{
need_refresh = TRUE;
break;
@ -69,11 +105,10 @@ bool TLiquidazione_app::recalc_all()
_recalc = ever;
}
for (int m = 1; m <= _month; m++)
for (int m = 1; m <= _month; m++) // fino a 13 compreso
if (is_month_ok(m, _month) || _recalc == ever)
{
if (_prind->iscancelled())
break;
if (_prind->iscancelled()) break;
update_firm(m);
}
@ -81,11 +116,13 @@ bool TLiquidazione_app::recalc_all()
// flag 'calcolato' del primo, per causare il ricalcolo dei
// successivi (evitando problemi per credito precedente)
for (m = _month+1; m <= 13; m++)
if (is_month_ok_strict(m) && look_lim(m))
if ((is_month_ok_strict(m) || m == 13) && look_lim(m))
{
_lim->put("B0","");
break;
}
}
_month = save_month;
}
}
bool canc = _prind->iscancelled();
@ -105,7 +142,7 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// Ritorna FALSE soltanto se il ricalcolo era necessario e non e'
// stato effettuato per scelta dello stronzo commercialista.
look_lim(month, TRUE);
look_lim(liq_month(month), TRUE);
if (_isregis && _lim->get_bool("B1"))
return TRUE;
@ -115,7 +152,8 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
TConfig cnf1(CONFIG_STUDIO, "cg");
_isricacq = cnf1.get_bool("RicAcq");
// ricalcolo normale
// ricalcolo normale
// TBI lim c'e' solo per i trimestri
bool ok = _lim->get_bool("B0");
if (ok && !recalc) return TRUE;
bool calc = (_recalc == ever || (_recalc == one && month == _month));
@ -153,10 +191,10 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
for (int tipoatt = 1; tipoatt <= (_mixed ? 2 : 1); tipoatt++)
{
TString cattiv(codatt);
TString cattiv(codatt); bool waspla;
cattiv << tipoatt;
if (tipoatt == 1 && look_pla(cattiv, FALSE))
if (tipoatt == 1 && (waspla = look_pla(cattiv, FALSE)))
{
_p8 = _pla->get_real("R5");
_p8b = _pla->get_real("R6");
@ -165,27 +203,36 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
_isplafond = !(_p8.is_zero() && _p8b.is_zero() &&
_p9.is_zero());
_isservizio = _pla->get("S7") == "S";
_mixed = _pla->get("S7") == "M" || _pla->get("S7") == "E";
_mixed = _pla->get("S7") == "M" || _pla->get("S7") == "E";
}
else
_isservizio = _nditte->curr(LF_ATTIV).get("TIPOATT") == "S";
_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");
bool mens = _freqviva == "M";
_isannual = (_month == 12 && !mens && !_isbenzinaro) ||
(_month == 13 && (mens || _isbenzinaro));
_isriepilogo = _month == 13;
_isvent = FALSE;
if (tipoatt == 1 && waspla && month == 13)
{
// azzera pla dove serve
_pla->put("R0","");
_pla->put("R1","");
_pla->put("R2","");
_pla->put("R3","");
_pla->put("R4","");
_pla->put("S1","0|0");
_pla->put("S2","0");
_pla->put("S3","0");
_pla->rewrite();
}
for (_reg->first(); !_isvent && _reg->good(); _reg->next())
{
if (codatt == _reg->get("S8") && _reg->get_int("I0") == 2)
_isvent = _reg->get_bool("B3");
}
if ((month != 13 || _isannual) && (calc || !recalc))
if (calc || !recalc)
if (!update_att(month, cattiv))
describe_error("Attivita' non ricalcolate: possibili errori",
codatt);
@ -221,7 +268,8 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// aggiorna le liquidazioni
if (calc || !recalc)
write_liq(month, atts);
if (is_month_ok_strict(month) || month == 13)
write_liq(month, atts);
// rimborso infraannuale
_DescrItem* rimb_d = NULL;
@ -260,11 +308,16 @@ bool TLiquidazione_app::update_att(int month, const char* codatt,
{
zero_att(month,codatt);
recalc_att(month,codatt);
recalc_ventilation(month, codatt);
recalc_corrispettivi(month, codatt);
if (month == 13)
recalc_annual(codatt);
else
{
// nei PIM della 13a vanno solo alcune stranezze,
// mi rifiuto di pensare che vadano ventilate
// o corrispettivizzicizzate
recalc_ventilation(month, codatt);
recalc_corrispettivi(month, codatt);
}
}
return ok || calc;
}
@ -344,7 +397,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
for (; _cur->pos() < items; ++(*_cur))
{
TDate date(_mov_r->get("DATAREG"));
TString16 reg = _mov_r->get("REG");
TString16 reg = _mov_r->get("REG");
bool isreg = look_reg(_mov_r->get("REG"));
TString16 tipodoc = _mov_r->get("TIPODOC");
/*
@ -394,6 +447,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
TString codiva = _iva->get("CODTAB");
TString tipoiva = _iva->get("S1");
TString riga11_v = _iva->get("S0");
int tipoes_v = (int)_iva->get_long("I3");
int tipoes_a = (int)_iva->get_long("I4");
int tipoagr = atoi(_iva->get("S4"));
@ -410,7 +464,13 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
int rigaimp = _rmoviva->get_int("RIGAIMP");
// autofatture art. 17 per non residenti, con trattamento
// speciale in liquidazione annuale
bool autodafe = (tipodoc == "AF" && tipocr == 4);
bool autodafe = (tipodoc == "AF" && tipocr == 4);
// validi per calcolo volume di affari settano
// flag che va in B2 di pim
bool isvolaff = (tipomov == vendita && tipocr != 4 &&
tipoiva != "NS" && tipoiva != "ES" &&
!(tipoiva == "ES" &&
(riga11_v == "B3" || riga11_v.empty())));
/*
* puo' capitare per motivi brutalmente prassici
@ -427,17 +487,22 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if(rigaimp > 9) continue;
/*
* In liq. annuale si totalizzano nelle vendite
* In liq. annuale si totalizzano
* solo le stranezze che seguono
*/
if (month == 13 && tipomov == vendita &&
(!rcs.get_bool("AUTOFATT") && tipoiva != "NS"))
{
if (tipodoc == "AF" ||
(!rcs.get_bool("INTRACOM") && !rcs.get_bool("VALINTRA")))
continue;
}
if (month == 13)
{
// si contano soltanto le vendite.
bool okc = tipomov == vendita;
// purche' ...
bool cond1 = (rcs.get_bool("AUTOFATT") && tipoiva == "NS" && tipodoc == "AF");
// oppure ...
bool cond2 = (rcs.get_bool("AUTOFATT") && tipoiva == "NS" && tipodoc != "AF" &&
rcs.get_bool("INTRACOM") && rcs.get_bool("VALINTRA"));
if (!(okc && (cond1 || cond2)))
continue;
}
// *****************************************
// casi particolari
// *****************************************
@ -679,19 +744,19 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
*/
if (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC")
{
_pim_r->put("I0",LORDO);
// questi sono corrispettivi davvero; comportamento normale
if (tipoiva == "VE") // da ventilare
{
lor += imponibile;
_pim_r->put("I0",LORDO);
add_vendite(month, reg, tipodet, imponibile);
}
else // non da ventilare, con imposta gia' conteggiata
{
real perc = _iva->get_real("R0") / CENTO;
real perc = _iva->get_real("R0")/CENTO;
lor += imponibile + imposta;
_pim_r->put("I0",LORDO);
if (liq) add_corrisp(month, reg, imponibile, perc, tipodet, codiva);
if (liq)
add_corrisp(month, reg, imponibile, perc, tipodet, codiva);
}
}
else if (tipodoc == "FS")
@ -756,6 +821,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
adi += imposta;
}
_pim_r->put("B2",isvolaff);
_pim_r->put("R0",imp);
_pim_r->put("R1",ivp);
_pim_r->put("R2",lor);
@ -907,7 +973,14 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
real a_meCEE = 0.0;
real cred_cost = 0.0;
real deb_mens = 0.0;
real perc_r = 0.0;
real perc_r = 0.0;
// totali per annuali
real vol_aff_1 = 0.0;
real vol_aff_2 = 0.0;
real vol_aff_t = 0.0;
real vol_aff_l = 0.0;
real tot_cong = 0.0;
bool differita = FALSE;
int attc = 0; // counter attivita'
@ -953,7 +1026,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
}
else
{
for (int m = 1; m <= 12; m++)
for (int m = 1; m <= 13; m++)
{
// ciclo su tutti i mesi del caso (1 o 3;
// tutti se annuale)
@ -1012,8 +1085,8 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
// benzinaro le conta solo in annuale,
// non benzinaro solo in periodica
// TBC vedi se distinguere rett. benzinai / autotrasport,
if ((_isbenzinaro && month == 13) ||
(!_isbenzinaro && month < 13))
if ((_isbenzinaro && _isannual) ||
(!_isbenzinaro && !_isannual))
{
risultato += _lim->get_real("R5");
rettifiche += _lim->get_real("R5");
@ -1036,10 +1109,10 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
a_mCEE += _plm->get_real("R10");
a_meCEE += _plm->get_real("R11");
}
// counter attivita' per evitare troppi versamenti
attc++;
} // fine ciclo sul mese
}
} // fine ciclo sul mese
// counter attivita' per evitare troppi versamenti
attc++;
} // fine ciclo su attivita'
if (!(_isdifferita && is_first_month(month)))
{
@ -1091,6 +1164,77 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
res_cred += cred_prec;
}
}
if (month == 13)
{
// totalizza volumi affari e calcola nuovo prorata
// per tutte le attivita'
atts.restart();
while ((tmpatt = atts.get()) != NULL)
{
TString att(tmpatt);
int tipoatt = att[att.len() -1] - '0';
if (tipoatt == 1) // su PLA l'attivita' e' sempre 1
{
look_pla(att);
TToken_string tt(_pla->get("S1"));
real vf1(tt.get(0));
real vf2(tt.get(1));
real iaq(_pla->get("S2")); // IVA acquisti
real ppg(_pla->get("S3")); // pro-rata pagato
vol_aff_1 += vf1;
vol_aff_2 += vf2;
vol_aff_t = vf1 + vf2;
vol_aff_l += _pla->get_real("R0"); // volume affari lordo
real es_b1 = _pla->get_real("R1");
real es_b2 = _pla->get_real("R2");
real es_b3 = _pla->get_real("R3");
real csamm = _pla->get_real("R4");
// calcola nuovo prorata per ogni attivita' (miste: 1+2)
real ris = vol_aff_t + csamm + es_b3;
real prorata(0.0);
if (!ris.is_zero())
prorata = (es_b1/ris) * CENTO;
real conguaglio = 0.0;
prorata.round(-2);
if (prorata != _prorata)
{
// calcolo conguaglio -- se positivo e' a debito
real topay = iaq * (prorata / CENTO);
conguaglio = topay - ppg;
conguaglio.round(ROUND_LIRA);
}
_pla->put("R9", conguaglio);
_pla->put("R10",prorata);
tot_cong += conguaglio;
_pla->rewrite();
// scrivi nuovo prorata in tabella anno successivo
TString yr = _year;
_year = format("%d", atoi(_year) + 1);
look_pla(att, TRUE);
_pla->put("R8", prorata);
_pla->rewrite();
_year = yr;
}
}
look_lia();
_lia->put("R1", vol_aff_l);
_lia->put("R2", vol_aff_1);
_lia->put("R3", vol_aff_2);
_lia->put("R4", acc_dec);
_lia->put("R5", cred_cost);
_lia->rewrite();
}
// comprende anche il conguaglio prorata
risultato += tot_cong;
if (tot_cong.sign() > 0) res_debt += tot_cong;
if (tot_cong.sign() < 0) res_cred += tot_cong;
look_lim(month,TRUE);
// azzeriamo tutto
@ -1110,10 +1254,13 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
(month >= 12 && _freqviva == "M"))
{
risultato -= versamenti_IVA(12,"7");
acc_dec = versamenti_IVA(12,"7");
acc_dec = versamenti_IVA(12,"7");
res_cred += acc_dec;
}
risultato.round(month == 13 ? ROUND_MILLELIRE : ROUND_LIRA);
// in annuale si arrotondera' a 1000 in stampa
// se no il conguaglio prorata fa casino
risultato.round(ROUND_LIRA);
_lim->put("R0",risultato);
_lim->put("R2",cred_cost);
@ -1135,7 +1282,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
* non benzinari
*/
if (_freqviva == "T" && risultato.sign() > 0 &&
month < 12 && !_isbenzinaro)
month < 13 && !_isbenzinaro)
{
real interesse = interesse_trimestrale(_month);
real ivi = risultato * (interesse / CENTO);
@ -1148,7 +1295,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
_lim->put("R9", vers_int);
// scrivi: totali IVA vendite e acquisti, credito prec,
// debito prec, acconto
// debito prec, acconto, totale conguaglio prorata
// cosi' si fa una volta sola in stampa
tt = iva_vend.string(); tt.add(iva_acq.string());
@ -1158,109 +1305,94 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
tt = cred_prec.string(); tt.add(debt_precd.string());
_lim->put("S2", tt);
tt = acc_dec.string();
_lim->put("S3", tt);
_lim->put("S3", tt);
// totale conguaglio su tutte le attivita'
_lim->put("S4", tot_cong.string());
_lim->put("B0","X");
if (_isfinal)
_lim->put("B1", "X");
_lim->rewrite();
_lim->rewrite();
}
void TLiquidazione_app::recalc_annual(const char* att)
{
// calcolo volume d'affari e altro
// TBI/C: volume d'affari separato per
// le eventuali 2 attivita'
// viene chiamata 2 volte per le att. miste; PLA e' stata
// azzerata dove serve da update_firm se siamo all'annuale
real es_b1 = 0.0;
real es_b2 = 0.0;
real es_b3 = 0.0;
real cess_amm = 0.0;
real vendite = 0.0;
real pro_pag = 0.0;
real acq_iva = 0.0; // per conguaglio prorata
real acq = 0.0;
real ivlac = 0.0;
real ivven = 0.0;
real ven_lrd = 0.0;
real iva_acq = 0.0;
real ven_lrd = 0.0;
real volaff1 = 0.0;
real volaff2 = 0.0;
int tipoatt = att[strlen(att) -1] - '0';
TString aaa(att);
if (tipoatt == 2)
{
// istanzia ai valori precedenti, calcolati per l'attivita' 1
// look_pla forza a 1 il tipo attivita' (un solo pla per anno)
if (look_pla(aaa))
{
vendite = _pla->get_real("R0");
es_b1 = _pla->get_real("R1");
es_b2 = _pla->get_real("R2");
es_b3 = _pla->get_real("R3");
cess_amm = _pla->get_real("R4");
ivven = _pla->get_real("R11");
ivlac = _pla->get_real("R12");
ven_lrd = _pla->get_real("R13");
acq = _pla->get_real("R14");
}
}
look_pla(aaa);
TToken_string tt(_pla->get("S1"));
volaff1 = tt.get(0);
volaff1 = tt.get(1);
vendite = _pla->get_real("R0");
es_b1 = _pla->get_real("R1");
es_b2 = _pla->get_real("R2");
es_b3 = _pla->get_real("R3");
cess_amm = _pla->get_real("R4");
pro_pag = (const char*)_pla->get("S3");
iva_acq = (const char*)_pla->get("S2");
for (int i = 1; i <= 12; i++)
// 1) Calcola volume di affari dai PIM, controllando il
// flag B2 settato da update_att per i progressivi che
// entrano nel calcolo
for (_pim->first(); !_pim->eof(); _pim->next())
{
// ricalcola se necessario
if (i != 12 && !update_att(i,aaa,FALSE))
describe_error("Attivita' non ricalcolata: "
"possibili errori",att);
look_ptm(i,aaa); look_plm(i,aaa);
if (_year != (const char*)_pim_anno || aaa != (const char*)_pim_codatt)
continue;
if (_pim->get_bool("B2"))
{
if (tipoatt == 1) volaff1 += _pim->get_real("R0");
else volaff2 += _pim->get_real("R0");
}
}
// 2) calcola esenti, cessioni, lordo vendite, prorata pagato
// e IVA acquisti dai plm/ptm
for (int i = 1; i <= 13; i++)
{
if (!look_ptm(i,aaa) || !look_plm(i,aaa))
continue;
// vendite lorde; sa la madonna a cosa servono
real vend(_ptm->get("S3"));
ven_lrd += vend; // lordo vendite
// non entra l'IVA per calcolo volume affari
vendite += (vend - _plm->get_real("R0"));
ven_lrd += vend;
iva_acq += _plm->get_real("R1");
real eb3(_ptm->get("S0"));
es_b1 += _ptm->get_real("R13");
es_b2 += _ptm->get_real("R14");
es_b3 += eb3;
acq_iva += _plm->get_real("R1");
cess_amm += _ptm->get_real("R10");
pro_pag += _plm->get_real("R2");
real aax(_ptm->get("S2"));
acq += aax - // rilevanti per aliquota media
_ptm->get_real("R3") - // toglie ammortizz. etc
_ptm->get_real("R5") - // non detraibili non ci sono
_ptm->get_real("R8");
ivlac += _plm->get_real("R1") - // idem per IVE
_ptm->get_real("R4") -
_ptm->get_real("R9") -
_ptm->get_real("R12");
ivven += _plm->get_real("R0");
}
// calcolo prorata
real prorata = (es_b1/(vendite - cess_amm - es_b3)) * CENTO;
real conguaglio = 0.0;
prorata.round(ROUND_LIRA);
if (prorata != _prorata)
{
// calcolo conguaglio -- se positivo e' a debito
real topay = acq_iva * (prorata / CENTO);
conguaglio = topay - pro_pag;
}
look_pla(aaa);
_pla->put("R0", vendite);
_pla->put("R1", es_b1);
_pla->put("R2", es_b2);
_pla->put("R3", es_b3);
_pla->put("R4", cess_amm);
_pla->put("R9", prorata);
_pla->put("R10", conguaglio);
_pla->put("R11", ivven);
_pla->put("R12", ivlac);
_pla->put("R13", ven_lrd);
_pla->put("R14", acq);
tt = volaff1.string(); tt.add(volaff2.string());
_pla->put("R0", ven_lrd);
_pla->put("R1", es_b1);
_pla->put("R2", es_b2);
_pla->put("R3", es_b3);
_pla->put("R4", cess_amm);
_pla->put("S1", tt);
_pla->put("S2", iva_acq.string());
_pla->put("S3", pro_pag.string());
_pla->rewrite();
}

View File

@ -10,7 +10,7 @@
#include "cg4300.h"
bool TLiquidazione_app::is_trim(int x)
// TRUE se il mese passato e' un trimestre
// TRUE se il mese passato e' un trimestre
{ return x == 3 || x == 6 || x == 9 || x == 12; }
bool TLiquidazione_app::is_month_ok_strict(int x, int month)
@ -24,15 +24,15 @@ bool TLiquidazione_app::is_month_ok_strict(int x, int month)
}
bool TLiquidazione_app::is_month_ok(int x, int mtocalc)
// TRUE se il mese passato e' compatibile con il mese da calcolare
// rispetto al regime di liquidazione scelto
// TRUE se il mese passato e' compatibile con il mese da calcolare
// rispetto al regime di liquidazione scelto
{
bool ret = x == mtocalc;
if (!ret && _freqviva == "T" && mtocalc != 13)
{
// aggiusta al trimestre il mese da calcolare
mtocalc += 2 - ((mtocalc-1) % 3);
ret = x >= (mtocalc - 3) && x <= mtocalc;
ret = x > (mtocalc - 3) && x <= mtocalc;
}
else if (!ret && mtocalc == 13)
{
@ -42,6 +42,14 @@ bool TLiquidazione_app::is_month_ok(int x, int mtocalc)
return ret;
}
int TLiquidazione_app::liq_month(int x)
// ritorna il mese da liquidare (= LIM presente)
// che corrisponde al mese passato
{
if (x == 13 || _freqviva == "M")
return x;
else return x + (2 - ((x-1) % 3));
}
bool TLiquidazione_app::is_first_month(int m)
{
@ -51,32 +59,22 @@ bool TLiquidazione_app::is_first_month(int m)
int TLiquidazione_app::previous_month(int m)
{
if (m == 13) m = 12;
// vale per LIM (mese o trimestre precedente)
if (_freqviva == "M")
return m == 1 ? 1 : m - 1;
else return m == 3 ? 3 : m - 3;
}
bool TLiquidazione_app::check_month(int m, int m2)
// se si sta ricalcolando una liquidazione
// annuale di check, ritorna TRUE per tutti i
// mesi, altrimenti solo per quello in corso
// di calcolo
{
return (_isannual || _isriepilogo) ? m < 13 : m == m2;
}
bool TLiquidazione_app::is_date_ok(TDate& d, int month)
// TRUE se la data (di mov o pim) passata va considerata nel
// ricalcolo dei progressivi mensili per il mese e anno
// selezionati; se month == 13 vanno bene tutte purche'
// sia giusto l'anno
{
if (month == 13)
return month < 13 && d.year() == atoi(_year);
else if (d.month() > month || d.year() != atoi(_year))
if (d.month() > month || d.year() != atoi(_year))
return FALSE;
else return d.month() == month;
if (month == 13) return d.month() <= month;
else return d.month() == month;
}
@ -366,13 +364,13 @@ bool TLiquidazione_app::look_lia(bool create, int year)
real TLiquidazione_app::result_liq(int month)
// risultato esatto della liquidazione del mese month, <0 a credito
// > 0 a debito; non comprende il conguaglio prorata (annuale)
// > 0 a debito; comprende TUTTI, anche il conguaglio prorata in annuale
{
real r(0.0);
// ulteriori detrazioni, acconti, versamenti,
// rettifiche sono gia' comprese in R0
if (look_lim(month))
r = _lim->get_real("R0");
r = _lim->get_real("R0");
return r;
}
@ -400,6 +398,7 @@ real TLiquidazione_app::credito_prec(int month)
if (is_first_month(month))
{
// credito inizio anno
if (look_lia())
c = _lia->get_real("R0");
// e' positivo o 0

View File

@ -104,9 +104,6 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
imposta += _pim->get_real("R1");
_pim->put("R0", imponibile);
_pim->put("R1", imposta);
// segnale per comodita'
_pim->put("B1","X");
_pim->rewrite();
}
}
@ -155,8 +152,7 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
continue;
TString att(codatt);
if (tipocr == 1 && mese == m &&
att == (const char*)(*_pim_codatt))
if (tipocr == 1 && mese == m && att == (const char*)(*_pim_codatt))
{
look_iva(*_pim_codiva);
@ -243,4 +239,4 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
_ptm->put("S4",totacq.string());
_ptm->put("S5",totven.string());
_ptm->rewrite();
}
}

View File

@ -82,7 +82,7 @@ void TLiquidazione_app::describe_att(int month, const char* codatt, bool isresul
describe_agricolo(month, codatt);
if (atts.items() == 1 && _isviaggio)
describe_viaggio(month, codatt);
if (isresult || _isannual)
if (isresult || month == 13)
describe_pims(month,codatt);
if (atts.items() == 1)
describe_consistence(codatt);
@ -161,8 +161,6 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt)
{
if (!_isvent) return;
if (_isriepilogo || _isannual) month = 12;
_DescrItem* d = new _DescrItem(VENTILA);
TString att(codatt);
@ -352,8 +350,8 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
_pim->get_real("R2").is_zero())
continue;
if (strcmp((const char*)*_pim_codatt, att) == 0 &&
(is_month_ok(atoi(*_pim_mese),month) || _isannual) &&
if (strcmp((const char*)*_pim_codatt, att) == 0 &&
(is_month_ok(atoi(*_pim_mese),month)) &&
_year == (const char*)*_pim_anno)
{
// vedi se c'e' gia' un item corrispondente
@ -423,7 +421,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
// si scorporano solo per l'annuale, altrimenti
// vengono normalmente considerati nelle vendite
if (_isannual)
if (month == 13)
{
adf = _pim->get_real("R7");
adi = _pim->get_real("R8");
@ -475,7 +473,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
for (int m = 1; m <= month && m < 13; m++)
{
if (!is_month_ok(m,month) && !(_isannual || _isriepilogo)) continue;
if (!is_month_ok(m,month)) continue;
atts.restart();
while ((tmpatt = atts.get()) != NULL)
@ -536,26 +534,28 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
} // for (mese ok)
// annual follows in _arr
if ((_isannual || _isriepilogo) && ref != "ALL")
if (month == 13 && ref != "ALL")
{
// tutte quelle cose che vanno alla liquidazione annuale, come il
// calcolo del prorata o del nuovo plafond o ....
if (look_pla(codatt))
{
real v = _pla->get_real("R0");
{
TToken_string tt(_pla->get("S1"));
real v1 = tt.get(0); real v2 = tt.get(1);
real v = v1 + v2;
real e1 = _pla->get_real("R1");
real e2 = _pla->get_real("R2");
real e3 = _pla->get_real("R3");
real am = _pla->get_real("R4");
real pr = _pla->get_real("R9");
real co = _pla->get_real("R10");
real pr = _pla->get_real("R10");
real co = _pla->get_real("R9");
_DescrItem* dd = new _DescrItem(ANNUAL);
// prorata
if (!_prorata.is_zero())
dd->_f0 |= IS_PRORATA;
dd->_r0 = v - am - e3;
dd->_r0 = v;
dd->_r1 = e1;
dd->_r2 = pr;
dd->_r3 = co;
@ -594,18 +594,10 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts,
d->_s2 = _lim->get("S2");
d->_s3 = _lim->get("S3");
d->_r11 = (const char*)_lim->get("R10"); // tasso di interesse
real cong(_lim->get("S4")); // totale conguaglio prorata
d->_r10 = cong;
if (month == 13)
{
TToken_string a(codatts);
for (int i = 0; i < a.items(); i++)
{
TString att = a.get();
look_pla(att);
// r10 = conguaglio prorata
d->_r10 += _pla->get_real("R10");
}
}
// aggiunge eventuale satellite per rimborso infraannuale
if (di != NULL) d->_arr.add(di);
@ -974,6 +966,7 @@ void TLiquidazione_app::set_grand(_DescrItem& d)
real& interessi = d._r7;
real& versamenti = d._r8;
real& vers_int = d._r9;
real& conguaglio = d._r10;
TToken_string tt(d._s0);
real iva_vend(tt.get(0));
real iva_acq(tt.get(1));
@ -1003,12 +996,9 @@ void TLiquidazione_app::set_grand(_DescrItem& d)
_is_visliq ? "$[r]" : "", &rimborso);
// conguaglio prorata
if (d._r10.sign() > 0)
if (conguaglio.sign() > 0)
{
real r = abs(d._r10);
set_row(rw++,"@11gConguaglio pro-rata@75g%r", &r);
res_debt += d._r10;
risultato += d._r10;
set_row(rw++,"@11gConguaglio pro-rata@75g%r", &conguaglio);
}
// debito liq. precedente < 50000
@ -1043,12 +1033,9 @@ void TLiquidazione_app::set_grand(_DescrItem& d)
set_row(rw++,"@11gVersamenti integrativi@58g%r", &vers_int);
}
if (d._r10.sign() < 0)
{
real r = abs(d._r10);
set_row(rw++,"@11gConguaglio pro-rata@58g%r", &r);
res_cred += d._r10;
risultato -= d._r10;
if (conguaglio.sign() < 0)
{
set_row(rw++,"@11gConguaglio pro-rata@58g%r", &conguaglio);
}
set_row(rw++,"@11gRISULTATO@58g%r", &res_cred);
@ -1060,12 +1047,14 @@ void TLiquidazione_app::set_grand(_DescrItem& d)
{
if (risultato.sign() < 0)
{
real iva = abs(risultato);
real iva = abs(risultato);
if (_isannual || _isriepilogo) iva.round(ROUND_MILLELIRE);
set_row(rw++,"@23gCREDITO ATTUALE@58g%r",&iva);
}
else
{
real iva = risultato + interessi;
real iva = risultato + interessi;
if (_isannual || _isriepilogo) iva.round(ROUND_MILLELIRE);
if (!iva.is_zero())
{
if (!interessi.is_zero())
@ -1073,7 +1062,7 @@ void TLiquidazione_app::set_grand(_DescrItem& d)
set_row(rw++,"@23gIVA DOVUTA@75g%r",&risultato);
set_row(rw++,"@23gInteresse %6.2r %%@75g%r",&interesse, &interessi);
}
if (iva >= IVA_DA_RIPORTARE || _isannual)
if (iva >= IVA_DA_RIPORTARE || _isannual || _isriepilogo)
set_row(rw++,"@23gIVA DA VERSARE@75g%r",&iva);
else
set_row(rw++,"@23gIVA DA VERSARE@85g0 (%s < 50.000)",

View File

@ -98,9 +98,9 @@ bool TLiquidazione_app::extract_deleghe()
_isbenzinaro = _nditte->curr(LF_ATTIV).get_bool("ART74/4");
bool mens = _freqviva == "M";
_isannual = (_month == 12 && !mens && !_isbenzinaro) ||
(_month == 13 && (mens || _isbenzinaro));
(_month == 13 && (mens || _isbenzinaro));
_isriepilogo = _month == 13;
_isendliq = _isannual || _isriepilogo;
extract_delega(_month);
}
_prind->addstatus(1);