#include #include #include #include #include #include #include #include "pd0610100a.h" /////////////////////////////////////////////////////////// // Tabella clienti/articoli/fornitori /////////////////////////////////////////////////////////// class TTabmod_caf_msk: public TAutomask { protected: void riempi_sheet(); void aggiungi_riga(); void registra(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TTabmod_caf_msk(); }; void TTabmod_caf_msk::riempi_sheet() { const long cliente = get_long(F_CLIENTE); TSheet_field& sheet = sfield(F_SHEET); sheet.destroy(); if (cliente <= 0) { sheet.force_update(); return; } TString8 codcli; codcli.format("%06ld", cliente); TString query; query << "USE &CAF\n" << "FROM CODTAB=\"" << codcli << "\"\n" << "TO CODTAB=\"" << codcli << "\""; TISAM_recordset caf_query(query); for (bool ok = caf_query.move_first(); ok; ok = caf_query.move_next()) { const TRectype& caf = caf_query.cursor()->curr(); const TString80 codtab = caf.get("CODTAB"); const TString8 forn1 = caf.get("I0"); const TString8 forn2 = caf.get("I1"); TToken_string& row = sheet.row(-1); row.add(codtab.left(6), sheet.cid2index(S_CLIENTE)); row.add(codtab.mid(6), sheet.cid2index(S_ARTICOLO)); row.add(forn1, sheet.cid2index(S_FORN1)); row.add(forn2, sheet.cid2index(S_FORN2)); sheet.check_row(sheet.items()-1); } sheet.force_update(); } void TTabmod_caf_msk::aggiungi_riga() { const TString8 cliente = get(F_CLIENTE); if (cliente.empty()) return; TSheet_field& sheet = sfield(F_SHEET); TToken_string& row = sheet.row(-1); row.add(cliente, sheet.cid2index(S_CLIENTE)); sheet.force_update(); } void TTabmod_caf_msk::registra() { TModule_table caf("&CAF"); TSheet_field& sheet = sfield(F_SHEET); const int last_item = sheet.cid2index(S_FORN1)+1; FOR_EACH_SHEET_ROW(sheet, r, riga) { TToken_string& row = *(TToken_string*)riga; TString80 codtab; const long codcli = atol(row.get(sheet.cid2index(S_CLIENTE))); codtab.format("%06ld", codcli); codtab << row.get(sheet.cid2index(S_ARTICOLO)); const int items = row.items(); if (items < last_item) { caf.put("CODTAB", codtab); caf.remove(); } else { long forn1 = 0; long forn2 = 0; const char* s1 = row.get(sheet.cid2index(S_FORN1)); if (s1 != NULL) forn1 = atol(s1); const char* s2 = row.get(sheet.cid2index(S_FORN2)); if (s2 != NULL) forn2 = atol(s2); caf.put("CODTAB", codtab); caf.put("I0", forn1); caf.put("I1", forn2); caf.rewrite_write(); } } riempi_sheet(); } bool TTabmod_caf_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { case DLG_CANCEL: if(e == fe_button && jolly == 0) { reset(F_CLIENTE); reset(F_RAGSOC); sfield(F_SHEET).destroy(); return false; } break; case DLG_SAVEREC: if(e == fe_button) registra(); break; case DLG_DELREC: if(e == fe_button && jolly == 1) { TMask& msk = sfield(F_SHEET).sheet_mask(); msk.reset(S_FORN1); msk.reset(S_RAGSOC1); msk.reset(S_FORN2); msk.reset(S_RAGSOC2); return false; } break; case F_CLIENTE: if(e == fe_modify) riempi_sheet(); break; case F_SHEET: if(e == se_query_add) { aggiungi_riga(); return false; } if(e == se_query_del) { TSheet_field& sheet = (TSheet_field&)o; TToken_string& row = sheet.row(jolly); row.add("0", sheet.cid2index(S_FORN1)); row.add("0", sheet.cid2index(S_FORN2)); sheet.force_update(jolly); TButton_field& button = (TButton_field&)sheet.sheet_mask().field(DLG_DELREC); return on_field_event(button, fe_button, 1); } break; case S_ARTICOLO: if(e == fe_modify) { TSheet_field& sheet = sfield(F_SHEET); const int rsel = sheet.selected(); const TString& codart = o.get(); FOR_EACH_SHEET_ROW(sheet, r, riga) { if (r == rsel) continue; TToken_string& row = *(TToken_string*)riga; if (row.get(sheet.cid2index(S_ARTICOLO)) == codart) { TString msg; msg << "Attenzione: esiste già una riga con articolo " << codart; warning_box(msg); sheet.select(rsel); TMask& rmsk = sheet.sheet_mask(); rmsk.set(S_ARTICOLO, ""); break; } } } break; default: break; } return true; } TTabmod_caf_msk::TTabmod_caf_msk() : TAutomask("pd0610100a") { } /////////////////////////////////////////////////////////// // TTabmod_caf_app /////////////////////////////////////////////////////////// class TTabmod_caf_app: public TSkeleton_application { protected: virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "ve";} virtual void main_loop(); void elabora(); }; void TTabmod_caf_app::elabora() { } void TTabmod_caf_app::main_loop() { TTabmod_caf_msk m; while (m.run() == K_ENTER) { elabora(); } } int pd0610100(int argc, char* argv[]) { TTabmod_caf_app app; app.run(argc, argv, TR("Tabella Clienti/Articoli/Fornitori")); return 0; }