Merge branch 'R_10_00' of http://10.65.20.17:7990/scm/campo/campo into R_10_00

This commit is contained in:
Simone Palacino 2019-02-06 10:50:55 +01:00
commit 0297ddb848
2 changed files with 88 additions and 57 deletions

View File

@ -113,17 +113,18 @@ private:
TCausale _caus;
bool _is_pa;
bool _has_bolla;
TString _codivadefault;
// Classe interna per gestire gli omaggi
class TOmaggio_info
// Classe interna per gestire righe aggiuntive in riepilogo
class TRiepilogo_agg
{
public:
real imponibile;
real imposta;
TOmaggio_info() : imponibile(ZERO), imposta(ZERO){}
TRiepilogo_agg() : imponibile(ZERO), imposta(ZERO){}
};
std::map<TString, TOmaggio_info> _omaggi;
std::map<TString, TRiepilogo_agg> _riepilogo_agg;
struct
{
@ -153,13 +154,14 @@ protected:
void log(int severity, const char* msg);
const char* natura(const TString& codiva) const;
static void set_IVA(const TString& codiva, TPaf_record& paf);
static void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf);
void set_IVA(TString codiva, TPaf_record& paf) const;
void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const;
bool add_row_art(long& riga_art, const TString& codice_tipo, const TString& codice_valore, TPaf_record& paf);
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
const TString& converti_prezzo(const real& prezzo) const;
void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const;
void add_ritenuta(const TDocumentoEsteso& doc, const TSpesa_prest& sp, TPaf_record& paf0700f) const;
bool add_riepilogo_iva(TPaf_record& paf2200f, const TCodiceIVA& cod_iva, const char* eiva, const real& imponibile = ZERO, const real& imposta = ZERO);
const TFirm& get_firm();

View File

