7c4407fcae
git-svn-id: svn://10.65.10.50/branches/R_10_00@22895 c028cbd2-c16b-5b4b-a496-9718f37d4682
192 lines
5.2 KiB
C++
192 lines
5.2 KiB
C++
#include "../ve/velib04.h"
|
|
#include "../ca/calib01.h"
|
|
#include "pe1500.h"
|
|
|
|
#include "../ca/fasi.h"
|
|
|
|
class TOrdinazione : public TElaborazione_esterna
|
|
{
|
|
public:
|
|
virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
|
const TDate& data_elab, bool interattivo = false);
|
|
TOrdinazione(const TString& cod) : TElaborazione_esterna(cod) { }
|
|
};
|
|
|
|
bool TOrdinazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out,
|
|
const TDate& data_elab, bool interattivo)
|
|
{
|
|
const TString80 codart = ini_get_string(CONFIG_DITTA, "ci", "CODARTPR");
|
|
|
|
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));
|
|
|
|
TLocalisamfile fasi(LF_FASI);
|
|
|
|
const TMultilevel_code_info cfg_fasi(LF_FASI);
|
|
TString16 fase;
|
|
|
|
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);
|
|
|
|
const int last_lev = cfg_fasi.levels()-1;
|
|
if (last_lev >= 0)
|
|
{
|
|
const int last_len = cfg_fasi.len(last_lev);
|
|
const long last_val = atol(fase)+1;
|
|
fase.format("%0*ld", last_len, last_val);
|
|
fasi.put(FASI_CODCMSFAS, din.get(DOC_CODCMS));
|
|
fasi.put(FASI_CODFASE, fase);
|
|
fasi.put(FASI_DESCRIZ, rdoc->get(RDOC_DESCR));
|
|
fasi.write_rewrite();
|
|
}
|
|
} else
|
|
if (rdoc->is_merce())
|
|
{
|
|
TRiga_documento& rout = don.new_row(rdoc->get(RDOC_TIPORIGA));
|
|
TDocumento::copy_data(rout, *rdoc);
|
|
rout.set_original_rdoc_key(*rdoc);
|
|
rout.put(RDOC_FASCMS, fase);
|
|
rout.put(RDOC_CODARTMAG, codart);
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
const TString& pe_trova_elaborazione(const TRectype& doc)
|
|
{
|
|
TString16 cod;
|
|
|
|
const TString4 codnum = doc.get(DOC_CODNUM);
|
|
const TString4 tipodoc = doc.get(DOC_TIPODOC);
|
|
const TString4 stato = doc.get(DOC_STATO);
|
|
TString str;
|
|
str << "USE %ELD SELECT (STR(I0=\"0\"))&&(S3=\"pe1 -4\")&&(S5=\"" << codnum << "\")";
|
|
TRecordset* eld = create_recordset(str);
|
|
if (eld != NULL)
|
|
{
|
|
for (bool ok = eld->move_first(); ok; ok = eld->move_next())
|
|
{
|
|
const TString16 c = eld->get("CODTAB").as_string();
|
|
const TElaborazione e(c);
|
|
if (e.is_document_ok(doc))
|
|
{
|
|
cod = c;
|
|
break;
|
|
}
|
|
}
|
|
delete eld;
|
|
}
|
|
return get_tmp_string() = cod;
|
|
}
|
|
|
|
const TString& pe_trova_elaborazione(const TMask& m)
|
|
{
|
|
TRectype doc(LF_DOC);
|
|
doc.put(DOC_PROVV, 'D');
|
|
doc.put(DOC_ANNO, m.get(DOC_ANNO));
|
|
doc.put(DOC_CODNUM, m.get(DOC_CODNUM));
|
|
doc.put(DOC_NDOC, m.get(DOC_NDOC));
|
|
doc.put(DOC_TIPODOC, m.get(DOC_TIPODOC));
|
|
doc.put(DOC_STATO, m.get(DOC_STATO));
|
|
return pe_trova_elaborazione(doc);
|
|
}
|
|
|
|
bool pe_genera_ordine(TRectype& doc, const TString& cod)
|
|
{
|
|
TString16 codelab = cod;
|
|
if (codelab.blank())
|
|
codelab = pe_trova_elaborazione(doc);
|
|
|
|
TOrdinazione prev(codelab);
|
|
if (prev.empty())
|
|
return false;
|
|
|
|
const TDate oggi(TODAY);
|
|
TLista_documenti doc_in, doc_out;
|
|
doc_in.add(new TDocumento(doc));
|
|
|
|
bool ok = prev.elabora(doc_in, doc_out, oggi);
|
|
if (ok)
|
|
{
|
|
doc_in.rewrite();
|
|
doc_out.write();
|
|
|
|
const TRectype& idoc = doc_in[0];
|
|
for (int i = 0; i < idoc.items(); i++)
|
|
{
|
|
const char* fld = idoc.fieldname(i);
|
|
const TString& val = idoc.get(fld);
|
|
if (val.full())
|
|
doc.put(fld, val);
|
|
}
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TOrdinazione_app
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TOrdinazione_app : public TSkeleton_application
|
|
{
|
|
protected:
|
|
virtual void main_loop();
|
|
};
|
|
|
|
void TOrdinazione_app::main_loop()
|
|
{
|
|
TFilename ininame;
|
|
if (argc() >= 2)
|
|
{
|
|
const TFixed_string arg = argv(2);
|
|
ininame = arg.starts_with("-i", true) ? arg.mid(2) : arg;
|
|
}
|
|
|
|
TConfig ini(ininame, "Transaction");
|
|
const TString8 codelab = ini.get("Action");
|
|
|
|
ini.set_paragraph("33");
|
|
TRectype doc(LF_DOC);
|
|
doc.put(DOC_PROVV, ini.get(DOC_PROVV));
|
|
doc.put(DOC_ANNO, ini.get(DOC_ANNO));
|
|
doc.put(DOC_CODNUM, ini.get(DOC_CODNUM));
|
|
doc.put(DOC_NDOC, ini.get(DOC_NDOC));
|
|
|
|
if (pe_genera_ordine(doc, codelab))
|
|
{
|
|
ini.set_paragraph("Transaction");
|
|
ini.set("Result", "OK");
|
|
ini.set("Error", "0");
|
|
|
|
ini.set_paragraph("33");
|
|
for (int i = 0; i < doc.items(); i++)
|
|
{
|
|
const char* fld = doc.fieldname(i);
|
|
const TString& val = doc.get(fld);
|
|
if (val.full())
|
|
ini.set(fld, val);
|
|
}
|
|
}
|
|
} |