Patch level : 12.0

Files correlati     : fp
Commento            :
- Spostate chiavi tabella a campi della classe, così si evita di passarseli tutto il tempo
- Aggiunte le spese incasso
- Aggiunto TD20
This commit is contained in:
Mattia Tollari 2018-10-19 12:20:19 +02:00
parent 3e6707c33e
commit 7241dc5d4c
3 changed files with 100 additions and 70 deletions

View File

@ -836,8 +836,9 @@ bool TDoc_fp::add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf)
bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
{
TString8 hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato
TString20 bfatt; // Codice univoco di 20 caratteri del documento
// Azzero
_hfatt.cut(0);
_bfatt.cut(0);
TAnagrafica clifo(doc.clifor().tipo(), doc.clifor().codice());
@ -853,9 +854,9 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
const bool privato = coddest.len() != 6;
bool ok = true;
if (!chiave_paf(doc, hfatt, bfatt))
if (!chiave_paf(doc, _hfatt, _bfatt))
return false;
log(-1, bfatt);
log(-1, _bfatt);
const TFirm& firm = prefix().firm();
const char* const paese = "IT";
@ -863,8 +864,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiTrassmissione>
TPaf_record paf0100f("PAF0100F");
paf0100f.set("P1_KEYHEADERFATT", hfatt);
paf0100f.set("P1_KEYBODYFATT", bfatt);
paf0100f.set("P1_KEYHEADERFATT", _hfatt);
paf0100f.set("P1_KEYBODYFATT", _bfatt);
remove(paf0100f);
paf0100f.set("P1_TRASMITTPAESE", paese);
@ -884,8 +885,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
{
// <Datipec>
TPaf_record paf3200f("PAF3200F");
paf3200f.set("PU_KEYHEADERFATT", hfatt);
paf3200f.set("PU_KEYBODYFATT", bfatt);
paf3200f.set("PU_KEYHEADERFATT", _hfatt);
paf3200f.set("PU_KEYBODYFATT", _bfatt);
remove(paf3200f);
paf3200f.set("PU_PEC", pec);
ok &= insert(paf3200f);
@ -894,8 +895,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <CedentePrestatore>
TPaf_record paf0200f("PAF0200F");
paf0200f.set("P2_KEYHEADERFATT", hfatt);
paf0200f.set("P2_KEYBODYFATT", bfatt);
paf0200f.set("P2_KEYHEADERFATT", _hfatt);
paf0200f.set("P2_KEYBODYFATT", _bfatt);
remove(paf0200f);
if (_ditta.partita_IVA().full())
@ -967,8 +968,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <CessionarioCommittente>
TPaf_record paf0400f("PAF0400F");
paf0400f.set("P4_KEYHEADERFATT", hfatt);
paf0400f.set("P4_KEYBODYFATT", bfatt);
paf0400f.set("P4_KEYHEADERFATT", _hfatt);
paf0400f.set("P4_KEYBODYFATT", _bfatt);
remove(paf0400f);
if (cliente.partita_IVA().full())
@ -1006,8 +1007,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiGenerali>
TPaf_record paf0700f("PAF0700F");
paf0700f.set("P7_KEYHEADERFATT", hfatt);
paf0700f.set("P7_KEYBODYFATT", bfatt);
paf0700f.set("P7_KEYHEADERFATT", _hfatt);
paf0700f.set("P7_KEYBODYFATT", _bfatt);
remove(paf0700f);
paf0700f.set("P7_TIPODOC", doc.tipo().tipo_doc_sdi());
paf0700f.set("P7_DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL)
@ -1031,8 +1032,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <ScontoMaggiorazione>
TPaf_record paf0900f("PAF0900F");
paf0900f.set("P9_KEYHEADERFATT", hfatt);
paf0900f.set("P9_KEYBODYFATT", bfatt);
paf0900f.set("P9_KEYHEADERFATT", _hfatt);
paf0900f.set("P9_KEYBODYFATT", _bfatt);
remove(paf0900f);
TString80 sconto_expr = doc.get(DOC_SCONTOPERC);
@ -1065,8 +1066,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiGenerali>
TPaf_record paf2700f("PAF2700F");
paf2700f.set("PQ_KEYHEADERFATT", hfatt);
paf2700f.set("PQ_KEYBODYFATT", bfatt);
paf2700f.set("PQ_KEYHEADERFATT", _hfatt);
paf2700f.set("PQ_KEYBODYFATT", _bfatt);
remove(paf2700f);
paf2700f.set("PQ_IMPTOTDOC", doc.totale_doc());
@ -1089,8 +1090,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// Azzera DDT
TPaf_record paf1600f("PAF1600F");
paf1600f.set("PF_KEYHEADERFATT", hfatt);
paf1600f.set("PF_KEYBODYFATT", bfatt);
paf1600f.set("PF_KEYHEADERFATT", _hfatt);
paf1600f.set("PF_KEYBODYFATT", _bfatt);
remove(paf1600f);
// Fuori dallo scope per dopo
@ -1101,22 +1102,22 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// SEMPRE
// Azzera contratti
TPaf_record paf1000f("PAF1000F");
paf1000f.set("P0_KEYHEADERFATT", hfatt);
paf1000f.set("P0_KEYBODYFATT", bfatt);
paf1000f.set("P0_KEYHEADERFATT", _hfatt);
paf1000f.set("P0_KEYBODYFATT", _bfatt);
paf1000f.set("P0_RIFNUMLINEA", 0L);
remove(paf1000f);
// Azzera convenzioni
TPaf_record paf1100f("PAF1100F");
paf1100f.set("PA_KEYHEADERFATT", hfatt);
paf1100f.set("PA_KEYBODYFATT", bfatt);
paf1100f.set("PA_KEYHEADERFATT", _hfatt);
paf1100f.set("PA_KEYBODYFATT", _bfatt);
paf1100f.set("PA_RIFNUMLINEA", 0L);
remove(paf1100f);
// Azzera ordini
TPaf_record paf1200f("PAF1200F");
paf1200f.set("PB_KEYHEADERFATT", hfatt);
paf1200f.set("PB_KEYBODYFATT", bfatt);
paf1200f.set("PB_KEYHEADERFATT", _hfatt);
paf1200f.set("PB_KEYBODYFATT", _bfatt);
paf1200f.set("PB_RIFNUMLINEA", 0L);
remove(paf1200f);
@ -1179,23 +1180,23 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiBeniServizi>
TPaf_record paf1800f("PAF1800F");
paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
remove(paf1800f); // Cancella tutte le righe documento
TPaf_record paf2000f("PAF2000F");
paf2000f.set("PJ_KEYHEADERFATT", hfatt);
paf2000f.set("PJ_KEYBODYFATT", bfatt);
paf2000f.set("PJ_KEYHEADERFATT", _hfatt);
paf2000f.set("PJ_KEYBODYFATT", _bfatt);
remove(paf2000f); // Cancella tutti gli sconti di riga
TPaf_record paf1900f("PAF1900F");
paf1900f.set("PY_KEYHEADERFATT", hfatt);
paf1900f.set("PY_KEYBODYFATT", bfatt);
paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt);
remove(paf1900f); // Cancella tutte le righe articoli del documento
TPaf_record paf3000f("PAF3000F");
paf3000f.set("PT_KEYHEADERFATT", hfatt);
paf3000f.set("PT_KEYBODYFATT", bfatt);
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
remove(paf3000f);
long riga = 0;
@ -1212,13 +1213,13 @@ 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_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", hfatt);
paf3000f.set("PT_KEYBODYFATT", bfatt);
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", descrizione(*rdoc));
@ -1234,8 +1235,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if (art.ok())
{
paf1900f.reset();
paf1900f.set("PY_KEYHEADERFATT", hfatt);
paf1900f.set("PY_KEYBODYFATT", bfatt);
paf1900f.set("PY_KEYHEADERFATT", _hfatt);
paf1900f.set("PY_KEYBODYFATT", _bfatt);
paf1900f.set("PY_KEYNLINEA", riga);
TString& tmp = get_tmp_string();
@ -1323,8 +1324,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiDDT>
TPaf_record paf1600f("PAF1600F");
paf1600f.reset();
paf1600f.set("PF_KEYHEADERFATT", hfatt);
paf1600f.set("PF_KEYBODYFATT", bfatt);
paf1600f.set("PF_KEYHEADERFATT", _hfatt);
paf1600f.set("PF_KEYBODYFATT", _bfatt);
paf1600f.set("PF_RIFNUMLINEA", (long)r);
paf1600f.set("PF_NUMDDDT", a._numdoc);
paf1600f.set("PF_DATADDT", a._datadoc);
@ -1336,8 +1337,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
{
// <DatiOrdineAcquisto>
TPaf_record paf1000f("PAF1000F");
paf1000f.set("P0_KEYHEADERFATT", hfatt);
paf1000f.set("P0_KEYBODYFATT", bfatt);
paf1000f.set("P0_KEYHEADERFATT", _hfatt);
paf1000f.set("P0_KEYBODYFATT", _bfatt);
paf1000f.set("P0_RIFNUMLINEA", (long)r);
paf1000f.set("P0_IDDOC", a._numdoc);
paf1000f.set("P0_DATADOC", a._datadoc);
@ -1417,14 +1418,15 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if(doc.ha_riga_esenzione())
{
const TRiga_documento& riga_es = doc.get_riga_esenzione();
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", hfatt);
paf3000f.set("PT_KEYBODYFATT", bfatt);
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", descrizione(riga_es));
@ -1437,16 +1439,16 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
}
// Se il bollo va fatto pagare bisogna aggiungere una riga!
if(doc.get_bool("ADDBOLLI"))
if(doc.get_bool("ADDBOLLI") && doc.get_real("BOLLI") > ZERO)
{
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", hfatt);
paf3000f.set("PT_KEYBODYFATT", bfatt);
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");
@ -1457,17 +1459,42 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
ok &= insert(paf1800f) && insert(paf3000f);
}
// OMAGGI????
// Aggiungo le spese incasso
if(doc.get_real("SPESINC") > ZERO)
{
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", "Spese incasso");
paf1800f.set("PI_QUANTITA", UNO);
real imponibile = doc.imponibile();
paf1800f.set("PI_PREZZOUNIT", doc.spese_incasso(imponibile, 6, _netto));
paf1800f.set("PI_PRZTOTALE", doc.spese_incasso(imponibile, 6, _lordo));
set_IVA(doc.codiva_spese(), paf1800f);
ok &= insert(paf1800f) && insert(paf3000f);
}
// Conai assolto
if(doc.clifor().vendite().get_bool("CONAIASS"))
{
paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_KEYHEADERFATT", _hfatt);
paf1800f.set("PI_KEYBODYFATT", _bfatt);
paf1800f.set("PI_NUMEROLINEA", ++riga);
paf3000f.reset();
paf3000f.set("PT_KEYHEADERFATT", hfatt);
paf3000f.set("PT_KEYBODYFATT", bfatt);
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS", "Contributo CONAI assolto ove dovuto"));
@ -1498,8 +1525,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiRiepilogo>
TPaf_record paf2200f("PAF2200F");
paf2200f.set("PL_KEYHEADERFATT", hfatt);
paf2200f.set("PL_KEYBODYFATT", bfatt);
paf2200f.set("PL_KEYHEADERFATT", _hfatt);
paf2200f.set("PL_KEYBODYFATT", _bfatt);
remove(paf2200f); // Cancella tutte le righe di riepilogo IVA
const char* eiva = "I"; // Esigibilità IVA: Immediata, Differita, Split payment
@ -1532,8 +1559,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
// <DatiPagamento>
TPaf_record paf2400f("PAF2400F");
paf2400f.set("PN_KEYHEADERFATT", hfatt);
paf2400f.set("PN_KEYBODYFATT", bfatt);
paf2400f.set("PN_KEYHEADERFATT", _hfatt);
paf2400f.set("PN_KEYBODYFATT", _bfatt);
remove(paf2400f); // Cancella i dati pagamento
TPagamento& pag = doc.pagamento();
@ -1548,8 +1575,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
ok &= insert(paf2400f);
TPaf_record paf2500f("PAF2500F");
paf2500f.set("PO_KEYHEADERFATT", hfatt);
paf2500f.set("PO_KEYBODYFATT", bfatt);
paf2500f.set("PO_KEYHEADERFATT", _hfatt);
paf2500f.set("PO_KEYBODYFATT", _bfatt);
remove(paf2500f); // Cancella tutte le rate
// Imposto i campi uguali per tutte le rate
@ -1594,8 +1621,8 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
if (_gestioneallegati)
{
TPaf_record paf2600f("PAF2600F");
paf2600f.set("PP_KEYHEADERFATT", hfatt);
paf2600f.set("PP_KEYBODYFATT", bfatt);
paf2600f.set("PP_KEYHEADERFATT", _hfatt);
paf2600f.set("PP_KEYBODYFATT", _bfatt);
remove(paf2600f); // Cancella eventuali allegati
long nprogr = 0; // Numero di file allegati
// Se abilitato stampo il documento e lo allego
@ -1635,7 +1662,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
{
if (_def_fld.empty())
{
TString msgerr; msgerr << "Errore: il documento " << bfatt << " ha degli allegati ma nella configurazione non è stato impostato come trametterli\nCaricare il documento senza allegati?";
TString msgerr; msgerr << "Errore: il documento " << _bfatt << " ha degli allegati ma nella configurazione non è stato impostato come trametterli\nCaricare il documento senza allegati?";
load_allegati = false;
if (!yesno_box(msgerr))
return false;
@ -1660,8 +1687,8 @@ 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);
pafw300f.set("PW_KEYHEADERFATT", _hfatt);
pafw300f.set("PW_KEYBODYFATT", _bfatt);
remove(pafw300f); // Cancella eventuali allegati
const TTipo_documento& td = cached_tipodoc(doc.get(DOC_TIPODOC));
const TString codsdi = !td.invio_xml() ? "**********" : (enapec ? pec : coddest);
@ -1711,7 +1738,7 @@ TDoc_fp::TDoc_fp() : _log(nullptr), _cache_insert(false)
#ifdef DBG
_gestioneallegati = _allegafattura = false;
#elif
#else
_gestioneallegati = ini_get_bool(CONFIG_DITTA, "fp", "gestioneallegati");
_allegafattura = ini_get_bool(CONFIG_DITTA, "fp", "allegafatt");
#endif

View File

@ -88,6 +88,8 @@ private:
bool _to_commit;
bool _cache_insert;
vector<TString> _query;
TString8 _hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato
TString20 _bfatt; // Codice univoco di 20 caratteri del documento
int parse_line(const TString& line, TString& var, TString& val) const;
bool create_table(TScanner& paf, const TString& table);

View File

@ -92,7 +92,8 @@ BEGIN
ITEM "TD03|TD03 Acconto/Anticipo su parcella" MESSAGE ENABLE,F_NOTACREDDEB|""
ITEM "TD04|TD04 Nota di credito" MESSAGE ENABLE,F_NOTACREDDEB|"X"
ITEM "TD05|TD05 Nota di debito" MESSAGE ENABLE,F_NOTACREDDEB|"X"
ITEM "TD06|TD06 parcella" MESSAGE ENABLE,F_NOTACREDDEB|""
ITEM "TD06|TD06 Parcella" MESSAGE ENABLE,F_NOTACREDDEB|""
ITEM "TD20|TD20 Autofattura" MESSAGE ENABLE,F_NOTACREDDEB|""
END
BOOLEAN F_ESPORTA_FP