#include #include #include #include #include "lv0400.h" #include "../mg/anamag.h" class TContratti_app: public TRelation_application { TMask* _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(); static bool notify(TSheet_field& ss, int r, KEY key); }; bool TContratti_app:: user_create() { _rel=new TRelation (LF_LVCONDV); _msk= new TMask ("lv0400a"); TSheet_field& sheet = _msk->sfield(F_RIGHE); sheet.set_notify(notify ); 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; } bool TContratti_app::notify( TSheet_field& ss, int r, KEY key ) { TMask& m = ss.mask(); switch (key) { case K_TAB: // modifica { TToken_string & row = ss.row(ss.selected()); const TString80 codart(row.get(ss.cid2index(S_CODART))); const TRectype & artrec = cache().get(LF_ANAMAG, codart); m.set(F_GRMERC,artrec.get(ANAMAG_GRMERC).sleft(3)); m.set(F_COLORE,artrec.get(ANAMAG_COLORE)); m.set(F_LIVELLO,artrec.get(ANAMAG_LIVELLO)); m.set(F_PPCONF,artrec.get(ANAMAG_PPCONF)); m.set(F_PPCOLLO,artrec.get(ANAMAG_PPCOLLO)); m.set(F_PPPALLET,artrec.get(ANAMAG_PPPALLET)); m.set(F_TIPOPARTE,artrec.get(ANAMAG_TIPOPARTE)); m.set(F_CODLAV1,artrec.get(ANAMAG_CODLAV1)); m.set(F_CODLAV2,artrec.get(ANAMAG_CODLAV2)); m.set(F_LINDEST1,artrec.get(ANAMAG_LINDEST1)); m.set(F_LINDEST2,artrec.get(ANAMAG_LINDEST2)); m.set(F_LAVATRICE,artrec.get(ANAMAG_LAVATRICE)); m.set(F_ARTLAVCONT,artrec.get(ANAMAG_ARTLAVCONT)); m.set(F_MANGDEST,artrec.get(ANAMAG_MANGDEST)); const bool varclcons = m.get_int(F_PPCONF)>0; ss.enable_cell(ss.selected(),ss.cid2index(S_CALCCONS)); ss.sheet_mask().set(S_CALCCONS,"0"); row.add("0",ss.cid2index(S_CALCCONS)); } break; default: break; } 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()); } } 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(*_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; }