diff --git a/src/fp/fplib01.cpp b/src/fp/fplib01.cpp index 0818af0c2..42f2ac5ec 100644 --- a/src/fp/fplib01.cpp +++ b/src/fp/fplib01.cpp @@ -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(); // @@ -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)); - // - long riga_art = 0; - TArticolo& art = rdoc->articolo(); - if (art.full()) + // + 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); } - // + + // 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); + } + } + } + // 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(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); } + // + if (_gestioneallegati) { TPaf_record paf2600f("PAF2600F"); @@ -1771,18 +1799,40 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc) } } } - // + + // 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()); } diff --git a/src/fp/fplib01.h b/src/fp/fplib01.h index 754c0f39d..a8a11ce8b 100644 --- a/src/fp/fplib01.h +++ b/src/fp/fplib01.h @@ -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);