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);
}
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_TIPOARTICOLO", codice_tipo);
paf.set("PY_VALOREARTICOLO", codice_valore);
@ -859,6 +858,21 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
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)
{
// Azzero
@ -903,7 +917,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// Valorizzo la gestione del cambio
_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();
// <DatiTrassmissione>
@ -1064,10 +1078,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf0700f.set("P7_KEYBODYFATT", _bfatt);
remove(paf0700f);
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());
const TCodice_numerazione& codnum = doc.codice_numerazione();
paf0700f.set("P7_NUMERO", doc.numero());
paf0700f.set("P7_GESTIONE", "D");
@ -1300,39 +1313,49 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
{
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
if (descrizione(*rdoc).empty())
continue;
if (descrizione(*rdoc).empty())
continue;
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", descrizione(*rdoc));
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", descrizione(*rdoc));
// <CodiceArticolo>
long riga_art = 0;
TArticolo& art = rdoc->articolo();
if (art.full())
// <CodiceArticolo>
if (rdoc->is_articolo())
{
TString codartmag = rdoc->get(RDOC_CODARTMAG);
TString codart = rdoc->get(RDOC_CODART);
long riga_art = 0;
if (codart.full())
{
if (codartmag.full())
{
paf1900f.reset();
paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt);
paf1900f.set("PY_KEYNLINEA", riga);
TString& tmp = get_tmp_string();
if (art.codice().full())
{
tmp.cut(0) << art.codice(); // Fixed_string di merda
ok &= add_row_art("Codice articolo", tmp, paf1900f);
}
paf1900f.reset();
paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt);
paf1900f.set("PY_KEYNLINEA", riga);
ok &= add_row_art(riga_art, "Codice articolo interno", codartmag, paf1900f);
}
// </CodiceArticolo>
// Se il codice articolo del magazzino è diverso quello è del cliente
if (codart.full() && codart != codartmag)
{
paf1900f.reset();
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>
if(rdoc->is_descrizione())
{
@ -1351,16 +1374,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
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)));
}
set_qta_prezzo(paf1800f, rdoc);
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f);
@ -1447,6 +1461,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
const TSpesa_prest& sp = rdoc->spesa();
const real imp = rdoc->importo(true, false);
real qta = UNO;
bool qta_inverse = false;
if (sp.is_tipo())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
@ -1458,8 +1474,14 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
log(1, msg);
qta = UNO;
}
if(qta < ZERO)
{
qta = -qta;
qta_inverse = true;
}
paf1800f.set("PI_QUANTITA", qta);
}
real prz = imp;
if (qta != UNO)
{
@ -1470,7 +1492,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
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));
set_IVA(*rdoc, paf1800f);
@ -1490,8 +1513,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->get(RDOC_QTA);
if (qta.is_zero()) qta = UNO;
paf1800f.set("PI_QUANTITA", qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false)));
set_qta_prezzo(paf1800f, rdoc);
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f);
}
@ -1545,7 +1567,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
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_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);
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();
paf2200f.set("PL_ALIQUOTAIVA", aliquota);
if (aliquota.is_zero())
@ -1665,7 +1691,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf2500f.set("PO_KEYBODYFATT", _bfatt);
remove(paf2500f); // Cancella tutte le rate
// Imposto i campi uguali per tutte le rate
// Imposto i campi uguali per tutte le rate
paf2500f.set("PO_CONDPAGAMENTO", rateazione); // Condizione di pagamento PA
paf2500f.set("PO_CODICEPAGAM", pag.code()); // Condizione di pagamento CAMPO
@ -1706,6 +1732,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
ok &= insert(paf2500f);
}
// </DatiPagamento>
if (_gestioneallegati)
{
TPaf_record paf2600f("PAF2600F");
@ -1771,18 +1799,40 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
}
}
}
// </DatiPagamento>
// Tabella di non invio XML
TPaf_record pafw300f("PAFW300F");
pafw300f.set("PW_KEYHEADERFATT", _hfatt);
pafw300f.set("PW_KEYBODYFATT", _bfatt);
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())
{
// Tabella di non invio XML
TPaf_record pafw300f("PAFW300F");
pafw300f.set("PW_KEYHEADERFATT", _hfatt);
pafw300f.set("PW_KEYBODYFATT", _bfatt);
remove(pafw300f);
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());
}

View File

@ -121,9 +121,10 @@ protected:
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);
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);
const TString& converti_prezzo(const real& prezzo) const;
void set_qta_prezzo(TPaf_record paf1800f, TRiga_documento* rdoc);
public:
bool doc_to_paf(TDocumentoEsteso& doc);