Correzioni ai seguenti errori relativi al trasferimento IVA11 e non:

MI2235, MI2236, MI2239, MI2237, MI2238, MI3453, MI2214


git-svn-id: svn://10.65.10.50/trunk@3915 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
angelo 1996-11-20 15:02:44 +00:00
parent e3e8e89c59
commit 3e7075fb8b
3 changed files with 151 additions and 63 deletions

View File

@ -407,6 +407,8 @@ public:
void iva11_set_arr (const TString& codatt); void iva11_set_arr (const TString& codatt);
// Scorre tutti i PIM della ditta, per completare _iva11_arr prima di chiamare write_IVA11() // Scorre tutti i PIM della ditta, per completare _iva11_arr prima di chiamare write_IVA11()
void iva11_set_arr_pim (const TString& codatt); void iva11_set_arr_pim (const TString& codatt);
// Resetta i valori di R1 ed R2 per ogni attivita' della ditta corrente se non e' stato stampato il rimborso
void iva11_reset_R1R2();
// Scrive per la ditta/attivita' corrente, i dati relativi al trasferimento IVA11 // Scrive per la ditta/attivita' corrente, i dati relativi al trasferimento IVA11
void iva11_write (); void iva11_write ();

View File

@ -355,6 +355,8 @@ 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 (_is_interactive && month == 13 && rimb_d == NULL)
iva11_reset_R1R2();
} }
if (month == _month && stliq) if (month == _month && stliq)
@ -438,6 +440,7 @@ void TLiquidazione_app::zero_att(int month, const char* codatt)
_pim->put("R12",""); _pim->put("R12","");
_pim->put("R13",""); _pim->put("R13","");
_pim->put("R14",""); _pim->put("R14","");
_pim->put("S0","");
_pim->put("S1",""); _pim->put("S1","");
_pim->put("S2",""); _pim->put("S2","");
_pim->rewrite(); _pim->rewrite();
@ -614,7 +617,10 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
int tipoatt = _rmoviva->get_int("TIPOATT"); int tipoatt = _rmoviva->get_int("TIPOATT");
// autofatture art. 17 per non residenti, con trattamento // autofatture art. 17 per non residenti, con trattamento
// speciale in liquidazione annuale // speciale in liquidazione annuale
bool autodafe = (tipodoc == "AF" && tipocr == 4); bool autodafe = tipodoc == "AF"; //Adesso il tipocr==4 non c'entra piu' un tubo
// vendite art. 40 c. 5/6/8 acq.intra., con trattamento
// speciale in liquidazione annuale (A36 in stampa)
bool art40 = (tipodoc != "AF" && tipoiva != "NS" && !rcs.get_bool("AUTOFATT") && rcs.get_bool("VALINTRA") && !intra);
// indica acquisti per rivendita; viene messo in B4 di PIM per // indica acquisti per rivendita; viene messo in B4 di PIM per
// indicare che e' soggetto al ricalcolo IVA (se voluto) in modo // indicare che e' soggetto al ricalcolo IVA (se voluto) in modo
// da evitare di dover controllare mese e anno sul PIM // da evitare di dover controllare mese e anno sul PIM
@ -651,11 +657,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
*/ */
if (!(okc && (cond1 || cond2)) && !fattrit) if (!(okc && (cond1 || cond2)) && !fattrit)
continue; continue;
}
// Filling dell'array per IVA11 // Filling dell'array per IVA11
if (_is_interactive) if (_is_interactive && _month == 13)
iva11_set_arr(trueatt); iva11_set_arr(trueatt);
}
if (noninc) // non incassati: non devono entrare in nessun altro calcolo if (noninc) // non incassati: non devono entrare in nessun altro calcolo
{ {
@ -960,6 +966,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real fci = _pim->get_real("R13"); real fci = _pim->get_real("R13");
real fcv = _pim->get_real("R14"); real fcv = _pim->get_real("R14");
/* i conturbanti art. 40 c. 5/6/8 a.i. */
TToken_string kr(_pim->get("S0"),'!');
real a36i(kr.get(0));
real a36v(kr.get(1));
/* le porche fatture in ritardo */ /* le porche fatture in ritardo */
TToken_string fr(_pim->get("S1"),'!'); TToken_string fr(_pim->get("S1"),'!');
real rti(fr.get(0)); real rti(fr.get(0));
@ -1099,12 +1110,22 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
* Li metto in R7/R8 di pim e li sommo anche nelle * Li metto in R7/R8 di pim e li sommo anche nelle
* vendite; la describe_pim() dovra' sommarli su tutti i * vendite; la describe_pim() dovra' sommarli su tutti i
* pim, scorporarli dalle rispettive vendite * pim, scorporarli dalle rispettive vendite
* e assegnarli al codice IVA A35 in caso di liq. annuale * e assegnarli al codice IVA AF in caso di liq. annuale
*/ */
adf += imponibile; adf += imponibile;
adi += imposta; adi += imposta;
} }
if (art40) // ammontare acq. intr. art40 c. 5/6/8
{ // Analogamente alle autofatture, si devono riportare a parte in annuale
// Vengono piazzati in una TToken_string con separatore = a '!'.
// La TToken_string viene registrata in S0.
// La describe_pim() sommera' tutte le storie, scorporandoli
// dalle vendite e assegnandoli al codice A36 in caso di liq annuale.
a36i += imponibile;
a36v += imposta;
}
if (corrisp && !true_corrisp) if (corrisp && !true_corrisp)
{ {
fci += imponibile; fci += imponibile;
@ -1135,6 +1156,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
_pim->put("B4", (_isricacq && was_riv) ? "X" : ""); _pim->put("B4", (_isricacq && was_riv) ? "X" : "");
_pim->put("S5", tipoiva); _pim->put("S5", tipoiva);
// art 40 c. 5/6/8 per A36.
kr.add(a36i.string(), 0);
kr.add(a36v.string(), 1);
_pim->put("S0",kr);
// fatture in ritardo // fatture in ritardo
fr.add(rti.string(), 0); fr.add(rti.string(), 0);
fr.add(rtv.string(), 1); fr.add(rtv.string(), 1);
@ -1340,7 +1367,7 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
const TString tipoes_a = _iva->get("S9"); const TString tipoes_a = _iva->get("S9");
const int tipoagr = atoi(_iva->get("S4")); const int tipoagr = atoi(_iva->get("S4"));
const TRectype& rcs = _cur->curr(LF_CAUSALI); const TRectype& rcs = _cur->curr(LF_CAUSALI);
const bool autofattura = rcs.get_bool("AUTOFATTURA"); const bool autofattura = rcs.get_bool("AUTOFATT");
const bool sosp_imp = _reg->get_bool("B1"); const bool sosp_imp = _reg->get_bool("B1");
tiporeg tipomov = (tiporeg)_reg->get_long("I0"); tiporeg tipomov = (tiporeg)_reg->get_long("I0");
const bool is_vendita = tipomov == vendita; const bool is_vendita = tipomov == vendita;
@ -1499,12 +1526,12 @@ void TLiquidazione_app::iva11_set_arr(const TString& codatt)
if (tipodoc == "AF") if (tipodoc == "AF")
{ {
_iva11_arr.add(imponibile,TAB11_A35); _iva11_arr.add(imponibile,TAB11_A35);
_iva11_arr.add(imposta,TAB11_L2,LF_TAB1100B); _iva11_arr.add(imposta,TAB11_L2);
} }
else if (rcs.get_bool("VALINTRA") && !intra) else if (rcs.get_bool("VALINTRA") && !intra)
{ {
_iva11_arr.add(imponibile,TAB11_A35BIS); _iva11_arr.add(imponibile,TAB11_A35BIS);
_iva11_arr.add(imposta,TAB11_L2BIS,LF_TAB1100B); _iva11_arr.add(imposta,TAB11_L2BIS);
} }
if (!autofattura && !sosp_imp && intra && tipoes_v == "24B") if (!autofattura && !sosp_imp && intra && tipoes_v == "24B")
@ -1612,53 +1639,72 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
imp = _pim->get_real("R0"); imp = _pim->get_real("R0");
iva = _pim->get_real("R1"); iva = _pim->get_real("R1");
// I campi qui memorizzati sono tutti su TAB1100A if (is_acquisto)
if (is_acquisto && tipocr == 2) {
_iva11_arr.add(imp,TAB11_IMA01); switch (tipocr)
if (is_acquisto && tipocr == 8) {
_iva11_arr.add(imp,TAB11_IMA02); case 2:
_iva11_arr.add(imp,TAB11_IMA01);
break;
case 8:
_iva11_arr.add(imp,TAB11_IMA02);
break;
case 1:
case 5:
_iva11_arr.add(imp,TAB11_IMA03);
break;
default:
break;
}
if (is_acquisto && tipodet == 1 && tipocr == 0) if (tipodet == 1)
_iva11_arr.add(iva,TAB11_B14); _iva11_arr.add(iva,TAB11_B14);
if (is_acquisto && tipocr == 0 && aliq == 4.00) if (aliq == 4.00)
{ {
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC101); _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC101);
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC201); _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC201);
} }
if (is_acquisto && tipocr == 0 && aliq == 9.00) else
{ if (aliq == 9.00)
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC102); {
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC202); _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC102);
} _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC202);
if (is_acquisto && tipocr == 0 && aliq == 10.00) }
{ else
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC103); if (aliq == 10.00)
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC203); {
} _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC103);
if (is_acquisto && tipocr == 0 && aliq == 13.00) _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC203);
{ }
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC104); else
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC204); if (aliq == 13.00)
} {
if (is_acquisto && tipocr == 0 && aliq == 16.00) _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC104);
{ _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC204);
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC105); }
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC205); else
} if (aliq == 16.00)
if (is_acquisto && tipocr == 0 && aliq == 19.00) {
{ _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC105);
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC106); _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC205);
_iva11_arr.add(_pim->get_real("R10"),TAB11_FBC206); }
} else
if (is_acquisto && tipocr == 0 && a11 == "12") if (aliq == 19.00)
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC107); {
if (is_acquisto && tipocr == 0 && (a11 == "13" || a11 == "14")) _iva11_arr.add(_pim->get_real("R9"),TAB11_FBC106);
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC108); _iva11_arr.add(_pim->get_real("R10"),TAB11_FBC206);
if (is_acquisto && tipocr == 0 && a11 == "15") }
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC109);
if (is_vendita && tipocr == 0 && ((_isagricolo && tagr==2) || !_isagricolo)) if (a11 == "12")
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC107);
if (a11 == "13" || a11 == "14")
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC108);
if (a11 == "15")
_iva11_arr.add(_pim->get_real("R9"),TAB11_FBC109);
} // is_acquisto
if (is_vendita && ((_isagricolo && tagr==2) || !_isagricolo))
{ {
if (aliq == 4.00) if (aliq == 4.00)
{ {
@ -1691,7 +1737,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
_iva11_arr.add(iva,TAB11_EC206); _iva11_arr.add(iva,TAB11_EC206);
} }
} }
if (is_vendita && tipocr == 0) if (is_vendita)
{ {
if (v11 == "10") if (v11 == "10")
_iva11_arr.add(imp,TAB11_EC107); _iva11_arr.add(imp,TAB11_EC107);
@ -1719,7 +1765,7 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
if (is_vendita && tipocr == 4) if (is_vendita && tipocr == 4)
_iva11_arr.add(imp,TAB11_EC113); _iva11_arr.add(imp,TAB11_EC113);
if (is_vendita && _isagricolo && tipocr && (tagr == 1 || tagr == 3)) if (is_vendita && _isagricolo && (tagr == 1 || tagr == 3))
{ {
if (aliq == 2.00) if (aliq == 2.00)
{ {
@ -1798,6 +1844,23 @@ void TLiquidazione_app::iva11_set_arr_pim(const TString& codatt)
} }
} }
void TLiquidazione_app::iva11_reset_R1R2()
// Azzera su file i valori di R1 ed R2 se non e' stato stampato il rimborso.
{
TLocalisamfile& tab1100b = _tab11->lfile(LF_TAB1100B);
TString ditta,ditta_read;
ditta.format("%05ld",_nditte->curr().get_long(NDT_CODDITTA));
tab1100b.put(TAB11_TADITT,ditta);
for (tab1100b.read(_isgteq); !tab1100b.eof(); tab1100b.next())
{
ditta_read = tab1100b.get(TAB11_TADITT);
if (ditta != ditta_read) break;
tab1100b.zero(TAB11_R1);
tab1100b.zero(TAB11_R2);
tab1100b.rewrite();
}
}
void TLiquidazione_app::iva11_write() void TLiquidazione_app::iva11_write()
// Trasferisce i dati IVA11 annuali dall'assoc_array al file tab1100 // Trasferisce i dati IVA11 annuali dall'assoc_array al file tab1100
{ {

View File

@ -393,7 +393,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
int last = _descr_arr.last(); int last = _descr_arr.last();
bool isfirst = TRUE; bool isfirst = TRUE;
real t0, t1, t2, t3, t4, t5; real t0, t1, t2, t3, t4, t5;
real autodafe, autodafe_iva; real autodafe, autodafe_iva, art40, art40_iva;
bool skip_acq = atts.items() == 1 && _mixed; bool skip_acq = atts.items() == 1 && _mixed;
@ -556,6 +556,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
if (!corrisp || (!cfv.is_zero() || !cfi.is_zero())) if (!corrisp || (!cfv.is_zero() || !cfi.is_zero()))
{ {
real adf, adi; // autofatture non residenti art. 17 real adf, adi; // autofatture non residenti art. 17
real a36i, a36v; // ammontare art 40 c. 5/6/8
real vendi = corrisp ? cfi : _pim->get_real("R0"); real vendi = corrisp ? cfi : _pim->get_real("R0");
real vendv = corrisp ? cfv : _pim->get_real("R1"); real vendv = corrisp ? cfv : _pim->get_real("R1");
@ -564,17 +565,22 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
// vengono normalmente considerati nelle vendite // vengono normalmente considerati nelle vendite
if (month == 13) if (month == 13)
{ {
TToken_string kr(_pim->get("S0"),'!');
a36i = kr.get(0);
a36v = kr.get(1);
adf = _pim->get_real("R7"); adf = _pim->get_real("R7");
adi = _pim->get_real("R8"); adi = _pim->get_real("R8");
} }
d->_r0 += vendi - adf; d->_r0 += vendi - adf - a36i;
d->_r1 += vendv - adi; d->_r1 += vendv - adi - a36v;
t0 += vendi /* - adf */; t0 += vendi /* - adf */;
t1 += vendv /* - adi */; t1 += vendv /* - adi */;
autodafe += adf; autodafe += adf;
autodafe_iva += adi; autodafe_iva += adi;
art40 += a36i;
art40_iva += a36v;
} }
} }
if (isnew) if (isnew)
@ -604,11 +610,26 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
} }
} }
if (art40.sign() > 0 || art40_iva.sign() > 0)
{
_DescrItem* ads = new _DescrItem(PIM_ROW);
ads->_s0 = ref;
ads->_s1 = "A36";
ads->_r0 = art40;
ads->_r1 = art40_iva;
if (isfirst)
{
isfirst = FALSE;
ads->_f0 = TRUE;
}
_descr_arr.add(ads);
}
if (autodafe.sign() > 0 || autodafe_iva.sign() > 0) if (autodafe.sign() > 0 || autodafe_iva.sign() > 0)
{ {
_DescrItem* ads = new _DescrItem(PIM_ROW); _DescrItem* ads = new _DescrItem(PIM_ROW);
ads->_s0 = ref; ads->_s0 = ref;
ads->_s1 = "A35"; // cosi' vollero ads->_s1 = "AF"; // cosi' vollero, inoltre non e' piu' A35 ma AF, come sul dio sistema
ads->_r0 = autodafe; ads->_r0 = autodafe;
ads->_r1 = autodafe_iva; ads->_r1 = autodafe_iva;
if (isfirst) if (isfirst)
@ -1209,8 +1230,10 @@ void TLiquidazione_app::set_pim(_DescrItem& d)
return; return;
int rw = 1; int rw = 1;
if (d._s1 == "A35") if (d._s1 == "AF") //Il dio sistema colpisce ancora, non va bene A35, ma AF...
d._s2 = "Artt.17c3/74c1"; d._s2 = "Artt.17c3/74c1"; // La descrizione non la metto uguale perche' cosi e' piu' fika
else if (d._s1 == "A36") // Sempre per merito del dio sistema ho dovuto aggiungere A36.
d._s2 = "Art.40c5/6/8 a.i.";
else if (d._s0 == "74TER") else if (d._s0 == "74TER")
rw++; rw++;
else else