Reso il calcolo ventilazione uguale al sistema (xyk censored)

git-svn-id: svn://10.65.10.50/trunk@5642 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1997-11-19 17:21:28 +00:00
parent bff6efa085
commit 6cd542869f

View File

@ -189,12 +189,57 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
totven += vi->_totale;
}
/*
* Udite! Udite! Per editto di sua maesta' la ventilazione
* va calcolata in modo uguale al frigorifero (cioe' sbagliato)
* I migliori auguri per una pronta guarigione dallo stato di
* infermita' mentale che vi affligge tutti.
* Bando ai convenevoli e passiamo alla spiegazione (se siete
* rigorosamente razionali fermatevi qui e non andate oltre):
* la ventilazione, in breve, consiste in questo:
* si totalizzano gli acquisti beni per rivendita da inizio anno
* e le vendite (solo del periodo) da scorporare (corrispettivi).
* A questo punto si dovranno "scaglionare" le vendite in
* proporzione agli acquisti dello stesso codice IVA. Avremo quindi N
* importi vendite lordi, la cui somma dovra' sempre dare il totale vendite
* calcolato inizialmente. Per ogni scaglione ottenuto si procedera' poi
* allo scorporo dell'iva, in modo che il tutto risulti coerente.
*
* La nostra implementazione:
* si calcolino il totale acquisti beni per rivendita da inizio anno e
* le vendite da ventilare nel periodo.
* Si istanzia un TDistrib (vedi la classe) sul totale delle vendite da ripartire,
* quindi per ogni aliquota acquisti presente si aggiunge una percentuale di ripartizione
* (acquisti/totale acquisti) al suddetto oggetto.
* In tal modo avremo che il totale delle vendite sara' sempre
* uguale all'originale senza perdite 0 aggiunte di insignificanti lirette.
* come ultima cosa si estraggono le varie suddivisioni ottenute a da li si procede
* allo scorporo dell'iva.
*
* La loro implementazione:
* come nel nostro caso si effettua la totalizzazione degli acquisti e delle vendite
* a questo punto pero' si introduce il leggendario moltiplicatore, che serve, se non
* altro a far sbagliare i conti sugli arrotondamenti e sui totali. Tale moltiplicatore
* e' dato dal rapporto tra totale acquisti e totale vendite. Per ogni aliquota iva
* acquisti si effettua percio' la seguente operazione per ottenere il relativo
* importo vendite:
* ROUND(acquisti * moltiplicatore)
* come si puo' notare, gia' qui si introduce un errore, perche' non e' affatto detto
* che la somma di tutti gli importi vendite ottenuti dia ancora l'importo complessivo originale.
* Infine si scorpora l'iva come nel nostro caso.
*
* Ebbene si': il nostro metodo (corretto) e' stato bandito e sostituito con quello
* super-mega-maxi-iper-errato del sistema. Si lascia commentato per memoria futura
* l'implementazione corretta, anche perche' forse in futuro (possibilita' molto remota)
* cambieranno idea.
*
* Sigh!
*
{
_VendItem* vi = (_VendItem*)&_vend_arr[0];
//totven += vi->_totale;
// 3.2) calcola percentuali di ripartizione e prepara l'affettatrice
TDistrib dst(/*vi->_totale*/totven, ROUND_LIRA);
TDistrib dst(totven, ROUND_LIRA);
for (j = 0; j < vent_items; j++)
{
_VentItem* vv = (_VentItem*)&_vent_arr[j];
@ -258,7 +303,53 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
_pim->rewrite();
}
}
*/
// Di seguito l'implementazione del sistema (errata come spiegato sopra).
const real moltiplicatore = totven / totacq;
real imponibile, imposta;
_VendItem* vi = (_VendItem*)&_vend_arr[0];
for (j = 0; j < vent_items; j++)
{
_VentItem* vv = (_VentItem*)&_vent_arr[j];
imponibile = vv->_totale * moltiplicatore; // Importo lordo vendite
imponibile.round(ROUND_LIRA);
lordo2netto(imponibile, imposta, vv->_aliquota); // Scorpora l'iva
// 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();
}
// memorizza totali per il prospettino di m.
look_plm(month, codatt);