#include #include #include #include #include #include #include "lv0400.h" #include "lvlib.h" #include "../cg/cglib01.h" #include "../mg/anamag.h" #include "../mg/mglib.h" class TContratti_msk: public TAutomask { protected: bool on_art_select(); virtual bool on_field_event(TOperable_field& o,TField_event e,long jolly); public: TContratti_msk(); }; bool TContratti_msk::on_art_select() { TSheet_field& ss = sfield(F_RIGHE); TMask& rowmask = ss.sheet_mask(); TToken_string & row = ss.row(ss.selected()); const TString80 codart(row.get(ss.cid2index(S_CODART))); const long codcf = get_long(F_CODCF); const int indsped = get_int(F_INDSPED); TArticolo_lavanderie & artrec = cached_article_laundry(codart, 'C', codcf, indsped); TDate datasc = get_date(F_DATASC); if (!datasc.ok()) datasc = TDate(TODAY); const int annoes = esercizi().date2esc(datasc); int index = artrec.find_clifomag(annoes); if (index > 0) { const TString4 umcont(row.get(ss.cid2index(S_UM))); const real dotin = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("DOTIN"),umcont); rowmask.set(S_DOTIN, dotin); row.add(dotin.stringa(), ss.cid2index(S_DOTIN)); const real dotod = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("DOTOD"),umcont); rowmask.set(S_DOTOD, dotod); row.add(dotod.stringa(), ss.cid2index(S_DOTOD)); const real dottmp = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("DOTTM"),umcont); rowmask.set(S_DOTTMP, dottmp); row.add(dottmp.stringa(), ss.cid2index(S_DOTTMP)); const real consyear = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("CONSANNO"),umcont); rowmask.set(S_CONSANNO, consyear); row.add(consyear.stringa(), ss.cid2index(S_CONSANNO)); const real consmonth = artrec.convert_to_um(artrec.clifomag(annoes)[index].get_real("CONSMESE"),umcont); rowmask.set(S_CONSMESE, consmonth); row.add(consmonth.stringa(), ss.cid2index(S_CONSMESE)); } const bool varclcons = rowmask.get_int(S_PPCONF)>0; ss.enable_cell(ss.selected(),ss.cid2index(S_CALCCONS)); rowmask.set(S_CALCCONS,"0"); row.add("0",ss.cid2index(S_CALCCONS)); return true; } bool TContratti_msk:: on_field_event(TOperable_field& o,TField_event e,long jolly) { switch(o.dlg()) { case DLG_PLANNING: if (e==fe_button && edit_mode()) { TRelation_application& app=(TRelation_application&) main_app(); app.get_relation()->read(_isequal,_unlock); TString str; str << "lv0 -4 " << get(F_CODCF) << " " << get(F_CODCONT); TExternal_app planning(str); planning.run(); app.get_relation()->read(_isequal,_lock); } break; case S_CODART: if (!o.empty()) { if (e==fe_modify) { TArticolo art(o.get()); if (art.um().rows() > 0) { TSheet_field& ss=sfield(F_RIGHE); TMask& m = o.mask(); // maschera di riga! const TString& um = art.um()[1].get(UMART_UM); m.set(S_UM,um); TToken_string& row=ss.row(ss.selected()); row.add(o.get(),ss.cid2index(S_CODART)); row.add(um,S_UM); on_art_select(); } } else if (e==fe_init) on_art_select(); } break; default:break; } return true; } TContratti_msk::TContratti_msk():TAutomask("lv0400a") { } class TContratti_app: public TRelation_application { TContratti_msk* _msk; TRelation* _rel; bool _unicont; private: void save_rows(const TMask& m); void build_query(const TMask& m,TString& query) const; int find_art(TSheet_field& s,const TString& art) const; protected: virtual TMask* get_mask (int mode) {return _msk; } virtual TRelation* get_relation() const {return _rel;} virtual bool user_create(); virtual bool user_destroy(); virtual void on_config_change(); virtual bool get_next_key(TToken_string& key); virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool remove(); virtual void init_insert_mode(TMask& m); }; bool TContratti_app:: user_create() { _rel=new TRelation (LF_LVCONDV); _msk= new TContratti_msk; return true; } bool TContratti_app:: user_destroy() { delete _msk; delete _rel; return true; } void TContratti_app:: on_config_change() { TConfig ini(CONFIG_DITTA); _unicont=ini.get_bool("UniCont"); } bool TContratti_app:: get_next_key(TToken_string& key) { const long cliente=_msk->get_long(F_CODCF); if (cliente<=0) return false; key.add(F_CODCF); key.add(cliente); key.add(F_CODCONT); long codcont=0; if (_unicont) { TISAM_recordset recset ("USE LVCONDV"); for (bool ok=recset.move_first(); ok; ok=recset.move_next()) { const long codice=recset.get("CODCONT").as_int(); if (codice>codcont) codcont=codice; } } else { TString query; query<<"USE LVCONDV \n" <<"FROM CODCF=#CLIENTE\n" <<"TO CODCF=#CLIENTE\n"; TISAM_recordset recset (query); recset.set_var("#CLIENTE",cliente); if (recset.move_last()) codcont=recset.get("CODCONT").as_int(); } codcont++; key.add(codcont); return true; } void TContratti_app:: build_query(const TMask& m,TString& query) const { query=""; query << "USE LVRCONDV\n" << "FROM CODCF="<field(); if (fr!= NULL) { const int pos=righe.cid2index(f->dlg()); fr->write(row->get(pos),file.curr()); } } if (file.get("CODART").full()) file.rewrite_write(); } } void TContratti_app::init_insert_mode(TMask& m) { TSheet_field& ss=m.sfield(F_RIGHE); ss.insert(); } int TContratti_app::write(const TMask& m) { int err=TRelation_application::write(m); if(err==NOERR) save_rows(m); return err; } int TContratti_app::rewrite(const TMask& m) { int err=TRelation_application::rewrite(m); if(err==NOERR) save_rows(m); return err; } bool TContratti_app::remove() { bool ok=TRelation_application::remove(); if(ok) { TString query; build_query(*_msk,query); TISAM_recordset righeset(query); TLocalisamfile& file=righeset.cursor()->file(); for (bool ok=righeset.move_first(); ok; ok=righeset.move_next()) { file.remove(); } } return ok; } int lv0400(int argc, char* argv[]) { TContratti_app app; app.run (argc,argv,TR("Gestione contratti")); return 0; }