#include #include #include #include #include #include #include "lv0400.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); TToken_string & row = ss.row(ss.selected()); const TString80 codart(row.get(ss.cid2index(S_CODART))); const TString4 umcont(row.get(ss.cid2index(S_UM))); TArticolo artrec(codart); set(F_GRMERC,artrec.get(ANAMAG_GRMERC).sleft(3)); set(F_COLORE,artrec.get(ANAMAG_COLORE)); set(F_LIVELLO,artrec.get(ANAMAG_LIVELLO)); set(F_PPCONF,artrec.get(ANAMAG_PPCONF)); set(F_PPCOLLO,artrec.get(ANAMAG_PPCOLLO)); set(F_PPPALLET,artrec.get(ANAMAG_PPPALLET)); set(F_TIPOPARTE,artrec.get(ANAMAG_TIPOPARTE)); set(F_CODLAV1,artrec.get(ANAMAG_CODLAV1)); set(F_CODLAV2,artrec.get(ANAMAG_CODLAV2)); set(F_LINDEST1,artrec.get(ANAMAG_LINDEST1)); set(F_LINDEST2,artrec.get(ANAMAG_LINDEST2)); set(F_LAVATRICE,artrec.get(ANAMAG_LAVATRICE)); set(F_ARTLAVCONT,artrec.get(ANAMAG_ARTLAVCONT)); set(F_MANGDEST,artrec.get(ANAMAG_MANGDEST)); const int indsped=get_int(F_INDSPED); const TDate oggi(TODAY); TString query, filter; filter << "ANNOES=#ANNOES CODART=#CODART TIPOCF=C CODCF=#CLIENTE"; filter << " INDSPED=" << indsped; query << "USE CLIFOGIAC KEY 3\n" << "FROM " << filter << '\n' << "TO " << filter << '\n'; TISAM_recordset recgiac (query); recgiac.set_var("#CLIENTE",get_long(F_CODCF)); recgiac.set_var("#ANNOES",TVariant((long)oggi.year())); recgiac.set_var("#CODART",TVariant(codart)); real dotod,consyear,consmonth; if (recgiac.move_first()) { dotod=artrec.convert_to_um(recgiac.get("GIAC").as_real(),umcont); consyear=artrec.convert_to_um(recgiac.get("ACQ").as_real()+recgiac.get("ENT").as_real(),umcont); } set(F_DOTOD,dotod); set(F_CONSANNO,consyear); TDate imese(oggi); imese.set_day(1); query="USE MOVMAG KEY 3\n"; query << "SELECT (TIPOCF='C')&&(STR(CODCF=" << get_long(F_CODCF) << "))&&(STR(CODINDSP=" << indsped << "))\n"; query << "FROM DATAREG=" << imese << "\n" << "TO DATAREG=" << oggi << "\n"; TISAM_recordset recmag(query); for (bool ok=recmag.move_first(); ok; ok=recmag.move_next()) { const TCausale_magazzino tcaus(recmag.get(MOVMAG_CODCAUS).as_string()); TString queryrmag="USE RMOVMAG\n"; queryrmag << "SELECT CODART='" << codart << "'\n"; queryrmag << "FROM NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n" << "TO NUMREG=" << recmag.get(MOVMAG_NUMREG) << "\n"; TISAM_recordset recrmag(queryrmag); for (bool ok=recrmag.move_first(); ok; ok=recrmag.move_next()) { int sgn_acq=tcaus.sgn(s_acq); int sgn_ent=tcaus.sgn(s_ent); const TString& codcaus=recrmag.get(RMOVMAG_CODCAUS).as_string(); if (codcaus.full()) { const TCausale_magazzino rcaus(codcaus); sgn_acq=rcaus.sgn(s_acq); sgn_ent=rcaus.sgn(s_ent); } if (sgn_acq!=0 || sgn_ent!=0) { const TString4 um=recrmag.get(RMOVMAG_UM).as_string(); const real qta=artrec.convert_to_um(recrmag.get(RMOVMAG_QUANT).as_real(),umcont,um); if (sgn_acq!=0) consmonth+=qta*sgn_acq; if (sgn_ent!=0) consmonth+=qta*sgn_ent; } } } set(F_CONSMESE,consmonth); const bool varclcons = 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)); 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 (e==fe_modify) { TSheet_field& ss=sfield(F_RIGHE); TToken_string& row=ss.row(ss.selected()); row.add(o.get(),0); on_art_select(); } break; case F_RIGHE: if (e==se_enter) 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(); }; 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()); } } 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; }