campo-sirio/pe/pe1402.cpp
guy 59a06f9def Nuova gestione preventivazione
git-svn-id: svn://10.65.10.50/branches/R_10_00@22887 c028cbd2-c16b-5b4b-a496-9718f37d4682
2013-07-26 15:45:58 +00:00

87 lines
2.5 KiB
C++

#include "pe1401.h"
#include "../ve/velib04.h"
class TPreventivazione : public TElaborazione
{
public:
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo = false);
TPreventivazione(const TString& cod) : TElaborazione(cod) { }
};
bool TPreventivazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
const TDate& data_elab, bool interattivo)
{
for (int i = 0; i < doc_in.items(); i++)
{
if (i >= doc_out.items())
{
TDocumento* doc = new TDocumento('D', data_elab.year(), codice_numerazione_finale(), 0L);
doc->put(DOC_TIPODOC, tipo_finale());
doc->put(DOC_STATO, stato_finale());
doc_out.add(doc);
}
TDocumento& din = doc_in[i];
TDocumento& don = doc_out[i];
don.put(DOC_TIPOCF, din.get(DOC_TIPOCF));
don.put(DOC_CODCF, din.get(DOC_CODCF));
don.put(DOC_DATADOC, data_elab);
don.put(DOC_NOTE, din.get(DOC_NOTE));
don.put(DOC_CODCMS, din.get(DOC_CODCMS));
FOR_EACH_PHYSICAL_RDOC(din, r, rdoc)
{
if (rdoc->is_descrizione())
{
TRiga_documento& rout = don.new_row(rdoc->get(RDOC_TIPORIGA));
TDocumento::copy_data(rout, *rdoc);
} else
if (rdoc->is_merce())
{
TRiga_documento& rout = don.new_row(rdoc->get(RDOC_TIPORIGA));
TDocumento::copy_data(rout, *rdoc);
}
}
}
return true;
}
const TString& trova_elaborazione(const TRectype& doc)
{
TString8 cod;
TISAM_recordset eld("USE %ELD SELECT (I0==0)||(I0=4)");
const TString4 codnum = doc.get(DOC_CODNUM);
const TString4 tipodoc = doc.get(DOC_TIPODOC);
const TString4 stato = doc.get(DOC_STATO);
for (bool ok = eld.move_first(); ok; ok = eld.move_next())
{
const TString4 c = eld.get("CODTAB").as_string();
const TElaborazione e(c);
if (codnum != e.codice_numerazione_iniziale())
continue;
if (tipodoc != e.tipo_iniziale(0))
continue;
if (stato >= e.stato_finale_doc_iniziale())
continue;
cod = c;
break;
}
return get_tmp_string() = cod;
}
bool genera_ordine(const TRectype& doc)
{
const TString& codelab = trova_elaborazione(doc);
if (codelab.empty())
return false;
const TDate oggi(TODAY);
TLista_documenti doc_in, doc_out;
doc_in.add(new TDocumento(doc));
TPreventivazione prev(codelab);
return prev.elabora(doc_in, doc_out, oggi);
}