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: protected:
void copy(const TPaf_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; } 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: public:
void reset() { _fields.destroy(); } void reset() { _fields.destroy(); }
@ -325,14 +325,15 @@ const TVariant& TPaf_record::get(const char* fld) const
return var ? *var : NULL_VARIANT; return var ? *var : NULL_VARIANT;
} }
// Converte un varian in una stringa valida per SQLite // Converte un variant in una stringa valida per SQLite
const TString& TPaf_record::var2str(const TVariant& var) const const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const
{ {
const TFieldtypes vt = var.type(); const TFieldtypes vt = var.type();
if (vt == _realfld) if (vt == _realfld)
{ {
const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0);
TString& tmp = get_tmp_string(); TString& tmp = get_tmp_string();
tmp << '\'' << var.as_real().string(0, 2) << '\''; tmp << '\'' << v.string() << '\''; tmp.replace(',','.');
return tmp; return tmp;
} }
if (vt == _datefld) if (vt == _datefld)
@ -376,7 +377,7 @@ bool TPaf_record::remove()
{ {
if (nkf++ > 0) if (nkf++ > 0)
query << " AND "; query << " AND ";
query << fld << '=' << var2str(var) ; query << fld << '=' << var2str(fld, var) ;
} }
} }
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); 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); const TVariant& var = get(fld);
if (!var.is_null()) if (!var.is_null())
query << fld << '=' << var2str(var) << " AND "; query << fld << '=' << var2str(fld, var) << " AND ";
} }
query.rtrim(5); query.rtrim(5);
query << ';'; query << ';';
@ -436,7 +437,7 @@ bool TPaf_record::insert()
if (!var.is_null()) if (!var.is_null())
{ {
query << fld << ','; query << fld << ',';
values << var2str(var) << ','; values << var2str(fld, var) << ',';
} }
} }
query.rtrim(1); values.rtrim(1); query.rtrim(1); values.rtrim(1);
@ -486,7 +487,7 @@ bool TPA_mask::is_fattura(const TRectype& doc) const
return false; return false;
const TCodice_numerazione& cn = cached_numerazione(doc.get(DOC_CODNUM)); 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.set("PJ_KEYBODYFATT", bfatt);
paf2000f.remove(); // Cancella tutti gli sconti di riga paf2000f.remove(); // Cancella tutti gli sconti di riga
long riga = 1; long riga = 0;
FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc)
{ {
paf1800f.reset(); paf1800f.reset();
paf1800f.set("PI_KEYHEADERFATT", hfatt); paf1800f.set("PI_KEYHEADERFATT", hfatt);
paf1800f.set("PI_KEYBODYFATT", bfatt); paf1800f.set("PI_KEYBODYFATT", bfatt);
paf1800f.set("PI_NUMEROLINEA", riga++); paf1800f.set("PI_NUMEROLINEA", ++riga);
paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc)); paf1800f.set("PI_DESCRIZIONE", descrizione(*rdoc));
paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione paf1800f.set("PI_ALIQUOTAIVA", "22.00"); // Altrimenti scarta le righe di descrizione
if (rdoc->is_merce()) if (rdoc->is_merce())
{ {
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA)); paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
const real qta = rdoc->quantita(); 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) if (qta >= ZERO)
{ {
paf1800f.set("PI_QUANTITA", qta); paf1800f.set("PI_QUANTITA", qta);
@ -1266,13 +1272,30 @@ bool TDoc2Paf::elabora(TDocumentoEsteso& doc)
if (rdoc->is_spese()) if (rdoc->is_spese())
{ {
const TSpesa_prest& sp = rdoc->spesa(); 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); 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_PREZZOUNIT", prz);
paf1800f.set("PI_PRZTOTALE", imp); paf1800f.set("PI_PRZTOTALE", imp);
set_IVA(*rdoc, paf1800f); set_IVA(*rdoc, paf1800f);