#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); }