Skudlerations
git-svn-id: svn://10.65.10.50/trunk@910 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
9fb1deb9da
commit
fbe1a7d7f3
11
cg/cg4300.h
11
cg/cg4300.h
@ -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();
|
||||
|
384
cg/cg4301.cpp
384
cg/cg4301.cpp
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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)",
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user