Corretti diversi cazzaroli

git-svn-id: svn://10.65.10.50/trunk@855 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-01-12 11:36:08 +00:00
parent a1a7b2c36a
commit 59acd28d41
5 changed files with 194 additions and 62 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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