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 _codiva; // codice iva
TString _codatt; // codice attivita' TString _codatt; // codice attivita'
int _tipodet; // tipo detraibilita' int _tipodet; // tipo detraibilita'
virtual TObject* dup() const { return new _CorrItem(*this); }
_CorrItem() : _codreg(5) {} _CorrItem() : _codreg(5) {}
virtual ~_CorrItem() {} virtual ~_CorrItem() {}
}; };
@ -262,7 +263,7 @@ class TLiquidazione_app : public TPrint_application
TAssoc_array _codiva_arr; // cache dei codici IVA. TAssoc_array _codiva_arr; // cache dei codici IVA.
TAssoc_array _reg_arr; // cache dei registri. TAssoc_array _reg_arr; // cache dei registri.
TAssoc_array _iva11_arr; // array contenente le informazioni da trasferire. 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 // Ogni elemento dell'array e' un _BolgArray
// La cui chiave e' a sua volta sul nome campo // 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) // un bel descritem (NULL se non si rimborsa un cas)
// da passare a describe_liq // da passare a describe_liq
rimb_d = recalc_rimborso(month,atts, stliq); 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 //in caso di stampa registri e in caso sia
//stato calcolato l'acconto (metodo analitico) //stato calcolato l'acconto (metodo analitico)
@ -1598,16 +1604,22 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
if (is_vendita) if (is_vendita)
{ {
if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") ) if (corrisp && tipoiva != "VE" && (tipodoc == "CR" || tipodoc == "RF" || tipodoc == "SC") )
// x13
return;
/*
{ {
return;
real p = ali/CENTO; real p = ali/CENTO;
lordo2netto(imponibile,imposta,p);// In tal caso scorpora l'iva dall'imponibile... 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 if (tipodoc == "CN" || tipodoc == "SN" || tipodoc == "RN") // salta i non incassati
return; return;
if (!valintra) if (!valintra)
{ {
if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo)) // x13
/* if (tipodoc != "AF" && ((_isagricolo && tipoagr==2) || !_isagricolo))
{ {
if (ali == 4.00) if (ali == 4.00)
{ {
@ -1640,7 +1652,8 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
array.add(imposta,TAB11_EC206); array.add(imposta,TAB11_EC206);
} }
} }
*/
// fine x13
if (tipoes_v == "24") if (tipoes_v == "24")
array.add(imponibile,TAB11_EC107); array.add(imponibile,TAB11_EC107);
if (tipoes_v == "21") if (tipoes_v == "21")
@ -1751,9 +1764,10 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
TString16 codiva, reg, tiva; TString16 codiva, reg, tiva;
TString16 tpla, tvia; TString16 tpla, tvia;
TString16 v11, a11; TString16 v11, a11;
TToken_string tt("",'!');
tiporeg treg; tiporeg treg;
int tipocr,tipodet,tagr; 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; TString16 cur_att;
_BolgArray b_arr; _BolgArray b_arr;
const bool is_key = _iva11_arr.is_key(codatt); const bool is_key = _iva11_arr.is_key(codatt);
@ -1862,6 +1876,44 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
else if (v11 == "R9") // Divenuto obsoleto prima ancora di utilizzarlo... else if (v11 == "R9") // Divenuto obsoleto prima ancora di utilizzarlo...
array.add(imp,TAB11_R9,LF_TAB1100B); 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 (_isagricolo && (tagr == 1 || tagr == 3))
{ {

View File

@ -6,17 +6,22 @@
#include "cg4300.h" #include "cg4300.h"
struct Annual_item : public TObject class Annual_item : public TObject
{ {
real imposta; real _imposta;
real imponibile; real _imponibile;
TString codiva; TString _codiva;
TString other; TString _other;
public:
virtual TObject* dup() const { return new Annual_item(*this); } 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, void TLiquidazione_app::add_plafond(int month, const char* codatt, int type,
real& howmuch, bool intra) real& howmuch, bool intra)
{ {
@ -92,16 +97,49 @@ void TLiquidazione_app::zero_plafond (int month, const char* codatt)
// ricalcolo dei corrispettivi // ricalcolo dei corrispettivi
void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt) 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; 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 // 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]; _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) if (ci->_month != month || ci->_codatt != codatt)
continue; continue;
lordo2netto(ci->_totale, imponibile, imposta, ci->_aliquota); lordo2netto(ci->_totale, imponibile, imposta, ci->_aliquota);
// aggiusto l'IVA vendite nei plm // aggiusto l'IVA vendite nei plm
@ -124,8 +162,41 @@ void TLiquidazione_app::recalc_corrispettivi(int month, const char* codatt)
_pim->put("R0", imponibile); _pim->put("R0", imponibile);
_pim->put("R1", imposta); _pim->put("R1", imposta);
_pim->rewrite(); _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 // ricalcolo della malefica ventilazione
@ -258,10 +329,10 @@ void TLiquidazione_app::recalc_ventilation(int month, const char* codatt)
if (is_annual) if (is_annual)
{ {
// memorizza i dati della ventilazione annuale in un TArray // memorizza i dati della ventilazione annuale in un TArray
a_item.imposta = imposta; a_item.imposta() = imposta;
a_item.imponibile = imponibile; a_item.imponibile() = imponibile;
a_item.codiva = vv->_codiva; a_item.codiva() = vv->_codiva;
a_item.other = vv->_other; a_item.other() = vv->_other;
annual_vent.add(a_item); annual_vent.add(a_item);
continue; continue;
} else if (_month != 13) } 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++) for (i = 0; i < a_items; i++)
{ {
Annual_item& item = (Annual_item&) annual_vent[i]; Annual_item& item = (Annual_item&) annual_vent[i];
TDistrib imp_s(item.imponibile,ROUND_LIRA); TDistrib imp_s(item.imponibile(),ROUND_LIRA);
TDistrib iva_s(item.imposta,ROUND_LIRA); TDistrib iva_s(item.imposta(),ROUND_LIRA);
tot_imp = 0.0; tot_iva = 0.0; tot_imp = 0.0; tot_iva = 0.0;
for (j = 0; j < slices; j++) 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... tot_imp += imp_fetta; tot_iva += iva_fetta; // Serve per eventuali perdite di lirette...
if (j == (slices - 1)) 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) 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; if (!delta.is_zero()) iva_fetta += delta;
} }
// aggiusto l'IVA vendite nei plm // 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->put("R1", vaf);
_pam->rewrite(); _pam->rewrite();
// Aggiorno i luridi pim // 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"); imp_fetta += _pim->get_real("R0");
iva_fetta += _pim->get_real("R1"); iva_fetta += _pim->get_real("R1");
_pim->put("R0", imp_fetta); _pim->put("R0", imp_fetta);
_pim->put("R1", iva_fetta); _pim->put("R1", iva_fetta);
_pim->put("S4", item.other); _pim->put("S4", item.other());
// segnale per comodita' in stampa prospetto // segnale per comodita' in stampa prospetto
_pim->put("B1","X"); _pim->put("B1","X");
// se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso // se e' nuovo, il segnale per usare l'importo nel calcolo del rimborso
// viene amorosamente messo a quanto il codice IVA prevede // viene amorosamente messo a quanto il codice IVA prevede
if (!was) if (!was)
{ {
look_iva(item.codiva); look_iva(item.codiva());
_pim->put("I1", (long)vendita); _pim->put("I1", (long)vendita);
if (!_iva->get_bool("B4")) _pim->put("B3", "X"); 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); d->_arr.add(di);
else delete di; else delete di;
} }
iva11_write(di == NULL || d->_r0.sign() >= 0); // scrive su tab1100 at last.
if (!_is_visliq) if (!_is_visliq)
{ {