Modifiche per permettere il trasferimento anche se la stampa della

liquidazione non e' stata attivata.
Corretto lo scorporo dei corrispettivi in annuale e relativo
trasferimento delle aliquote su tab11.
Si rimane in paziente attesa dell'ok per implementare il famigerato
PIM13.


git-svn-id: svn://10.65.10.50/trunk@4133 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1997-02-14 15:27:53 +00:00
parent 292c62bae6
commit d18a572f45
4 changed files with 160 additions and 37 deletions

View File

@ -137,6 +137,7 @@ public: // vedi sopra per le fisime morali
TString _codiva; // codice iva
TString _codatt; // codice attivita'
int _tipodet; // tipo detraibilita'
virtual TObject* dup() const { return new _CorrItem(*this); }
_CorrItem() : _codreg(5) {}
virtual ~_CorrItem() {}
};
@ -262,7 +263,7 @@ class TLiquidazione_app : public TPrint_application
TAssoc_array _codiva_arr; // cache dei codici IVA.
TAssoc_array _reg_arr; // cache dei registri.
TAssoc_array _iva11_arr; // array contenente le informazioni da trasferire.
// La chiave di ordinamento e' sulcodice attivita'.
// La chiave di ordinamento e' sul codice attivita'.
// Ogni elemento dell'array e' un _BolgArray
// La cui chiave e' a sua volta sul nome campo

View File

