#include #include #include #include #include #include #include #include #include "../mg/anamag.h" #include "ps0430100a.h" #define FILE_KEY "ACM" /////////////////////////////////////////////////////////// // TArt_mask maschera /////////////////////////////////////////////////////////// class TArt_mask : public TAutomask { public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TArt_mask() : TAutomask("ps0430100a") {} ~TArt_mask() {} }; bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_SET: if (e == fe_button) { TSheet_field & sf = sfield(F_ARTICLES); const long items = sf.items(); bool select = true; const int cid = sf.cid2index(F_ATTIVO); int i ; for (i = 0; select && i < items; i++) select = *sf.row (i).get(cid) <= ' '; const TString4 val(select ? "X" : " "); for (i = 0; i < items; i++) sf.row(i).add(val, cid); sf.force_update(); } break; case F_RESET: if (e == fe_button) { TSheet_field & sf = sfield(F_ARTICLES); const long items = sf.items(); for (int i = 0; i < items; i++) { TToken_string & row = sf.row(i); row.add(" ", sf.cid2index(F_ATTIVO)); } sf.force_update(); } break; default: break; } return true; } class TRelArticoli_multirel_app : public TMultirel_application { TISAM_recordset _recset; TArt_mask * _mask; protected: virtual void get_mask_name(TString& tabname) const; //magico metodo per impedire la navigazione su tabelle diverse da quella corrente del cursore virtual bool has_filtered_cursor() const { return true; } virtual bool user_create(); virtual bool user_destroy() ; virtual int read(TMask& m); virtual int rewrite(const TMask& m); virtual int write(const TMask& m) { return rewrite(m);} virtual bool remove(); virtual void init_insert_mode(TMask& m) { read(m); } virtual bool find(word key = 0); virtual TMask* get_mask(int mode = MODE_QUERY) { return (TMask *) _mask;} public: virtual const char * extra_modules() const {return "ba";} TRelArticoli_multirel_app() : _recset("USE ANAMAG KEY 1") {} virtual ~TRelArticoli_multirel_app() {} }; void TRelArticoli_multirel_app::get_mask_name(TString& tabname) const { tabname = "ps0430100a"; } bool TRelArticoli_multirel_app::user_create() { bool ok = TMultirel_application::user_create(); _mask = new TArt_mask; return ok; } bool TRelArticoli_multirel_app::user_destroy() { /* prefix().close_closeable_isamfiles(); TSystemisamfile multirel(LF_MULTIREL); multirel.pack(); */ delete _mask; return true; } int TRelArticoli_multirel_app::read(TMask& m) { const TRectype & curr = get_relation()->lfile().curr(); TSheet_field & sf = m.sfield(F_ARTICLES); TLocalisamfile multirel(LF_MULTIREL); const TString user(m.get(F_USER)); int i = 0; sf.destroy(); for (bool ok = _recset.move_first(); ok; ok = _recset.move_next()) { TToken_string & row = sf.row(i++); const TString & codart = _recset.get(ANAMAG_CODART).as_string(); row.add(codart, sf.cid2index(F_CODART)); row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR)); row.add(_recset.get(ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG)); row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN)); TToken_string key; key.format("F|%ld", _recset.get(ANAMAG_CODFORN).as_int()); row.add(cache().get(LF_CLIFO, key, "RAGSOC"), sf.cid2index(F_RAGSOC)); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); multirel.put(MULTI_SECOND, codart); if (multirel.read(_isequal) == NOERR) row.add("X", sf.cid2index(F_ATTIVO)); else row.add(" ", sf.cid2index(F_ATTIVO)); } return NOERR; } int TRelArticoli_multirel_app::rewrite(const TMask& m) { int err = NOERR; TSheet_field & sf = m.sfield(F_ARTICLES); int i = 0; TLocalisamfile multirel(LF_MULTIREL); const TString user(m.get(F_USER)); for (bool ok = _recset.move_first(); err == NOERR && ok; ok = _recset.move_next()) { TToken_string & row = sf.row(i++); bool selected = *row.get(sf.cid2index(F_ATTIVO)) > ' '; multirel.zero(); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART))); bool exist = multirel.read(_isequal) == NOERR; if (exist && !selected) err = multirel.remove(); else if (!exist && selected) { multirel.zero(); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); multirel.put(MULTI_SECOND, row.get(sf.cid2index(F_CODART))); err = multirel.write(); } } get_relation()->read(_isgteq); return err; } bool TRelArticoli_multirel_app::remove() { int err; TLocalisamfile multirel(LF_MULTIREL); const TString user(get_mask(MODE_MOD)->get(F_USER)); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); for (err = multirel.read(_isgteq); err == NOERR && user == multirel.get(MULTI_FIRST); multirel.next()) err = multirel.remove(); return err == NOERR || err == _iseof; } bool TRelArticoli_multirel_app::find(word key) { bool ok = false; const TString& user = get_mask(MODE_QUERY)->get(F_USER); if (user.full()) { TLocalisamfile multirel(LF_MULTIREL); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); ok = (multirel.read(_isgteq) == NOERR) && (user == multirel.get(MULTI_FIRST)); } if (ok) get_relation()->read(_isgteq); return ok; } int ps0430100(int argc, char* argv[]) { TRelArticoli_multirel_app a; a.run(argc, argv, TR("Tabella")); return 0; }