Patch level : 12.0 658

Files correlati     : fp
Commento            :
- Cambiato salvataggio riga articolo, adesso scriviamo sia l'articolo con cod interno che con cod esterno
- Aggiunta funzione set_qta_prezzo() che controlla se la qta è < di 0 e gira il prezzo
- Sistemata valuta per chi non ce l'ha (def EUR)
- Ripulita scrittura articoli, tolte tabulazioni inutili
- Cambiata dicitura bollo
- Aggiunto reset paf22
- Aggiunta valorizzazione pafw3 sempre con nuove informazioni
This commit is contained in:
Mattia Tollari 2018-12-14 12:10:42 +01:00
parent 2e57817626
commit 46bb1634e2
2 changed files with 108 additions and 57 deletions

View File

@ -809,9 +809,8 @@ void TDoc_fp::set_IVA(const TRiga_documento& rdoc, TPaf_record& paf)
set_IVA(rdoc.get(RDOC_CODIVA), paf); set_IVA(rdoc.get(RDOC_CODIVA), paf);
} }
bool TDoc_fp::add_row_art(const TString codice_tipo, const TString& codice_valore, TPaf_record& paf) bool TDoc_fp::add_row_art(long& riga_art, const TString codice_tipo, const TString& codice_valore, TPaf_record& paf)
{ {
static long riga_art = 0;
paf.set("PY_KEYNLINAR", ++riga_art); paf.set("PY_KEYNLINAR", ++riga_art);
paf.set("PY_TIPOARTICOLO", codice_tipo); paf.set("PY_TIPOARTICOLO", codice_tipo);
paf.set("PY_VALOREARTICOLO", codice_valore); paf.set("PY_VALOREARTICOLO", codice_valore);
@ -859,6 +858,21 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
return ret; return ret;
} }
void TDoc_fp::set_qta_prezzo(TPaf_record paf1800f, TRiga_documento* rdoc)
{
const real qta = rdoc->get(RDOC_QTA);
if (qta >= ZERO)
{
paf1800f.set("PI_QUANTITA", qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false)));
}
else
{
paf1800f.set("PI_QUANTITA", -qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(-rdoc->prezzo(true, false)));
}
}
bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
{ {
// Azzero // Azzero
@ -903,7 +917,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// Valorizzo la gestione del cambio // Valorizzo la gestione del cambio
_doc_cambio._cod_val = doc.valuta(); _doc_cambio._cod_val = doc.valuta();
_doc_cambio._is_valuta_estera = !is_euro_value(doc.valuta()); _doc_cambio._is_valuta_estera = doc.valuta().full() && !is_euro_value(doc.valuta());
_doc_cambio._cambio = doc.cambio(); _doc_cambio._cambio = doc.cambio();
// <DatiTrassmissione> // <DatiTrassmissione>
@ -1064,10 +1078,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf0700f.set("P7_KEYBODYFATT", _bfatt); paf0700f.set("P7_KEYBODYFATT", _bfatt);
remove(paf0700f); remove(paf0700f);
paf0700f.set("P7_TIPODOC", tipo_doc_sdi(doc)); paf0700f.set("P7_TIPODOC", tipo_doc_sdi(doc));
paf0700f.set("P7_DIVISA", doc.valuta()); paf0700f.set("P7_DIVISA", _doc_cambio._cod_val.full() ? _doc_cambio._cod_val : "EUR");
paf0700f.set("P7_DATA", doc.data()); paf0700f.set("P7_DATA", doc.data());
const TCodice_numerazione& codnum = doc.codice_numerazione();
paf0700f.set("P7_NUMERO", doc.numero()); paf0700f.set("P7_NUMERO", doc.numero());
paf0700f.set("P7_GESTIONE", "D"); paf0700f.set("P7_GESTIONE", "D");
@ -1315,21 +1328,31 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf3000f.set("PT_COMMENTO", descrizione(*rdoc)); paf3000f.set("PT_COMMENTO", descrizione(*rdoc));
// <CodiceArticolo> // <CodiceArticolo>
if (rdoc->is_articolo())
{
TString codartmag = rdoc->get(RDOC_CODARTMAG);
TString codart = rdoc->get(RDOC_CODART);
long riga_art = 0; long riga_art = 0;
TArticolo& art = rdoc->articolo(); if (codart.full())
if (art.full()) {
if (codartmag.full())
{ {
paf1900f.reset(); paf1900f.reset();
paf1900f.set("PY_KEYHEADERFATT", _hfatt); paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt); paf1900f.set("PY_KEYBODYFATT", _bfatt);
paf1900f.set("PY_KEYNLINEA", riga); paf1900f.set("PY_KEYNLINEA", riga);
ok &= add_row_art(riga_art, "Codice articolo interno", codartmag, paf1900f);
}
TString& tmp = get_tmp_string(); // Se il codice articolo del magazzino è diverso quello è del cliente
if (codart.full() && codart != codartmag)
if (art.codice().full())
{ {
tmp.cut(0) << art.codice(); // Fixed_string di merda paf1900f.reset();
ok &= add_row_art("Codice articolo", tmp, paf1900f); paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt);
paf1900f.set("PY_KEYNLINEA", riga);
ok &= add_row_art(riga_art, "Codice articolo cliente", codart, paf1900f);
}
} }
} }
// </CodiceArticolo> // </CodiceArticolo>
@ -1351,16 +1374,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
msg.format("La riga merce %d ha quantità nulla", riga); msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg); log(1, msg);
} }
if (qta >= ZERO) set_qta_prezzo(paf1800f, rdoc);
{
paf1800f.set("PI_QUANTITA", qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false)));
}
else
{
paf1800f.set("PI_QUANTITA", -qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(-rdoc->prezzo(true, false)));
}
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false))); paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f); set_IVA(*rdoc, paf1800f);
@ -1447,6 +1461,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
const TSpesa_prest& sp = rdoc->spesa(); const TSpesa_prest& sp = rdoc->spesa();
const real imp = rdoc->importo(true, false); const real imp = rdoc->importo(true, false);
real qta = UNO; real qta = UNO;
bool qta_inverse = false;
if (sp.is_tipo()) if (sp.is_tipo())
{ {
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
@ -1458,8 +1474,14 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
log(1, msg); log(1, msg);
qta = UNO; qta = UNO;
} }
if(qta < ZERO)
{
qta = -qta;
qta_inverse = true;
}
paf1800f.set("PI_QUANTITA", qta); paf1800f.set("PI_QUANTITA", qta);
} }
real prz = imp; real prz = imp;
if (qta != UNO) if (qta != UNO)
{ {
@ -1470,7 +1492,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
prz = price.get_value(); prz = price.get_value();
} }
} }
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(prz));
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(qta_inverse ? -prz : prz));
paf1800f.set("PI_PRZTOTALE", converti_prezzo(imp)); paf1800f.set("PI_PRZTOTALE", converti_prezzo(imp));
set_IVA(*rdoc, paf1800f); set_IVA(*rdoc, paf1800f);
@ -1490,8 +1513,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->get(RDOC_QTA); real qta = rdoc->get(RDOC_QTA);
if (qta.is_zero()) qta = UNO; if (qta.is_zero()) qta = UNO;
paf1800f.set("PI_QUANTITA", qta); set_qta_prezzo(paf1800f, rdoc);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false)));
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false))); paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f); set_IVA(*rdoc, paf1800f);
} }
@ -1545,7 +1567,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf3000f.set("PT_KEYHEADERFATT", _hfatt); paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt); paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga); paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", "Imposta bollo assolta in modo virtuale"); paf3000f.set("PT_COMMENTO", "Imposta di bollo assolta virtualmente ai sensi dell'art. 6 D.M. 17.6.2014");
paf1800f.set("PI_QUANTITA", UNO); paf1800f.set("PI_QUANTITA", UNO);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(doc.get_real("BOLLI"))); paf1800f.set("PI_PREZZOUNIT", converti_prezzo(doc.get_real("BOLLI")));
@ -1621,7 +1643,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
TAssoc_array& tiva = doc.tabella_iva(false); TAssoc_array& tiva = doc.tabella_iva(false);
FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm) FOR_EACH_ASSOC_OBJECT(tiva, obj, key, itm)
{ {
const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)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 real aliquota = riva.cod_iva().percentuale();
paf2200f.set("PL_ALIQUOTAIVA", aliquota); paf2200f.set("PL_ALIQUOTAIVA", aliquota);
if (aliquota.is_zero()) if (aliquota.is_zero())
@ -1706,6 +1732,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
ok &= insert(paf2500f); ok &= insert(paf2500f);
} }
// </DatiPagamento>
if (_gestioneallegati) if (_gestioneallegati)
{ {
TPaf_record paf2600f("PAF2600F"); TPaf_record paf2600f("PAF2600F");
@ -1771,19 +1799,41 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
} }
} }
} }
// </DatiPagamento>
if (!cached_tipodoc(doc.get(DOC_TIPODOC)).invio_xml())
{
// Tabella di non invio XML // Tabella di non invio XML
TPaf_record pafw300f("PAFW300F"); TPaf_record pafw300f("PAFW300F");
pafw300f.set("PW_KEYHEADERFATT", _hfatt); pafw300f.set("PW_KEYHEADERFATT", _hfatt);
pafw300f.set("PW_KEYBODYFATT", _bfatt); pafw300f.set("PW_KEYBODYFATT", _bfatt);
remove(pafw300f); remove(pafw300f);
pafw300f.set("PW_TIPODOC", tipo_doc_sdi(doc));
pafw300f.set("PW_TIPONUM", doc.codice_numerazione().codice());
pafw300f.set("PW_NUMERO", doc.numero());
pafw300f.set("PW_DATA", doc.data());
if (!cached_tipodoc(doc.get(DOC_TIPODOC)).invio_xml())
{
pafw300f.set("PW_CODSDI", "**********"); pafw300f.set("PW_CODSDI", "**********");
ok &= insert(pafw300f);
} }
pafw300f.set("PW_CDEST", coddest);
pafw300f.set("PW_RAGSOC", cliente.ragione_sociale());
pafw300f.set("PW_PAESE", cliente.stato_residenza_ISO());
pafw300f.set("PW_CODICE", cliente.codice_fiscale_estero());
pafw300f.set("PW_CFISCA", cliente.codice_fiscale());
pafw300f.set("PW_DENOM", cliente.ragione_sociale());
if (cliente.fisica())
{
pafw300f.set("PW_NOME", cliente.nome());
pafw300f.set("PW_COGN", cliente.cognome());
}
else
pafw300f.set("PW_RAGSOC", cliente.ragione_sociale().left(35));
pafw300f.set("PW_IMPO", converti_prezzo(doc.totale_doc()));
ok &= insert(pafw300f);
return _to_commit = (ok && save_paf()); return _to_commit = (ok && save_paf());
} }

View File

@ -121,9 +121,10 @@ protected:
const char* natura(const TString& codiva) const; const char* natura(const TString& codiva) const;
static void set_IVA(const TString& codiva, TPaf_record& paf); static void set_IVA(const TString& codiva, TPaf_record& paf);
static void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf); static void set_IVA(const TRiga_documento& rdoc, TPaf_record& paf);
bool add_row_art(const TString codice_tipo, const TString& codice_valore, TPaf_record& paf); 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); bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
const TString& converti_prezzo(const real& prezzo) const; const TString& converti_prezzo(const real& prezzo) const;
void set_qta_prezzo(TPaf_record paf1800f, TRiga_documento* rdoc);
public: public:
bool doc_to_paf(TDocumentoEsteso& doc); bool doc_to_paf(TDocumentoEsteso& doc);