Corretto MI2364 relativo al trasferimento dei campi EC107-EC117.
Corretta ancora una volta la ventilazione: arrotonda il moltiplicatore al nono decimale. Modificata la gestione dei campi TAB1100 sull'assoc_array in modo che non faccia eccessive dup() degli elementi. git-svn-id: svn://10.65.10.50/trunk@5650 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
9c5da80f5f
commit
6a09459688
@ -20,12 +20,13 @@
|
||||
// Methods of _Iva11Array
|
||||
bool _Iva11Array::add(const real& val, const char* fld_name, int num_file)
|
||||
{
|
||||
_Iva11Item iva11;
|
||||
const bool is_key = TAssoc_array::is_key(fld_name);
|
||||
_Iva11Item& bi = is_key ? (_Iva11Item&)find(fld_name) : iva11;
|
||||
if (!is_key)
|
||||
TAssoc_array::add(fld_name,(_Iva11Item*)new _Iva11Item,is_key);
|
||||
_Iva11Item& bi = (_Iva11Item&)find(fld_name);
|
||||
bi.value() += val;
|
||||
if (num_file != LF_TAB1100A) bi.file() = num_file;
|
||||
return TAssoc_array::add(fld_name,bi,is_key);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file)
|
||||
@ -36,11 +37,11 @@ bool _Iva11Array::sub(const real& val, const char* fld_name, int num_file)
|
||||
|
||||
void _Iva11Array::zero(const char* fld_name)
|
||||
{
|
||||
_Iva11Item iva11;
|
||||
const bool is_key = TAssoc_array::is_key(fld_name);
|
||||
_Iva11Item& bi = is_key ? (_Iva11Item&)find(fld_name) : iva11;
|
||||
if (!is_key)
|
||||
TAssoc_array::add(fld_name,(_Iva11Item*) new _Iva11Item,is_key);
|
||||
_Iva11Item& bi = (_Iva11Item&)find(fld_name);
|
||||
bi.value() = 0.0;
|
||||
TAssoc_array::add(fld_name,bi,is_key);
|
||||
}
|
||||
|
||||
// Methods of application!
|
||||
|
224
cg/cg4301.cpp
224
cg/cg4301.cpp
@ -1466,9 +1466,10 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
|
||||
const bool is_acquisto = tipomov == acquisto;
|
||||
|
||||
|
||||
_Iva11Array b_arr;
|
||||
const bool is_key = _iva11_arr.is_key(codatt);
|
||||
_Iva11Array& array = is_key ? (_Iva11Array&)_iva11_arr.find(codatt) : b_arr;
|
||||
if (!is_key) // Aggiunge l'elemento se non c'e'
|
||||
_iva11_arr.add(codatt,(_Iva11Array*)new _Iva11Array,is_key);
|
||||
_Iva11Array& array = (_Iva11Array&)_iva11_arr[codatt] ;
|
||||
|
||||
|
||||
// TAB11_RQA34 ovvero "RQA34" non viene trasferito!
|
||||
@ -1635,108 +1636,111 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
|
||||
{
|
||||
if (tipodoc == "CN" || tipodoc == "SN" || tipodoc == "RN") // salta i non incassati
|
||||
return;
|
||||
|
||||
if (intracom || !valintra)
|
||||
{
|
||||
if (tipoes_v == "24")
|
||||
array.add(imponibile,TAB11_EC107);
|
||||
if (tipoes_v == "21")
|
||||
array.add(imponibile,TAB11_EC108);
|
||||
else if (tipoes_v == "B1")
|
||||
array.add(imponibile,TAB11_EC109);
|
||||
else if (tipoes_v == "B2")
|
||||
array.add(imponibile,TAB11_EC110);
|
||||
else if (tipoes_v == "B3")
|
||||
array.add(imponibile,TAB11_EC111);
|
||||
else if (tipoes_v == "25")
|
||||
array.add(imponibile,TAB11_EC112);
|
||||
else if (tipoes_v == "22")
|
||||
array.add(imponibile,TAB11_EC114);
|
||||
else if (tipoes_v == "20")
|
||||
array.add(imponibile,TAB11_EC115);
|
||||
else if (tipoes_v == "G7A")
|
||||
array.add(imponibile,TAB11_EC116);
|
||||
else if (tipoes_v == "G7B")
|
||||
array.add(imponibile,TAB11_EC117);
|
||||
else if (tipoes_v == "R9") // Divenuto obsoleto prima ancora di utilizzarlo...
|
||||
array.add(imponibile,TAB11_R9,LF_TAB1100B);
|
||||
|
||||
if (tipoes_v.not_empty()) // Inutile fare troppi controlli...
|
||||
{
|
||||
if (tipoes_v == "24")
|
||||
array.add(imponibile,TAB11_EC107);
|
||||
if (tipoes_v == "21")
|
||||
array.add(imponibile,TAB11_EC108);
|
||||
else if (tipoes_v == "B1")
|
||||
array.add(imponibile,TAB11_EC109);
|
||||
else if (tipoes_v == "B2")
|
||||
array.add(imponibile,TAB11_EC110);
|
||||
else if (tipoes_v == "B3")
|
||||
array.add(imponibile,TAB11_EC111);
|
||||
else if (tipoes_v == "25")
|
||||
array.add(imponibile,TAB11_EC112);
|
||||
else if (tipoes_v == "22")
|
||||
array.add(imponibile,TAB11_EC114);
|
||||
else if (tipoes_v == "20")
|
||||
array.add(imponibile,TAB11_EC115);
|
||||
else if (tipoes_v == "G7A")
|
||||
array.add(imponibile,TAB11_EC116);
|
||||
else if (tipoes_v == "G7B")
|
||||
array.add(imponibile,TAB11_EC117);
|
||||
else if (tipoes_v == "R9") // Divenuto obsoleto prima ancora di utilizzarlo...
|
||||
array.add(imponibile,TAB11_R9,LF_TAB1100B);
|
||||
}
|
||||
|
||||
if (tipocr == 4 && tipodoc != "AF" && !sosp_imp)
|
||||
array.add(imponibile,TAB11_EC113);
|
||||
}
|
||||
|
||||
if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") )
|
||||
return;
|
||||
|
||||
if (!autofattura && tipoiva != "NS")
|
||||
if (tipodoc == "AF")
|
||||
{
|
||||
array.add(imponibile,TAB11_A35);
|
||||
array.add(imposta,TAB11_L2);
|
||||
}
|
||||
else if (valintra && !intra)
|
||||
{
|
||||
array.add(imponibile,TAB11_A35BIS);
|
||||
array.add(imposta,TAB11_L2BIS);
|
||||
}
|
||||
|
||||
if (!autofattura && !sosp_imp && intra && tipoes_v == "22")
|
||||
array.add(imponibile,TAB11_E52);
|
||||
|
||||
if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS"))
|
||||
if (!(corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC")))
|
||||
{
|
||||
const bool t1 = tipoagr == 1;
|
||||
const bool t1_3 = tipoagr == 1 || tipoagr == 3;
|
||||
if (ali == 2.00)
|
||||
if (!autofattura && tipoiva != "NS")
|
||||
if (tipodoc == "AF")
|
||||
{
|
||||
array.add(imponibile,TAB11_A35);
|
||||
array.add(imposta,TAB11_L2);
|
||||
}
|
||||
else if (valintra && !intra)
|
||||
{
|
||||
array.add(imponibile,TAB11_A35BIS);
|
||||
array.add(imposta,TAB11_L2BIS);
|
||||
}
|
||||
|
||||
if (!autofattura && !sosp_imp && intra && tipoes_v == "22")
|
||||
array.add(imponibile,TAB11_E52);
|
||||
|
||||
if (_isagricolo && (tipodoc != "CR" && tipodoc != "SC" && tipodoc != "RF" && tipodoc != "FS"))
|
||||
{
|
||||
if (t1)
|
||||
const bool t1 = tipoagr == 1;
|
||||
const bool t1_3 = tipoagr == 1 || tipoagr == 3;
|
||||
if (ali == 2.00)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME01,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE01,LF_TAB1100B);
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME01,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE01,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME01);
|
||||
array.add(imposta,TAB11_ABVE01);
|
||||
}
|
||||
}
|
||||
if (intra && t1_3)
|
||||
else if (ali == 4.00)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME01);
|
||||
array.add(imposta,TAB11_ABVE01);
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME02,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE02,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME02);
|
||||
array.add(imposta,TAB11_ABVE02);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (ali == 4.00)
|
||||
{
|
||||
if (t1)
|
||||
else if (ali == 8.50)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME02,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE02,LF_TAB1100B);
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME03,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE03,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME03);
|
||||
array.add(imposta,TAB11_ABVE03);
|
||||
}
|
||||
}
|
||||
if (intra && t1_3)
|
||||
else if (ali == 9.00)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME02);
|
||||
array.add(imposta,TAB11_ABVE02);
|
||||
}
|
||||
}
|
||||
else if (ali == 8.50)
|
||||
{
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME03,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE03,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME03);
|
||||
array.add(imposta,TAB11_ABVE03);
|
||||
}
|
||||
}
|
||||
else if (ali == 9.00)
|
||||
{
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME04,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE04,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME04);
|
||||
array.add(imposta,TAB11_ABVE04);
|
||||
if (t1)
|
||||
{
|
||||
array.add(imponibile,TAB11_AGME04,LF_TAB1100B);
|
||||
array.add(imposta,TAB11_AGVE04,LF_TAB1100B);
|
||||
}
|
||||
if (intra && t1_3)
|
||||
{
|
||||
array.add(imponibile,TAB11_ABME04);
|
||||
array.add(imposta,TAB11_ABVE04);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1745,8 +1749,6 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
|
||||
if (is_acquisto || is_vendita)
|
||||
if (autofattura)
|
||||
array.add(imponibile,TAB11_A35TER);
|
||||
|
||||
_iva11_arr.add(codatt,array,is_key);
|
||||
}
|
||||
|
||||
void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
@ -1760,14 +1762,16 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
TToken_string tt("",'!');
|
||||
tiporeg treg;
|
||||
int tipocr,tipodet,tagr;
|
||||
real aliq, imp, iva, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v;
|
||||
real aliq, imp, iva, lor, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v;
|
||||
TString16 cur_att;
|
||||
_Iva11Array b_arr;
|
||||
|
||||
const bool is_key = _iva11_arr.is_key(codatt);
|
||||
_Iva11Array& array = is_key ? (_Iva11Array&)_iva11_arr.find(codatt) : b_arr;
|
||||
if (!is_key)
|
||||
_iva11_arr.add(codatt,(_Iva11Array*)new _Iva11Array,is_key);
|
||||
_Iva11Array& array = (_Iva11Array&)_iva11_arr[codatt];
|
||||
|
||||
// Scorporo corretto dei corrispettivi in R3
|
||||
TAssoc_array corr_ann;
|
||||
_CorrItem cx,*cc;
|
||||
bool is_present;
|
||||
|
||||
for (_pim->first(); !_pim->eof(); _pim->next())
|
||||
@ -1795,6 +1799,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
tipodet = atoi(*_pim_tipodet);
|
||||
imp = _pim->get_real("R0");
|
||||
iva = _pim->get_real("R1");
|
||||
lor = _pim->get_real("R3");
|
||||
|
||||
if (is_acquisto)
|
||||
{
|
||||
@ -1870,15 +1875,17 @@ 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 && ca._totale != ZERO) // se non c'e' lo aggiunge (evita i vuoti)
|
||||
if (lor != ZERO)
|
||||
{
|
||||
ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota
|
||||
corr_ann.add(codiva,ca);
|
||||
is_present = corr_ann.is_key(codiva);
|
||||
if (!is_present) // Aggiungilo se non c'e'
|
||||
corr_ann.add(codiva,(_CorrItem*)new _CorrItem,is_present);
|
||||
_CorrItem& ca = (_CorrItem&) corr_ann[codiva];
|
||||
ca._totale += lor;
|
||||
if (!is_present)
|
||||
ca._aliquota = _iva->get_real("R0"); // Se e' nuovo setta l'aliquota
|
||||
}
|
||||
|
||||
tt = _pim->get("S0");
|
||||
a13i = tt.get(0);
|
||||
a13v = tt.get(1);
|
||||
@ -1935,6 +1942,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
}
|
||||
|
||||
// Scorre i corrispettivi lordi accumulati, li scorpora ed aggiorna i righi relativi
|
||||
_CorrItem* cc;
|
||||
for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item())
|
||||
{
|
||||
lordo2netto(cc->_totale,imp,iva,cc->_aliquota/CENTO);
|
||||
@ -2009,7 +2017,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
|
||||
}
|
||||
array.add(_plm->get_real("R0"),TAB11_IVVENR);
|
||||
}
|
||||
_iva11_arr.add(codatt,array,is_key);
|
||||
//_iva11_arr.add(codatt,array,is_key);
|
||||
}
|
||||
|
||||
void TLiquidazione_app::iva11_write(bool reset_r1r2)
|
||||
@ -2022,15 +2030,16 @@ void TLiquidazione_app::iva11_write(bool reset_r1r2)
|
||||
|
||||
_Iva11Array * iva11_arr;
|
||||
_Iva11Item * iva11;
|
||||
int i=0,err;
|
||||
TLocalisamfile& tab1100a = _tab11->lfile();
|
||||
TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B);
|
||||
|
||||
int err;
|
||||
// Ciclo sulle attivita'
|
||||
for (iva11_arr = (_Iva11Array *) _iva11_arr.first_item(); iva11_arr != NULL && i < items; i++,iva11_arr = (_Iva11Array*)_iva11_arr.succ_item())
|
||||
for (iva11_arr = (_Iva11Array *) _iva11_arr.first_item(); iva11_arr != NULL; iva11_arr = (_Iva11Array*)_iva11_arr.succ_item())
|
||||
{
|
||||
// Setta i campi chiave per entrambi i files della relazione
|
||||
ditta.format("%05ld",_nditte->curr().get_long(NDT_CODDITTA));
|
||||
attiv = _iva11_arr.get_hashobj()->key();
|
||||
TLocalisamfile& tab1100a = _tab11->lfile();
|
||||
TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B);
|
||||
tab1100a.zero();
|
||||
tab1100a.put(TAB11_TADITT,ditta);
|
||||
tab1100a.put(TAB11_TACATT,attiv);
|
||||
@ -2039,9 +2048,8 @@ void TLiquidazione_app::iva11_write(bool reset_r1r2)
|
||||
tab1100b.put(TAB11_TACATT,attiv);
|
||||
|
||||
const int iva11_items = iva11_arr->items();
|
||||
int j=0;
|
||||
// Ciclo sugli elementi per compilare i campi della relazione
|
||||
for (iva11 = (_Iva11Item *)iva11_arr->first_item(); iva11 != NULL && j<iva11_items;j++,iva11 = (_Iva11Item *)iva11_arr->succ_item())
|
||||
for (iva11 = (_Iva11Item *)iva11_arr->first_item(); iva11 != NULL;iva11 = (_Iva11Item *)iva11_arr->succ_item())
|
||||
{
|
||||
fld_name = iva11_arr->get_hashobj()->key();
|
||||
if (reset_r1r2 && (fld_name == TAB11_R1 || fld_name == TAB11_R2)) continue; // salta R1/R2 se devono rimanere a zero
|
||||
|
@ -307,7 +307,8 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
||||
|
||||
// Di seguito l'implementazione del sistema (errata come spiegato sopra).
|
||||
|
||||
const real moltiplicatore = totven / totacq;
|
||||
real moltiplicatore = totven / totacq;
|
||||
moltiplicatore.round(9);
|
||||
real imponibile, imposta;
|
||||
_VendItem* vi = (_VendItem*)&_vend_arr[0];
|
||||
|
||||
|
@ -320,7 +320,11 @@ void TLiquidazione_app::describe_ventilation(int month, const char* codatt)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
d->_r0 = _pam->get_real("R2"); // Totale acquisti
|
||||
d->_r1 = _pam->get_real("R3"); // Totale vendite
|
||||
|
||||
if (d->_r1.is_zero() || d->_r0.is_zero())
|
||||
delete d;
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user