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"
|
||||
|
||||
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,
|
||||
real& howmuch, bool intra)
|
||||
{
|
||||
@ -129,6 +140,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
||||
|
||||
TString att(codatt);
|
||||
|
||||
TArray annual_vent;
|
||||
Annual_item a_item;
|
||||
|
||||
// 1) ricalcola i pim dei mesi dal primo al corrente se necessario
|
||||
recalc rcl = _recalc;
|
||||
_recalc = needed;
|
||||
@ -196,18 +210,26 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
|
||||
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
|
||||
for (int i = 0; i < _vend_arr.items(); i++)
|
||||
{
|
||||
_VendItem* vi = (_VendItem*)&_vend_arr[i];
|
||||
if (vi->_month != month)
|
||||
if (vi->_month != month && !is_annual)
|
||||
continue;
|
||||
|
||||
// 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
|
||||
TDistrib dst(vi->_totale,ROUND_LIRA);
|
||||
TDistrib dst(!is_annual ? vi->_totale : totven,ROUND_LIRA);
|
||||
for (j = 0; j < _vent_arr.items(); 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))
|
||||
imposta += real(1.0);
|
||||
|
||||
// aggiusto l'IVA vendite nei plm
|
||||
look_plm(month, codatt);
|
||||
real ive = _plm->get_real("R0");
|
||||
ive += imposta;
|
||||
_plm->put("R0",ive);
|
||||
_plm->rewrite();
|
||||
// .. e il volume di affari nei pam
|
||||
real vaf = _pam->get_real("R1");
|
||||
vaf += imponibile;
|
||||
_pam->put("R1", vaf);
|
||||
_pam->rewrite();
|
||||
|
||||
// Aggiorno i luridi pim
|
||||
bool was = look_pim(month, codatt, vi->_codreg, "0", vv->_codiva, vi->_tipodet, TRUE);
|
||||
|
||||
imponibile += _pim->get_real("R0");
|
||||
imposta += _pim->get_real("R1");
|
||||
_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");
|
||||
if (is_annual)
|
||||
{
|
||||
// memorizza i dati della ventilazione annuale in un TArray
|
||||
a_item.imposta = imposta;
|
||||
a_item.imponibile = imponibile;
|
||||
a_item.codiva = vv->_codiva;
|
||||
a_item.other = vv->_other;
|
||||
annual_vent.add(a_item);
|
||||
continue;
|
||||
} else if (_month != 13)
|
||||
{
|
||||
// aggiusto l'IVA vendite nei plm
|
||||
look_plm(month, codatt);
|
||||
real ive = _plm->get_real("R0");
|
||||
ive += imposta;
|
||||
_plm->put("R0",ive);
|
||||
_plm->rewrite();
|
||||
// .. e il volume di affari nei pam
|
||||
real vaf = _pam->get_real("R1");
|
||||
vaf += imponibile;
|
||||
_pam->put("R1", vaf);
|
||||
_pam->rewrite();
|
||||
|
||||
// Aggiorno i luridi pim
|
||||
bool was = look_pim(month, codatt, vi->_codreg, "0", vv->_codiva, vi->_tipodet, TRUE);
|
||||
|
||||
imponibile += _pim->get_real("R0");
|
||||
imposta += _pim->get_real("R1");
|
||||
_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