Patch level : 12.0 310

Files correlati     : cg4.exe
Commento            :

Correzioni alla liquidazione per l'IVA differita e per cassa

git-svn-id: svn://10.65.10.50/branches/R_10_00@23432 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2016-12-09 23:54:43 +00:00
parent f5ab41901e
commit f565c39768
3 changed files with 101 additions and 56 deletions

View File

@ -537,7 +537,7 @@ public:
const real& howmuch, bool intra); const real& howmuch, bool intra);
// IVA differita e per cassa // IVA differita e per cassa
void zero_diff(int month, const char* codatt); // Azzera tabella IVA x Cassa void zero_diff(int month, const char* codatt); // Azzera tabella IVA x Cassa
// Ritorna il parametro della liquidazione differita per la ditta corrente, cosi come // Ritorna il parametro della liquidazione differita per la ditta corrente, cosi come
// e' scritto sui parametri liquidazione (LIA) // e' scritto sui parametri liquidazione (LIA)

View File

@ -1127,13 +1127,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
#ifdef DBG #ifdef DBG
const long nr = _mov->get_long(MOV_NUMREG); const long nr = _mov->get_long(MOV_NUMREG);
if (nr == 24894) if (nr == 24734 || nr == 24735)
int i = 1 ; int i = 1 ;
#endif #endif
if (bIsMovDiff && tm == tm_fattura) if (bIsMovDiff && tm == tm_fattura)
{ {
// const bool id_chiusa = ivadiff_chiusa(_mov->curr(), inizio);
const bool id_chiusa = ivadiff_chiusa(_mov->curr(), TDate(31,12,inizio.year()-1)); const bool id_chiusa = ivadiff_chiusa(_mov->curr(), TDate(31,12,inizio.year()-1));
if (!dok && id_chiusa) if (!dok && id_chiusa)
continue; // Salta vecchi movimenti differiti già chiusi continue; // Salta vecchi movimenti differiti già chiusi
@ -1386,14 +1385,15 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real impos_ind; // Imposta indetraibile real impos_ind; // Imposta indetraibile
real impon_det; // Imponibile detraibile real impon_det; // Imponibile detraibile
real impos_det; // Imposta detraibile real impos_det; // Imposta detraibile
char sezfat;
TLocalisamfile id(LF_IVADIFF);
if (bIsMovDiff && tm == tm_fattura) if (bIsMovDiff && tm == tm_fattura)
{ {
const char sezfat = tipomov == vendita ? 'D' : 'A';
const TDate datareg = _mov->get(MOV_DATAREG); const TDate datareg = _mov->get(MOV_DATAREG);
TLocalisamfile id(LF_IVADIFF); sezfat = tipomov == vendita ? 'D' : 'A';
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put("NUMPRO", 0); id.put("NUMPRO", 0);
id.put(PART_TIPOMOV, tm); id.put(PART_TIPOMOV, tm);
@ -1418,18 +1418,7 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
id.put("IMPORTO", imponibile_orig+imposta_orig); id.put("IMPORTO", imponibile_orig+imposta_orig);
id.put(RMI_IMPONIBILE, imponibile_orig); id.put(RMI_IMPONIBILE, imponibile_orig);
id.put(RMI_IMPOSTA, imposta_orig);
/* cazzata?
if (percind > ZERO) // Nel caso di IVA indetraibile memorizza solo la parte detraibile!
{
real imp_det, iva_det, imp_ind, iva_ind;
analizza_IVA(imponibile_orig, imposta_orig, percind, corrisp, false, codiva,
imp_det, iva_det, imp_ind, iva_ind);
id.put(RMI_IMPOSTA, iva_det);
}
else
*/
id.put(RMI_IMPOSTA, imposta_orig);
const int ew = id.write_rewrite(); const int ew = id.write_rewrite();
if (ew != NOERR) if (ew != NOERR)
@ -1442,53 +1431,57 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real totfat = _mov->get(MOV_TOTDOC); real totfat = _mov->get(MOV_TOTDOC);
real tot = totfat; real tot = totfat;
TLocalisamfile id(LF_IVADIFF); FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
TRectype& idcurr = id.curr();
FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
{ {
const TRectype& pagsca = *(TRectype*)obj; const TRectype& pagsca = *(TRectype*)obj;
const int nrigp = pagsca.get_int(PAGSCA_NRIGP); const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
id.zero(); id.zero();
idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp); CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp);
idcurr.put("NUMPRO", min(nrigp, 999)); id.put("NUMPRO", min(nrigp, 999));
if (id.read(_isequal, _lock) != NOERR) if (id.read(_isequal, _lock) != NOERR)
{ {
id.zero(); id.zero();
idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG)); id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG)); id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
idcurr.put("NUMPRO", min(nrigp, 999)); id.put("NUMPRO", min(nrigp, 999));
if (id.write() != NOERR) if (id.write() != NOERR)
error_box("Errore %d in creazione record IVADIFF", id.status()); error_box("Errore %d in creazione record IVADIFF", id.status());
} }
idcurr.put(MOV_DATAREG, _mov->get(MOV_DATADOC)); id.put(MOV_DATAREG, _mov->get(MOV_DATADOC));
CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt); CHECKD(rmi_tipoatt > 0, "Invalid tipo att ", rmi_tipoatt);
idcurr.put("TIPOATT", rmi_tipoatt); id.put("TIPOATT", rmi_tipoatt);
idcurr.put("TIPOIVA", tipomov == 2 ? 2 : 1); id.put("TIPOIVA", tipomov == 2 ? 2 : 1);
idcurr.put("TIPODIFF", iva_cass ? 2 : 1); id.put("TIPODIFF", iva_cass ? 2 : 1);
idcurr.put(RMI_CODIVA, codiva); id.put(RMI_CODIVA, codiva);
TImporto pagtmp; TImporto pagtmp;
bool ultimo = false; bool ultimo = false;
long nregpag;
int nrigpag;
tipo_movimento tipomov_pag = tm_pagamento; tipo_movimento tipomov_pag = tm_pagamento;
if (nrigp > 0 && nrigp < 9999) if (nrigp > 0 && nrigp < 9999)
{ {
const TPartita& p = arrpart.partita(pagsca); const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp); const TRiga_partite& rp = p.riga(nrigp);
tipomov_pag = rp.tipo();
idcurr.put(PART_TIPOMOV, tipomov_pag); nregpag = rp.get_long(PART_NREG);
idcurr.put("NUMREGP", rp.get(PART_NREG)); nrigpag = rp.get_int(PART_NUMRIG);
idcurr.put("NUMRIGP", rp.get(PART_NUMRIG)); tipomov_pag = rp.tipo();
id.put(PART_TIPOMOV, tipomov_pag);
id.put("NUMREGP", nregpag);
id.put("NUMRIGP", nrigpag);
TDate d = rp.get(PART_DATAPAG); TDate d = rp.get(PART_DATAPAG);
if (!d.ok()) if (!d.ok())
d = rp.get(PART_DATADOC); d = rp.get(PART_DATADOC);
if (!d.ok()) if (!d.ok())
d = rp.get(PART_DATAREG); d = rp.get(PART_DATAREG);
idcurr.put("DATAREGP", d); id.put("DATAREGP", d);
idcurr.put("ANNOLIQ", d.year()); id.put("ANNOLIQ", d.year());
pagtmp = p.importo_pagsca(pagsca); pagtmp = p.importo_pagsca(pagsca);
pagtmp.normalize(sezpag); pagtmp.normalize(sezpag);
ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine); ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine);
@ -1496,11 +1489,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else else
{ {
// Falso record generato da datainc // Falso record generato da datainc
idcurr.put(PART_TIPOMOV, tipomov_pag); nregpag = _mov->get_long(MOV_NUMREG);
idcurr.put("NUMREGP", _mov->get(MOV_NUMREG)); nrigpag = nrigp;
idcurr.put("NUMRIGP", nrigp);
idcurr.put("DATAREGP", _mov->get(MOV_DATAINC)); id.put(PART_TIPOMOV, tipomov_pag);
idcurr.put("ANNOLIQ", year_int); id.put("NUMREGP", nregpag);
id.put("NUMRIGP", nrigp);
id.put("DATAREGP", _mov->get(MOV_DATAINC));
id.put("ANNOLIQ", year_int);
pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO)); pagtmp.set(sezpag, pagsca.get_real(PAGSCA_IMPORTO));
ultimo = true; ultimo = true;
} }
@ -1512,15 +1508,61 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (resto > 0) if (resto > 0)
meseliq += 3-resto; meseliq += 3-resto;
} }
idcurr.put("MESELIQ", meseliq); id.put("MESELIQ", meseliq);
idcurr.put("SEZIONE", pagtmp.sezione()); id.put("SEZIONE", pagtmp.sezione());
real val_imp = pagtmp.valore() * lordo_orig / tot; real val_imp = pagtmp.valore() * lordo_orig / tot;
real val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec()); real val_iva;
idcurr.put("IMPORTO", val_imp + val_iva); if (ultimo)
idcurr.put(RMI_IMPONIBILE, val_imp); {
idcurr.put(RMI_IMPOSTA, val_iva); TRectype svidrec(id.curr());
TLocalisamfile rid(LF_IVADIFF);
const long numreg = _rmoviva->get_long(RMI_NUMREG);
const int numrig = _rmoviva->get_int(RMI_NUMRIG);
rid.put(MOV_NUMREG, numreg);
rid.put(RMI_NUMRIG, numrig);
val_iva = imposta_orig;
bool pag_found = false;
int err = rid.read(_isgteq);
for (; err == NOERR && rid.get_long(RMI_NUMREG) == numreg && rid.get_int(RMI_NUMRIG) == numrig; err = rid.next())
{
const long ridnumreg =rid.get_long(RMI_NUMREG);
const int ridnumrig = rid.get_int(RMI_NUMRIG);
const tipo_movimento ridtipopag = (tipo_movimento) rid.get_int(PART_TIPOMOV);
if (ridnumreg == numreg && ridnumrig == numrig)
{
const long ridnregpag = rid.get_long("NUMREGP");
const int ridnrigpag = rid.get_int("NUMRIGP");
if ((ridtipopag != tm_fattura) && ((ridnregpag != nregpag) &&
(ridnrigpag != nrigpag)))
{
pag_found = true;
if (sezfat != sezpag)
val_iva -= rid.get_long(RMI_IMPOSTA);
else
val_iva += rid.get_long(RMI_IMPOSTA);
}
}
}
if (!pag_found)
val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
else
civa.scorpora(val_imp, TCurrency::get_firm_dec());
id.curr() = svidrec;
}
else
val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
id.put("IMPORTO", val_imp + val_iva);
id.put(RMI_IMPONIBILE, val_imp);
id.put(RMI_IMPOSTA, val_iva);
if (tipomov_pag >= tm_pagamento) if (tipomov_pag >= tm_pagamento)
{ {

View File

@ -626,7 +626,7 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
if (!_nditte->is_first_match(LF_ATTIV)) if (!_nditte->is_first_match(LF_ATTIV))
return; return;
if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) // rischioso non farlo in tredicesima
return; return;
TFast_isamfile fid(LF_IVADIFF); TFast_isamfile fid(LF_IVADIFF);
@ -637,10 +637,11 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
query << "USE IVADIFF KEY 2"; // Key 2 = ANNOLIQ+MESELIQ+... query << "USE IVADIFF KEY 2"; // Key 2 = ANNOLIQ+MESELIQ+...
query << "\nFROM ANNOLIQ=" << _year; query << "\nFROM ANNOLIQ=" << _year;
// Se calcolo gennaio (o marzo trimestrale) azzero tutto l'anno, altrimenti solo il mese selezionato // Se calcolo gennaio (o marzo trimestrale) azzero tutto l'anno, altrimenti solo il mese selezionato
if (month > (_freqviva == "T" ? 3 : 1)) // if (month > (_freqviva == "T" ? 3 : 1))
query << " MESELIQ=" << month; query << " MESELIQ=" << month;
query << "\nTO ANNOLIQ=" << _year; // Dal 18-06-2014 lascia stare l'anno prossimo! query << "\nTO ANNOLIQ=" << _year; // Dal 18-06-2014 lascia stare l'anno prossimo!
query << " MESELIQ=" << month + (_freqviva == "T" ? 2 : 0);
TISAM_recordset id(query); TISAM_recordset id(query);
@ -651,7 +652,7 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
for (bool ok = id.move_first(); ok; ok = id.move_next()) for (bool ok = id.move_first(); ok; ok = id.move_next())
{ {
pi.add_status(1); pi.add_status(1);
file.zero("ANNOLIQ"); /* file.zero("ANNOLIQ");
file.zero("MESELIQ"); file.zero("MESELIQ");
file.zero("IMPORTO"); file.zero("IMPORTO");
file.zero("IMPONIBILE"); file.zero("IMPONIBILE");
@ -666,6 +667,8 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
file.zero("TIPOATT"); file.zero("TIPOATT");
file.zero("TIPODIFF"); file.zero("TIPODIFF");
file.zero("CHIUSA"); file.zero("CHIUSA");
file.rewrite(); file.rewrite(); */
} file.remove();
}
} }