Correzione errore MI6035 sulla liquidazione annuale per ventilazione.
git-svn-id: svn://10.65.10.50/trunk@3198 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
21d413d762
commit
868998ea6b
166
cg/cg4303.cpp
166
cg/cg4303.cpp
@ -6,6 +6,17 @@
|
|||||||
|
|
||||||
#include "cg4300.h"
|
#include "cg4300.h"
|
||||||
|
|
||||||
|
struct Annual_item : public TObject
|
||||||
|
{
|
||||||
|
real imposta;
|
||||||
|
real imponibile;
|
||||||
|
TString codiva;
|
||||||
|
TString other;
|
||||||
|
virtual TObject* dup() const { return new Annual_item(*this); }
|
||||||
|
Annual_item() { imposta = 0.0; imponibile = 0.0; codiva = ""; other = ""; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
|
void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
|
||||||
real& howmuch, bool intra)
|
real& howmuch, bool intra)
|
||||||
{
|
{
|
||||||
@ -129,6 +140,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
|||||||
|
|
||||||
TString att(codatt);
|
TString att(codatt);
|
||||||
|
|
||||||
|
TArray annual_vent;
|
||||||
|
Annual_item a_item;
|
||||||
|
|
||||||
// 1) ricalcola i pim dei mesi dal primo al corrente se necessario
|
// 1) ricalcola i pim dei mesi dal primo al corrente se necessario
|
||||||
recalc rcl = _recalc;
|
recalc rcl = _recalc;
|
||||||
_recalc = needed;
|
_recalc = needed;
|
||||||
@ -196,18 +210,26 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
|||||||
totacq += vv._totale;
|
totacq += vv._totale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool is_annual = _month == 13 && month == 13;
|
||||||
|
for (j = 0; is_annual && j < _vend_arr.items(); j++)
|
||||||
|
{
|
||||||
|
_VendItem& vi = (_VendItem&)_vend_arr[j];
|
||||||
|
totven += vi._totale;
|
||||||
|
}
|
||||||
|
|
||||||
// 3) ricalcola (solo per il mese in corso!) operando sull'array
|
// 3) ricalcola (solo per il mese in corso!) operando sull'array
|
||||||
for (int i = 0; i < _vend_arr.items(); i++)
|
for (int i = 0; i < _vend_arr.items(); i++)
|
||||||
{
|
{
|
||||||
_VendItem* vi = (_VendItem*)&_vend_arr[i];
|
_VendItem* vi = (_VendItem*)&_vend_arr[i];
|
||||||
if (vi->_month != month)
|
if (vi->_month != month && !is_annual)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// questo serve solo per il prospettino di m.
|
// questo serve solo per il prospettino di m.
|
||||||
totven += vi->_totale;
|
if (!is_annual)
|
||||||
|
totven += vi->_totale;
|
||||||
|
|
||||||
// 3.2) calcola percentuali di ripartizione e prepara l'affettatrice
|
// 3.2) calcola percentuali di ripartizione e prepara l'affettatrice
|
||||||
TDistrib dst(vi->_totale,ROUND_LIRA);
|
TDistrib dst(!is_annual ? vi->_totale : totven,ROUND_LIRA);
|
||||||
for (j = 0; j < _vent_arr.items(); j++)
|
for (j = 0; j < _vent_arr.items(); j++)
|
||||||
{
|
{
|
||||||
_VentItem* vv = (_VentItem*)&_vent_arr[j];
|
_VentItem* vv = (_VentItem*)&_vent_arr[j];
|
||||||
@ -238,37 +260,115 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
|||||||
if ((totven - tlor) == real(1.0))
|
if ((totven - tlor) == real(1.0))
|
||||||
imposta += real(1.0);
|
imposta += real(1.0);
|
||||||
|
|
||||||
// aggiusto l'IVA vendite nei plm
|
if (is_annual)
|
||||||
look_plm(month, codatt);
|
{
|
||||||
real ive = _plm->get_real("R0");
|
// memorizza i dati della ventilazione annuale in un TArray
|
||||||
ive += imposta;
|
a_item.imposta = imposta;
|
||||||
_plm->put("R0",ive);
|
a_item.imponibile = imponibile;
|
||||||
_plm->rewrite();
|
a_item.codiva = vv->_codiva;
|
||||||
// .. e il volume di affari nei pam
|
a_item.other = vv->_other;
|
||||||
real vaf = _pam->get_real("R1");
|
annual_vent.add(a_item);
|
||||||
vaf += imponibile;
|
continue;
|
||||||
_pam->put("R1", vaf);
|
} else if (_month != 13)
|
||||||
_pam->rewrite();
|
{
|
||||||
|
// aggiusto l'IVA vendite nei plm
|
||||||
// Aggiorno i luridi pim
|
look_plm(month, codatt);
|
||||||
bool was = look_pim(month, codatt, vi->_codreg, "0", vv->_codiva, vi->_tipodet, TRUE);
|
real ive = _plm->get_real("R0");
|
||||||
|
ive += imposta;
|
||||||
imponibile += _pim->get_real("R0");
|
_plm->put("R0",ive);
|
||||||
imposta += _pim->get_real("R1");
|
_plm->rewrite();
|
||||||
_pim->put("R0", imponibile);
|
// .. e il volume di affari nei pam
|
||||||
_pim->put("R1", imposta);
|
real vaf = _pam->get_real("R1");
|
||||||
_pim->put("S4", vv->_other);
|
vaf += imponibile;
|
||||||
// segnale per comodita' in stampa prospetto
|
_pam->put("R1", vaf);
|
||||||
_pim->put("B1","X");
|
_pam->rewrite();
|
||||||
// se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso
|
|
||||||
// viene amorosamente messo a quanto il codice IVA prevede
|
// Aggiorno i luridi pim
|
||||||
if (!was)
|
bool was = look_pim(month, codatt, vi->_codreg, "0", vv->_codiva, vi->_tipodet, TRUE);
|
||||||
{
|
|
||||||
look_iva(vv->_codiva);
|
imponibile += _pim->get_real("R0");
|
||||||
_pim->put("I1", (long)vendita);
|
imposta += _pim->get_real("R1");
|
||||||
if (!_iva->get_bool("B4")) _pim->put("B3", "X");
|
_pim->put("R0", imponibile);
|
||||||
|
_pim->put("R1", imposta);
|
||||||
|
_pim->put("S4", vv->_other);
|
||||||
|
// segnale per comodita' in stampa prospetto
|
||||||
|
_pim->put("B1","X");
|
||||||
|
// se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso
|
||||||
|
// viene amorosamente messo a quanto il codice IVA prevede
|
||||||
|
if (!was)
|
||||||
|
{
|
||||||
|
look_iva(vv->_codiva);
|
||||||
|
_pim->put("I1", (long)vendita);
|
||||||
|
if (!_iva->get_bool("B4")) _pim->put("B3", "X");
|
||||||
|
}
|
||||||
|
_pim->rewrite();
|
||||||
}
|
}
|
||||||
_pim->rewrite();
|
}
|
||||||
|
if (is_annual)
|
||||||
|
{
|
||||||
|
// Cazzeggia e riscrive i PIM/PAM/PLM (veid sopra) ripartendo equamente gli importi annuali
|
||||||
|
// tra i vari mesi, tipodet e codici IVA.
|
||||||
|
const int slices = _vend_arr.items();
|
||||||
|
const int a_items = annual_vent.items();
|
||||||
|
real perc(1.0),imp_fetta, iva_fetta, tot_imp, tot_iva, delta;
|
||||||
|
perc /= slices;
|
||||||
|
for (i = 0; i < a_items; i++)
|
||||||
|
{
|
||||||
|
Annual_item& item = (Annual_item&) annual_vent[i];
|
||||||
|
TDistrib imp_s(item.imponibile,ROUND_LIRA);
|
||||||
|
TDistrib iva_s(item.imposta,ROUND_LIRA);
|
||||||
|
tot_imp = 0.0; tot_iva = 0.0;
|
||||||
|
for (j = 0; j < slices; j++)
|
||||||
|
{
|
||||||
|
imp_s.add(perc); iva_s.add(perc);
|
||||||
|
}
|
||||||
|
for (j = 0; j < slices; j++)
|
||||||
|
{
|
||||||
|
_VendItem * vi = (_VendItem*) &_vend_arr[j];
|
||||||
|
imp_fetta = imp_s.get();
|
||||||
|
iva_fetta = iva_s.get();
|
||||||
|
tot_imp += imp_fetta; tot_iva += iva_fetta; // Serve per eventuali perdite di lirette...
|
||||||
|
if (j == (slices - 1))
|
||||||
|
{
|
||||||
|
delta = item.imponibile - tot_imp;
|
||||||
|
if (!delta.is_zero()) imp_fetta += delta; // Aggiusta l'ultima fetta(IVA e IMPONIBILE)
|
||||||
|
delta = item.imposta - tot_iva; // per eventali perdite di lire nella ripartizione
|
||||||
|
if (!delta.is_zero()) iva_fetta += delta;
|
||||||
|
}
|
||||||
|
// aggiusto l'IVA vendite nei plm
|
||||||
|
look_plm(vi->_month, codatt);
|
||||||
|
real ive = _plm->get_real("R0");
|
||||||
|
ive += iva_fetta;
|
||||||
|
_plm->put("R0",ive);
|
||||||
|
_plm->rewrite();
|
||||||
|
// .. e il volume di affari nei pam
|
||||||
|
real vaf = _pam->get_real("R1");
|
||||||
|
vaf += imp_fetta;
|
||||||
|
_pam->put("R1", vaf);
|
||||||
|
_pam->rewrite();
|
||||||
|
// Aggiorno i luridi pim
|
||||||
|
bool was = look_pim(vi->_month, codatt, vi->_codreg, "0", item.codiva, vi->_tipodet, TRUE);
|
||||||
|
|
||||||
|
imp_fetta += _pim->get_real("R0");
|
||||||
|
iva_fetta += _pim->get_real("R1");
|
||||||
|
_pim->put("R0", imp_fetta);
|
||||||
|
_pim->put("R1", iva_fetta);
|
||||||
|
_pim->put("S4", item.other);
|
||||||
|
// segnale per comodita' in stampa prospetto
|
||||||
|
_pim->put("B1","X");
|
||||||
|
// se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso
|
||||||
|
// viene amorosamente messo a quanto il codice IVA prevede
|
||||||
|
if (!was)
|
||||||
|
{
|
||||||
|
look_iva(item.codiva);
|
||||||
|
_pim->put("I1", (long)vendita);
|
||||||
|
if (!_iva->get_bool("B4")) _pim->put("B3", "X");
|
||||||
|
}
|
||||||
|
_pim->rewrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
totven = 0.0; // Questa va azzerato, poiche' quando ancora non era prevista
|
||||||
|
break; // la ventilazione annuale , registrava totven come 0.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user