campo-sirio/pe/pe1500.cpp
guy 7c4407fcae Aggiunta colonna prezzi in articoli per preventivazione
git-svn-id: svn://10.65.10.50/branches/R_10_00@22895 c028cbd2-c16b-5b4b-a496-9718f37d4682
2013-09-11 09:49:46 +00:00

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