Personalizzazioni DB service
git-svn-id: svn://10.65.10.50/branches/R_10_00@22859 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
649be11f1e
commit
a11eef1282
@ -78,7 +78,7 @@ void TImporta_comm_app::scan_file(const TFilename& file, TAssoc_array& righe)
|
||||
//scorro tutto il file (per ogni riga devo riportare l'esito dell'importazione nel log)
|
||||
while (s.ok())
|
||||
{
|
||||
if (!pi.addstatus(s.tellg()))
|
||||
if (!pi.addstatus((long)s.tellg()))
|
||||
break;
|
||||
|
||||
TString16 idlavoro = rec.get(0); idlavoro.strip("\"");
|
||||
|
@ -12,13 +12,9 @@ class TPulisci_app : public TSkeleton_application
|
||||
{
|
||||
|
||||
protected:
|
||||
virtual const char * extra_modules() const {return "cm";} //deve funzionare anche per le commesse
|
||||
virtual const char* extra_modules() const {return "cm";} //deve funzionare anche per le commesse
|
||||
virtual void main_loop();
|
||||
static bool elabora_movimento(const TRelation& rel, void* pJolly);
|
||||
|
||||
public:
|
||||
TPulisci_app() {}
|
||||
virtual ~TPulisci_app() {}
|
||||
};
|
||||
|
||||
bool TPulisci_app::elabora_movimento(const TRelation& rel, void* pJolly)
|
||||
@ -61,8 +57,8 @@ bool TPulisci_app::elabora_movimento(const TRelation& rel, void* pJolly)
|
||||
void TPulisci_app::main_loop()
|
||||
{
|
||||
if (ca_config().get_bool("UsePdcc") &&
|
||||
yesno_box("Si desidera eliminare i conti non analitici") &&
|
||||
yesno_box("Si desidera veramente eliminare i conti non analitici"))
|
||||
delete_box("Si desidera eliminare i conti non analitici") &&
|
||||
delete_box("Si desidera veramente eliminare i conti non analitici"))
|
||||
{
|
||||
TRelation rel_movana(LF_MOVANA);
|
||||
TCursor cur_movana(&rel_movana, "", 1);
|
||||
@ -71,7 +67,7 @@ void TPulisci_app::main_loop()
|
||||
if (items > 0)
|
||||
{
|
||||
rel_movana.lfile().set_curr(new TAnal_mov); //il record principale della rel e' un TMov_anal!!
|
||||
cur_movana.scan(elabora_movimento, this, "Eliminazione conti non analitici...");
|
||||
cur_movana.scan(elabora_movimento, this, title());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,6 +75,6 @@ void TPulisci_app::main_loop()
|
||||
int ps0713700(int argc, char* argv[])
|
||||
{
|
||||
TPulisci_app app;
|
||||
app.run(argc, argv, "Eliminazione conti non analitici...");
|
||||
app.run(argc, argv, "Eliminazione conti non analitici");
|
||||
return 0;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ int main(int argc, char** argv)
|
||||
case 2: ps0920300(argc, argv); break; // Pianificazione impianti DBService
|
||||
case 3: ps0920400(argc, argv); break; // Riepilogo produzione DBService
|
||||
case 4: ps0920500(argc, argv); break; // Chiusura ordini terminale DBService
|
||||
case 5: ps0920600(argc, argv); break; // Tabella scelte
|
||||
default: ps0920100(argc, argv); break; // Stampa ordini di produzione DBService
|
||||
}
|
||||
return 0;
|
||||
|
@ -3,3 +3,4 @@ int ps0920200(int argc, char* argv[]);
|
||||
int ps0920300(int argc, char* argv[]);
|
||||
int ps0920400(int argc, char* argv[]);
|
||||
int ps0920500(int argc, char* argv[]);
|
||||
int ps0920600(int argc, char* argv[]);
|
||||
|
460
ps/ps0920500.cpp
460
ps/ps0920500.cpp
@ -1,4 +1,5 @@
|
||||
#include <applicat.h>
|
||||
#include <execp.h>
|
||||
#include <progind.h>
|
||||
#include <reputils.h>
|
||||
#include <tabmod.h>
|
||||
@ -26,7 +27,11 @@ public:
|
||||
class TEvasione_mmag : public TConsegna_ordini
|
||||
{
|
||||
TLog_report* m_log;
|
||||
TString_array m_e;
|
||||
|
||||
TString m_codart;
|
||||
int m_idriga;
|
||||
int m_qty;
|
||||
bool m_saldo;
|
||||
int m_scelta, m_lotto, m_pallet, m_spezzoni;
|
||||
|
||||
protected:
|
||||
@ -34,34 +39,21 @@ protected:
|
||||
virtual void post_process(TLista_documenti& doc_out, TLista_documenti& doc_in);
|
||||
|
||||
public:
|
||||
const TString& get_choice_desc(long codcf, int s) const;
|
||||
void restart(TLog_report& log, int s);
|
||||
bool evade(const TString& codart, int idriga, int qty, bool sld, int lotto, int pall, int spez);
|
||||
TEvasione_mmag(const char* codelab) : TConsegna_ordini(codelab) {}
|
||||
bool get_choice_desc(long codcf, int s, TString& scelta, TString& tono) const;
|
||||
bool evade(int scelta, const TString& codart, int idriga, int qty, bool sld, int lotto, int pall, int spez);
|
||||
TEvasione_mmag(const char* codelab, TLog_report& log) : TConsegna_ordini(codelab), m_log(&log) {}
|
||||
};
|
||||
|
||||
void TEvasione_mmag::restart(TLog_report& log, int s)
|
||||
{
|
||||
CHECKD(s == 1 || s == 2, "Scelta non valida ", s);
|
||||
m_log = &log;
|
||||
m_e.destroy();
|
||||
m_scelta = s;
|
||||
m_lotto = m_pallet = m_spezzoni = 0;
|
||||
}
|
||||
|
||||
bool TEvasione_mmag::evade(const TString& codart, int idriga, int qty, bool sld, int lotto, int pall, int spez)
|
||||
bool TEvasione_mmag::evade(int scelta, const TString& codart, int idriga, int qty, bool sld, int lotto, int pall, int spez)
|
||||
{
|
||||
const bool good = (qty > 0 || sld) && idriga > 0 && codart.full();
|
||||
if (good)
|
||||
{
|
||||
TToken_string* e = new TToken_string;
|
||||
e->add(codart);
|
||||
e->add(idriga);
|
||||
e->add(qty);
|
||||
e->add(sld ? "X" : " ");
|
||||
m_e.add(e);
|
||||
|
||||
// Uguali per tutti
|
||||
m_scelta = scelta;
|
||||
m_codart = codart;
|
||||
m_idriga = idriga;
|
||||
m_qty = qty;
|
||||
m_saldo = sld;
|
||||
m_lotto = lotto;
|
||||
m_pallet = pall;
|
||||
m_spezzoni = spez;
|
||||
@ -71,9 +63,6 @@ bool TEvasione_mmag::evade(const TString& codart, int idriga, int qty, bool sld,
|
||||
|
||||
bool TEvasione_mmag::run_consegna_mask(TMask& cm)
|
||||
{
|
||||
if (m_e.empty())
|
||||
return false;
|
||||
|
||||
TSheet_field* sheet = NULL;
|
||||
for (int i = cm.fields()-1; i > 0; i--)
|
||||
{
|
||||
@ -92,72 +81,62 @@ bool TEvasione_mmag::run_consegna_mask(TMask& cm)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool good = true;
|
||||
|
||||
FOR_EACH_ARRAY_ROW(m_e, r, row)
|
||||
bool found = false;
|
||||
FOR_EACH_SHEET_ROW(*sheet, s, sow)
|
||||
{
|
||||
const TString80 codart = row->get(0);
|
||||
const int idriga = row->get_int();
|
||||
const int qty = row->get_int();
|
||||
bool sld = row->get_char() > ' ';
|
||||
bool found = false;
|
||||
FOR_EACH_SHEET_ROW(*sheet, s, sow)
|
||||
{
|
||||
const char* art = sow->get(6);
|
||||
const int idr = sow->get_int(15);
|
||||
found = codart == art && idriga == idr;
|
||||
if (found)
|
||||
{
|
||||
if (sow->get_char(0) <= ' ')
|
||||
sow->add("X", 0);
|
||||
if (qty)
|
||||
{
|
||||
const int residuo = sow->get_int(1);
|
||||
const int qta = sow->get_int(2) + qty;
|
||||
sow->add(qta, 2);
|
||||
if (qta >= residuo)
|
||||
sld = true;
|
||||
}
|
||||
if (sld)
|
||||
sow->add("X", 3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
const char* art = sow->get(6);
|
||||
const int idr = sow->get_int(15);
|
||||
found = m_codart == art && m_idriga == idr;
|
||||
if (found)
|
||||
{
|
||||
row->add("OK", 4); // success
|
||||
}
|
||||
else
|
||||
{
|
||||
TString msg;
|
||||
msg.format(FR("Impossibile trovare l'articolo %s sulla riga %d dell'ordine"),
|
||||
(const char*)codart, idriga);
|
||||
m_log->log(1, msg);
|
||||
good = false;
|
||||
if (sow->get_char(0) <= ' ')
|
||||
sow->add("X", 0);
|
||||
if (m_qty > 0)
|
||||
{
|
||||
const int residuo = sow->get_int(1);
|
||||
const int qta = sow->get_int(2) + m_qty;
|
||||
sow->add(qta, 2);
|
||||
if (qta >= residuo)
|
||||
m_saldo = true;
|
||||
}
|
||||
if (m_saldo)
|
||||
sow->add("X", 3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
TString msg;
|
||||
msg.format(FR("Impossibile trovare l'articolo %s sulla riga %d dell'ordine"),
|
||||
(const char*)m_codart, m_idriga);
|
||||
m_log->log(1, msg);
|
||||
}
|
||||
|
||||
return good;
|
||||
return found;
|
||||
}
|
||||
|
||||
const TString& TEvasione_mmag::get_choice_desc(long codcf, int s) const
|
||||
bool TEvasione_mmag::get_choice_desc(long codcf, int s, TString& scelta, TString& tono) const
|
||||
{
|
||||
TString8 key; key.format("%06ld", codcf);
|
||||
const TRectype& rec = cache().get("&PS0920SCE", key);
|
||||
TString& tmp = get_tmp_string();
|
||||
|
||||
if (s < 2)
|
||||
{
|
||||
tmp = rec.get("S1");
|
||||
if (tmp.blank())
|
||||
tmp = "1";
|
||||
scelta = rec.get("S1");
|
||||
if (scelta.blank())
|
||||
scelta = "1";
|
||||
tono.cut(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = rec.get("S2");
|
||||
if (tmp.blank())
|
||||
tmp = "2";
|
||||
scelta = rec.get("S2");
|
||||
if (scelta.blank())
|
||||
scelta = "2";
|
||||
tono = rec.get("S4");
|
||||
}
|
||||
return tmp;
|
||||
|
||||
return !rec.empty();
|
||||
}
|
||||
|
||||
void TEvasione_mmag::post_process(TLista_documenti& doc_out, TLista_documenti& /*doc_in*/)
|
||||
@ -166,40 +145,52 @@ void TEvasione_mmag::post_process(TLista_documenti& doc_out, TLista_documenti& /
|
||||
{
|
||||
TDocumento& mmag = doc_out[d];
|
||||
const long codcf = mmag.get_long(DOC_CODCF);
|
||||
const TString4 scelta = get_choice_desc(codcf, m_scelta);
|
||||
TString8 scelta, tono;
|
||||
get_choice_desc(codcf, m_scelta, scelta, tono);
|
||||
|
||||
FOR_EACH_PHYSICAL_RDOC(mmag, r, row)
|
||||
{
|
||||
TRiga_documento& riga = *row;
|
||||
if (riga.is_articolo() && riga.get_int(RDOC_QTAGG5) == 0) // Riga articolo non post-processata
|
||||
{
|
||||
const int qta = riga.get_int(RDOC_QTA);
|
||||
if (qta > 0)
|
||||
int np = m_pallet;
|
||||
if (m_spezzoni > 0)
|
||||
np++;
|
||||
riga.add(RDOC_IMPFISSO, np);
|
||||
riga.put(RDOC_ASPBENI, scelta);
|
||||
riga.put(RDOC_QTAGG4, m_lotto);
|
||||
if (m_scelta > 1 && tono.full()) // Forzatura tono d'uscita
|
||||
riga.put(RDOC_CODAGG2, tono);
|
||||
|
||||
riga.put(RDOC_QTAGG5, 1); // Segna riga come post-processata
|
||||
}
|
||||
}
|
||||
|
||||
bool joined = true;
|
||||
while (joined)
|
||||
{
|
||||
joined = false;
|
||||
int nlast = mmag.rows();
|
||||
while (nlast > 1 && !mmag[nlast].is_articolo())
|
||||
nlast--;
|
||||
const TRiga_documento& r2 = mmag[nlast];
|
||||
for (int i = nlast-1; i > 0; i--)
|
||||
{
|
||||
TRiga_documento& r1 = mmag[i];
|
||||
if (r1.get(RDOC_CODART) == r2.get(RDOC_CODART) &&
|
||||
r1.get(RDOC_ASPBENI) == r2.get(RDOC_ASPBENI) &&
|
||||
r1.get(RDOC_DAANNO) == r2.get(RDOC_DAANNO) &&
|
||||
r1.get(RDOC_DACODNUM)== r2.get(RDOC_DACODNUM) &&
|
||||
r1.get(RDOC_DANDOC) == r2.get(RDOC_DANDOC) &&
|
||||
r1.get(RDOC_DAIDRIGA)== r2.get(RDOC_DAIDRIGA))
|
||||
{
|
||||
int np = m_pallet;
|
||||
if (m_spezzoni > 0)
|
||||
np++;
|
||||
|
||||
if (np <= 0)
|
||||
{
|
||||
// Calcolo pezzi per pallet: ppcollo * ppstrato * nstrati
|
||||
const TRectype& anamag = cache().get(LF_ANAMAG, riga.get(RDOC_CODART));
|
||||
const int ppp = anamag.get_int(ANAMAG_PPCOLLO) * anamag.get_int(ANAMAG_USER1) * anamag.get_int(ANAMAG_USER2);
|
||||
// Calcolo numero di pallet
|
||||
np = 1;
|
||||
if (ppp > 0)
|
||||
{
|
||||
np = qta / ppp;
|
||||
if (qta % ppp) // l'eventuale resto va tutto su di un nuovo pallet
|
||||
np++;
|
||||
}
|
||||
}
|
||||
|
||||
riga.put(RDOC_IMPFISSO, np);
|
||||
riga.put(RDOC_ASPBENI, scelta);
|
||||
riga.put(RDOC_QTAGG4, m_lotto);
|
||||
riga.put(RDOC_QTAGG5, 1); // Segna riga come post-processata
|
||||
}
|
||||
r1.add(RDOC_QTA, r2.get_real(RDOC_QTA));
|
||||
r1.add(RDOC_NCOLLI, r2.get_real(RDOC_NCOLLI));
|
||||
r1.add(RDOC_IMPFISSO, r2.get_real(RDOC_IMPFISSO));
|
||||
r1.add(RDOC_PNETTO, r2.get_real(RDOC_PNETTO));
|
||||
joined = mmag.destroy_row(nlast, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -217,8 +208,12 @@ protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e , long jolly);
|
||||
|
||||
const TRectype& get_doc(TToken_string& key, TLog_report& log) const;
|
||||
bool check_file(TClosure_set& recset);
|
||||
bool test_row(const TClosure_set& recset, TLog_report& log) const;
|
||||
bool check_file(TClosure_set& recset) const;
|
||||
bool import_file(TClosure_set& recset);
|
||||
bool evadi_ordine(TEvasione_mmag& jail, TToken_string& row,
|
||||
TLista_documenti& doc_in, TLista_documenti& doc_out,
|
||||
TLog_report& log);
|
||||
bool elabora(TString_array& records, TLog_report& log);
|
||||
bool chiudi_righe(TString_array& records, TLog_report& log);
|
||||
|
||||
@ -269,7 +264,61 @@ const TRectype& TClosure_msk::get_doc(TToken_string& rdoc, TLog_report& log) con
|
||||
return doc;
|
||||
}
|
||||
|
||||
bool TClosure_msk::check_file(TClosure_set& recset)
|
||||
bool TClosure_msk::test_row(const TClosure_set& recset, TLog_report& log) const
|
||||
{
|
||||
TToken_string rdoc(recset.get(0).as_string(), '.');
|
||||
|
||||
TString msg; msg << rdoc << " : ";
|
||||
TToken_string rkey = recset.get(1).as_string();
|
||||
const TRectype& anamag = cache().get(LF_ANAMAG, rkey);
|
||||
bool is_bad = anamag.empty();
|
||||
if (is_bad)
|
||||
msg << TR("Codice articolo non valido ") << rkey;
|
||||
else
|
||||
{
|
||||
const int ppp = anamag.get_int(ANAMAG_PPCOLLO) * anamag.get_int(ANAMAG_USER1) * anamag.get_int(ANAMAG_USER2);
|
||||
is_bad = ppp <= 0;
|
||||
if (is_bad)
|
||||
msg << TR("Articolo senza informazioni di palettizzazione ") << rkey;
|
||||
else
|
||||
{
|
||||
const long codcf = atol(rkey.left(3));
|
||||
rkey.format("C|%d", codcf);
|
||||
is_bad = cache().get(LF_CLIFO, rkey).empty();
|
||||
if (is_bad)
|
||||
msg << TR("Codice cliente non valido ") << codcf;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_bad) // Se buono allora controllo anche evasione della riga ordine
|
||||
{
|
||||
const int idriga = rdoc.get_int(3);
|
||||
// Chiave per righe documento con campi in ordine demenziale
|
||||
rkey = rdoc.get(0); rkey.add(rdoc.get(1));
|
||||
rkey.add("D"); rkey.add(rdoc.get(2));
|
||||
TRecord_array righe(rkey, LF_RIGHEDOC);
|
||||
for (int r = righe.rows(); r > 0; r = righe.pred_row(r))
|
||||
{
|
||||
const TRectype& riga = righe.row(r);
|
||||
if (riga.get_int(RDOC_IDRIGA) == idriga)
|
||||
{
|
||||
if (riga.get_bool(RDOC_RIGAEVASA))
|
||||
{
|
||||
msg << TR("Riga già evasa: ") << riga.get(RDOC_CODART);
|
||||
is_bad = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_bad)
|
||||
log.log(2, msg);
|
||||
|
||||
return !is_bad;
|
||||
}
|
||||
|
||||
bool TClosure_msk::check_file(TClosure_set& recset) const
|
||||
{
|
||||
TLog_report log;
|
||||
int errors = 0;
|
||||
@ -282,7 +331,7 @@ bool TClosure_msk::check_file(TClosure_set& recset)
|
||||
break;
|
||||
|
||||
const TRectype& doc = get_doc(rdoc, log);
|
||||
if (doc.empty())
|
||||
if (doc.empty() || !test_row(recset, log))
|
||||
errors++;
|
||||
}
|
||||
|
||||
@ -317,7 +366,7 @@ bool TClosure_msk::import_file(TClosure_set& recset)
|
||||
break;
|
||||
|
||||
const TRectype& doc = get_doc(rdoc, log);
|
||||
if (doc.empty())
|
||||
if (doc.empty() || !test_row(recset, log))
|
||||
continue;
|
||||
|
||||
const int indsped = doc.get_int(DOC_CODINDSP);
|
||||
@ -339,47 +388,21 @@ bool TClosure_msk::import_file(TClosure_set& recset)
|
||||
rdoc.insert(str);
|
||||
|
||||
// Inserisco il codice cliente davanti
|
||||
str = recset.get(1).as_string().left(3);
|
||||
key = recset.get(1).as_string(); // CODART
|
||||
str = key.left(3);
|
||||
rdoc.insert(".");
|
||||
rdoc.insert(str);
|
||||
|
||||
|
||||
key.format("C|%d", atoi(str));
|
||||
if (cache().get(LF_CLIFO, key).empty())
|
||||
{
|
||||
TString msg; msg << rdoc << " : ";
|
||||
msg << TR("Codice cliente non valido ") << str;
|
||||
log.log(2, msg);
|
||||
continue;
|
||||
}
|
||||
|
||||
key = recset.get(1).as_string();
|
||||
const TRectype& anamag = cache().get(LF_ANAMAG, key);
|
||||
if (anamag.empty())
|
||||
{
|
||||
TString msg; msg << rdoc << " : ";
|
||||
msg << TR("Codice articolo non valido ") << key;
|
||||
log.log(2, msg);
|
||||
continue;
|
||||
}
|
||||
|
||||
const int ppp = anamag.get_int(ANAMAG_PPCOLLO) * anamag.get_int(ANAMAG_USER1) * anamag.get_int(ANAMAG_USER2);
|
||||
if (ppp <= 0)
|
||||
{
|
||||
TString msg; msg << rdoc << " : ";
|
||||
msg << TR("Articolo senza informazioni di palettizzazione ") << key;
|
||||
log.log(1, msg);
|
||||
}
|
||||
|
||||
mag.put("S0", rdoc);
|
||||
mag.put("S1", key); // Articolo
|
||||
mag.put("I0", rdoc.get_int(0)); // Cliente
|
||||
mag.put("I0", str); // Cliente
|
||||
mag.put("I1", recset.get(2).as_int()); // Palette di prima
|
||||
mag.put("I2", recset.get(3).as_int()); // Spezzoni di prima
|
||||
mag.put("I3", recset.get(4).as_int()); // Palette di seconda
|
||||
mag.put("I4", recset.get(5).as_int()); // Spezzoni di seconda
|
||||
mag.put("B0", recset.get(6).as_string() > " "); // Saldo
|
||||
mag.put("B1", false); // Riga evasa
|
||||
mag.put("D1", 0L); // Data evasione
|
||||
mag.put("S6", recset.get(7).as_string()); // Lotto
|
||||
|
||||
TDate ril(TODAY);
|
||||
@ -421,7 +444,11 @@ void TClosure_msk::load_sheet()
|
||||
TString filter;
|
||||
filter = "(B1!=\"X\")";
|
||||
if (get_bool(F_SHOWALL))
|
||||
filter << "||(D0==\"" << get(F_DATADOC) << "\")";
|
||||
{
|
||||
const TDate datadoc = get(F_DATADOC);
|
||||
const TDate datapre = datadoc-15L;
|
||||
filter << "||(BETWEEN(D0," << datapre.date2ansi() << ',' << datadoc.date2ansi() << "))";
|
||||
}
|
||||
|
||||
TCursor c(&r, filter, 2);
|
||||
const TRecnotype n = c.items();
|
||||
@ -448,6 +475,8 @@ void TClosure_msk::load_sheet()
|
||||
row.add(rec.get("B0"), s.cid2index(F_SALDO));
|
||||
row.add(rec.get("S6"), s.cid2index(F_LOTTO));
|
||||
row.add(rec.get("D0"), s.cid2index(F_DATA));
|
||||
row.add(rec.get("B1"), s.cid2index(F_EVASA));
|
||||
row.add(rec.get("D1"), s.cid2index(F_DATEVAS));
|
||||
row.add(rec.get("CODTAB"), s.cid2index(F_RECORD));
|
||||
|
||||
s.check_row(s.items()-1, 0x3); // Do outputs and checks
|
||||
@ -466,9 +495,10 @@ void TClosure_msk::load_sheet()
|
||||
|
||||
bool TClosure_msk::chiudi_righe(TString_array& records, TLog_report& log)
|
||||
{
|
||||
const TDate datadoc = get(F_DATADOC);
|
||||
int err = NOERR;
|
||||
TFast_isamfile mmag(LF_TABMOD);
|
||||
FOR_EACH_ARRAY_ROW(records, r, row) if (row->get_char(0) > ' ')
|
||||
TLocalisamfile mmag(LF_TABMOD);
|
||||
FOR_EACH_ARRAY_ROW(records, r, row) if (row->get_char(0) > ' ' && row->get_char(F_EVASA-101) > ' ')
|
||||
{
|
||||
const TString16 rec = row->get(F_RECORD-101);
|
||||
mmag.put("MOD", "PS");
|
||||
@ -479,6 +509,7 @@ bool TClosure_msk::chiudi_righe(TString_array& records, TLog_report& log)
|
||||
if (err == NOERR)
|
||||
{
|
||||
mmag.put("B1", true);
|
||||
mmag.put("D1", datadoc);
|
||||
err = mmag.rewrite();
|
||||
}
|
||||
if (err != NOERR)
|
||||
@ -492,32 +523,65 @@ bool TClosure_msk::chiudi_righe(TString_array& records, TLog_report& log)
|
||||
return err == NOERR;
|
||||
}
|
||||
|
||||
bool TClosure_msk::evadi_ordine(TEvasione_mmag& jail, TToken_string& row, TLista_documenti& doc_in, TLista_documenti& doc_out, TLog_report& log)
|
||||
{
|
||||
for (int scelta = 1; scelta <= 2; scelta++)
|
||||
{
|
||||
const int pall = row.get_int((scelta == 1 ? F_PALET1 : F_PALET2) - 101);
|
||||
const int spez = row.get_int((scelta == 1 ? F_SPEZZ1 : F_SPEZZ2) - 101);
|
||||
const int pezzi = row.get_int((scelta == 1 ? F_PEZZ1 : F_PEZZ2 ) - 101);
|
||||
bool sld = false;
|
||||
if (row.get_char(F_SALDO - 101) > ' ')
|
||||
{
|
||||
if (scelta == 1)
|
||||
sld = row.get_int(F_PEZZ2 - 101) <= 0;
|
||||
else
|
||||
sld = pezzi > 0;
|
||||
}
|
||||
if (pezzi > 0 || sld)
|
||||
{
|
||||
const TString codart = row.get(F_CODART - 101);
|
||||
const long codcf = atol(codart.left(3));
|
||||
const int idriga = row.get_int(F_IDRIGA - 101);
|
||||
const int lotto = row.get_long(F_LOTTO - 101);
|
||||
jail.evade(scelta, codart, idriga, pezzi, sld, lotto, pall, spez);
|
||||
|
||||
TString8 s, t;
|
||||
jail.get_choice_desc(codcf, scelta, s, t);
|
||||
TString msg;
|
||||
msg << TR("Elaborazione scelta ") << s << ' ' << t;
|
||||
log.log(0, msg);
|
||||
const bool good = jail.elabora(doc_in, doc_out, get_date(F_DATADOC));
|
||||
if (good)
|
||||
{
|
||||
row.add("X", F_EVASA-101);
|
||||
}
|
||||
else
|
||||
{
|
||||
log.log(2, TR("Elaborazione annullata"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TClosure_msk::elabora(TString_array& records, TLog_report& log)
|
||||
{
|
||||
if (records.empty())
|
||||
return false;
|
||||
|
||||
TEvasione_mmag jail(get(F_CODELAB));
|
||||
TEvasione_mmag jail(get(F_CODELAB), log);
|
||||
|
||||
TLista_documenti doc_in, doc_out;
|
||||
|
||||
const TDate data_doc = get(F_DATADOC);
|
||||
const int anno = data_doc.year();
|
||||
const TString4 codnum = jail.codice_numerazione_finale();
|
||||
const int annof = data_doc.year();
|
||||
const TString4 codnumf = jail.codice_numerazione_finale();
|
||||
|
||||
const long codcf = records.row(0).get_long(1);
|
||||
const int indsped = records.row(0).get_int(2);
|
||||
|
||||
TDocumento* mmag = new TDocumento('D', anno, codnum, 0L);
|
||||
mmag->put(DOC_TIPODOC, jail.tipo_finale());
|
||||
mmag->put(DOC_STATO, jail.stato_finale());
|
||||
mmag->put(DOC_DATADOC, data_doc);
|
||||
mmag->put(DOC_TIPOCF, 'C');
|
||||
mmag->put(DOC_CODCF, codcf);
|
||||
mmag->put(DOC_CODINDSP, indsped);
|
||||
doc_out.add(mmag);
|
||||
|
||||
long last_ndoc = 0;
|
||||
TDocumento* mmag = NULL;
|
||||
FOR_EACH_ARRAY_ROW(records, r, row)
|
||||
{
|
||||
const char provv = 'D';
|
||||
@ -526,76 +590,57 @@ bool TClosure_msk::elabora(TString_array& records, TLog_report& log)
|
||||
const long ndoc = row->get_long(F_NDOC -101);
|
||||
if (!doc_in.find(provv, anno, codnum, ndoc))
|
||||
{
|
||||
if (mmag != NULL && doc_in.items())
|
||||
{
|
||||
doc_in.rewrite();
|
||||
doc_in.destroy(-1);
|
||||
}
|
||||
|
||||
TString msg; msg << TR("Caricamento ordine ") << anno << '/' << codnum << '/' << ndoc;
|
||||
log.log(0, msg);
|
||||
|
||||
TDocumento* orc = new TDocumento(provv, anno, codnum, ndoc);
|
||||
doc_in.add(orc);
|
||||
|
||||
TString msg; msg << TR("Caricamento ") << anno << '/' << codnum << '/' << ndoc;
|
||||
log.log(0, msg);
|
||||
|
||||
if (last_ndoc == 0)
|
||||
if (mmag == NULL)
|
||||
{
|
||||
mmag->copy_data(mmag->head(), orc->head());
|
||||
msg.cut(0) << TR("Creazione nuovo documento ") << annof << '/' << codnumf;
|
||||
log.log(0, msg);
|
||||
|
||||
mmag = new TDocumento('D', annof, codnumf, 0L);
|
||||
mmag->put(DOC_TIPODOC, jail.tipo_finale());
|
||||
mmag->put(DOC_STATO, jail.stato_finale());
|
||||
mmag->put(DOC_DATADOC, data_doc);
|
||||
mmag->put(DOC_TIPOCF, 'C');
|
||||
mmag->put(DOC_CODCF, codcf);
|
||||
mmag->put(DOC_CODINDSP, indsped);
|
||||
|
||||
mmag->copy_data(mmag->head(), orc->head());
|
||||
mmag->put(DOC_TIPODOC, jail.tipo_finale());
|
||||
mmag->put(DOC_STATO, jail.stato_finale());
|
||||
mmag->put(DOC_DATADOC, data_doc);
|
||||
mmag->put(DOC_CAUSMAG, mmag->tipo().caus_mov());
|
||||
}
|
||||
|
||||
last_ndoc = ndoc;
|
||||
doc_out.add(mmag);
|
||||
}
|
||||
}
|
||||
evadi_ordine(jail, *row, doc_in, doc_out, log);
|
||||
}
|
||||
|
||||
for (int scelta = 1; scelta <= 2; scelta++)
|
||||
if (mmag != NULL && doc_in.items())
|
||||
{
|
||||
jail.restart(log, scelta);
|
||||
bool some_row = false;
|
||||
FOR_EACH_ARRAY_ROW(records, r, row)
|
||||
{
|
||||
const int pall = row->get_int((scelta == 1 ? F_PALET1 : F_PALET2) - 101);
|
||||
const int spez = row->get_int((scelta == 1 ? F_SPEZZ1 : F_SPEZZ2) - 101);
|
||||
const int pezzi = row->get_int((scelta == 1 ? F_PEZZ1 : F_PEZZ2 ) - 101);
|
||||
bool sld = false;
|
||||
if (row->get_char(F_SALDO - 101) > ' ')
|
||||
{
|
||||
if (scelta == 1)
|
||||
sld = row->get_int(F_PEZZ2 - 101) <= 0;
|
||||
else
|
||||
sld = pezzi > 0;
|
||||
}
|
||||
if (pezzi > 0 || sld)
|
||||
{
|
||||
const TString codart = row->get(F_CODART - 101);
|
||||
const int idriga = row->get_int(F_IDRIGA - 101);
|
||||
const int lotto = row->get_long(F_LOTTO - 101);
|
||||
some_row |= jail.evade(codart, idriga, pezzi, sld, lotto, pall, spez);
|
||||
}
|
||||
}
|
||||
if (some_row)
|
||||
{
|
||||
TString msg;
|
||||
msg << TR("Elaborazione scelta ") << jail.get_choice_desc(codcf, scelta);
|
||||
log.log(0, msg);
|
||||
const bool good = jail.elabora(doc_in, doc_out, data_doc);
|
||||
if (!good)
|
||||
{
|
||||
FOR_EACH_ARRAY_ROW(records, r1, row1) if (row1->get_char(0) > ' ')
|
||||
row1->add(" ", 0);
|
||||
log.log(2, TR("Elaborazione annullata"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
doc_in.rewrite();
|
||||
doc_in.destroy(-1);
|
||||
}
|
||||
|
||||
int err = doc_out.write();
|
||||
if (err == NOERR)
|
||||
{
|
||||
chiudi_righe(records, log);
|
||||
doc_in.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
TString80 msg;
|
||||
msg << TR("Impossibile registrare il documento ") << anno << '/' << codnum << '/' << mmag->get(DOC_NDOC);
|
||||
msg << TR("Impossibile registrare il documento ") << annof << '/' << codnumf << '/' << mmag->get(DOC_NDOC);
|
||||
log.log(2, msg);
|
||||
}
|
||||
|
||||
@ -674,7 +719,7 @@ bool TClosure_msk::cancella()
|
||||
if (k > 0 && noyes_box(FR("Confermare l'eliminazione di %ld record?"), k))
|
||||
{
|
||||
const int nRec = s.cid2index(F_RECORD);
|
||||
TFast_isamfile mmag(LF_TABMOD);
|
||||
TLocalisamfile mmag(LF_TABMOD);
|
||||
TString16 n;
|
||||
FOR_EACH_SHEET_ROW(s, r2, row2) if (row2->starts_with("X"))
|
||||
{
|
||||
@ -709,7 +754,7 @@ bool TClosure_msk::salva()
|
||||
const int nSld = s.cid2index(F_SALDO);
|
||||
const int nLot = s.cid2index(F_LOTTO);
|
||||
|
||||
TFast_isamfile mmag(LF_TABMOD);
|
||||
TLocalisamfile mmag(LF_TABMOD);
|
||||
TString16 n;
|
||||
FOR_EACH_SHEET_ROW(s, r, row)
|
||||
{
|
||||
@ -777,7 +822,7 @@ bool TClosure_msk::on_field_event(TOperable_field& o, TField_event e , long joll
|
||||
}
|
||||
break;
|
||||
case F_SHOWALL:
|
||||
if (e == fe_button)
|
||||
if (e == fe_modify)
|
||||
load_sheet();
|
||||
break;
|
||||
case DLG_RECALC:
|
||||
@ -805,6 +850,13 @@ bool TClosure_msk::on_field_event(TOperable_field& o, TField_event e , long joll
|
||||
load_sheet();
|
||||
}
|
||||
break;
|
||||
case DLG_LINK:
|
||||
if (e == fe_button)
|
||||
{
|
||||
TExternal_app app("ps0920 -5 &PS0920SCE");
|
||||
app.run();
|
||||
}
|
||||
break;
|
||||
case F_CODELAB:
|
||||
case F_DATADOC:
|
||||
case F_SHEET:
|
||||
|
@ -33,10 +33,21 @@ END
|
||||
|
||||
BUTTON DLG_ELABORA 2 2
|
||||
BEGIN
|
||||
PROMPT 3 6 "Elabora"
|
||||
PROMPT 1 6 "Elabora"
|
||||
PICTURE TOOL_ELABORA
|
||||
END
|
||||
|
||||
BUTTON DLG_NULL 2 2
|
||||
BEGIN
|
||||
PROMPT 1 7 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_LINK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 8 "Scelte"
|
||||
PICTURE TOOL_LINK
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
|
||||
ENDPAGE
|
||||
@ -108,7 +119,9 @@ BEGIN
|
||||
ITEM "Saldo"
|
||||
ITEM "Lotto"
|
||||
ITEM "Descrizione"
|
||||
ITEM "Data@10"
|
||||
ITEM "Acquisita il"
|
||||
ITEM "Ev."
|
||||
ITEM "Evasa il@10"
|
||||
ITEM "Record@10"
|
||||
DEFAULT "NoProfile"
|
||||
END
|
||||
@ -197,6 +210,18 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN F_EVASA
|
||||
BEGIN
|
||||
PROMPT 48 4 "Evasa il"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE F_DATEVAS
|
||||
BEGIN
|
||||
PROMPT 61 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CODART 20
|
||||
BEGIN
|
||||
PROMPT 1 6 "Articolo "
|
||||
|
26
ps/ps0920600.cpp
Normal file
26
ps/ps0920600.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include <modtbapp.h>
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TScelte_relapp
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TScelte_relapp : public TTable_module_application
|
||||
{
|
||||
protected:
|
||||
virtual bool check_autorization() const { return false; }
|
||||
virtual const char* extra_modules() const { return "ve"; }
|
||||
virtual TMask* user_create_mask();
|
||||
|
||||
};
|
||||
|
||||
TMask* TScelte_relapp::user_create_mask()
|
||||
{
|
||||
return new TMask("ps0920600a");
|
||||
}
|
||||
|
||||
int ps0920600(int argc, char* argv[])
|
||||
{
|
||||
TScelte_relapp a;
|
||||
a.run(argc, argv, TR("Scelte per cliente"));
|
||||
return 0;
|
||||
}
|
6
ps/ps0920600a.h
Normal file
6
ps/ps0920600a.h
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
#define F_CLIFO 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_SCELTA1 201
|
||||
#define F_SCELTA2 202
|
||||
#define F_TONO2 302
|
67
ps/ps0920600a.uml
Normal file
67
ps/ps0920600a.uml
Normal file
@ -0,0 +1,67 @@
|
||||
#include "ps0920600a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
#include <relapbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Scelte per cliente" 0 2 0 0
|
||||
|
||||
NUMBER F_CLIFO 6
|
||||
BEGIN
|
||||
PROMPT 1 1 "Cliente "
|
||||
USE &PS0920SCE
|
||||
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=CODTAB
|
||||
INPUT CODTAB F_CLIFO
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||
DISPLAY "I Scelta" S1
|
||||
DISPLAY "II Scelta" S2
|
||||
DISPLAY "Tono d'uscita" S4
|
||||
OUTPUT F_CLIFO CODTAB
|
||||
OUTPUT F_RAGSOC LF_CLIFO->RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
FLAGS "GZ"
|
||||
KEY 1
|
||||
FIELD CODTAB
|
||||
MESSAGE EMPTY ENABLE,F_RAGSOC
|
||||
MESSAGE DISABLE,F_RAGSOC
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 9 2 ""
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC F_RAGSOC
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
DISPLAY "Codice" CODCF
|
||||
OUTPUT F_CLIFO CODCF
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHEKCTYPE NORMAL
|
||||
KEY 2
|
||||
END
|
||||
|
||||
STRING F_SCELTA1 4
|
||||
BEGIN
|
||||
PROMPT 1 3 "Prima Scelta "
|
||||
FIELD S1
|
||||
END
|
||||
|
||||
STRING F_SCELTA2 4
|
||||
BEGIN
|
||||
PROMPT 1 4 "Seconda Scelta "
|
||||
FIELD S2
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_TONO2 8
|
||||
BEGIN
|
||||
PROMPT 1 5 "Tono d'uscita "
|
||||
FIELD S4
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user