git-svn-id: svn://10.65.10.50/branches/R_10_00@23103 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2015-05-29 09:57:47 +00:00
parent 6266252db8
commit ca5bf94f18

View File

@ -222,7 +222,7 @@ class TPaf_record : public TObject
protected:
void copy(const TPaf_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; }
const TString& var2str(const TVariant& var) const;
const TString& var2str(const TString& fld, const TVariant& var) const;
public:
void reset() { _fields.destroy(); }
@ -325,14 +325,15 @@ const TVariant& TPaf_record::get(const char* fld) const
return var ? *var : NULL_VARIANT;
}
// Converte un varian in una stringa valida per SQLite
const TString& TPaf_record::var2str(const TVariant& var) const
// Converte un variant in una stringa valida per SQLite
const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const
{
const TFieldtypes vt = var.type();
if (vt == _realfld)
{
const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0);
TString& tmp = get_tmp_string();
tmp << '\'' << var.as_real().string(0, 2) << '\'';
tmp << '\'' << v.string() << '\''; tmp.replace(',','.');
return tmp;
}
if (vt == _datefld)
@ -376,7 +377,7 @@ bool TPaf_record::remove()
{
if (nkf++ > 0)
query << " AND ";
query << fld << '=' << var2str(var) ;
query << fld << '=' << var2str(fld, var) ;
}
}
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table);
@ -403,7 +404,7 @@ bool TPaf_record::search()
{
const TVariant& var = get(fld);
if (!var.is_null())
query << fld << '=' << var2str(var) << " AND ";
query << fld << '=' << var2str(fld, var) << " AND ";
}
query.rtrim(5);
query << ';';
@ -436,7 +437,7 @@ bool TPaf_record::insert()
if (!var.is_null())
{
query << fld << ',';
values << var2str(var) << ',';
values << var2str(fld, var) << ',';
}
}
query.rtrim(1); values.rtrim(1);
@ -486,7 +487,7 @@ bool TPA_mask::is_fattura(const TRectype& doc) const
return false;
const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM));
return !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa sda P.A.
return cn.tipo() == 2 && !cn.get_bool("B10"); // Controlla se fattura provvisioria esclusa da P.A.
}
@ -1169,19 +1170,24 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
paf2000f.set("PJ_KEYBODYFATT", bfatt);
paf2000f.remove(); // Cancella tutti gli sconti di riga
long riga = 1;
long riga = 0;
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.set("PI_NUMEROLINEA", ++riga);
paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc));
paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
if (rdoc->is_merce())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
const real qta = rdoc->quantita();
if (qta.is_zero())
{
TString msg; msg.format("La riga merce %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta());
log(1, msg);
}
if (qta >= ZERO)
{
paf1800f.set("PI_QUANTITA", qta);
@ -1266,13 +1272,30 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
if (rdoc->is_spese())
{
const TSpesa_prest& sp = rdoc->spesa();
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->quantita();
if (qta.is_zero() || sp.is_percentuale())
qta = UNO;
paf1800f.set("PI_QUANTITA", qta);
const real imp = rdoc->importo(true, false);
real prz = imp / qta; prz.round(2);
real qta = UNO;
if (sp.is_tipo())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
qta = rdoc->quantita();
if (qta.is_zero())
{
TString msg; msg.format("La riga spese a quantità %d ha quantità nulla (campo %s)", riga, (const char*)rdoc->field_qta());
log(1, msg);
qta = UNO;
}
paf1800f.set("PI_QUANTITA", qta);
}
real prz = imp;
if (qta != UNO)
{
prz = rdoc->prezzo(true, false);
if (prz.is_zero() && !imp.is_zero())
{
const TPrice price(imp / qta);
prz = price.get_value();
}
}
paf1800f.set("PI_PREZZOUNIT", prz);
paf1800f.set("PI_PRZTOTALE", imp);
set_IVA(*rdoc, paf1800f);