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:
angelo 1997-11-20 13:29:47 +00:00
parent 9c5da80f5f
commit 6a09459688
4 changed files with 130 additions and 116 deletions

View File

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

View File

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

View File

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

View File

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