git-svn-id: svn://10.65.10.50/branches/R_10_00@22887 c028cbd2-c16b-5b4b-a496-9718f37d4682
87 lines
2.5 KiB
C++
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);
|
|
}
|