#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); const int indsp = get_int(F_INDSPED); TSheet_field& sheet = sfield(F_SHEET); sheet.destroy(); if (cliente <= 0) { sheet.force_update(); return; } TString8 codcf; codcf.format("%06ld", cliente); TString4 indsped; indsped.format("%03d", indsp); TString16 key; key << codcf << indsped; TString query; query << "USE &CAF\n" << "FROM CODTAB=\"" << key << "\"\n" << "TO CODTAB=\"" << key << "\""; 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 TString4 lis1 = caf.get("S4"); const TString4 con1 = caf.get("S5"); const TString8 forn2 = caf.get("I1"); const TString4 lis2 = caf.get("S6"); const TString4 con2 = caf.get("S7"); TToken_string& row = sheet.row(-1); row.add(codtab.left(6), sheet.cid2index(S_CLIENTE)); row.add(codtab.mid(6, 3), sheet.cid2index(S_INDSPED)); row.add(codtab.mid(9), sheet.cid2index(S_ARTICOLO)); row.add(forn1, sheet.cid2index(S_FORN1)); row.add(lis1, sheet.cid2index(S_LIS1)); row.add(con1, sheet.cid2index(S_CON1)); row.add(forn2, sheet.cid2index(S_FORN2)); row.add(lis2, sheet.cid2index(S_LIS2)); row.add(con2, sheet.cid2index(S_CON2)); sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_ARTICOLO)); sheet.disable_cell(sheet.items()-1 , sheet.cid2index(S_DESART)); sheet.check_row(sheet.items()-1); } sheet.force_update(); } void TTabmod_caf_msk::aggiungi_riga() { const TString8 cliente = get(F_CLIENTE); const TString4 indsped = get(F_INDSPED); if (cliente.empty()) return; TSheet_field& sheet = sfield(F_SHEET); TToken_string& row = sheet.row(-1); row.add(cliente, sheet.cid2index(S_CLIENTE)); row.add(indsped, sheet.cid2index(S_INDSPED)); sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_ARTICOLO)); sheet.enable_cell(sheet.items() - 1, sheet.cid2index(S_DESART)); sheet.force_update(); } void TTabmod_caf_msk::registra() { TModule_table caf("&CAF"); TSheet_field& sheet = sfield(F_SHEET); FOR_EACH_SHEET_ROW(sheet, r, riga) { caf.zero(); TToken_string& row = *(TToken_string*)riga; TString8 codcf; codcf.format("%06d", row.get_long(sheet.cid2index(S_CLIENTE))); TString4 indsped; indsped.format("%03d", row.get_int(sheet.cid2index(S_INDSPED))); TString80 codtab; codtab << codcf; codtab << indsped; codtab << row.get(sheet.cid2index(S_ARTICOLO)); const long forn1 = row.get_long(sheet.cid2index(S_FORN1)); const long forn2 = row.get_long(sheet.cid2index(S_FORN2)); const TString4 list1 = row.get(sheet.cid2index(S_LIS1)); const TString4 list2 = row.get(sheet.cid2index(S_LIS2)); const TString4 cont1 = row.get(sheet.cid2index(S_CON1)); const TString4 cont2 = row.get(sheet.cid2index(S_CON2)); caf.put("CODTAB", codtab); if (forn1 > 0 || forn2 > 0) { caf.put("S4", list1); caf.put("S5", cont1); caf.put("S6", list2); caf.put("S7", cont2); caf.put("I0", forn1); caf.put("I1", forn2); caf.rewrite_write(); } else caf.remove(); } 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); reset(F_INDSPED); 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: case F_INDSPED: if(e == fe_modify) riempi_sheet(); break; case F_SHEET: if(e == se_query_add) { aggiungi_riga(); return false; } else 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); } else if (e == se_leave) { TSheet_field& sheet = (TSheet_field&)o; sheet.disable_cell(jolly , sheet.cid2index(S_ARTICOLO)); sheet.disable_cell(jolly , sheet.cid2index(S_DESART)); } 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; }