Correzione in liquidazione IVA relativa allo scorporo corretto
(sia in annuale che nel periodo). git-svn-id: svn://10.65.10.50/trunk@4139 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2d4a8bddba
commit
cafd3fcd50
100
cg/cg4301.cpp
100
cg/cg4301.cpp
@ -570,16 +570,16 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
|
||||
for (; _cur->pos() < items; ++(*_cur))
|
||||
{
|
||||
#ifdef DBG
|
||||
if (_cur->pos() % 100 == 0L)
|
||||
if ((_cur->pos() & 0x7F) == 0)
|
||||
{
|
||||
#ifdef DBG
|
||||
msgdbg.format("Ricalcolo attivita': P=%ld/%ld",_cur->pos(),items);
|
||||
freespace = GetFreeSpace(0);
|
||||
msgdbg << " Memoria libera(1): " << freespace/1024 << " Kbytes.";
|
||||
xvt_statbar_set(msgdbg);
|
||||
#endif
|
||||
do_events();
|
||||
}
|
||||
#endif
|
||||
TDate date(_mov->get("DATAREG"));
|
||||
TString16 reg = _mov->get("REG");
|
||||
bool isreg = look_reg(_mov->get("REG"));
|
||||
@ -985,6 +985,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
real imp = _pim->get_real("R0"); // imponibile
|
||||
real ivp = _pim->get_real("R1"); // IVA su imp.
|
||||
real lor = _pim->get_real("R2"); // lordo
|
||||
real lorcor = _pim->get_real("R3"); // lordo corrispettivi (da non ventilare)
|
||||
|
||||
/*
|
||||
* le maledette fatture con scontrino sono sul registro dei
|
||||
@ -1103,6 +1104,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
{
|
||||
real perc = _iva->get_real("R0")/CENTO;
|
||||
lor += imponibile + imposta;
|
||||
lorcor += imponibile+imposta;
|
||||
real tot = imponibile+imposta;
|
||||
if (liq) add_corrisp(month, reg, tot, perc, tipodet, codiva, codatt);
|
||||
}
|
||||
@ -1196,6 +1198,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
_pim->put("R0",imp);
|
||||
_pim->put("R1",ivp);
|
||||
_pim->put("R2",lor);
|
||||
_pim->put("R3",lorcor); // Corrispettivi, non inclusi quelli da ventilare
|
||||
_pim->put("R5",ifs);
|
||||
_pim->put("R6",vfs);
|
||||
_pim->put("R7",adf);
|
||||
@ -1772,6 +1775,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
_BolgArray b_arr;
|
||||
const bool is_key = _iva11_arr.is_key(codatt);
|
||||
_BolgArray& array = is_key ? (_BolgArray&)_iva11_arr.find(codatt) : b_arr;
|
||||
// Scorporo corretto dei corrispettivi in R3
|
||||
TAssoc_array corr_ann;
|
||||
_CorrItem cx,*cc;
|
||||
bool is_present;
|
||||
|
||||
for (_pim->first(); !_pim->eof(); _pim->next())
|
||||
{
|
||||
@ -1878,6 +1885,16 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
|
||||
if ((_isagricolo && tagr==2) || !_isagricolo)
|
||||
{
|
||||
// Accumula i corrispettivi da scorporare per codice iva
|
||||
is_present = corr_ann.is_key(codiva);
|
||||
cx._totale = 0;
|
||||
_CorrItem& ca = is_present ? (_CorrItem&) corr_ann[codiva] : cx;
|
||||
ca._totale += _pim->get_real("R3");
|
||||
if (!is_present) // se non c'e' lo aggiunge
|
||||
{
|
||||
ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota
|
||||
corr_ann.add(codiva,ca);
|
||||
}
|
||||
tt = _pim->get("S0");
|
||||
a13i = tt.get(0);
|
||||
a13v = tt.get(1);
|
||||
@ -1957,6 +1974,44 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
}
|
||||
}
|
||||
|
||||
// Scorre i corrispettivi lordi accumulati, li scorpora ed aggiorna i righi relativi
|
||||
for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item())
|
||||
{
|
||||
lordo2netto(cc->_totale,imp,iva,cc->_aliquota/CENTO);
|
||||
vtot += imp; ivav += iva;
|
||||
if (cc->_aliquota == 4.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC101);
|
||||
array.add(iva,TAB11_EC201);
|
||||
}
|
||||
else if (cc->_aliquota == 9.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC102);
|
||||
array.add(iva,TAB11_EC202);
|
||||
}
|
||||
else if (cc->_aliquota == 10.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC103);
|
||||
array.add(iva,TAB11_EC203);
|
||||
}
|
||||
else if (cc->_aliquota == 13.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC104);
|
||||
array.add(iva,TAB11_EC204);
|
||||
}
|
||||
else if (cc->_aliquota == 16.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC105);
|
||||
array.add(iva,TAB11_EC205);
|
||||
}
|
||||
else if (cc->_aliquota == 19.00)
|
||||
{
|
||||
array.add(imp,TAB11_EC106);
|
||||
array.add(iva,TAB11_EC206);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Hisss... Rettifica l'importo di EC115: EC115 = EC116 + EC117 + EC115
|
||||
// Va beh...
|
||||
real r16, r17;
|
||||
@ -2616,8 +2671,14 @@ void TLiquidazione_app::recalc_annual(const char* att)
|
||||
es_b3 = _pla->get_real("R3");
|
||||
cess_amm = _pla->get_real("R4");
|
||||
pro_pag = _pla->get_real("R12");
|
||||
iva_acq = _pla->get_real("R11");
|
||||
|
||||
iva_acq = _pla->get_real("R11");
|
||||
|
||||
// Per avere un risultato corretto, si deve totalizzare PIM->R3 per codice iva
|
||||
// e quindi effettuare lo scorporo dell'imponibile e aggiungere al relativo volume d'affari
|
||||
TAssoc_array corr_ann;
|
||||
_CorrItem cx,*cc;
|
||||
bool is_key;
|
||||
|
||||
for (_pim->first(); !_pim->eof(); _pim->next())
|
||||
{
|
||||
if (_year != *_pim_anno) continue;
|
||||
@ -2636,8 +2697,19 @@ void TLiquidazione_app::recalc_annual(const char* att)
|
||||
a13 = _pim->get("S0");
|
||||
imp_a13 = a13.get(0);
|
||||
imp_ifs -= imp_af + imp_a13; // Toglie le autofatture e le op. A13
|
||||
if (corrisp) imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS
|
||||
|
||||
if (corrisp)
|
||||
{
|
||||
imp_ifs += _pim->get_real("R5"); // Se corrisp. aggiunge le FS
|
||||
is_key = corr_ann.is_key(codiva);
|
||||
cx._totale = 0;
|
||||
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx;
|
||||
ca._totale += _pim->get_real("R3");
|
||||
if (!is_key) // se non c'e' lo aggiunge
|
||||
{
|
||||
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
|
||||
corr_ann.add(codiva,ca);
|
||||
}
|
||||
}
|
||||
if ( // ESCLUSI:
|
||||
strcmp(att,*_pim_codatt) != 0 ||
|
||||
treg != vendita || // non vendite
|
||||
@ -2652,7 +2724,19 @@ void TLiquidazione_app::recalc_annual(const char* att)
|
||||
else
|
||||
volaff2 += imp_ifs;
|
||||
}
|
||||
|
||||
|
||||
// Ora si scorporano i corrispettivi raggruppati per codice IVA e si totalizzano gli imponibili
|
||||
// calcolati, da aggiungere poi a volaff1 o volaff2
|
||||
real imp,iva;
|
||||
for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item())
|
||||
{
|
||||
lordo2netto(cc->_totale,imp,iva,cc->_aliquota);
|
||||
if (tipoatt == 1)
|
||||
volaff1 += imp;
|
||||
else
|
||||
volaff2 += imp;
|
||||
}
|
||||
|
||||
// calcola esenti, cessioni, lordo vendite, prorata pagato
|
||||
// e IVA acquisti dai plm/ptm/pum/pam/pom
|
||||
|
||||
|
@ -105,7 +105,7 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
|
||||
// x13
|
||||
TString key;
|
||||
bool is_key;
|
||||
TAssoc_array corr_ann; // Contiene corrispettivi annuali (temporaneo, da rimuovere
|
||||
TAssoc_array corr_ann; // Contiene corrispettivi annuali (temporaneo, da correggere
|
||||
// non appena implementato correttamente il mese 13)
|
||||
_CorrItem cx;
|
||||
|
||||
@ -117,25 +117,26 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
|
||||
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
|
||||
// memorizza per codiva
|
||||
// x13
|
||||
if (month == 13)
|
||||
if ((month != 13 && ci->_month != month) || ci->_codatt != codatt) continue;
|
||||
|
||||
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
|
||||
{
|
||||
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;
|
||||
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)
|
||||
@ -162,21 +163,24 @@ 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)
|
||||
{
|
||||
// if (month == 13)
|
||||
//{
|
||||
real imp,iva,imp1,iva1;
|
||||
_CorrItem* cc;
|
||||
// Per le prossime scritture uso impropriamente il mese 12, lo so e' terribile...
|
||||
// Per le prossime scritture(PAM e PLM) uso impropriamente il mese 12, lo so e' terribile...
|
||||
// ma non appena possibile il mese 13 sara' disponibile tutto sara' piu' bello.
|
||||
//const int m = month == 13 ? 12 : month;
|
||||
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);
|
||||
/*
|
||||
look_pim(m, codatt, cc->_codreg, "", corr_ann.get_hashobj()->key(), cc->_tipodet, TRUE);
|
||||
imp1 = _pim->get_real("R0");
|
||||
iva1 = _pim->get_real("R1");
|
||||
imp1 += imp;
|
||||
@ -184,8 +188,10 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
|
||||
_pim->put("R0",imp1);
|
||||
_pim->put("R1",iva1);
|
||||
_pim->rewrite();
|
||||
*/
|
||||
//}
|
||||
}
|
||||
look_plm(12, codatt); // Aggiorna l'iva vendite in PLM...
|
||||
look_plm(month, codatt); // Aggiorna l'iva vendite in PLM...
|
||||
real ive = _plm->get_real("R0");
|
||||
ive += imposta;
|
||||
_plm->put("R0",ive);
|
||||
@ -195,7 +201,6 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
|
||||
_pam->put("R1",vaf);
|
||||
_plm->rewrite();
|
||||
_pam->rewrite();
|
||||
}
|
||||
// fine x13
|
||||
}
|
||||
|
||||
@ -651,18 +656,26 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
|
||||
|
||||
// Condizione 2...
|
||||
// scorri i bellissimi progressivi mensili
|
||||
// Nota: i valori ricavati vanno poi integrati con R3, dove sono memorizzati i corrispettivi da scorporare
|
||||
// anche qui si accumula per codice iva e si effettua lo scorporo alla fine del ciclo.
|
||||
TAssoc_array corr_ann;
|
||||
TString codiva;
|
||||
_CorrItem cx,*cc;
|
||||
bool is_key;
|
||||
|
||||
const int year = atoi((const char*)_year);
|
||||
for (_pim->first(); !_pim->eof(); _pim->next())
|
||||
{
|
||||
int ryear = atoi(*_pim_anno);
|
||||
int rmese = atoi(*_pim_mese);
|
||||
int tipodet = atoi(*_pim_tipodet);
|
||||
codiva = *_pim_codiva;
|
||||
|
||||
// B3 significa che e' acq. o vendita valido per rimb. per aliquota
|
||||
if (!_pim->get_bool("B3")) continue;
|
||||
|
||||
// Se il tipo di codice e' NS non va considerato nella sommatoria del tot. acquisti
|
||||
look_iva(*_pim_codiva);
|
||||
look_iva(codiva);
|
||||
const bool non_sogg = _iva->get("S1") == "NS";
|
||||
|
||||
if (!is_mens) // Trimestrali
|
||||
@ -687,6 +700,15 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
|
||||
// vedi sopra...
|
||||
vtot += imp;
|
||||
ivav += iva;
|
||||
is_key = corr_ann.is_key(codiva);
|
||||
cx._totale = 0;
|
||||
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx;
|
||||
ca._totale += _pim->get_real("R3");
|
||||
if (!is_key) // se non c'e' lo aggiunge
|
||||
{
|
||||
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
|
||||
corr_ann.add(codiva,ca);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -698,6 +720,14 @@ _DescrItem* TLiquidazione_app::recalc_rimborso(int month, const char* codatts,
|
||||
}
|
||||
} // end of for
|
||||
|
||||
real impc,ivac; // Aggiunge lo scorporo dei corrispettivi alle vendite calcolate
|
||||
for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item())
|
||||
{
|
||||
lordo2netto(cc->_totale,impc,ivac,cc->_aliquota);
|
||||
vtot += impc;
|
||||
ivav += ivac;
|
||||
}
|
||||
|
||||
// finalmente
|
||||
alv = ivav/vtot; alv.round(4);
|
||||
ala = ivaa/atot; ala.round(4);
|
||||
|
@ -469,6 +469,11 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
_DescrItem* hea = new _DescrItem(PIM_HEAD);
|
||||
hea->_f0 = skip_acq; // cosi' non compare nemmeno la colonnina! contento?
|
||||
_descr_arr.add(hea);
|
||||
// Assoc array per memorizzare i corrispettivi da scorporare. Tali corrispettivi verranno
|
||||
// aggiunti alla fine del ciclo, scorrendo tutte le righe generate.
|
||||
TAssoc_array corr_ann;
|
||||
_CorrItem cx;
|
||||
bool is_key;
|
||||
|
||||
while ((tmpatt = atts.get()) != NULL)
|
||||
{
|
||||
@ -571,6 +576,15 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
}
|
||||
else // vendita
|
||||
{
|
||||
is_key = corr_ann.is_key(codiva);
|
||||
cx._totale = 0;
|
||||
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[codiva] : cx;
|
||||
ca._totale += _pim->get_real("R3");
|
||||
if (!is_key) // se non c'e' lo aggiunge
|
||||
{
|
||||
ca._aliquota = _iva->get_real("R0")/CENTO; // Se e' nuovo setta l'aliquota
|
||||
corr_ann.add(codiva,ca);
|
||||
}
|
||||
// vedi corrispettivi veri e falsi
|
||||
real cvi = _pim->get_real("R0"); // imp. totale
|
||||
real cvv = _pim->get_real("R1"); // iva totale
|
||||
@ -653,6 +667,23 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
}
|
||||
}
|
||||
|
||||
real impc,ivac; // Aggiunge lo scorporo dei corrispettivi
|
||||
const int ditems = _descr_arr.items();
|
||||
for (int i=0;i<ditems;i++) // scorre le righe memorizzate
|
||||
{
|
||||
_DescrItem& dd = (_DescrItem&) _descr_arr[i];
|
||||
if (dd._flags != PIM_ROW) continue;
|
||||
if (corr_ann.is_key(dd._s1)) // Se esiste il codice iva corrispondente sull'array corrispettivi
|
||||
{
|
||||
_CorrItem& cc = (_CorrItem &) corr_ann[dd._s1];
|
||||
lordo2netto(cc._totale,impc,ivac,cc._aliquota);
|
||||
dd._r2 += impc; // allora effettua lo scorporo e aggiorna i totali
|
||||
dd._r3 += ivac;
|
||||
t2 += impc;
|
||||
t3 += ivac;
|
||||
}
|
||||
}
|
||||
|
||||
look_plm(month,att);
|
||||
real iva74t = _pom->get_real("R13");
|
||||
if (iva74t.sign() > 0)
|
||||
@ -672,7 +703,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
}
|
||||
|
||||
if (art40.sign() > 0 || art40_iva.sign() > 0)
|
||||
{
|
||||
{
|
||||
_DescrItem* ads = new _DescrItem(PIM_ROW);
|
||||
ads->_s0 = ref;
|
||||
ads->_s1 = "A13";
|
||||
|
Loading…
x
Reference in New Issue
Block a user