#include #include #include #include "lv0400.h" class TContratti_app: public TRelation_application { TMask* _amsk; TMask* _bmsk; 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 bool changing_mask (int mode) { return true;} virtual TMask* get_mask (int mode) {return mode==MODE_QUERY?_amsk:_bmsk; } 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(); }; bool TContratti_app:: user_create() { _rel=new TRelation (LF_LVCONDV); _amsk= new TMask ("lv0400a"); _bmsk= new TMask ("lv0400b"); return true; } bool TContratti_app:: user_destroy() { delete _bmsk; delete _amsk; 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=_amsk->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 LVCONDV\n" << "FROM CODCF="<field(); if (fr!= NULL) { const int pos=righe.cid2index(f->dlg()); fr->write(row->get(pos),file.curr()); } } file.rewrite_write(); } } 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(*_bmsk,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; }