#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 { TString _query; TISAM_recordset _recset; bool _filter_changed; virtual void next_page(int p); public: void update_sheet(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TArt_mask(); }; TArt_mask::TArt_mask() : TAutomask("ps0430100a"), _recset("USE ANAMAG") { TConfig c(CONFIG_DITTA); TSheet_field & sh = sfield(F_ARTICLES); TMask & sh_mask = sh.sheet_mask(); TString80 prompt; for (int i = 1; i <= 10; i++) { const int col = sh.cid2index(F_USER1 + i -1); TEditable_field & f = sh_mask.efield(F_USER1 + i - 1); if (c.get_bool("CHK_USER", "ve", i) && c.get_bool("USERDEF", "or", i)) { prompt = c.get("PROMPT_USER", "ve", i); prompt.rpad(20); f.set_prompt(prompt); sh.set_column_header(col, prompt); } else { f.hide(); sh.delete_column(col); } } } void TArt_mask::update_sheet() { const bool active_only = get_bool(F_ACTIVEONLY); TSheet_field& sf = sfield(F_ARTICLES); TString query("USE ANAMAG KEY "); TString select; TLocalisamfile multirel(LF_MULTIREL); const TString user(get(F_USER)); const TString & codart = get(F_SCODART); if (codart.full()) select << "(UPPER(" << ANAMAG_CODART << ")?=UPPER(\"" << codart << "\"))"; const TString & desart = get(F_SDESART); if (desart.full()) { if (select.full()) select << "&&"; select << "(UPPER(" << ANAMAG_DESCR << ")?=UPPER(\"" << desart << "\"))"; } const TString & desagg = get(F_SDESAGG); if (desagg.full()) { if (select.full()) select << "&&"; select << "(UPPER(" << ANAMAG_DESCRAGG << ")?=UPPER(\"" << desagg << "\"))"; } const TString & codforn = get(F_SCODFOR); if (codforn.full()) { if (select.full()) select << "&&"; select << "(" << ANAMAG_CODFORN << "==\"" << codforn << "\")"; } const TString & ragsoc = get(F_SRAGSOC); if (ragsoc.full()) { if (select.full()) select << "&&"; select << "(UPPER(CLIFO.RAGSOC)?=UPPER(\"" << ragsoc << "\"))"; } TString16 grmerc(get(F_GRMERC)); if (grmerc.full()) query << '3'; else query << '1'; if (select.full()) query << "\nSELECT " << select; grmerc.left_just(3); grmerc << get(F_SGRMERC); grmerc.trim(); if (grmerc.full()) query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\nFROM GRMERC=#GRMERC\nTO GRMERC=#GRMERC"; else query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN\n"; _recset.set(query); TVariant var ; var = grmerc; _recset.set_var("#GRMERC", var); int i = 0; sf.destroy(); for (bool ok = _recset.move_first(); ok; ok = _recset.move_next()) { const TString& codart = _recset.get(ANAMAG_CODART).as_string(); multirel.put(MULTI_COD, FILE_KEY); multirel.put(MULTI_FIRST, user); multirel.put(MULTI_SECOND, codart); const bool act = multirel.read(_isequal) == NOERR; if (active_only && !act) continue; TToken_string & row = sf.row(i++); row.add(codart, sf.cid2index(F_CODART)); row.add(_recset.get(ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR)); row.add(act ? "X" : " ", sf.cid2index(F_ATTIVO)); row.add(_recset.get(ANAMAG_CODFORN).as_string(), sf.cid2index(F_CODFORN)); row.add(_recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC)); row.add(_recset.get(ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME)); row.add(_recset.get(ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN)); row.add(_recset.get(ANAMAG_DESCRAGG).as_string().left(50), sf.cid2index(F_DESCRAGG)); row.add(_recset.get(ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF)); row.add(_recset.get(ANAMAG_VALSTATUN).as_string(), sf.cid2index(F_VALSTATUN)); row.add(_recset.get(ANAMAG_ULTCOS1).as_string(), sf.cid2index(F_ULTCOS1)); row.add(_recset.get(ANAMAG_USER1).as_string(), sf.cid2index(F_USER1)); row.add(_recset.get(ANAMAG_USER2).as_string(), sf.cid2index(F_USER2)); row.add(_recset.get(ANAMAG_USER3).as_string(), sf.cid2index(F_USER3)); row.add(_recset.get(ANAMAG_USER4).as_string(), sf.cid2index(F_USER4)); row.add(_recset.get(ANAMAG_USER5).as_string(), sf.cid2index(F_USER5)); row.add(_recset.get(ANAMAG_USER6).as_string(), sf.cid2index(F_USER6)); row.add(_recset.get(ANAMAG_USER7).as_string(), sf.cid2index(F_USER7)); row.add(_recset.get(ANAMAG_USER8).as_string(), sf.cid2index(F_USER8)); row.add(_recset.get(ANAMAG_USER9).as_string(), sf.cid2index(F_USER9)); row.add(_recset.get(ANAMAG_USER10).as_string(), sf.cid2index(F_USER10)); } } void TArt_mask::next_page(int p) { TAutomask::next_page(p); if (_filter_changed) { TSheet_field & sf = sfield(F_ARTICLES); if (curr_win() == sf.parent()) { update_sheet(); sf.force_update(); _filter_changed = false; } } } bool TArt_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_GRMERC: case F_SGRMERC: case F_SCODART: case F_SDESART: case F_SDESAGG: case F_SCODFOR: case F_SRAGSOC: if (e == fe_modify) _filter_changed = true; break; case F_SET: if (e == fe_button) { TSheet_field& sf = sfield(F_ARTICLES); const int 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_ACTIVEONLY: if (e == fe_modify) { if (!field(F_USER).empty()) { update_sheet(); sfield(F_ARTICLES).force_update(); } } break; default: break; } return true; } class TRelArticoli_multirel_app : public TMultirel_application { 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() {} 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() { delete _mask; return true; } int TRelArticoli_multirel_app::read(TMask& m) { const TRectype & curr = get_relation()->lfile().curr(); TArt_mask & mask = (TArt_mask &) m; mask.update_sheet(); return NOERR; } int TRelArticoli_multirel_app::rewrite(const TMask& m) { int err = NOERR; TSheet_field & sf = m.sfield(F_ARTICLES); TLocalisamfile multirel(LF_MULTIREL); const TString user(m.get(F_USER)); for (int i = 0; i < sf.items(); i++) { 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; }