#include "ve0.h" #include #include #include #include #include #include "../cg/cglib01.h" /////////////////////////////////////////////////////////// // Applicazione per gestione maschere di modulo /////////////////////////////////////////////////////////// class TVE_tab_mod_app : public TTable_module_application { }; /////////////////////////////////////////////////////////// // Maschera di gestione tabella CVM: // Condizioni di vendita per categoria e gruppo merceologico /////////////////////////////////////////////////////////// #include "vetbcvm.h" class TCVM_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TCVM_mask(); }; TCVM_mask::TCVM_mask() : TAutomask("vetbcvm") { TSheet_field& s = sfield(F_CVM_SHT); s.set_nav_column(F_CVM_SOTTOCONTO, F_CVM_DESCONTO); } bool TCVM_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { case F_CVM_SHT: switch (e) { case se_query_add: case se_query_del: return false; // Non sono ammesse aggiunte o cancellazioni case se_notify_modify: { TSheet_field& s = (TSheet_field&)o; TToken_string& row = s.row(jolly); const long sc = row.get_long(s.cid2index(F_CVM_SOTTOCONTO)); if (sc > 0) // Colora le righe valide s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, jolly); else s.set_back_and_fore_color(COLOR_INVALID, COLOR_INVALID, jolly); } break; default: break; } default: break; } return true; } class TCVM_tab_app : public TRelation_application { TCVM_mask* _msk; TRelation* _rel; protected: int find_cve(TSheet_field& s, const TString& cve) const; public: virtual TMask* get_mask(int) { return _msk; } virtual TRelation* get_relation() const { return _rel; } virtual bool user_create(); virtual bool user_destroy(); virtual void init_query_mode(TMask& m); virtual void init_insert_mode(TMask& m); virtual void init_modify_mode(TMask& m); virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool remove(); }; void TCVM_tab_app::init_query_mode(TMask& m) { m.enable(-2); m.hide(-3); } void TCVM_tab_app::init_insert_mode(TMask& m) { m.disable(-2); m.show(-3); read(m); } void TCVM_tab_app::init_modify_mode(TMask& m) { m.disable(-2); m.show(-3); } bool TCVM_tab_app::user_create() { _rel = new TRelation("CRA"); _msk = new TCVM_mask; return true; } int TCVM_tab_app::find_cve(TSheet_field& s, const TString& cve) const { int mini = 0, maxi = s.items()-1, midi = 0; TString8 code; while (mini <= maxi) { midi = (mini+maxi) / 2; s.row(midi).get(0, code); const int cmp = code.compare(cve); if (cmp == 0) break; if (cmp > 0) maxi = midi-1; else mini = midi+1; } return code == cve ? midi : -1; } int TCVM_tab_app::read(TMask& m) { TSheet_field& s = m.sfield(F_CVM_SHT); s.destroy(); const TString& code = m.get(F_CVM_COD); if (code.full()) { TISAM_recordset gm("USE CVE"); for (bool ok = gm.move_first(); ok; ok = gm.move_next()) { TToken_string& row = s.row(-1); row = gm.get("CODTAB").as_string(); row.add(gm.get("S0").as_string()); } } if (!s.empty()) { TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD"); cvm.set_var("#COD", code); TString8 cve; for (bool ok = cvm.move_first(); ok; ok = cvm.move_next()) { cve = cvm.get("CODTAB[4,5]").as_string(); const int i = find_cve(s, cve); if (i >= 0) { const int gr = cvm.get("I0").as_int(); const int co = cvm.get("I1").as_int(); const long so = cvm.get("I2").as_int(); if (so > 0) { TBill zio(gr, co, so); TToken_string& row = s.row(i); zio.add_to(row, 2, 0x2); s.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, i); } } } } return s.empty() ? _iskeynotfound : NOERR; } int TCVM_tab_app::write(const TMask& m) { TSheet_field& s = m.sfield(F_CVM_SHT); TModule_table cvm("&CVM"); FOR_EACH_SHEET_ROW(s, i, row) { const TBill zio(*row, 2); TString16 code = m.get(F_CVM_COD); code << row->get(0); cvm.put("CODTAB", code); if (zio.ok()) { cvm.put("I0", zio.gruppo()); cvm.put("I1", zio.conto()); cvm.put("I2", zio.sottoconto()); cvm.rewrite_write(); } else { cvm.remove(); } } return NOERR; } int TCVM_tab_app::rewrite(const TMask& m) { return write(m); } bool TCVM_tab_app::remove() { const TString4 code = get_relation()->curr().get("CODTAB"); TISAM_recordset cvm("USE &CVM\nFROM CODTAB=#COD\nTO CODTAB=#COD"); cvm.set_var("#COD", code); TLocalisamfile& f = cvm.cursor()->file(); for (bool ok = cvm.move_first(); ok; ok = cvm.move_next()) f.remove(); return true; } bool TCVM_tab_app::user_destroy() { delete _msk; delete _rel; return true; } /////////////////////////////////////////////////////////// // Selettore applicazione per gestione maschere di modulo /////////////////////////////////////////////////////////// int ve0600(int argc, char* argv[]) { TString4 tab = argv[2]; tab.upper(); tab.strip("&"); if (tab == "CVM") { TCVM_tab_app a; a.run(argc, argv, TR("Conti per categoria e gruppo")); } else { TVE_tab_mod_app a; a.run(argc, argv, TR("Tabelle module vendite")); } return 0; }