Patch level : 10.0 276
Files correlati : pa0.exe Ricompilazione Demo : [ ] Commento : Corretto il totale riga con lo sconto, l'aliquota di default per le righe ela codifica della natura del codice IVA git-svn-id: svn://10.65.10.50/branches/R_10_00@23211 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
24ed90d54e
commit
0b44cc293a
113
pa/pa0100.cpp
113
pa/pa0100.cpp
@ -22,6 +22,7 @@
|
||||
#include <cfven.h>
|
||||
#include <nditte.h>
|
||||
#include <unloc.h>
|
||||
#include <causali.h>
|
||||
#include "../cg/cfban.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -670,7 +671,9 @@ protected:
|
||||
|
||||
void log(int severity, const char* msg);
|
||||
bool show_log();
|
||||
void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const;
|
||||
const char * natura(const TString& tipo, const int tipo_acquisti, const int regspiva) const;
|
||||
void set_IVA(const TString& codiva, const int regspiva, TPaf_record& paf) const;
|
||||
void set_IVA(const TRiga_documento& rdoc, const int regspiva, TPaf_record& paf) const;
|
||||
|
||||
bool elabora(TDocumentoEsteso& doc);
|
||||
bool elabora(const TRectype& rec);
|
||||
@ -878,19 +881,66 @@ bool TDoc2Paf::show_log()
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const
|
||||
|
||||
const char * TDoc2Paf::natura(const TString& tipo, const int tipo_acquisti, const int regspiva) const
|
||||
{
|
||||
const TRectype& ai = cache().get("%IVA", rdoc.get(RDOC_CODIVA));
|
||||
TString & natura = get_tmp_string(4);
|
||||
|
||||
// N1 escluse ex art 15
|
||||
if (tipo_acquisti == 5)
|
||||
natura = "N5"; // regime del margine
|
||||
else
|
||||
if (regspiva >12 && regspiva < 52)
|
||||
natura = "N6"; // Inversione contabile (REVERSE CHARGE)
|
||||
else
|
||||
if (tipo == "NS")
|
||||
natura = "N2"; // Non soggetto
|
||||
else
|
||||
if (tipo == "NI")
|
||||
natura = "N3"; // Non imponibile
|
||||
else
|
||||
if (tipo == "ES")
|
||||
natura = "N4"; // Esente
|
||||
return natura;
|
||||
}
|
||||
|
||||
void TDoc2Paf::set_IVA(const TString& codiva, const int regspiva, TPaf_record& paf) const
|
||||
{
|
||||
const TRectype& ai = cache().get("%IVA", codiva);
|
||||
const real aliquota = ai.get("R0");
|
||||
paf.set("PI_ALIQUOTAIVA", aliquota);
|
||||
if (aliquota.is_zero())
|
||||
if (codiva.full())
|
||||
{
|
||||
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);
|
||||
}
|
||||
if (aliquota.is_zero())
|
||||
{
|
||||
const TString& tipo = ai.get("S1");
|
||||
const int tipo_acquisti = ai.get_int("S8");
|
||||
|
||||
paf.set("PI_NATURA", natura(tipo, tipo_acquisti, regspiva));
|
||||
}
|
||||
else
|
||||
paf.set("PI_NATURA", "");
|
||||
}
|
||||
}
|
||||
|
||||
void TDoc2Paf::set_IVA(const TRiga_documento& rdoc, const int regspiva, TPaf_record& paf) const
|
||||
{
|
||||
const TString8 codiva(rdoc.get(RDOC_CODIVA));
|
||||
const TRectype& ai = cache().get("%IVA", codiva);
|
||||
const real aliquota = ai.get("R0");
|
||||
paf.set("PI_ALIQUOTAIVA", aliquota);
|
||||
if (codiva.full())
|
||||
{
|
||||
if (aliquota.is_zero())
|
||||
{
|
||||
const TString& tipo = ai.get("S1");
|
||||
const int tipo_acquisti = ai.get_int("S8");
|
||||
|
||||
paf.set("PI_NATURA", natura(tipo, tipo_acquisti, regspiva));
|
||||
}
|
||||
else
|
||||
paf.set("PI_NATURA", "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -904,6 +954,8 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
|
||||
const TFirm& firm = prefix().firm();
|
||||
const char* const paese = "IT";
|
||||
TCausale caus = TCausale(doc.tipo().causale(), doc.anno());
|
||||
const int regspiva = caus.regime_speciale();
|
||||
|
||||
// <DatiTrassmissione>
|
||||
TPaf_record paf0100f("PAF0100F");
|
||||
@ -1206,6 +1258,15 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
paf2000f.remove(); // Cancella tutti gli sconti di riga
|
||||
|
||||
long riga = 0;
|
||||
TString16 codivadefault;
|
||||
{
|
||||
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
|
||||
{
|
||||
codivadefault = rdoc->get(RDOC_CODIVA);
|
||||
if (codivadefault.full())
|
||||
break;
|
||||
}
|
||||
}
|
||||
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
|
||||
{
|
||||
paf1800f.reset();
|
||||
@ -1213,10 +1274,14 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
paf1800f.set("PI_KEYBODYFATT", bfatt);
|
||||
paf1800f.set("PI_NUMEROLINEA", ++riga);
|
||||
paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc));
|
||||
paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
|
||||
// paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
|
||||
|
||||
|
||||
set_IVA(codivadefault, regspiva, paf1800f);
|
||||
|
||||
if (rdoc->is_merce())
|
||||
{
|
||||
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
|
||||
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
|
||||
const real qta = rdoc->get(RDOC_QTA);
|
||||
if (qta.is_zero())
|
||||
{
|
||||
@ -1228,13 +1293,13 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
paf1800f.set("PI_QUANTITA", qta);
|
||||
paf1800f.set("PI_PREZZOUNIT", rdoc->prezzo(false, false));
|
||||
}
|
||||
else
|
||||
{
|
||||
paf1800f.set("PI_QUANTITA", -qta);
|
||||
paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(false, false));
|
||||
else
|
||||
{
|
||||
paf1800f.set("PI_QUANTITA", -qta);
|
||||
paf1800f.set("PI_PREZZOUNIT", -rdoc->prezzo(true, false));
|
||||
}
|
||||
paf1800f.set("PI_PRZTOTALE", rdoc->importo(false, false));
|
||||
set_IVA(*rdoc, paf1800f);
|
||||
paf1800f.set("PI_PRZTOTALE", rdoc->importo(true, false));
|
||||
set_IVA(*rdoc, regspiva, paf1800f);
|
||||
|
||||
/*
|
||||
const TDate data = doc.get(DOC_DATADOC);
|
||||
@ -1333,7 +1398,7 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
}
|
||||
paf1800f.set("PI_PREZZOUNIT", prz);
|
||||
paf1800f.set("PI_PRZTOTALE", imp);
|
||||
set_IVA(*rdoc, paf1800f);
|
||||
set_IVA(*rdoc, regspiva, paf1800f);
|
||||
} else
|
||||
if (rdoc->is_prestazione())
|
||||
{
|
||||
@ -1342,7 +1407,7 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
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);
|
||||
set_IVA(*rdoc, regspiva, paf1800f);
|
||||
}
|
||||
|
||||
paf1800f.set("PI_GESTIONE", "D");
|
||||
@ -1373,10 +1438,10 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
|
||||
if (aliquota.is_zero())
|
||||
{
|
||||
const TString& tipo = riva.cod_iva().tipo();
|
||||
const char* natura = "N2"; // Non soggetto
|
||||
if (tipo == "NI") natura = "N3"; else // Non imponibile
|
||||
if (tipo == "ES") natura = "N4"; // Esente
|
||||
paf2200f.set("PL_NATURA", natura);
|
||||
const int tipo_acquisti = riva.cod_iva().get_int("S8");
|
||||
|
||||
paf2200f.set("PL_NATURA", natura(tipo, tipo_acquisti, regspiva));
|
||||
|
||||
}
|
||||
paf2200f.set("PL_IMPONIBILE", riva.imponibile());
|
||||
paf2200f.set("PL_IMPOSTA", riva.imposta());
|
||||
|
Loading…
x
Reference in New Issue
Block a user