Patch level : 12.0 1032

Files correlati     : ve0.exe

Commento :

Modificato il metodo di ricerca dei riferimenti di bolla per le fatture delle lavanderie con i riferimenti in testa

Interno

Bisogna controllare i casi normali
This commit is contained in:
Alessandro Bonazzi 2021-02-18 00:24:17 +01:00
parent 245289fa14
commit cce0c55a8c

View File

@ -23,22 +23,6 @@
bool set_connection(SSimple_query& s)
{
bool ok = true;
#ifdef DBG
TString ip = fp_settings().get_db_indirizzo();
if (ip.upper() != "TESTCAMPO2012")
{
if (s.sq_connect("TESTCAMPO2012@campo_fp",
"fp",
"fp",
TSDB_MSSQL) != NOERR)
{
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
}
else
{
#endif
if (s.sq_connect(
fp_settings().get_db_str_con(),
fp_settings().get_db_user(),
@ -48,9 +32,6 @@ bool set_connection(SSimple_query& s)
warning_box("Impossibile connettersi al DB esterno");
ok = false;
}
#ifdef DBG
}
#endif
return ok;
}
@ -1838,8 +1819,51 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
long riga = 1;
bool f_buonocons = false;
bool first_row = false;
const bool riftesta = main_app().has_module(LVAUT, CHK_DONGLE) && ini_get_bool(CONFIG_DITTA, "lv", "RifTest");
map<TString20, TDate> ancestors_s;
TString riga_buoni_cons;
TString temp;
if (riftesta)
{
TString rifs = doc.get(DOC_NOTE);
if (rifs.len() > 25 && rifs[25] == ' ')
{
temp = rifs;
rifs = temp.left(25);
temp.ltrim(26);
rifs << temp;
}
rifs.trim();
if (rifs == "0")
rifs.cut(0);
int pos = rifs.find(" - ");
int len = rifs.len();
if (len > 0 && pos < 0)
pos = len;
for(; pos >= 0;)
{
TToken_string rif(rifs.left(pos), ' ');
// <DatiDDT>
reset(paf1600f);
temp = rif.get();
paf1600f.set("PF_NUMDDDT", temp);
temp = rif.get();
paf1600f.set("PF_DATADDT", temp);
paf1600f.set("PF_GESTIONE", "D");
ok &= insert(paf1600f);
rifs.ltrim(pos + 3);
pos = rifs.find(" - ");
len = rifs.len();
if (len > 0 && pos < 0)
pos = len;
// </DatiDDT>
}
}
FOR_EACH_PHYSICAL_FPRDOC(doc, r, rdoc)
{
// Controllo la riga
@ -1879,65 +1903,68 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf1800f.set("PI_PRZTOTALE", ZERO);
set_IVA(_codivadefault, paf1800f);
}
else if (rdoc->is_merce())
{
if (rdoc->get(RDOC_QTA).is_zero())
{
TString msg;
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
set_qta_prezzo(paf1800f, rdoc);
if(rdoc->iva().codice().empty())
{
set_IVA(_codivadefault, paf1800f);
}
else
set_IVA(*rdoc, paf1800f);
/*
const TDate data = doc.get(DOC_DATADOC);
paf1800f.set("PI_DTINIZIOPER", data);
paf1800f.set("PI_DTFINEPER", data);
*/
/*
* Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
*/
TArray ancestors;
find_ancestors(*rdoc, ancestors);
for (int i = ancestors.last(); i > 0; i = ancestors.pred(i))
{
_has_bolla |= true;
const TAncestor& a = dynamic_cast<const TAncestor&>(ancestors[i]);
ancestors_s.insert({ a._numdoc, a._datadoc }); // Per i buoni di consegna lavanderie
if (i == 1)
{
// <DatiDDT>
reset(paf1600f);
paf1600f.set("PF_RIFNUMLINEA", static_cast<long>(r));
paf1600f.set("PF_NUMDDDT", a._numdoc);
paf1600f.set("PF_DATADDT", a._datadoc);
paf1600f.set("PF_GESTIONE", "D");
ok &= insert(paf1600f);
// </DatiDDT>
}
else if (i == 3)
{
// <DatiOrdineAcquisto>
paf1000f.set("P0_KEYHEADERFATT", _hfatt);
paf1000f.set("P0_KEYBODYFATT", _bfatt);
paf1000f.set("P0_RIFNUMLINEA", static_cast<long>(r));
paf1000f.set("P0_IDDOC", a._numdoc);
paf1000f.set("P0_DATADOC", a._datadoc);
paf1000f.set("P0_COMMESSACONV", com);
paf1000f.set("P0_CODCUP", cup);
paf1000f.set("P0_CODCIG", cig);
paf1000f.set("P0_GESTIONE", "D");
ok &= insert(paf1000f);
// </DatiOrdineAcquisto>
}
}
}
else if (rdoc->is_merce())
{
if (rdoc->get(RDOC_QTA).is_zero())
{
TString msg;
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
set_qta_prezzo(paf1800f, rdoc);
if (rdoc->iva().codice().empty())
{
set_IVA(_codivadefault, paf1800f);
}
else
set_IVA(*rdoc, paf1800f);
/*
const TDate data = doc.get(DOC_DATADOC);
paf1800f.set("PI_DTINIZIOPER", data);
paf1800f.set("PI_DTFINEPER", data);
*/
/*
* Ogni riga si può rifare a un DDT/Ordine diverso, per questo devo inserire i dati da qua e non in testata
*/
if (!riftesta)
{
TArray ancestors;
find_ancestors(*rdoc, ancestors);
for (int i = ancestors.last(); i > 0; i = ancestors.pred(i))
{
_has_bolla |= true;
const TAncestor& a = dynamic_cast<const TAncestor&>(ancestors[i]);
ancestors_s.insert({ a._numdoc, a._datadoc }); // Per i buoni di consegna lavanderie
if (i == 1)
{
// <DatiDDT>
reset(paf1600f);
paf1600f.set("PF_RIFNUMLINEA", static_cast<long>(r));
paf1600f.set("PF_NUMDDDT", a._numdoc);
paf1600f.set("PF_DATADDT", a._datadoc);
paf1600f.set("PF_GESTIONE", "D");
ok &= insert(paf1600f);
// </DatiDDT>
}
else if (i == 3)
{
// <DatiOrdineAcquisto>
paf1000f.set("P0_KEYHEADERFATT", _hfatt);
paf1000f.set("P0_KEYBODYFATT", _bfatt);
paf1000f.set("P0_RIFNUMLINEA", static_cast<long>(r));
paf1000f.set("P0_IDDOC", a._numdoc);
paf1000f.set("P0_DATADOC", a._datadoc);
paf1000f.set("P0_COMMESSACONV", com);
paf1000f.set("P0_CODCUP", cup);
paf1000f.set("P0_CODCIG", cig);
paf1000f.set("P0_GESTIONE", "D");
ok &= insert(paf1000f);
// </DatiOrdineAcquisto>
}
}
}
}
else if (rdoc->is_spese())
{
const TSpesa_prest& sp = rdoc->spesa();
@ -2101,7 +2128,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
/* Se ho una fattura che deriva dalla fatturazione differita delle lavanderie prendo
* dalla relativa riga descrizione tutti i riferimenti alle bolle che mancano */
if (f_buonocons)
if (!riftesta && f_buonocons)
{
TString& memo = riga_buoni_cons;
if (memo.full())