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);
// 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
// e' scritto sui parametri liquidazione (LIA)

View File

@ -1127,13 +1127,12 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
#ifdef DBG
const long nr = _mov->get_long(MOV_NUMREG);
if (nr == 24894)
if (nr == 24734 || nr == 24735)
int i = 1 ;
#endif
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));
if (!dok && id_chiusa)
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 impon_det; // Imponibile detraibile
real impos_det; // Imposta detraibile
char sezfat;
TLocalisamfile id(LF_IVADIFF);
if (bIsMovDiff && tm == tm_fattura)
{
const char sezfat = tipomov == vendita ? 'D' : 'A';
const TDate datareg = _mov->get(MOV_DATAREG);
TLocalisamfile id(LF_IVADIFF);
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
sezfat = tipomov == vendita ? 'D' : 'A';
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put("NUMPRO", 0);
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(RMI_IMPONIBILE, imponibile_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);
id.put(RMI_IMPOSTA, imposta_orig);
const int ew = id.write_rewrite();
if (ew != NOERR)
@ -1442,53 +1431,57 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
real totfat = _mov->get(MOV_TOTDOC);
real tot = totfat;
TLocalisamfile id(LF_IVADIFF);
TRectype& idcurr = id.curr();
FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
FOR_EACH_ARRAY_ITEM(pagscatt, r, obj)
{
const TRectype& pagsca = *(TRectype*)obj;
const int nrigp = pagsca.get_int(PAGSCA_NRIGP);
id.zero();
idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
CHECKD(nrigp > 0, "Invalid NRIGP ", nrigp);
idcurr.put("NUMPRO", min(nrigp, 999));
id.put("NUMPRO", min(nrigp, 999));
if (id.read(_isequal, _lock) != NOERR)
{
id.zero();
idcurr.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
idcurr.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
idcurr.put("NUMPRO", min(nrigp, 999));
id.put(RMI_NUMREG, _rmoviva->get(RMI_NUMREG));
id.put(RMI_NUMRIG, _rmoviva->get(RMI_NUMRIG));
id.put("NUMPRO", min(nrigp, 999));
if (id.write() != NOERR)
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);
idcurr.put("TIPOATT", rmi_tipoatt);
idcurr.put("TIPOIVA", tipomov == 2 ? 2 : 1);
idcurr.put("TIPODIFF", iva_cass ? 2 : 1);
idcurr.put(RMI_CODIVA, codiva);
id.put("TIPOATT", rmi_tipoatt);
id.put("TIPOIVA", tipomov == 2 ? 2 : 1);
id.put("TIPODIFF", iva_cass ? 2 : 1);
id.put(RMI_CODIVA, codiva);
TImporto pagtmp;
bool ultimo = false;
long nregpag;
int nrigpag;
tipo_movimento tipomov_pag = tm_pagamento;
if (nrigp > 0 && nrigp < 9999)
{
const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp);
tipomov_pag = rp.tipo();
idcurr.put(PART_TIPOMOV, tipomov_pag);
idcurr.put("NUMREGP", rp.get(PART_NREG));
idcurr.put("NUMRIGP", rp.get(PART_NUMRIG));
const TPartita& p = arrpart.partita(pagsca);
const TRiga_partite& rp = p.riga(nrigp);
nregpag = rp.get_long(PART_NREG);
nrigpag = rp.get_int(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);
if (!d.ok())
d = rp.get(PART_DATADOC);
if (!d.ok())
d = rp.get(PART_DATAREG);
idcurr.put("DATAREGP", d);
idcurr.put("ANNOLIQ", d.year());
id.put("DATAREGP", d);
id.put("ANNOLIQ", d.year());
pagtmp = p.importo_pagsca(pagsca);
pagtmp.normalize(sezpag);
ultimo = (r == pagscatt.last()) && partita_chiusa_al(p, fine);
@ -1496,11 +1489,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
else
{
// Falso record generato da datainc
idcurr.put(PART_TIPOMOV, tipomov_pag);
idcurr.put("NUMREGP", _mov->get(MOV_NUMREG));
idcurr.put("NUMRIGP", nrigp);
idcurr.put("DATAREGP", _mov->get(MOV_DATAINC));
idcurr.put("ANNOLIQ", year_int);
nregpag = _mov->get_long(MOV_NUMREG);
nrigpag = nrigp;
id.put(PART_TIPOMOV, tipomov_pag);
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));
ultimo = true;
}
@ -1512,15 +1508,61 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
if (resto > 0)
meseliq += 3-resto;
}
idcurr.put("MESELIQ", meseliq);
idcurr.put("SEZIONE", pagtmp.sezione());
id.put("MESELIQ", meseliq);
id.put("SEZIONE", pagtmp.sezione());
real val_imp = pagtmp.valore() * lordo_orig / tot;
real val_iva = civa.scorpora(val_imp, TCurrency::get_firm_dec());
real val_iva;
if (ultimo)
{
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());
idcurr.put("IMPORTO", val_imp + val_iva);
idcurr.put(RMI_IMPONIBILE, val_imp);
idcurr.put(RMI_IMPOSTA, val_iva);
id.put("IMPORTO", val_imp + val_iva);
id.put(RMI_IMPONIBILE, val_imp);
id.put(RMI_IMPOSTA, val_iva);
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))
return;
if (month > 12 || (_freqviva == "T" && (month % 3) != 1))
if (month > 12 || (_freqviva == "T" && (month % 3) != 1)) // rischioso non farlo in tredicesima
return;
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 << "\nFROM ANNOLIQ=" << _year;
// 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 << "\nTO ANNOLIQ=" << _year; // Dal 18-06-2014 lascia stare l'anno prossimo!
query << " MESELIQ=" << month + (_freqviva == "T" ? 2 : 0);
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())
{
pi.add_status(1);
file.zero("ANNOLIQ");
/* file.zero("ANNOLIQ");
file.zero("MESELIQ");
file.zero("IMPORTO");
file.zero("IMPONIBILE");
@ -666,6 +667,8 @@ void TLiquidazione_app::zero_diff(int month, const char* codatt)
file.zero("TIPOATT");
file.zero("TIPODIFF");
file.zero("CHIUSA");
file.rewrite();
}
file.rewrite(); */
file.remove();
}
}