diff --git a/ps/ps0713200.cpp b/ps/ps0713200.cpp index 22797cc9c..a37e9fb12 100755 --- a/ps/ps0713200.cpp +++ b/ps/ps0713200.cpp @@ -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("\""); diff --git a/ps/ps0713700.cpp b/ps/ps0713700.cpp index 02638de92..d7a66b980 100755 --- a/ps/ps0713700.cpp +++ b/ps/ps0713700.cpp @@ -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; } diff --git a/ps/ps0920.cpp b/ps/ps0920.cpp index 49795c915..2f1fbb282 100755 --- a/ps/ps0920.cpp +++ b/ps/ps0920.cpp @@ -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; diff --git a/ps/ps0920.h b/ps/ps0920.h index 6db3d3122..dcfd0b39b 100755 --- a/ps/ps0920.h +++ b/ps/ps0920.h @@ -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[]); diff --git a/ps/ps0920500.cpp b/ps/ps0920500.cpp index 54e8d2801..923dfe3ca 100644 --- a/ps/ps0920500.cpp +++ b/ps/ps0920500.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -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: diff --git a/ps/ps0920500a.uml b/ps/ps0920500a.uml index 994010be3..0bcde2737 100644 --- a/ps/ps0920500a.uml +++ b/ps/ps0920500a.uml @@ -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 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 " diff --git a/ps/ps0920600.cpp b/ps/ps0920600.cpp new file mode 100644 index 000000000..1a89e46de --- /dev/null +++ b/ps/ps0920600.cpp @@ -0,0 +1,26 @@ +#include + +/////////////////////////////////////////////////////////// +// 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; +} diff --git a/ps/ps0920600a.h b/ps/ps0920600a.h new file mode 100644 index 000000000..16a08c79e --- /dev/null +++ b/ps/ps0920600a.h @@ -0,0 +1,6 @@ + +#define F_CLIFO 101 +#define F_RAGSOC 102 +#define F_SCELTA1 201 +#define F_SCELTA2 202 +#define F_TONO2 302 diff --git a/ps/ps0920600a.uml b/ps/ps0920600a.uml new file mode 100644 index 000000000..36c16673d --- /dev/null +++ b/ps/ps0920600a.uml @@ -0,0 +1,67 @@ +#include "ps0920600a.h" + +TOOLBAR "topbar" 0 0 0 2 + +#include + +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 \ No newline at end of file