Aggiunto supporto per righe spese/prestazioni

git-svn-id: svn://10.65.10.50/branches/R_10_00@23102 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2015-05-27 10:43:47 +00:00
parent a04851fc0d
commit 6266252db8

View File

@ -634,6 +634,7 @@ protected:
void log(int severity, const char* msg);
bool show_log();
void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const;
bool elabora(TDocumentoEsteso& doc);
bool elabora(const TRectype& rec);
@ -744,7 +745,7 @@ const char* TDoc2Paf::descrizione(const TRiga_documento& rdoc) const
{
TString tmp;
tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST);
tmp.replace('\n', ' '); tmp.strip_double_spaces();
tmp.replace('\n', ' '); tmp.strip_double_spaces(); tmp.trim();
TParagraph_string para(tmp, 100);
return para.get(0);
}
@ -841,6 +842,22 @@ bool TDoc2Paf::show_log()
return ok;
}
void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const
{
const TRectype& ai = cache().get("%IVA", rdoc.get(RDOC_CODIVA));
const real aliquota = ai.get("R0");
paf.set("PI_ALIQUOTAIVA", aliquota);
if (aliquota.is_zero())
{
const TString& tipo = ai.get("S1");
const char* natura = "N2"; // Non soggetto
if (tipo == "NI") natura = "N3"; else // Non imponibile
if (tipo == "ES") natura = "N4"; // Esente
paf.set("PI_NATURA", natura);
}
}
bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
{
TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A.
@ -1152,12 +1169,13 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
paf2000f.set("PJ_KEYBODYFATT", bfatt);
paf2000f.remove(); // Cancella tutti gli sconti di riga
long riga = 1;
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
{
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_NUMEROLINEA", (long)r);
paf1800f.set("PI_NUMEROLINEA", riga++);
paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc));
paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
if (rdoc->is_merce())
@ -1175,18 +1193,7 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(false, false));
}
paf1800f.set("PI_PRZTOTALE", rdoc->importo(false, false));
const TRectype& ai = cache().get("%IVA", rdoc->get(RDOC_CODIVA));
const real aliquota = ai.get("R0");
paf1800f.set("PI_ALIQUOTAIVA", aliquota);
if (aliquota.is_zero())
{
const TString& tipo = ai.get("S1");
const char* natura = "N2"; // Non soggetto
if (tipo == "NI") natura = "N3"; else // Non imponibile
if (tipo == "ES") natura = "N4"; // Esente
paf1800f.set("PI_NATURA", natura);
}
set_IVA(*rdoc, paf1800f);
/*
const TDate data = doc.get(DOC_DATADOC);
@ -1255,12 +1262,34 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
paf1000f.insert();
}
}
} else
if (rdoc->is_spese())
{
const TSpesa_prest& sp = rdoc->spesa();
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->quantita();
if (qta.is_zero() || sp.is_percentuale())
qta = UNO;
paf1800f.set("PI_QUANTITA", qta);
const real imp = rdoc->importo(true, false);
real prz = imp / qta; prz.round(2);
paf1800f.set("PI_PREZZOUNIT", prz);
paf1800f.set("PI_PRZTOTALE", imp);
set_IVA(*rdoc, paf1800f);
} else
if (rdoc->is_prestazione())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->quantita(); if (qta.is_zero()) qta = UNO;
paf1800f.set("PI_QUANTITA", qta);
paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false));
paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false));
set_IVA(*rdoc, paf1800f);
}
paf1800f.set("PI_GESTIONE", "D");
paf1800f.insert();
}
// </DatiBeniServizi>
// <DatiRiepilogo>