@ -719,6 +719,16 @@ bool TDoc_fp::initialize(const TDocumentoEsteso& doc)
_caus = TCausale(doc.tipo().causale(), doc.anno());
// Preparo il codice iva di default
{
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
{
_codivadefault = rdoc->get(RDOC_CODIVA);
if (_codivadefault.full())
break;
}
}
return true;
}
@ -807,14 +817,17 @@ const char* TDoc_fp::natura(const TString& codiva) const
return cache().get("%IVA", codiva, "S12");
}
void TDoc_fp::set_IVA(const TString& codiva, TPaf_record& paf)
void TDoc_fp::set_IVA(TString codiva, TPaf_record& paf) const
{
// É necessario il cast a real?
paf.set("PI_ALIQUOTAIVA", static_cast<real>(cache().get("%IVA", codiva, "R0")));
paf.set("PI_NATURA", cache().get("%IVA", codiva, "S12"));
if (codiva.empty())
codiva = _codivadefault;
// É necessario il cast a real?
paf.set("PI_ALIQUOTAIVA", static_cast<real>(cache().get("%IVA", codiva, "R0")));
paf.set("PI_NATURA", natura(codiva));
}
void TDoc_fp::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf)
void TDoc_fp::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf) const
{
set_IVA(rdoc.get(RDOC_CODIVA), paf);
}
@ -931,6 +944,46 @@ void TDoc_fp::add_ritenuta(const TDocumentoEsteso& doc, const TSpesa_prest& sp,
// </DatiRitenuta>
}
bool TDoc_fp::add_riepilogo_iva(TPaf_record& paf2200f, const TCodiceIVA& cod_iva, const char* eiva, const real& imponibile,
const real& imposta)
{
paf2200f.reset();
paf2200f.set("PL_KEYHEADERFATT", _hfatt);
paf2200f.set("PL_KEYBODYFATT", _bfatt);
const real aliquota = cod_iva.percentuale();
const TString& cod_aliquota = cod_iva.codice();
TRiepilogo_agg& riepilogo_agg = _riepilogo_agg[cod_aliquota];
// Aliquota
paf2200f.set("PL_ALIQUOTAIVA", aliquota);
// Natura
if (aliquota.is_zero())
paf2200f.set("PL_NATURA", natura(cod_aliquota));
// Imponibile
paf2200f.set("PL_IMPONIBILE", converti_prezzo(imponibile + riepilogo_agg.imponibile));
// Imposta, per gli omaggi con addebito ho già l'imposta
paf2200f.set("PL_IMPOSTA", converti_prezzo(imposta));
// Esigibilità IVA
paf2200f.set("PL_ESIGIVA", eiva);
if (*eiva == 'S')
paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72");
else
paf2200f.set("PL_RIFNORMATIVO", cod_iva.descrizione());
paf2200f.set("PL_GESTIONE", "D");
// Elimino l'oggetto
_riepilogo_agg.erase(cod_aliquota);
// Inserisco
return insert(paf2200f);
}
const TFirm& TDoc_fp::get_firm()
{
return prefix().firm();
@ -1255,15 +1308,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf3000f.set("PT_KEYBODYFATT", _bfatt);
remove(paf3000f);
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();
@ -1311,7 +1356,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_QUANTITA", UNO);
paf1800f.set("PI_PREZZOUNIT", ZERO);
paf1800f.set("PI_PRZTOTALE", ZERO);
set_IVA(codivadefault, paf1800f);
set_IVA(_codivadefault, paf1800f);
}
else if (rdoc->is_merce())
{
@ -1324,7 +1369,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
set_qta_prezzo(paf1800f, rdoc);
if(rdoc->iva().codice().empty())
{
set_IVA(codivadefault, paf1800f);
set_IVA(_codivadefault, paf1800f);
}
else
set_IVA(*rdoc, paf1800f);
@ -1411,7 +1456,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_PRZTOTALE", converti_prezzo(imp));
set_IVA(*rdoc, paf1800f);
// Controllo se è una ritenuta fiscale
// Controllo se è una ritenuta fiscale
if (sp.tipo_ritenuta() == 'F')
{
add_ritenuta(doc, rdoc->spesa(), paf0700f);
@ -1461,9 +1506,10 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false, 8)));
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->prezzo(false, false) * rdoc->get_real(RDOC_QTA)));
TOmaggio_info& omaggio_info = _omaggi[rdoc->iva().codice()];
omaggio_info.imponibile += rdoc->imponibile_omaggio(2);
omaggio_info.imposta += rdoc->iva_omaggio(8, 2);
TRiepilogo_agg& riepilogo_agg = _riepilogo_agg[rdoc->iva().codice()];
riepilogo_agg.imponibile += rdoc->imponibile_omaggio(2);
// Non metto l'imposta, è già presente nei totali
//riepilogo_agg.imposta += rdoc->iva_omaggio(8, 2);
}
else
{
@ -1542,7 +1588,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_QUANTITA", UNO);
paf1800f.set("PI_PREZZOUNIT", ZERO);
paf1800f.set("PI_PRZTOTALE", ZERO);
set_IVA(codivadefault, paf1800f);
set_IVA(_codivadefault, paf1800f);
ok &= insert(paf1800f) && insert(paf3000f);
}
}
@ -1600,7 +1646,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_QUANTITA", UNO);
paf1800f.set("PI_PREZZOUNIT", ZERO);
paf1800f.set("PI_PRZTOTALE", ZERO);
set_IVA(codivadefault, paf1800f);
set_IVA(_codivadefault, paf1800f);
ok &= insert(paf1800f) && insert(paf3000f);
}
@ -1690,37 +1736,20 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
TAssoc_array& tiva = doc.tabella_iva(false);
FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm)
{
paf2200f.reset();
paf2200f.set("PL_KEYHEADERFATT", _hfatt);
paf2200f.set("PL_KEYBODYFATT", _bfatt);
const TRiepilogo_iva& riva = *dynamic_cast<const TRiepilogo_iva*>(itm);
const real aliquota = riva.cod_iva().percentuale();
const TString& cod_aliquota = riva.cod_iva().codice();
const TOmaggio_info& omaggio_info = _omaggi[cod_aliquota];
// Aliquota
paf2200f.set("PL_ALIQUOTAIVA", aliquota);
// Natura
if (aliquota.is_zero())
paf2200f.set("PL_NATURA", natura(riva.cod_iva().codice()));
// Imponibile
paf2200f.set("PL_IMPONIBILE", converti_prezzo(riva.imponibile() + omaggio_info.imponibile));
// Imposta, per gli omaggi con addebito ho già l'imposta
paf2200f.set("PL_IMPOSTA", converti_prezzo(riva.imposta()));
// Esigibilità IVA
paf2200f.set("PL_ESIGIVA", eiva);
if (*eiva == 'S')
paf2200f.set("PL_RIFNORMATIVO", "Scissione pagamenti art.17-ter DPR 633/72");
else
paf2200f.set("PL_RIFNORMATIVO", riva.cod_iva().descrizione());
paf2200f.set("PL_GESTIONE", "D");
ok &= insert(paf2200f);
add_riepilogo_iva(paf2200f, riva.cod_iva(), eiva, riva.imponibile(), riva.imposta());
}
if(!_riepilogo_agg.empty())
{
for(auto i = _riepilogo_agg.begin(); i != _riepilogo_agg.end(); ++i)
{
const TCodiceIVA cod_iva(i->first);
add_riepilogo_iva(paf2200f, cod_iva, eiva);
}
}
// </DatiRiepilogo>
// <DatiPagamento>
TPaf_record paf2400f("PAF2400F");