@ -369,14 +369,20 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
// un bel descritem (NULL se non si rimborsa un cas)
// da passare a describe_liq
rimb_d = recalc_rimborso(month,atts, stliq);
if (stliq)
{
describe_firm(month);
//describe_liq(_month, atts, _isregis ? NULL : rimb_d);
describe_liq(_month, atts, rimb_d);
}
if (_month == 13 && look_lim(_month)) // scrive i risultati solo in annuale
{
real r0 = _lim->get_real("R0");
iva11_write(rimb_d == NULL || r0.sign() >= 0); // scrive su tab1100 at last.
}
}
if (month == _month && stliq)
{
describe_firm(month);
//describe_liq(_month, atts, _isregis ? NULL : rimb_d);
describe_liq(_month, atts, rimb_d);
}
//in caso di stampa registri e in caso sia
//stato calcolato l'acconto (metodo analitico)
@ -1598,16 +1604,22 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
if (is_vendita)
{
if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") )
// x13
return;
/*
{
return;
real p = ali/CENTO;
lordo2netto(imponibile,imposta,p);// In tal caso scorpora l'iva dall'imponibile...
}
*/
// fine x13
if (tipodoc == "CN" || tipodoc == "SN" || tipodoc == "RN") // salta i non incassati
return;
if (!valintra)
{
if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo))
// x13
/* if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo))
{
if (ali == 4.00)
{
@ -1640,7 +1652,8 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
array.add(imposta,TAB11_EC206);
}
}
*/
// fine x13
if (tipoes_v == "24")
array.add(imponibile,TAB11_EC107);
if (tipoes_v == "21")
@ -1751,9 +1764,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
TString16 codiva, reg, tiva;
TString16 tpla, tvia;
TString16 v11, a11;
TToken_string tt("",'!');
tiporeg treg;
int tipocr,tipodet,tagr;
real aliq, imp, iva, vtot, atot, ivav, ivaa;
real aliq, imp, iva, vtot, atot, ivav, ivaa, adf, adi, a13i, a13v;
TString16 cur_att;
_BolgArray b_arr;
const bool is_key = _iva11_arr.is_key(codatt);
@ -1862,7 +1876,45 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
else if (v11 == "R9") // Divenuto obsoleto prima ancora di utilizzarlo...
array.add(imp,TAB11_R9,LF_TAB1100B);
if ((_isagricolo && tagr==2) || !_isagricolo)
{
tt = _pim->get("S0");
a13i = tt.get(0);
a13v = tt.get(1);
adf = imp - _pim->get_real("R7") - a13i;
adi = iva - _pim->get_real("R8") - a13v;
if (aliq == 4.00)
{
array.add(adf,TAB11_EC101);
array.add(adi,TAB11_EC201);
}
else if (aliq == 9.00)
{
array.add(adf,TAB11_EC102);
array.add(adi,TAB11_EC202);
}
else if (aliq == 10.00)
{
array.add(adf,TAB11_EC103);
array.add(adi,TAB11_EC203);
}
else if (aliq == 13.00)
{
array.add(adf,TAB11_EC104);
array.add(adi,TAB11_EC204);
}
else if (aliq == 16.00)
{
array.add(adf,TAB11_EC105);
array.add(adi,TAB11_EC205);
}
else if (aliq == 19.00)
{
array.add(adf,TAB11_EC106);
array.add(adi,TAB11_EC206);
}
}
if (_isagricolo && (tagr == 1 || tagr == 3))
{
if (aliq == 2.00)

View File

@ -6,17 +6,22 @@
#include "cg4300.h"
struct Annual_item : public TObject
class Annual_item : public TObject
{
real imposta;
real imponibile;
TString codiva;
TString other;
real _imposta;
real _imponibile;
TString _codiva;
TString _other;
public:
virtual TObject* dup() const { return new Annual_item(*this); }
Annual_item() { imposta = 0.0; imponibile = 0.0; codiva = ""; other = ""; }
real& imposta() { return _imposta;}
real& imponibile() { return _imponibile;}
TString& codiva() { return _codiva;}
TString& other() { return _other;}
Annual_item() { _imposta = 0.0; _imponibile = 0.0; _codiva = ""; _other = ""; }
virtual ~Annual_item() {}
};
void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
real& howmuch, bool intra)
{
@ -92,18 +97,51 @@ void TLiquidazione_app::zero_plafond (int month, const char* codatt)
// ricalcolo dei corrispettivi
void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
{
if (_corr_arr.items() == 0) return;
const int items = _corr_arr.items();
if (items == 0) return;
real imponibile,imposta;
// Nota: i commenti marcati con x13 indicano modifiche da rimuovere non appena implementato
// correttamente il mese 13
// x13
TString key;
bool is_key;
TAssoc_array corr_ann; // Contiene corrispettivi annuali (temporaneo, da rimuovere
// non appena implementato correttamente il mese 13)
_CorrItem cx;
// Se siamo in annuale non aggiornare i PIM/PAM/PLM dei mesi calcolati
if (_month == 13 && month < 13) return;
// fine x13
// ricalcola (solo per il mese in corso!) operando sull'array
for (int i = 0; i < _corr_arr.items(); i++)
for (int i = 0; i < items; i++)
{
_CorrItem* ci = (_CorrItem*)&_corr_arr[i];
// Se e' annuale memorizza in un assoc_array i corrispettivi annuali
// memorizza per attivita'+registro+codiva+tipodet
// x13
if (month == 13)
{
key = ci->_codiva;
is_key = corr_ann.is_key(key);
cx._totale = 0;
_CorrItem& ca = is_key ? (_CorrItem&) corr_ann[key] : cx;
ca._totale += ci->_totale;
if (!is_key) // se non c'e' lo aggiunge
{
ca._aliquota = ci->_aliquota;
ca._codreg = ci->_codreg;
ca._tipodet = ci->_tipodet;
corr_ann.add(key,ca);
}
continue;
}
// fine x13
if (ci->_month != month || ci->_codatt != codatt)
continue;
lordo2netto(ci->_totale, imponibile, imposta, ci->_aliquota);
// aggiusto l'IVA vendite nei plm
look_plm(month, codatt);
real ive = _plm->get_real("R0");
@ -124,8 +162,41 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
_pim->put("R0", imponibile);
_pim->put("R1", imposta);
_pim->rewrite();
}
}
// Dopo aver calcolato la somma dei corrispettivi annualmente, li scorpora
// x13
if (month == 13)
{
real imp,iva,imp1,iva1;
_CorrItem* cc;
// Per le prossime scritture uso impropriamente il mese 12, lo so e' terribile...
// ma non appena possibile il mese 13 sara' disponibile tutto sara' piu' bello.
for (cc = (_CorrItem *)corr_ann.first_item(); cc != NULL; cc = (_CorrItem *)corr_ann.succ_item())
{
lordo2netto(cc->_totale, imp, iva, cc->_aliquota);
imponibile += imp;
imposta += iva;
look_pim(12, codatt, cc->_codreg, "", corr_ann.get_hashobj()->key(), cc->_tipodet, TRUE);
imp1 = _pim->get_real("R0");
iva1 = _pim->get_real("R1");
imp1 += imp;
iva1 += iva;
_pim->put("R0",imp1);
_pim->put("R1",iva1);
_pim->rewrite();
}
look_plm(12, codatt); // Aggiorna l'iva vendite in PLM...
real ive = _plm->get_real("R0");
ive += imposta;
_plm->put("R0",ive);
// ed il volume d'affari in PAM
real vaf = _pam->get_real("R1");
vaf += imponibile;
_pam->put("R1",vaf);
_plm->rewrite();
_pam->rewrite();
}
// fine x13
}
// ricalcolo della malefica ventilazione
@ -258,10 +329,10 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
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;
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)
@ -310,8 +381,8 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
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);
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++)
{
@ -325,9 +396,9 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
tot_imp += imp_fetta; tot_iva += iva_fetta; // Serve per eventuali perdite di lirette...
if (j == (slices - 1))
{
delta = item.imponibile - tot_imp;
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
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
@ -342,20 +413,20 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
_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);
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);
_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);
look_iva(item.codiva());
_pim->put("I1", (long)vendita);
if (!_iva->get_bool("B4")) _pim->put("B3", "X");
}

View File

@ -921,7 +921,6 @@ void TLiquidazione_app::describe_liq(int month, const char* codatts,
d->_arr.add(di);
else delete di;
}
iva11_write(di == NULL || d->_r0.sign() >= 0); // scrive su tab1100 at last.
if (!_is_visliq)
{