#include #include #include #include #include "vetbnum.h" #include "velib.h" #include "../ca/calib01.h" #include "vetbspp.h" #include "vetbprs.h" #include "vetbrss.h" #include "vetbatr.h" /////////////////////////////////////////////////////////// // TVendite_mask /////////////////////////////////////////////////////////// class TVendite_mask : public TAutomask { TString4 _tab; // Voglio la tabella sempre sotto mano protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); bool is_table(const char* tab) const { return _tab == tab; } void get_printer_config(TString& name) const; bool get_printer_name(TString& name) const; void reset_printer_config() const; bool on_num_event(TOperable_field& o, TField_event e, long jolly); public: const TString& table_code() const { return _tab; } TVendite_mask(const char* name); virtual ~TVendite_mask() { } }; void TVendite_mask::get_printer_config(TString& config) const { config = _tab; for (TEditable_field* f = get_key_field(1, TRUE); f; f = get_key_field(1, FALSE)) { if (f->shown()) config << f->get(); } } bool TVendite_mask::get_printer_name(TString& name) const { TString config; get_printer_config(config); TConfig ini(CONFIG_STAMPE, config); name = ini.get("Name"); return name.not_empty(); } void TVendite_mask::reset_printer_config() const { TString config; get_printer_config(config); TConfig ini(CONFIG_STAMPE, config); ini.remove_all(); } static TString16 __tab_codnum; bool tab_tipodoc_ok(const TString & tipodoc) { const TString4 module(main_app().name().left(2)); const TTipo_documento& tipo = cached_tipodoc(tipodoc); const TString & tipomod = tipo.module(); if (module == "ve" && tipomod.blank()) return true; return tipomod == module; } bool tab_tip_filter(const TRelation* r) { if (__tab_codnum.blank()) return true; const TCodice_numerazione & cod_num = cached_numerazione(__tab_codnum); const TString4 tipo = r->curr().get("CODTAB"); int last = cod_num.ntipi_doc(); for (int i = 0; i < last; i++ ) { const TString & curtipo = cod_num.tipo_doc(i); if (curtipo == tipo && tab_tipodoc_ok(curtipo)) return true; } return false; } bool TVendite_mask::on_num_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_CODNUM: if (e == fe_modify) __tab_codnum = o.get(); break; default: break; } return true; //metodo che gestiva la stampante per le numerazioni documenti } bool TVendite_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { if (is_table("NUM")) return on_num_event(o, e, jolly); return true; } TVendite_mask::TVendite_mask(const char* name) : TAutomask(name) { const TFixed_string n(name); _tab = n.mid(4,3); _tab.upper(); if (is_table("NUM")) { TCursor * cur = efield(F_TIPODOC).browse()->cursor(); cur->set_filterfunction(tab_tip_filter); } } /////////////////////////////////////////////////////////// // TVendite_tabapp /////////////////////////////////////////////////////////// class TVendite_tabapp : public TTable_application { virtual const char * extra_modules() const {return "dt";} protected: virtual TMask* set_mask(TMask* m); virtual void add_anal_fields(TVendite_mask& vm); 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); bool is_table(const char* tab) const { return get_tabname() == tab; } public: }; void TVendite_tabapp::add_anal_fields(TVendite_mask& vm) { int y = 4; short dlg = F_ANAL1; int nfields = 0; const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI); const TMultilevel_code_info& cominfo = ca_multilevel_code_info(LF_COMMESSE); const TMultilevel_code_info& cdcinfo = ca_multilevel_code_info(LF_CDC); int fasi_fields = fasinfo.levels(); const int cdc_fields = cdcinfo.levels(); const int com_fields = cominfo.levels(); const bool use_fsc = fasi_fields > 0; if (use_fsc && fasinfo.parent() == LF_CDC) { nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 20); const int dlgf = dlg + com_fields; fasi_fields -= com_fields; const int offset = 61 - vm.field(dlgf).field()->from(); for (short i = 0 ; i< fasi_fields; i++) { TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field(); if (fr != NULL) { TEdit_field & fld = vm.efield(dlgf + i); TString16 str; str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset); fld.set_field(str); } } } else nfields = ca_create_fields(vm, 1, LF_CDC, 2, y, dlg, dlg+50, 0x0, "S1", 20); dlg += nfields; y += nfields; if (use_fsc && fasinfo.parent() == LF_COMMESSE) { nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 40); const int dlgf = dlg + com_fields; fasi_fields -= com_fields; const int offset = 60 - vm.field(dlgf).field()->from(); for (short i = 0 ; i < fasi_fields; i++) { TFieldref * fr = (TFieldref *) vm.field(dlgf + i).field(); if (fr != NULL) { TEdit_field & fld = vm.efield(dlgf + i); TString16 str; str.format("S1[%d,%d]", fr->from() + offset + 1, fr->to() + offset); fld.set_field(str); } } } else nfields = ca_create_fields(vm, 1, LF_COMMESSE, 2, y, dlg, dlg+50, 0x0, "S1", 40); dlg += nfields; y += nfields; if (use_fsc && fasinfo.parent() <= 0) nfields = ca_create_fields(vm, 1, LF_FASI, 2, y, dlg, dlg+50, 0x0, "S1", 60); } TMask* TVendite_tabapp::set_mask(TMask* m) { if (m == NULL) { TFilename mn; get_mask_name(mn); TVendite_mask* vm = new TVendite_mask(mn); if (has_module(CAAUT, CHK_DONGLE) || has_module(CMAUT, CHK_DONGLE)) { // Crea i campi per i conti analitici (vendite e acquisti) if (vm->table_code() == "SPP") { ca_create_fields(*vm, 0, LF_PCONANA, 2, 11, SPP_CDC_V1, SPP_CDC_V1+50, 0x0, "S1"); ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, SPP_CDC_A1, SPP_CDC_A1+50, 0x0, "S2"); add_anal_fields(*vm); } else if (vm->table_code() == "PRS") { ca_create_fields(*vm, 0, LF_PCONANA, 2, 11, PRS_CDC_V1, PRS_CDC_V1+10, 0x0, "S1"); ca_create_fields(*vm, 0, LF_PCONANA, 2, 17, PRS_CDC_A1, PRS_CDC_A1+10, 0x0, "S2"); add_anal_fields(*vm); } else if (vm->table_code() == "RSS") { ca_create_fields(*vm, 0, LF_PCONANA, 2, 16, RSS_CDC_V1, RSS_CDC_V1+10, 0x0, "S1"); add_anal_fields(*vm); } else if (vm->table_code() == "ATR") { ca_create_fields(*vm, 0, LF_PCONANA, 2, 12, ATR_CDC_V1, ATR_CDC_V1+10, 0x0, "S1"); add_anal_fields(*vm); } } m = vm; } return TTable_application::set_mask(m); } void TVendite_tabapp::init_query_mode(TMask& m) { if (is_table("RSS")) { m.enable(RSS_RAGSOC); } } void TVendite_tabapp::init_insert_mode(TMask& m) { if (is_table("RSS")) { m.disable(RSS_RAGSOC); } } void TVendite_tabapp::init_modify_mode(TMask& m) { if (is_table("RSS")) { m.disable(RSS_RAGSOC); } } int TVendite_tabapp::read(TMask& m) { int err = Tab_application::read(m); if (err == NOERR) { const TRectype& curr = get_relation()->curr(); if (curr.get_real("R10").is_zero()) { const TString& r0 = curr.get("R0"); if (is_table("SPP")) m.set(SPP_PREZZO, r0); else if (is_table("PRS")) m.set(PRS_PREZZO, r0); else if (is_table("RSS")) m.set(RSS_PREZZO, r0); else if (is_table("ATR")) m.set(ATR_PREZZO, r0); } } return err; } int TVendite_tabapp::write(const TMask& m) { const TString& table_name = get_tabname(); TRectype& curr = get_relation()->curr(); if (is_table("SPP")) curr.put("R0", m.get(SPP_PREZZO)); else if (is_table("PRS")) curr.put("R0", m.get(PRS_PREZZO)); else if (is_table("RSS")) curr.put("R0", m.get(RSS_PREZZO)); else if (is_table("ATR")) curr.put("R0", m.get(ATR_PREZZO)); return Tab_application::write(m); } int TVendite_tabapp::rewrite(const TMask& m) { const TString& table_name = get_tabname(); TRectype& curr = get_relation()->curr(); if (is_table("SPP")) curr.put("R0", m.get(SPP_PREZZO)); else if (is_table("PRS")) curr.put("R0", m.get(PRS_PREZZO)); else if (is_table("RSS")) curr.put("R0", m.get(RSS_PREZZO)); else if (is_table("ATR")) curr.put("R0", m.get(ATR_PREZZO)); return Tab_application::rewrite(m); } int ve0400(int argc, char* argv[]) { TVendite_tabapp vta; vta.run(argc, argv, TR("Tabella Vendite")); return 0; }