diff --git a/ps/ps0430.cpp b/ps/ps0430.cpp index 386582536..5ea421a36 100755 --- a/ps/ps0430.cpp +++ b/ps/ps0430.cpp @@ -7,15 +7,10 @@ int main(int argc, char** argv) int n = argc > 1 ? atoi(argv[1]+1) : 0; switch(n) { - case 0: - ps0430100(argc, argv); break; //Correlazioni articoli utenti - case 1: - ps0430200(argc, argv); break; //Configurazione campi per utente - case 2: - ps0430300(argc, argv); break; //generazione ordini (è or1400 per il cigno) - default: - ps0430100(argc, argv); break; + case 0: ps0430100(argc, argv); break; //Correlazioni articoli utenti + case 1: ps0430200(argc, argv); break; //Configurazione campi per utente + //case 2: ps0430300(argc, argv); break; //generazione ordini (è or1400 per il cigno) + default: ps0430100(argc, argv); break; } - exit(0); return 0; } \ No newline at end of file diff --git a/ps/ps0430100.cpp b/ps/ps0430100.cpp index 76b22e6b7..6b945de87 100755 --- a/ps/ps0430100.cpp +++ b/ps/ps0430100.cpp @@ -1,227 +1,366 @@ -#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; -} +#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; +} diff --git a/ps/ps0430100a.h b/ps/ps0430100a.h index 66123ccb1..9abe287f9 100755 --- a/ps/ps0430100a.h +++ b/ps/ps0430100a.h @@ -1,16 +1,43 @@ -// Defines per maschera - -#define F_COD 149 -#define F_CODTAB 150 -#define F_USER 151 -#define F_DUSER 152 -#define F_ARTICLES 153 -#define F_SET 154 -#define F_RESET 155 - -#define F_CODART 101 -#define F_DESCR 102 -#define F_ATTIVO 103 -#define F_DESCRAGG 104 -#define F_CODFORN 105 -#define F_RAGSOC 106 +// Defines per maschera + +#define F_COD 149 +#define F_CODTAB 150 +#define F_USER 151 +#define F_DUSER 152 +#define F_ARTICLES 153 +#define F_SET 154 +#define F_ACTIVEONLY 155 +#define F_GRMERC 156 +#define F_DGRMERC 157 +#define F_SGRMERC 158 +#define F_DSGRMERC 159 +#define F_SCODART 160 +#define F_SDESART 161 +#define F_SDESAGG 162 +#define F_SCODFOR 163 +#define F_SRAGSOC 164 + + +#define F_CODART 101 +#define F_DESCR 102 +#define F_ATTIVO 103 +#define F_CODFORN 104 +#define F_RAGSOC 105 + +#define F_LEADTIME 106 +#define F_LOTTOMIN 107 +#define F_DESCRAGG 108 +#define F_PPCONF 109 +#define F_VALSTATUN 110 +#define F_ULTCOS1 111 +#define F_USER1 112 +#define F_USER2 113 +#define F_USER3 114 +#define F_USER4 115 +#define F_USER5 116 +#define F_USER6 117 +#define F_USER7 118 +#define F_USER8 119 +#define F_USER9 120 +#define F_USER10 121 + diff --git a/ps/ps0430100a.uml b/ps/ps0430100a.uml index 09a374a1f..2c08635ad 100755 --- a/ps/ps0430100a.uml +++ b/ps/ps0430100a.uml @@ -1,116 +1,337 @@ -#include "ps0430100a.h" - -TOOLBAR "" 0 0 0 2 -#include -ENDPAGE - -PAGE "Relazioni utenti Articoli" -1 -1 80 20 - -LIST F_COD 5 -BEGIN - PROMPT 50 50 "" - ITEM "ATM|ATM" - FIELD COD - FLAGS "H" - KEY 1 -END - -NUMBER F_CODTAB 3 -BEGIN - PROMPT 50 50 "" - USE LF_MULTIREL - INPUT COD F_COD SELECT - INPUT FIRST F_CODTAB - DISPLAY "Codice" FIRST - DISPLAY "Descrizione@60" DATA - DISPLAY "Causale Collegata" SECOND - OUTPUT F_CODTAB FIRST - CHECKTYPE REQUIRED - FIELD FIRST - FLAGS "H" - KEY 1 -END - -STRING F_USER 8 -BEGIN - PROMPT 4 2 "Utente " - FLAGS "U" -// FIELD FIRST - KEY 1 - USE LF_USER SELECT ISGROUP!="X" - INPUT USERNAME F_USER - DISPLAY "Utente@8" USERNAME - DISPLAY "Gruppo@8" GROUPNAME - DISPLAY "Descrizione@50" USERDESC - OUTPUT F_USER USERNAME - OUTPUT F_DUSER USERDESC - CHECKTYPE NORMAL - MESSAGE COPY,F_CODTAB -END - -STRING F_DUSER 50 -BEGIN - PROMPT 25 2 "" - FLAGS "D" -END - -SPREADSHEET F_ARTICLES 85 -3 -BEGIN - PROMPT 1 4 "Articoli" - ITEM "Codice@20" - ITEM "Descrizione@45" - ITEM "Attivo" - ITEM "Descrizione fornitore@45" - ITEM "Codice Fonitore" - ITEM "Ragione sociale@45" -END - -BUTTON F_SET 10 2 -BEGIN - PROMPT -11 -1 "~Tutti" -END - -ENDPAGE - -ENDMASK - -PAGE "Righe" -1 -1 80 18 - -STRING F_CODART 20 -BEGIN - PROMPT 1 2 "Codice " - FLAGS "D" -END - -STRING F_DESCR 50 45 -BEGIN - PROMPT 42 2 "" - FLAGS "D" -END - -BOOLEAN F_ATTIVO -BEGIN - PROMPT 2 4 "Attivo per questo utente" -END - -STRING F_DESCRAGG 50 45 -BEGIN - PROMPT 2 6 " " - FLAGS "D" -END - -NUMBER F_CODFORN 6 -BEGIN - PROMPT 2 8 " " - FLAGS "D" -END - -STRING F_RAGSOC 50 45 -BEGIN - PROMPT 2 10 " " - FLAGS "D" -END - -ENDPAGE - +#include "ps0430100a.h" + +TOOLBAR "" 0 0 0 2 +#include +ENDPAGE + +PAGE "Relazioni utenti Articoli" -1 -1 80 20 + +LIST F_COD 5 +BEGIN + PROMPT 50 50 "" + ITEM "ATM|ATM" + FIELD COD + FLAGS "H" + KEY 1 +END + +NUMBER F_CODTAB 3 +BEGIN + PROMPT 50 50 "" + USE LF_MULTIREL + INPUT COD F_COD SELECT + INPUT FIRST F_CODTAB + DISPLAY "Codice" FIRST + DISPLAY "Descrizione@60" DATA + DISPLAY "Causale Collegata" SECOND + OUTPUT F_CODTAB FIRST + CHECKTYPE REQUIRED + FIELD FIRST + FLAGS "H" + KEY 1 +END + +STRING F_USER 8 +BEGIN + PROMPT 4 0 "Utente " + FLAGS "U" + KEY 1 + USE LF_USER SELECT ISGROUP!="X" + INPUT USERNAME F_USER + DISPLAY "Utente@8" USERNAME + DISPLAY "Gruppo@8" GROUPNAME + DISPLAY "Descrizione@50" USERDESC + OUTPUT F_USER USERNAME + OUTPUT F_DUSER USERDESC + CHECKTYPE NORMAL + MESSAGE COPY,F_CODTAB +END + +STRING F_DUSER 50 +BEGIN + PROMPT 25 0 "" + FLAGS "D" +END + +BOOLEAN F_ACTIVEONLY +BEGIN + PROMPT 4 1 "Mostrare solo gli articoli attivi" +END + +BUTTON F_SET 10 2 +BEGIN + PROMPT -1 0 "~Tutti" +END + +SPREADSHEET F_ARTICLES +BEGIN + PROMPT 1 2 "Articoli" + ITEM "Codice@20" + ITEM "Descrizione@45" + ITEM "Attivo" + ITEM "Fornit." + ITEM "Ragione sociale@45" + ITEM "Lead\ntime@5" + ITEM "Lotto minimo\ndi riordino@10" + ITEM "Descrizione aggiuntiva@50" + ITEM "Q.tà per unità\ndi vendita@15" + ITEM "Prezzo unitario@15" + ITEM "Prezzo unità\ndi vendita@15" + ITEM "Campo Aggiuntivo 1@15" + ITEM "Campo Aggiuntivo 2@15" + ITEM "Campo Aggiuntivo 3@15" + ITEM "Campo Aggiuntivo 4@15" + ITEM "Campo Aggiuntivo 5@15" + ITEM "Campo Aggiuntivo 6@15" + ITEM "Campo Aggiuntivo 7@15" + ITEM "Campo Aggiuntivo 8@15" + ITEM "Campo Aggiuntivo 9@15" + ITEM "Campo Aggiuntivo 10@15" +END + +ENDPAGE + +PAGE "Filtri" -1 -1 80 20 + +STRING F_GRMERC 3 +BEGIN + PROMPT 2 4 "Gruppo merceologico " + FLAG "U" + USE GMC KEY 1 SELECT CODTAB[4,5]=="" + INPUT CODTAB F_GRMERC + DISPLAY "Codice" CODTAB[1,3] + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_DGRMERC S0 + CHECKTYPE SEARCH + FIELD OR14_GRM +END + +STRING F_DGRMERC 50 35 +BEGIN + PROMPT 35 4 "" + USE GMC KEY 2 SELECT CODTAB[4,5]=="" + INPUT S0 F_DGRMERC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_DGRMERC S0 + CHECKTYPE SEARCH +END + +STRING F_SGRMERC 2 +BEGIN + PROMPT 2 6 "Sottogruppo merceologico " + FLAG "U" + USE GMC + INPUT CODTAB[1,3] F_GRMERC + INPUT CODTAB[4,5] F_SGRMERC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_SGRMERC CODTAB[4,5] + OUTPUT F_DSGRMERC S0 + CHECKTYPE NORMAL + FIELD OR14_SGR +END + +STRING F_DSGRMERC 50 35 +BEGIN + PROMPT 35 6 "" + USE GMC KEY 2 SELECT CODTAB[4,5] != "" + INPUT S0 F_DSGRMERC + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_SGRMERC + CHECKTYPE NORMAL +END + +STRING F_SCODART 20 +BEGIN + PROMPT 2 8 "Codice articolo " +END + +STRING F_SDESART 50 +BEGIN + PROMPT 2 10 "Descrizione " +END + +STRING F_SDESAGG 50 +BEGIN + PROMPT 2 12 "Descrizione aggiuntiva " +END + +STRING F_SCODFOR 7 +BEGIN + PROMPT 2 14 "Codice fornitore " + USE LF_CLIFO + INPUT TIPOCF "F" + INPUT CODCF F_SCODFOR + DISPLAY "Codice " CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_SCODFOR CODCF +END + +STRING F_SRAGSOC 50 +BEGIN + PROMPT 2 16 "Ragione sociale " +END + +ENDPAGE + +ENDMASK + +PAGE "Righe" -1 -1 80 18 + +STRING F_CODART 20 +BEGIN + PROMPT 1 2 "Codice " + FLAGS "D" +END + +STRING F_DESCR 50 45 +BEGIN + PROMPT 42 2 "" + FLAGS "D" +END + +BOOLEAN F_ATTIVO +BEGIN + PROMPT 2 4 "Attivo per questo utente" +END + +NUMBER F_CODFORN 6 +BEGIN + PROMPT 2 6 " " + FLAGS "D" +END + +STRING F_RAGSOC 50 45 +BEGIN + PROMPT 2 8 " " + FLAGS "D" +END + +NUMBER F_LEADTIME 5 +BEGIN + PROMPT 2 10 "Lead time " + FLAGS "D" +END + +NUMBER F_LOTTOMIN 10 3 +BEGIN + PROMPT 42 10 "Lotto " + FLAGS "D" +END + +STRING F_DESCRAGG 50 45 +BEGIN + PROMPT 2 12 " " + FLAGS "D" +END + +NUMBER F_PPCONF 15 +BEGIN + PROMPT 2 12 "Q.tà per unità di vendita " + FLAGS "D" +END + +NUMBER F_VALSTATUN 15 5 +BEGIN + PROMPT 2 14 "Prezzo unitario " + FLAGS "D" +END + +NUMBER F_ULTCOS1 15 5 +BEGIN + PROMPT 2 16 "Prezzo unità di vendita " + FLAGS "D" +END + +BUTTON DLG_OK 11 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 11 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Campi Utente" -1 -1 80 20 + +STRING F_USER1 20 +BEGIN + PROMPT 2 2 "Campo utente 1 " + FLAGS "D" +END + +STRING F_USER2 20 +BEGIN + PROMPT 2 4 "Campo utente 2 " + FLAGS "D" +END + +STRING F_USER3 20 +BEGIN + PROMPT 2 6 "Campo utente 3 " + FLAGS "D" +END + +STRING F_USER4 20 +BEGIN + PROMPT 2 8 "Campo utente 4 " + FLAGS "D" +END + +STRING F_USER5 20 +BEGIN + PROMPT 2 10 "Campo utente 5 " + FLAGS "D" +END + +STRING F_USER6 20 +BEGIN + PROMPT 2 12 "Campo utente 6 " + FLAGS "D" +END + +STRING F_USER7 20 +BEGIN + PROMPT 2 14 "Campo utente 7 " + FLAGS "D" +END + +STRING F_USER8 20 +BEGIN + PROMPT 2 16 "Campo utente 8 " + FLAGS "D" +END + +STRING F_USER9 20 +BEGIN + PROMPT 2 18 "Campo utente 9 " + FLAGS "D" +END + +STRING F_USER10 20 +BEGIN + PROMPT 2 20 "Campo utente 10 " + FLAGS "D" +END + +BUTTON DLG_OK 11 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 11 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + ENDMASK \ No newline at end of file diff --git a/ps/ps0430200.cpp b/ps/ps0430200.cpp index 65af0d9a4..c5f2fd016 100755 --- a/ps/ps0430200.cpp +++ b/ps/ps0430200.cpp @@ -1,96 +1,95 @@ -#include -#include -#include - -#include -#include "../mg/anamag.h" - -#include "ps0430200a.h" - -/////////////////////////////////////////////////////////// -// TUser_mask maschera -/////////////////////////////////////////////////////////// - -class TUser_mask : public TAutomask -{ -protected: - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - -public: - bool get_user_ini(TFilename& name) const; - TUser_mask() : TAutomask("ps0430200a") {} -}; - -bool TUser_mask::get_user_ini(TFilename& name) const -{ - name = prefix().get_studio(); - name.add("config"); - name.add(get(F_USER)); - name.ext("ini"); - return name.exist(); -} - -bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) -{ - switch (o.dlg()) - { - case F_USER: - if (e == fe_modify) - { - const char* const defpar = "or"; - TFilename inipath; get_user_ini(inipath); - TConfig userconf(inipath, defpar); - - for (int i = o.mask().fields()-1; i >= 0; i--) - { - TMask_field& f = o.mask().fld(i); - const TFieldref* fr = f.field(); - - if (fr != NULL) - { - f.set(fr->read(userconf, defpar)); - f.check(); - } - } - } - break; - default: - break; - } - return true; -} - -class TUser_set_app : public TSkeleton_application -{ -protected: - virtual const char * extra_modules() const {return "ba";} - virtual void main_loop(); -}; - -void TUser_set_app::main_loop() -{ - TUser_mask mask; - - while (mask.run() == K_ENTER) - { - const char* const defpar = "or"; - TFilename inipath; mask.get_user_ini(inipath); - TConfig userconf(inipath, defpar); - - for (int i = mask.fields()-1; i >= 0; i--) - { - const TMask_field& f = mask.fld(i); - const TFieldref* fr = f.field(); - if (fr != NULL) - fr->write(userconf, defpar, f.get()); - } - mask.reset(); - } -} - -int ps0430200(int argc, char* argv[]) -{ - TUser_set_app a; - a.run(argc, argv, TR("Configurazione campi per utente")); - return 0; -} +#include +#include +#include +#include +#include +#include +#include + +#include +#include "../mg/anamag.h" +#include "ps0430200a.h" + +/////////////////////////////////////////////////////////// +// TUser_mask maschera +/////////////////////////////////////////////////////////// + +class TUser_mask : public TAutomask +{ + +public: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + TUser_mask() : TAutomask("ps0430200a") {} + ~TUser_mask() {} +}; + +bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_USER: + if (e == fe_modify) + { + const TString& new_user = o.get(); + const TString16 old_user = user(); + user() = new_user; + const char* defpar = "or"; + TConfig userconf(CONFIG_USER, defpar); + + for (int i = o.mask().fields()-1; i >= 0; i--) + { + TMask_field& f = o.mask().fld(i); + const TFieldref* fr = f.field(); + + if (fr != NULL) + f.set(fr->read(userconf, defpar)); + } + user() = old_user; + } + break; + default: + break; + } + return true; +} + +class TUser_set_app : public TSkeleton_application +{ +public: + virtual const char * extra_modules() const {return "ba";} + virtual void main_loop(); + + TUser_set_app() {} + virtual ~TUser_set_app() {} +}; + +void TUser_set_app::main_loop() +{ + TUser_mask mask; + + while (mask.run() == K_ENTER) + { + const TString& new_user = mask.get(F_USER); + const TString16 old_user = user(); + user() = new_user; + const char* defpar = "or"; + TConfig userconf(CONFIG_USER, defpar); + + for (int i = mask.fields()-1; i >= 0; i--) + { + TMask_field& f = mask.fld(i); + const TFieldref* fr = f.field(); + if (fr != NULL) + fr->write(userconf, defpar, f.get()); + } + user() = old_user; + mask.reset(); + } +} + +int ps0430200(int argc, char* argv[]) +{ + TUser_set_app a; + a.run(argc, argv, TR("Configurazione campi per utente")); + return 0; +} diff --git a/ps/ps0430200a.h b/ps/ps0430200a.h index ea07f9723..6b8de03dd 100755 --- a/ps/ps0430200a.h +++ b/ps/ps0430200a.h @@ -1,24 +1,31 @@ -// Defines per maschera - -#define F_USER 101 -#define F_DUSER 102 -#define F_GRMERC 103 -#define F_DGRMERC 104 -#define F_SGRMERC 105 -#define F_DSGRMERC 106 -#define F_SOTTOSCORTA 107 -#define F_ARTICLES 108 -#define F_CODNUM 109 -#define F_DESNUM 110 -#define F_TIPODOC 111 -#define F_DESTIPODOC 112 -#define F_MAG 113 -#define F_DESMAG 114 -#define F_DEP 115 -#define F_DESDEP 116 -#define F_PREZZO 117 -#define F_CDCT 118 -#define F_FSCT 119 -#define F_DASTATO 120 -#define F_ASTATO 121 - +// Defines per maschera + +#define F_USER 101 +#define F_DUSER 102 +#define F_GRMERC 103 +#define F_DGRMERC 104 +#define F_SGRMERC 105 +#define F_DSGRMERC 106 +#define F_SOTTOSCORTA 107 +#define F_ARTICLES 108 +#define F_CODNUM 109 +#define F_DESNUM 110 +#define F_TIPODOC 111 +#define F_DESTIPODOC 112 +#define F_MAG 113 +#define F_DESMAG 114 +#define F_DEP 115 +#define F_DESDEP 116 +#define F_PREZZO 117 +#define F_CDCT 118 +#define F_FSCT 119 +#define F_DASTATO 120 +#define F_ASTATO 121 +#define F_CODNUMCAR 122 +#define F_DESNUMCAR 123 +#define F_TIPODOCCAR 124 +#define F_DESTIPODOCCAR 125 +#define F_STATOEVASO 126 +#define F_STATOINI 127 + + diff --git a/ps/ps0430200a.uml b/ps/ps0430200a.uml index f6100ca9c..5fe638b46 100755 --- a/ps/ps0430200a.uml +++ b/ps/ps0430200a.uml @@ -1,248 +1,324 @@ -#include "ps0430200a.h" - -TOOLBAR "" 0 -3 0 3 - -BUTTON DLG_SAVEREC 11 2 -BEGIN - PROMPT -12 -11 "" - PICTURE BMP_SAVEREC - PICTURE BMP_SAVERECDN - MESSAGE EXIT,K_ENTER -END - -BUTTON DLG_QUIT 11 2 -BEGIN - PROMPT -22 -11 "" -END - -ENDPAGE - -PAGE "Configurazione campi per utente" 0 0 0 -3 - -STRING F_USER 8 -BEGIN - PROMPT 2 2 "Utente " - FLAGS "U" - KEY 1 - USE LF_USER SELECT ISGROUP!="X" - INPUT USERNAME F_USER - DISPLAY "Utente@8" USERNAME - DISPLAY "Gruppo@8" GROUPNAME - DISPLAY "Descrizione@50" USERDESC - OUTPUT F_USER USERNAME - OUTPUT F_DUSER USERDESC - CHECKTYPE NORMAL -END - -STRING F_DUSER 50 -BEGIN - PROMPT 29 2 "" - FLAGS "D" -END - -STRING F_GRMERC 3 -BEGIN - PROMPT 2 4 "Gruppo merc. " - FLAG "U" - USE GMC KEY 1 SELECT CODTAB[4,5]=="" - INPUT CODTAB F_GRMERC - DISPLAY "Codice" CODTAB[1,3] - DISPLAY "Descrizione@50" S0 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_DGRMERC S0 - CHECKTYPE SEARCH - FIELD OR14_GRM -END - -STRING F_DGRMERC 50 -BEGIN - PROMPT 29 4 "" - USE GMC KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_DGRMERC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_DGRMERC S0 - CHECKTYPE SEARCH -END - -STRING F_SGRMERC 2 -BEGIN - PROMPT 2 6 "Sottogr.merc ." - FLAG "U" - USE GMC - INPUT CODTAB[1,3] F_GRMERC - INPUT CODTAB[4,5] F_SGRMERC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_SGRMERC CODTAB[4,5] - OUTPUT F_DSGRMERC S0 - CHECKTYPE NORMAL - FIELD OR14_SGR -END - -STRING F_DSGRMERC 50 -BEGIN - PROMPT 29 6 "" - USE GMC KEY 2 SELECT CODTAB[4,5] != "" - INPUT S0 F_DSGRMERC - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_SGRMERC - CHECKTYPE NORMAL -END - -STRING F_CDCT 20 -BEGIN - PROMPT 2 8 "CDC/Commessa " - FLAGS "UZ" - USE CMS - INPUT CODTAB F_CDCT - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@70" S0 - OUTPUT F_CDCT CODTAB - FILED OR14_CDCT - CHECKTYPE NORMAL -END - -STRING F_FSCT 10 -BEGIN - PROMPT 45 8 "Fase " - FLAGS "UZ" - USE FSC - INPUT CODTAB F_FSCT - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@70" S0 - OUTPUT F_FSCT CODTAB - FIELD OR14_FSCT - CHECKTYPE NORMAL -END - -STRING F_CODNUM 4 -BEGIN - PROMPT 2 10 "Numerazione " - USE %NUM - INPUT CODTAB F_CODNUM - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODNUM CODTAB - OUTPUT F_DESNUM S0 - FLAG "UG" - CHECKTYPE NORMAL - FIELD OR14_NUM -END - -STRING F_DESNUM 50 -BEGIN - PROMPT 29 10 "" - USE %NUM KEY 2 - INPUT S0 F_DESNUM - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_CODNUM - CHECKTYPE SEARCH -END - -STRING F_TIPODOC 4 -BEGIN - PROMPT 2 12 "Tipo " - USE %TIP - INPUT CODTAB F_TIPODOC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_TIPODOC CODTAB - OUTPUT F_DESTIPODOC S0 - CHECKTYPE NORMAL - FLAG "UG" - FIELD OR14_TIP -END - -STRING F_DESTIPODOC 50 -BEGIN - PROMPT 29 12 "" - USE %TIP KEY 2 - INPUT S0 F_DESTIPODOC - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_TIPODOC - CHECKTYPE SEARCH -END - -STRING F_MAG 3 -BEGIN - PROMPT 2 14 "Magazzino " - FLAGS "UG" - USE MAG SELECT CODTAB[4,5]=="" - INPUT CODTAB F_MAG - DISPLAY "Codice " CODTAB[1,3] - DISPLAY "Denominazione mag.@50 " S0 - OUTPUT F_MAG CODTAB[1,3] - OUTPUT F_DESMAG S0 - CHECKTYPE NORMAL - FIELD OR14_MAG -END - -STRING F_DESMAG 50 -BEGIN - PROMPT 29 14 "" - USE MAG KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_DESMAG - DISPLAY "Denominazione magazzino@50" S0 - DISPLAY "Cod. magazzino" CODTAB[1,3] - DISPLAY "Cod. deposito" CODTAB[4,5] - COPY OUTPUT F_MAG - CHECKTYPE SEARCH -END - -STRING F_DEP 2 -BEGIN - PROMPT 2 16 "Deposito " - FLAGS "U" - USE MAG SELECT CODTAB[4,5]!="" - INPUT CODTAB[1,3] F_MAG - INPUT CODTAB[4,5] F_DEP - DISPLAY "Codice " CODTAB - DISPLAY "Denominazione dep.@50 " S0 - OUTPUT F_MAG CODTAB[1,3] - OUTPUT F_DEP CODTAB[4,5] - CHECKTYPE SEARCH - FIELD OR14_DEP -END - -STRING F_DESDEP 50 -BEGIN - PROMPT 29 16 "" - USE MAG KEY 2 SELECT CODTAB[4,5]!="" - INPUT S0 F_DESDEP - COPY DISPLAY F_DESMAG - OUTPUT F_DEP CODTAB[4,5] - CHECKTYPE SEARCH -END - -STRING F_DASTATO 1 -BEGIN - PROMPT 2 18 "Dallo stato " - USE %STD - INPUT CODTAB F_DASTATO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_DASTATO CODTAB - CHECKTYPE NORMAL - FIELD OR14_DASTATO -END - -STRING F_ASTATO 1 -BEGIN - PROMPT 29 18 "Allo stato " - COPY USE F_DASTATO - INPUT CODTAB F_ASTATO - COPY DISPLAY F_DASTATO - OUTPUT F_ASTATO CODTAB - CHECKTYPE NORMAL - FIELD OR14_ASTATO -END - -ENDPAGE - -ENDMASK +#include "ps0430200a.h" + +TOOLBAR "" 0 -3 0 3 + +BUTTON DLG_SAVEREC 11 2 +BEGIN + PROMPT -12 -11 "" + PICTURE BMP_SAVEREC + PICTURE BMP_SAVERECDN + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 11 2 +BEGIN + PROMPT -22 -11 "" +END + +ENDPAGE + +PAGE "Configurazione campi per utente" 0 0 0 -3 + +STRING F_USER 8 +BEGIN + PROMPT 2 2 "Utente " + FLAGS "U" + KEY 1 + USE LF_USER SELECT ISGROUP!="X" + INPUT USERNAME F_USER + DISPLAY "Utente@8" USERNAME + DISPLAY "Gruppo@8" GROUPNAME + DISPLAY "Descrizione@50" USERDESC + OUTPUT F_USER USERNAME + OUTPUT F_DUSER USERDESC + CHECKTYPE NORMAL +END + +STRING F_DUSER 50 +BEGIN + PROMPT 29 2 "" + FLAGS "D" +END + +STRING F_GRMERC 3 +BEGIN + PROMPT 2 4 "Gruppo merc. " + FLAG "U" + USE GMC KEY 1 SELECT CODTAB[4,5]=="" + INPUT CODTAB F_GRMERC + DISPLAY "Codice" CODTAB[1,3] + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_DGRMERC S0 + CHECKTYPE SEARCH + FIELD OR14_GRM +END + +STRING F_DGRMERC 50 +BEGIN + PROMPT 29 4 "" + USE GMC KEY 2 SELECT CODTAB[4,5]=="" + INPUT S0 F_DGRMERC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_DGRMERC S0 + CHECKTYPE SEARCH +END + +STRING F_SGRMERC 2 +BEGIN + PROMPT 2 5 "Sottogr.merc. " + FLAG "U" + USE GMC + INPUT CODTAB[1,3] F_GRMERC + INPUT CODTAB[4,5] F_SGRMERC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_GRMERC CODTAB[1,3] + OUTPUT F_SGRMERC CODTAB[4,5] + OUTPUT F_DSGRMERC S0 + CHECKTYPE NORMAL + FIELD OR14_SGR +END + +STRING F_DSGRMERC 50 +BEGIN + PROMPT 29 5 "" + USE GMC KEY 2 SELECT CODTAB[4,5] != "" + INPUT S0 F_DSGRMERC + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_SGRMERC + CHECKTYPE NORMAL +END + +STRING F_CDCT 20 +BEGIN + PROMPT 2 7 "CDC/Commessa " + FLAGS "UZ" + USE CMS + INPUT CODTAB F_CDCT + DISPLAY "Codice@20" CODTAB + DISPLAY "Descrizione@70" S0 + OUTPUT F_CDCT CODTAB + FILED OR14_CDCT + CHECKTYPE NORMAL +END + +STRING F_FSCT 10 +BEGIN + PROMPT 45 7 "Fase " + FLAGS "UZ" + USE FSC + INPUT CODTAB F_FSCT + DISPLAY "Codice@20" CODTAB + DISPLAY "Descrizione@70" S0 + OUTPUT F_FSCT CODTAB + FIELD OR14_FSCT + CHECKTYPE NORMAL +END + +STRING F_CODNUM 4 +BEGIN + PROMPT 2 9 "Numerazione " + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + FLAG "UG" + CHECKTYPE NORMAL + FIELD OR14_NUM +END + +STRING F_DESNUM 50 +BEGIN + PROMPT 29 9 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODNUM + CHECKTYPE SEARCH +END + +STRING F_TIPODOC 4 +BEGIN + PROMPT 2 10 "Tipo " + USE %TIP + INPUT CODTAB F_TIPODOC + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_TIPODOC CODTAB + OUTPUT F_DESTIPODOC S0 + CHECKTYPE NORMAL + FLAG "UG" + FIELD OR14_TIP +END + +STRING F_DESTIPODOC 50 +BEGIN + PROMPT 29 10 "" + USE %TIP KEY 2 + INPUT S0 F_DESTIPODOC + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_TIPODOC + CHECKTYPE SEARCH +END + + +STRING F_CODNUMCAR 4 +BEGIN + PROMPT 2 12 "Num.doc.carico " + USE %NUM + INPUT CODTAB F_CODNUMCAR + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUMCAR CODTAB + OUTPUT F_DESNUMCAR S0 + FLAG "UG" + CHECKTYPE NORMAL + FIELD OR14_NUMCAR +END + +STRING F_DESNUMCAR 50 +BEGIN + PROMPT 29 12 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUMCAR + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODNUMCAR + CHECKTYPE SEARCH +END + +STRING F_TIPODOCCAR 4 +BEGIN + PROMPT 2 13 "Tipo doc.car. " + USE %TIP + INPUT CODTAB F_TIPODOCCAR + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_TIPODOCCAR CODTAB + OUTPUT F_DESTIPODOCCAR S0 + CHECKTYPE NORMAL + FLAG "UG" + FIELD OR14_TIPCAR +END + +STRING F_DESTIPODOCCAR 50 +BEGIN + PROMPT 29 13 "" + USE %TIP KEY 2 + INPUT S0 F_DESTIPODOCCAR + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_TIPODOCCAR + CHECKTYPE SEARCH +END + +STRING F_STATOEVASO 1 +BEGIN + PROMPT 2 13 "Tipo doc.car. " + PROMPT 2 14 "Stato ord. ev. " + USE %STD + INPUT CODTAB F_STATOEVASO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_STATOEVASO CODTAB + CHECKTYPE NORMAL + FIELD OR14_STATOEVASO +END + +STRING F_STATOINI 1 +BEGIN + PROMPT 52 14 "Stato ordine iniziale " + USE %STD + INPUT CODTAB F_STATOINI + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_STATOINI CODTAB + CHECKTYPE NORMAL + FIELD OR14_STATOINI +END + +STRING F_MAG 3 +BEGIN + PROMPT 2 15 "Magazzino " + FLAGS "UG" + USE MAG SELECT CODTAB[4,5]=="" + INPUT CODTAB F_MAG + DISPLAY "Codice " CODTAB[1,3] + DISPLAY "Denominazione mag.@50 " S0 + OUTPUT F_MAG CODTAB[1,3] + OUTPUT F_DESMAG S0 + CHECKTYPE NORMAL + FIELD OR14_MAG +END + +STRING F_DESMAG 50 +BEGIN + PROMPT 29 15 "" + USE MAG KEY 2 SELECT CODTAB[4,5]=="" + INPUT S0 F_DESMAG + DISPLAY "Denominazione magazzino@50" S0 + DISPLAY "Cod. magazzino" CODTAB[1,3] + DISPLAY "Cod. deposito" CODTAB[4,5] + COPY OUTPUT F_MAG + CHECKTYPE SEARCH +END + +STRING F_DEP 2 +BEGIN + PROMPT 2 16 "Deposito " + FLAGS "U" + USE MAG SELECT CODTAB[4,5]!="" + INPUT CODTAB[1,3] F_MAG + INPUT CODTAB[4,5] F_DEP + DISPLAY "Codice " CODTAB + DISPLAY "Denominazione dep.@50 " S0 + OUTPUT F_MAG CODTAB[1,3] + OUTPUT F_DEP CODTAB[4,5] + CHECKTYPE SEARCH + FIELD OR14_DEP +END + +STRING F_DESDEP 50 +BEGIN + PROMPT 29 16 "" + USE MAG KEY 2 SELECT CODTAB[4,5]!="" + INPUT S0 F_DESDEP + COPY DISPLAY F_DESMAG + OUTPUT F_DEP CODTAB[4,5] + CHECKTYPE SEARCH +END + +STRING F_DASTATO 1 +BEGIN + PROMPT 2 18 "Dallo stato " + USE %STD + INPUT CODTAB F_DASTATO + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_DASTATO CODTAB + CHECKTYPE NORMAL + FIELD OR14_DASTATO +END + +STRING F_ASTATO 1 +BEGIN + PROMPT 29 18 "Allo stato " + COPY USE F_DASTATO + INPUT CODTAB F_ASTATO + COPY DISPLAY F_DASTATO + OUTPUT F_ASTATO CODTAB + CHECKTYPE NORMAL + FIELD OR14_ASTATO +END + +ENDPAGE + +ENDMASK diff --git a/ps/ps0430300.cpp b/ps/ps0430300.cpp index eecfd2f5e..edaea5a71 100755 --- a/ps/ps0430300.cpp +++ b/ps/ps0430300.cpp @@ -1,1257 +1,1315 @@ -// Stampa dettaglio disponibilita' articoli -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../or/orlib.h" -#include "../cg/cglib01.h" -#include "../mg/anamag.h" -#include "../ve/velib07.h" - -#include "ps0430300a.h" - -#include -#include - -/////////////////////////////////////////////////////////// -// TArticoli_recordset -/////////////////////////////////////////////////////////// - -class TArticoli_recordset : public TISAM_recordset -{ - static TString8 __codmag; - static int __codes; - - bool _sottoscorta; - -protected: - static bool filtra_sottoscorta(const TRelation* rel); - -public: - virtual TCursor* cursor() const; - TArticoli_recordset(const char* use, bool sottoscorta, int codes, const char * codmag) : TISAM_recordset(use), _sottoscorta(sottoscorta) { __codes = codes; __codmag = codmag;} - virtual ~TArticoli_recordset() {} -}; - -TString8 TArticoli_recordset::__codmag; -int TArticoli_recordset::__codes; - -bool TArticoli_recordset::filtra_sottoscorta(const TRelation* rel) -{ - ((TRelation*)rel)->save_status(); - const char* codart = rel->curr(LF_ANAMAG).get(ANAMAG_CODART); - TArticolo_giacenza artgiac(codart); - - const real giac = artgiac.giacenza_anno(__codmag, NULL, __codes); - - const bool ok = giac < artgiac.scorta_minima(__codmag, NULL, __codes); - ((TRelation*)rel)->restore_status(); - return ok; -} - -TCursor* TArticoli_recordset::cursor() const -{ - TCursor* c = TISAM_recordset::cursor(); - if (c != NULL && _sottoscorta) - c->set_filterfunction(filtra_sottoscorta); - return c; -} - -/////////////////////////////////////////////////////////// -// TConsumi_report -/////////////////////////////////////////////////////////// - -class TConsumi_report : public TDocument_report -{ -protected: - virtual bool use_mask() { return false; } - -public: - TConsumi_report(); -}; - -TConsumi_report::TConsumi_report() -{ - load("ps0430300a"); -} - - -/////////////////////////////////////////////////////////// -// TGenera_ordini_mask -/////////////////////////////////////////////////////////// - -class TGenera_ordini_mask : public TAutomask -{ - TString _anamag_query; - TString _disable_expr; - TString8 _disable_num; - TExpression _dis; - TString _doc_filter; - int _days_interval; - int _riga_da_selezionare; - short _campo_da_selezionare; - bool _filter_changed, _order_changed; - -private: - void serialize(bool bSave); - void load_user_defs(); - void update_sheet(); - void update_documents(); - void reconstruction(const TDocumento& doc2delete); - -protected: - bool on_sheet_event(TOperable_field& o, TField_event e, long jolly); - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - virtual void next_page(int p); - virtual void on_idle(); - -public: - - TGenera_ordini_mask(); - ~TGenera_ordini_mask(); -}; - -/////////////////////////////////////////////////////////// -// TCreazione_ordini -/////////////////////////////////////////////////////////// - -class TCreazione_ordini : public TSkeleton_application -{ - TGenera_ordini_mask* _mask; - -protected: - virtual const char * extra_modules() const {return "or";} - TString_array _userfld; - void aggiorna_stato_doc_orig(const TRectype& rdoc); - -public: - void generate_orders(); - void generate_carics(); - void generate_docs_head(const char type, const TSheet_field& sf, - long& minforn, long& maxforn, TAssoc_array& documents); - void generate_caric_row(const TSheet_field& sf, TToken_string* row, const real qta, - TDocumento* d,TRiga_documento& rdoc, TLocalisamfile& righedoc); - void generate_order_row(const TSheet_field& sf, TToken_string* row, const real qta, - TDocumento* d, TRiga_documento& rdoc, const TRectype& forn, const TRectype& fornven); - void write_docs(const char tipo, const long& minforn, const long& maxforn, TAssoc_array& documents); - - virtual bool create(); - virtual void main_loop(); - virtual bool destroy(); - virtual void print(); - void print_doc(const TRectype & doc); -}; - -inline TCreazione_ordini & capp() { return (TCreazione_ordini &) main_app();} - -/////////////////////////////////////////////////////////// -// TGenera_ordini_mask -/////////////////////////////////////////////////////////// - -void TGenera_ordini_mask::update_sheet() -{ - _filter_changed = false; - - TWait_cursor hourglass; - const TDate oggi(TODAY); - - TSheet_field& sf = sfield(F_ARTICLES); - TEsercizi_contabili esc; - TString query(_anamag_query); - TString16 grmerc(get(F_GRMERC)); - const int pos = query.find("KEY "); - TArticolo_giacenza art; - TString8 codmag(get(F_MAG)); - const TString4 codnum(get(F_CODNUM)); - const bool check_expr = codnum == _disable_num; - int anno = get_int(F_ANNO); - if (anno <= 0) - anno = oggi.year(); - - codmag.left_just(3); - codmag << get(F_DEP); - codmag.trim(); - - grmerc.left_just(3); - grmerc << get(F_SGRMERC); - grmerc.trim(); - - if (grmerc.full()) - { - if (pos > 0) - query[pos + 4] = '3'; - query << "\nFROM GRMERC=#GRMERC\nTO GRMERC=#GRMERC"; - } - else - if (pos > 0) - query[pos + 4] = '2'; - - TString select; - - 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 << "\"))"; - } - - if (select.full()) - { - int pos = query.find("SELECT "); - if (pos > 0) - { - const int acapo = query.find('\n', pos); - query.insert("((", pos+7); - select.insert(")&&("); - select << "))"; - query.insert(select, acapo+2); - } - else - { - pos = query.find('\n'); - select.insert("\nSELECT "); - query.insert(select, pos); - } - } - - - TArticoli_recordset recset(query, get_bool(F_SOTTOSCORTA), esc.date2esc(oggi), get(F_MAG)); - TVariant var ; - - var = grmerc; - recset.set_var("#GRMERC", var); - var = user(); - recset.set_var("#USER", var); - TString8 codes; codes.format("%04d", esc.date2esc(oggi)); - var = codmag; - recset.set_var("#CODMAG", var); - var = (long)anno; - recset.set_var("#ANNOES", var); - - 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(LF_ANAMAG, ANAMAG_CODART).as_string(); - - row.add(codart, sf.cid2index(SA_CODART)); - art.read(codart); - const real giac = art.giacenza_anno(codmag, "", anno); - row.add(recset.get(LF_ANAMAG, ANAMAG_DESCR).as_string(), sf.cid2index(SA_DESCR)); - row.add(recset.get("UMART.UM").as_string(), sf.cid2index(SA_UM)); - - const long codforn = recset.get(LF_ANAMAG, ANAMAG_CODFORN).as_int(); - - row.add(codforn, sf.cid2index(SA_FORNITORE)); - row.add(recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(SA_RAGSOC)); - row.add(recset.get(LF_ANAMAG, ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(SA_LEADTIME)); - row.add(recset.get(LF_ANAMAG, ANAMAG_LOTTORIOR).as_string(), sf.cid2index(SA_LOTTOMIN)); - row.add(recset.get(LF_ANAMAG, ANAMAG_DESCRAGG).as_string(), sf.cid2index(SA_DESCRAGG)); - row.add(giac.string(), sf.cid2index(SA_GIACENZA)); - - row.add(recset.get(LF_ANAMAG, ANAMAG_PPCONF).as_string(), sf.cid2index(SA_PPCONF)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER1).as_string(), sf.cid2index(SA_USER1)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER2).as_string(), sf.cid2index(SA_USER2)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER3).as_string(), sf.cid2index(SA_USER3)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER4).as_string(), sf.cid2index(SA_USER4)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER5).as_string(), sf.cid2index(SA_USER5)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER6).as_string(), sf.cid2index(SA_USER6)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER7).as_string(), sf.cid2index(SA_USER7)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER8).as_string(), sf.cid2index(SA_USER8)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER9).as_string(), sf.cid2index(SA_USER9)); - row.add(recset.get(LF_ANAMAG, ANAMAG_USER10).as_string(), sf.cid2index(SA_USER10)); - const real disp = art.disponibilita(codes, get(F_MAG), NULL); - row.add(disp.string(), sf.cid2index(SA_DISPON)); - sf.check_row(i); - if (check_expr) - { - for (int j = _dis.numvar() - 1; j >= 0; j--) - { - const TString16 varn =_dis.varname(j); - - if (varn == "GIAC") - _dis.setvar(j, giac.string()); - else - if (varn == "USER") - _dis.setvar(j, user()); - else - _dis.setvar(j, recset.get(varn).as_string()); - } - if (_dis.as_bool()) - sf.disable_row(i); - - } - i++; - } - - sf.force_update(); -} - -void TGenera_ordini_mask::update_documents() -{ - _order_changed = false; - TWait_cursor hourglass; - - TSheet_field& sh = sfield(F_DOCUMENTS); - sh.destroy(); - - TString query; - query << "USE RDOC\n"; - query << "SELECT (CODARTMAG!=\"\")&&(CODCMS==#CODCMS)" - << "&&(BETWEEN(33.STATO,#DASTATO,#ASTATO))" - << "&&(RIGAEVASA!=\"X\")\n"; - query << "JOIN ANAMAG INTO CODART==CODART\n"; - query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; - query << "JOIN CLIFO TO DOC INTO TIPOCF=\"F\" CODCF==CODCF\n"; - query << "FROM CODNUM=#CODNUM ANNO=#DAANNO\n"; - query << "TO CODNUM=#CODNUM ANNO=#ADANNO\n"; - - const long anno = get_int(F_ANNO); - - TISAM_recordset orders(query); - orders.set_var("#DASTATO", TVariant(get(F_DASTATO))); - orders.set_var("#ASTATO", TVariant(get(F_ASTATO))); - orders.set_var("#CODCMS", TVariant(get(F_CDCT))); - orders.set_var("#CODNUM", TVariant(get(F_CODNUM))); - orders.set_var("#DAANNO", TVariant(anno-2L)); - orders.set_var("#ADANNO", TVariant(anno)); - - TMask& m = sh.sheet_mask(); - TRelation& rel = *orders.cursor()->relation(); - - const int status_pos = sh.cid2index(SD_STATODOC); - for (bool ok = orders.move_first(); ok; ok = orders.move_next()) - { - TToken_string& row = sh.row(-1); - FOR_EACH_MASK_FIELD(m, i, f) - { - const TFieldref* fr = f->field(); - if (fr != NULL) - { - const int j = sh.cid2index(f->dlg()); - row.add(fr->read(rel), j); - } - } - const int nrow = sh.items()-1; - switch (row.get_int(status_pos)) - { - case 1: sh.set_back_and_fore_color(NORMAL_BACK_COLOR, NORMAL_COLOR, nrow); break; - case 2: sh.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, nrow); break; - default: sh.set_back_and_fore_color(DISABLED_BACK_COLOR, DISABLED_COLOR, nrow); break; - } - sh.check_row(nrow); - } - sh.force_update(); -} - -void TGenera_ordini_mask::next_page(int p) -{ - TAutomask::next_page(p); - - if (_filter_changed) - { - const TSheet_field& sf = sfield(F_ARTICLES); - if (win() == sf.parent()) - update_sheet(); - } - if (_order_changed) - { - const TSheet_field& sf = sfield(F_DOCUMENTS); - if (win() == sf.parent()) - update_documents(); - } - -} - -bool TGenera_ordini_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly) -{ - switch(e) - { - case se_query_del: - case se_query_add: - return false; - - case fe_init: - if (o.dlg() == F_ARTICLES) - update_sheet(); - else - update_documents(); - break; - - //gestione automatica immissione qta per articolo (con terminalino) - case se_notify_modify: - if (o.dlg() == F_ARTICLES) - { - _campo_da_selezionare = F_CAZ_CODART; - } - break; - - default: - break; - } - return true; -} - -void TGenera_ordini_mask::reconstruction(const TDocumento& doc2delete) -{ - const char* const defpar = "or"; - TConfig c(CONFIG_USER, defpar); - const char statoini = c.get_char("OR14_STATOINI"); - - const int rows = doc2delete.rows(); - for (int i=1; i<=rows; i++) - { - const TRiga_documento& r = doc2delete[i]; - const TRectype* original_doc = r.find_original_doc(); - if (original_doc != NULL) - { - TDocumento d(*original_doc); - const long nriga = r.get_long(RDOC_DAIDRIGA); - if (nriga != 0) - { - TRiga_documento& original_row = d[nriga]; - const real qta = r.quantita(); - const TString& name = original_row.field_qtaevasa(); - real qtaevasa = original_row.get_real(name) - qta; - if (qtaevasa < ZERO) - qtaevasa = ZERO; - original_row.put(name, qtaevasa); - if (qtaevasa < original_row.quantita()) - original_row.zero(RDOC_RIGAEVASA); - else - original_row.put(RDOC_RIGAEVASA, "X"); - if (statoini != ' ') - d.stato(statoini); - d.rewrite(); - } - } - } -} - - -bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) -{ - bool ok = true; - switch (o.dlg()) - { - case F_GRMERC: - case F_SGRMERC: - case F_SOTTOSCORTA: - 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_CODNUM: - if (e == fe_modify) - { - _order_changed = true; - _filter_changed = true; - } - break; - case F_TIPODOC: - if (e == fe_init || e == fe_modify) - { - const TTipo_documento tipodoc(o.get()); - const bool is_ordine = tipodoc.is_ordine(); - enable(DLG_ELABORA, is_ordine); - } - break; - case F_ANNO: - if (e == fe_init && o.empty()) - { - const TDate oggi(TODAY); - TString4 anno; anno << oggi.year(); - o.set(anno); - } - if (e == fe_modify) - _filter_changed = true; - // continue - case F_DASTATO: - case F_ASTATO: - if (e == fe_modify) - update_documents(); - break; - - case F_CAZ_CODART: //ricerca riga da codart in testa alla maschera - if (e == fe_modify) - { - int found = -1; - bool non_esiste = true; - - const TString& selected_codart = o.get(); - //ricerca sui codici articolo in anagrafica possibili (sono quelli sullo sheet) - TSheet_field& sf_righe = sfield(F_ARTICLES); - FOR_EACH_SHEET_ROW(sf_righe, r, row) - { - const TString& riga_codart = row->get(0); - if (selected_codart == riga_codart) - { - found = r; - break; - } - } - //se non lo pesca in anagrafica tenta con i codici articolo fornitore (CODCORR_CODARTALT) - if (found < 0) - { - FOR_EACH_SHEET_ROW(sf_righe, r, row) - { - const TString& riga_codart = row->get(0); - TString query; - query << "USE CODCORR"; - query << "\nSELECT CODARTALT=#CODARTALT"; - query << "\nFROM CODART=#CODART"; - query << "\nTO CODART=#CODART"; - TISAM_recordset recset(query); - recset.set_var("#CODARTALT", selected_codart); - recset.set_var("#CODART", riga_codart); - const int items = recset.items(); - //usando la chiave 1 -> items puo' essere 1 o 0 per ogni riga dello sheet - if (items == 1) - { - if (found < 0) - found = r; - else - { - error_box(FR("Il codice %s puo' riferirsi alle righe %d e %d!\nRisolvere l'ambiguita' in anagrafica articoli."), - (const char*)selected_codart, found + 1, r + 1); - found = -1; - non_esiste = false; - break; - } - } //if(items==1... - } //FOR_EACH_SHEET_ROW(sf_righe,... - } //if(found<0... - - //ha trovato l'articolo nello sheet e si posiziona sulla sua riga - if (found >= 0) - { - _riga_da_selezionare = found; - } - else //se non l'ha trovato -> segnala che l'articolo selezionato non esiste nello sheet - { - if (non_esiste) - error_box(TR("L'articolo %s selezionato non esiste nella lista"), (const char*)selected_codart); - } - } - break; - - case DLG_PRINT: - if (e == fe_button) - { - TConsumi_report cr; - cr.mask2report(*this); - TReport_book book; - book.add(cr); - book.print_or_preview(); - ok = false; // Non uscire - } - break; - case DLG_PRINTDOC: - if (e == fe_button) - { - TString query; - - query << "USE 33 "; - if (_doc_filter.full()) - query << "SELECT " << _doc_filter; // CODCMS=#CODCMS\n" - query << "\n" - << "JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF\n" - << "FROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM\n" - << "TO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; - TISAM_recordset rset(query); - rset.set_var("#CODCMS", TVariant(get(F_CDCT))); - rset.set_var("#ANNO", TVariant(get(F_ANNO))); - rset.set_var("#CODNUM", TVariant(get(F_CODNUM))); - - TCursor* c = rset.cursor(); - TCursor_sheet sht(c, " |CODNUM|NDOC|DATADOC|DATACONS|CODCF|20->RAGSOC", TR("Selezione Documenti"), - HR("@1|Ordine@6|Numero\nDoc.@7|Data\nDoc.@10|Data\nConsegna@10|Fornitore|Ragione Sociale@50"),0,1); - sht.uncheck(-1); - - if (sht.run() && sht.one_checked()) - { - const int items = c->items(); - for (*c = 0L; c->pos() < items; ++(*c)) if (sht.checked(c->pos())) - capp().print_doc(c->curr()); - - update_sheet(); - update_documents(); - } - ok = false; // Non uscire - } - break; - case DLG_DELREC: - if (e == fe_button) - { - TString query; - TString select; - - query << "USE 33"; - if (_doc_filter.full()) - select << "(" << _doc_filter << ')'; // CODCMS=#CODCMS\n" - if (_days_interval > 0) - { - TDate datalim(TODAY); - datalim -= _days_interval; - if (select.full()) - select << "&&"; - select << "(STR(NUM(ANSI(DATADOC))>" << datalim.date2ansi() << "))"; - } - if (select.full()) - query << " SELECT " << select; - query << "\n" - << "JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF\n" - << "FROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM\n" - << "TO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; - TISAM_recordset rset(query); - rset.set_var("#CODCMS", TVariant(get(F_CDCT))); - rset.set_var("#ANNO", TVariant(get(F_ANNO))); - rset.set_var("#CODNUM", TVariant(get(F_CODNUM))); - - TCursor* c = rset.cursor(); - TCursor_sheet sht(c, " |CODNUM|NDOC|DATADOC|DATACONS|CODCF|20->RAGSOC", TR("Selezione Documenti"), - HR("@1|Ordine@6|Numero\nDoc.@7|Data\nDoc.@10|Data\nConsegna@10|Fornitore|Ragione Sociale@50"),0,1); - sht.uncheck(-1); - if (sht.run() && sht.one_checked() && yesno_box("Si desidera cancellare %d documenti", sht.checked())) - { - const int items = c->items(); - c->freeze(); - for (*c = 0; c->pos() < items; ++(*c)) if (sht.checked(c->pos())) - { - TDocumento doc(c->curr()); - reconstruction(doc); // funzione che ricostruisce la situazione precedente al documento - doc.remove(); - } - update_sheet(); - update_documents(); - } - ok = false; // Non uscire - } - break; - case DLG_OK: - if (e == fe_button && jolly == 0) - { - capp().generate_orders(); - update_documents(); - update_sheet(); - ok = false; - } - break; - case DLG_ELABORA: - if (e == fe_button && jolly == 0) - { - capp().generate_carics(); - update_documents(); - update_sheet(); - ok = false; - } - break; - default: - if (o.is_kind_of(CLASS_SHEET_FIELD)) - ok = on_sheet_event(o, e, jolly); - break; - } - return ok; -} - -void TGenera_ordini_mask::serialize(bool bSave) -{ - const char* const defpar = "or"; - TConfig ini(CONFIG_DITTA, defpar); - for (int i = fields()-1; i >= 0; i--) - { - TMask_field& f = fld(i); - const TFieldref* fr = f.field(); - if (fr != NULL) - { - if (bSave) - fr->write(ini, defpar, f.get()); - else - f.set(fr->read(ini, defpar)); - } - } -} - -void TGenera_ordini_mask::load_user_defs() -{ - const char* const defpar = "or"; - TConfig ini(CONFIG_USER, defpar); - for (int i = fields()-1; i >= 0; i--) - { - TMask_field& f = fld(i); - const TFieldref* fr = f.field(); - if (fr != NULL) - { - const char * val = fr->read(ini, defpar); - if (*val) - { - f.set(val); - f.disable(); - } - } - } -} - -void TGenera_ordini_mask::on_idle() -{ - TAutomask::on_idle(); - if (_riga_da_selezionare >= 0) - { - TString msg; - msg << "Vado alla riga " << _riga_da_selezionare; - xvtil_statbar_set(msg); - //si posiziona sulla qta - TSheet_field& sf_righe = sfield(F_ARTICLES); - sf_righe.set_focus(); - sf_righe.select(_riga_da_selezionare, true); - _riga_da_selezionare = -1; - } - - //si riposiziona sul campo selezionatore resettandolo in modo da perdere il precedente articolo - if (_campo_da_selezionare > 0) - { - TEdit_field& cc = efield(_campo_da_selezionare); - _campo_da_selezionare = -1; - cc.reset(); - cc.set_focus(); - } -} - -TGenera_ordini_mask::TGenera_ordini_mask() - : TAutomask("ps0430300a"), _filter_changed(false), _order_changed(false) -{ - serialize(false); - load_user_defs(); - - TConfig c(CONFIG_DITTA, "or"); - _anamag_query = c.get("OR14_QUERY"); - if (_anamag_query.blank()) - { - _anamag_query = "USE ANAMAG KEY 2\nJOIN UMART INTO CODART==CODART NRIGA==1"; - _anamag_query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN"; - } - else - _anamag_query = esc(_anamag_query); - - _disable_num = esc(c.get("OR14_DISNUM")); - _disable_expr = esc(c.get("OR14_DISABLE")); - _dis.set(_disable_expr); - - _doc_filter = c.get("OR14_FILTER"); - if (_doc_filter.empty() && !field(F_CDCT).empty()) - _doc_filter = "CODCMS=#CODCMS"; // Utile al Cigno - - _days_interval = c.get_int("OR14_DAYS"); - TSheet_field& sh = sfield(F_ARTICLES); - TMask& sh_mask = sh.sheet_mask(); - TString prompt; - - for (int i = 1; i <= 10; i++) - { - const int col = sh.cid2index(SA_USER1 + i -1); - TEditable_field & f = sh_mask.efield(SA_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); - } - } - - //resetta l'indicatore di riga da selezionare - _riga_da_selezionare = -1; - _campo_da_selezionare = -1; -} - -TGenera_ordini_mask::~TGenera_ordini_mask() -{ -// serialize(true); -} - -/////////////////////////////////////////////////////////// -// TCreazione_ordini -/////////////////////////////////////////////////////////// - -bool TCreazione_ordini::create() -{ - open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_DESLIN, LF_CODCORR, - LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_MOV, LF_STOMAG, - LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); - - TConfig c(CONFIG_DITTA); - for (int i = 0; i < 10; i++ ) - _userfld.add(c.get("USERFLD", NULL, i + 1), i); - - _mask = new TGenera_ordini_mask; - - return TSkeleton_application::create(); -} - -bool TCreazione_ordini::destroy() -{ - delete _mask; - return TSkeleton_application::destroy(); -} - -void TCreazione_ordini::print() -{ - _mask->field(DLG_PRINT).on_hit(); -} - - -void TCreazione_ordini::print_doc(const TRectype & doc) -{ - const TTipo_documento tipo(doc.get(DOC_TIPODOC)); - - TFilename rep; - tipo.main_print_profile(rep, 0); - - TString cmdline; - if (rep.ends_with("rep", true)) // Esiste il nuovo report :-) - cmdline = "ve1 -2"; - else // Esiste il vecchio form :-( - cmdline = "ve1 -0"; - - cmdline << ' ' << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) << ' '; - cmdline << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC) << ' ' << doc.get(DOC_NDOC); - cmdline << " D"; - - const int ncopie = tipo.ncopie(); - if (ncopie > 0) - cmdline << ' ' << ncopie; - - TExternal_app interattivo( cmdline ); - - interattivo.run(); -} - -void TCreazione_ordini::aggiorna_stato_doc_orig(const TRectype& rdoc) -{ - const char provv = rdoc.get_char(RDOC_PROVV); - const int anno = rdoc.get_int(RDOC_ANNO); - const TString8 codnum = rdoc.get(RDOC_CODNUM); - const long ndoc = rdoc.get_long(RDOC_NDOC); - TDocumento doc_orig(provv, anno, codnum, ndoc); - if (doc_orig.is_evaso()) - { - const char* const defpar = "or"; - TConfig c(CONFIG_USER, defpar); - const char statoevaso = c.get_char("OR14_STATOEVASO"); - if (statoevaso != ' ') - { - doc_orig.stato(statoevaso); - doc_orig.rewrite(); - } - } -} - - -//genera la riga del documento di carico (una sola per chiamata) -void TCreazione_ordini::generate_caric_row(const TSheet_field& sf, TToken_string* row, - const real qta, TDocumento* d, TRiga_documento& rdoc, TLocalisamfile& righedoc) -{ - const TDate dataord = row->get(sf.cid2index(SD_DATADOC)); - const long ndoc = row->get_long(sf.cid2index(SD_NUMDOC)); - const int nriga = row->get_int(sf.cid2index(SD_NUMRIGA)); - TRectype& rigcar = righedoc.curr(); - rigcar.put(RDOC_PROVV, 'D'); - rigcar.put(RDOC_ANNO, dataord.year()); - rigcar.put(RDOC_CODNUM, _mask->get(F_CODNUM)); - rigcar.put(RDOC_NDOC, ndoc); - rigcar.put(RDOC_NRIGA, nriga); - int err = righedoc.read(_isequal, _lock); - if (err == NOERR) - { - d->copy_data(rdoc, rigcar); - rdoc.put(rdoc.field_qta(), qta); - rigcar.add(rdoc.field_qtaevasa(), qta); - if (rigcar.get_real(rdoc.field_qtaevasa()) >= rigcar.get_real(rdoc.field_qta())) - rigcar.put(RDOC_RIGAEVASA, true); - rdoc.put(RDOC_DACODNUM, rigcar.get(RDOC_CODNUM)); - rdoc.put(RDOC_DAANNO, rigcar.get(RDOC_ANNO)); - rdoc.put(RDOC_DAPROVV, rigcar.get(RDOC_PROVV)); - rdoc.put(RDOC_DANDOC, rigcar.get(RDOC_NDOC)); - rdoc.put(RDOC_DAIDRIGA, rigcar.get(RDOC_NRIGA)); - err = righedoc.rewrite(); - if (err == NOERR) - aggiorna_stato_doc_orig(rigcar); - - } - if (err != NOERR) - error_box(FR("Impossibile aggiornare la riga %d del doc. %ld"), nriga, ndoc); -} - - -//genera la riga del documento ordine (una sola per chiamata) -void TCreazione_ordini::generate_order_row(const TSheet_field& sf, TToken_string* row, const real qta, - TDocumento* d, TRiga_documento& rdoc, const TRectype& forn, const TRectype& fornven) -{ - const TString codart = row->get(sf.cid2index(SA_CODART)); - - TString8 codmag = _mask->get(F_MAG); - codmag.right_just(3); - codmag << _mask->get(F_DEP); - - TString8 codmagc = _mask->get(F_MAGC); - codmagc.right_just(3); - codmagc << _mask->get(F_DEPC); - - const bool ultimo_prezzo = _mask->get(F_PREZZO) == "U"; - - rdoc.put(RDOC_CODMAG, codmag); - rdoc.put(RDOC_CODMAGC, codmagc); - rdoc.put(RDOC_CODART, codart); - rdoc.put(RDOC_CODARTMAG, codart); - rdoc.put(RDOC_CHECKED, "X"); - rdoc.put(RDOC_DESCR, row->get(sf.cid2index(SA_DESCR))); - - const TString descr_agg = row->get(sf.cid2index(SA_DESCRAGG)); - if (descr_agg.full()) - { - rdoc.put(RDOC_DESCLUNGA, "X"); - rdoc.put(RDOC_DESCEST, descr_agg); - } - - rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(SA_UM))); - rdoc.put(RDOC_QTA, qta); - - const TDate datacons(row->get(sf.cid2index(SA_DATACONS))); - rdoc.put(RDOC_DATACONS, datacons); - - const TRectype& articolo = cache().get(LF_ANAMAG, codart); - TPrice prezzo; - if (ultimo_prezzo) - prezzo = articolo.get_real(ANAMAG_ULTCOS1); - else - prezzo = articolo.get_real(ANAMAG_COSTSTD); - - const TString4 codval = forn.get(CLI_CODVAL); - prezzo.change_value(codval); - rdoc.put(RDOC_PREZZO, prezzo.get_num()); - - const TString4 codiva = fornven.get(CFV_ASSFIS); - if (codiva.full()) - rdoc.put(RDOC_CODIVA, codiva); - else - rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA)); - - const TString commessa = row->get(sf.cid2index(SA_CDC)); - const TString fase = row->get(sf.cid2index(SA_FSC)); - rdoc.put(RDOC_CODCMS, commessa); - rdoc.put(RDOC_FASCMS, fase); - - for (int i = 0; i < 10 ; i++) - if (_userfld.row(i).full()) - rdoc.put(_userfld.row(i), _mask->get(SA_USER1 + i)); - - rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(SA_CODAGG1))); - rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(SA_CODAGG2))); -} - - -//genera la testata del documento di 'C'arico o dell''O'rdine e chiama i metodi per creare le righe.. -//..di entrambi -void TCreazione_ordini::generate_docs_head(const char type, const TSheet_field& sf, - long& minforn, long& maxforn, TAssoc_array& documents) -{ - TString msg; - TString4 codnum, tipodoc; - TDate datadoc; - TLocalisamfile righedoc(LF_RIGHEDOC); - - switch (type) - { - case 'C': - { - datadoc = _mask->get_date(F_DATADOCCAR); - - const char* const defpar = "or"; - TConfig c(CONFIG_USER, defpar); - codnum = c.get("OR14_NUMCAR"); - tipodoc = c.get("OR14_TIPCAR"); - - msg << "Generazione documenti di carico"; - } - break; - case 'O': - { - datadoc = _mask->get_date(F_DATADOC); - - codnum = _mask->get(F_CODNUM); - tipodoc = _mask->get(F_TIPODOC); - - msg << "Generazione ordini"; - } - break; - - default: - break; - } - - //parte comune ai casi 'C' ed 'O' - const TTipo_documento tipo(tipodoc); - const TString& commessa_testata = _mask->get(F_CDCT); - const TString& fase_testata = _mask->get(F_FSCT); - - TProgind pi(sf.items(), msg, true, true); - - //giro su tutte le righe dello sheet - FOR_EACH_SHEET_ROW(sf, n, row) - { - if (!pi.setstatus(n)) - break; - if (row->get_char(sf.cid2index(SD_DAEVADERE) == 'X')) - { - real qta; - TString8 codforn; - TDate datacons; - - if (type == 'C') - { - qta = row->get(sf.cid2index(SD_QTADAEVADERE)); - codforn = row->get(sf.cid2index(SD_FORNITORE)); - datacons = row->get(sf.cid2index(SD_DATACONS)); - } - else - { - qta = row->get(sf.cid2index(SA_QTA)); - codforn = row->get(sf.cid2index(SA_FORNITORE)); - datacons = row->get(sf.cid2index(SA_DATACONS)); - } - - if (!qta.is_zero()) - { - //dati relativi al fornitore.. - const long cod = atol(codforn); - TString8 key; key.format("F|%ld", cod); - const TRectype& forn = cache().get(LF_CLIFO, key); - //..e cfven collegato - const TRectype& forven = cache().get(LF_CFVEN, key); - - TDocumento* d = (TDocumento*)documents.objptr(codforn); - if (d == NULL) - { - //il documento va creato - d = new TDocumento('D', datadoc.year(), codnum, 0L); - - d->put(DOC_TIPODOC, tipodoc); - d->put(DOC_TIPOCF, "F"); - d->put(DOC_CODCF, codforn); - d->put(DOC_DATADOC, datadoc); - d->put(DOC_DATACONS, datacons); - d->put(DOC_CODVAL, forn.get(CLI_CODVAL)); - d->put(DOC_CODLIN, forn.get(CLI_CODLIN)); - d->put(DOC_CODPAG, forn.get(CLI_CODPAG)); - d->put(DOC_CODABIA, forn.get(CLI_CODABI)); - d->put(DOC_CODCABA, forn.get(CLI_CODCAB)); - d->put(DOC_IBAN, forn.get(CLI_IBAN)); - d->put(DOC_CODABIP, forven.get(CFV_CODABIPR)); - d->put(DOC_CODCABP, forven.get(CFV_CODCABPR)); - d->put(DOC_RAGGR, forven.get(CFV_RAGGDOC)); - d->put(DOC_RAGGREFF, forven.get(CFV_RAGGEFF)); - d->put(DOC_CODINDSP, forven.get(CFV_CODINDSP)); - d->put(DOC_CODAG, forven.get(CFV_CODAG)); - d->put(DOC_ZONA, forven.get(CFV_CODZONA)); - d->put(DOC_CODSPMEZZO, forven.get(CFV_CODSPMEZZO)); - d->put(DOC_CODPORTO, forven.get(CFV_CODPORTO)); - d->put(DOC_CODNOTESP1, forven.get(CFV_CODNOTESP1)); - d->put(DOC_CODNOTESP2, forven.get(CFV_CODNOTESP2)); - d->put(DOC_CODNOTE, forven.get(CFV_CODNOTE)); - d->put(DOC_CODVETT1, forven.get(CFV_CODVETT1)); - d->put(DOC_CODVETT2, forven.get(CFV_CODVETT2)); - d->put(DOC_CODVETT3, forven.get(CFV_CODVETT3)); - d->put(DOC_PERCSPINC, forven.get(CFV_PERCSPINC)); - d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI)); - d->put(DOC_CATVEN, forven.get(CFV_CATVEN)); - d->put(DOC_CODLIST, forven.get(CFV_CODLIST)); - d->put(DOC_CODCMS, commessa_testata); - if (type == 'O') - d->put(DOC_NOTE, _mask->get(F_NOTE)); - - const TString& causmag = tipo.caus_mov(); - d->put(DOC_CAUSMAG, causmag); - - documents.add(codforn, d); - if (cod < minforn) - minforn = cod; - if (cod > maxforn) - maxforn = cod; - } //if (d == NULL)... - - - //generazione righe del documento - TRiga_documento& rdoc = d->new_row("01"); - - if (type == 'C') - generate_caric_row(sf, row, qta, d, rdoc, righedoc); - else - generate_order_row(sf, row, qta, d, rdoc, forn, forven); - - - } //if (!qta.is_zero())... - } //if (row->get_char... - } //FOR_EACH_SHEET_ROW(sf, n, row)... - -} - - -//salva i documenti generati -void TCreazione_ordini::write_docs(const char tipo, const long& minforn, const long& maxforn, TAssoc_array& documents) -{ - TString msg; - switch (tipo) - { - case 'C': msg << "Registrazione documenti di carico"; break; - case 'O': msg << "Registrazione ordini"; break; - default: break; - } - - TProgind pi(documents.items(), msg, true, true); - TString cmdline; - int cnt = 0; - TString8 key; - long mindoc = 0, maxdoc = 0; - for (long cod = minforn; cod <= maxforn; cod++) - { - key.format("%ld", cod); - TDocumento* d = (TDocumento*)documents.objptr(key); - if (d != NULL) - { - if (!pi.addstatus(1)) - break; - if (d->write() == NOERR) - { - if (cmdline.blank()) - { - const TTipo_documento& tipo = d->tipo(); - TFilename rep; - tipo.main_print_profile(rep, 0); - - if (rep.ends_with("rep", true)) // Esiste il nuovo report :-) - cmdline = "ve1 -2"; - else // Esiste il vecchio form :-( - cmdline = "ve1 -0"; - } //if (cmdline.blank())... - cnt++; - const long ndoc = d->get_long(DOC_NDOC); - if (mindoc <= 0 || ndoc < mindoc) - mindoc = ndoc; - if (ndoc > maxdoc) - maxdoc = ndoc; - } //if (d->write() == NOERR)... - } //if (d != NULL)... - } //for (long cod = minforn; cod <= maxforn; cod++)... - if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt)) - { - const TString& codnum = _mask->get(F_CODNUM); - const TDate datadoc(TODAY); - const int anno = datadoc.year(); - cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc; - TExternal_app prg(cmdline); - prg.run(true, true, false); - } //if (yesno_box(TR("Sono... - -} - - -void TCreazione_ordini::generate_carics() -{ - TSheet_field& sf = _mask->sfield(F_DOCUMENTS); - - long minforn = 999999L; - long maxforn = 0L; - TAssoc_array carics; - - if (sf.items() > 0) - generate_docs_head('C', sf, minforn, maxforn, carics); - - if (carics.items() > 0) - write_docs('C', minforn, maxforn, carics); - -} - - -//genera gli ordini a partire dalle righe articolo sullo sheet F_ARTICLES -void TCreazione_ordini::generate_orders() -{ - TSheet_field& sf = _mask->sfield(F_ARTICLES); - - long minforn = 999999L; - long maxforn = 0L; - TAssoc_array orders; - - if (sf.items() > 0) - generate_docs_head('O', sf, minforn, maxforn, orders); - - if (orders.items() > 0) - write_docs('O', minforn, maxforn, orders); - -} - -void TCreazione_ordini::main_loop() -{ - - KEY tasto = K_ENTER; - while (tasto == K_ENTER) - tasto = _mask->run(); -} - -int ps0430300(int argc, char* argv[]) -{ - TCreazione_ordini a; - a.run(argc,argv,TR("Generazione Ordini a fornitore")); - return 0; -} - +// Stampa dettaglio disponibilita' articoli +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../or/orlib.h" +#include "../cg/cglib01.h" +#include "../mg/anamag.h" +#include "../ve/velib07.h" + +#include "ps0430300a.h" + +#include +#include + +/////////////////////////////////////////////////////////// +// TArticoli_recordset +/////////////////////////////////////////////////////////// + +class TArticoli_recordset : public TISAM_recordset +{ + static TString8 __codmag; + static int __codes; + + bool _sottoscorta; + +protected: + static bool filtra_sottoscorta(const TRelation* rel); + +public: + virtual TCursor* cursor() const; + TArticoli_recordset(const char* use, bool sottoscorta, int codes, const char * codmag) : TISAM_recordset(use), _sottoscorta(sottoscorta) { __codes = codes; __codmag = codmag;} + virtual ~TArticoli_recordset() {} +}; + +TString8 TArticoli_recordset::__codmag; +int TArticoli_recordset::__codes; + +bool TArticoli_recordset::filtra_sottoscorta(const TRelation* rel) +{ + ((TRelation*)rel)->save_status(); + const char* codart = rel->curr(LF_ANAMAG).get(ANAMAG_CODART); + TArticolo_giacenza artgiac(codart); + + const real giac = artgiac.giacenza_anno(__codmag, NULL, __codes); + + const bool ok = giac < artgiac.scorta_minima(__codmag, NULL, __codes); + ((TRelation*)rel)->restore_status(); + return ok; +} + +TCursor* TArticoli_recordset::cursor() const +{ + TCursor* c = TISAM_recordset::cursor(); + if (c != NULL && _sottoscorta) + c->set_filterfunction(filtra_sottoscorta); + return c; +} + +/////////////////////////////////////////////////////////// +// TConsumi_report +/////////////////////////////////////////////////////////// + +class TConsumi_report : public TDocument_report +{ +protected: + virtual bool use_mask() { return false; } + +public: + TConsumi_report(); +}; + +TConsumi_report::TConsumi_report() +{ + load("ps0430300a"); +} + + +/////////////////////////////////////////////////////////// +// TGenera_ordini_mask +/////////////////////////////////////////////////////////// + +class TGenera_ordini_mask : public TAutomask +{ + TString _anamag_query; + TString _disable_expr; + TString8 _disable_num; + TExpression _dis; + TString _doc_filter; + int _days_interval; + int _riga_da_selezionare; + bool _filter_changed, _order_changed; + +private: + void serialize(bool bSave); + void load_user_defs(); + void update_sheet(); + void update_orders(); + void reconstruction(const TDocumento& doc2delete); + +protected: + bool on_sheet_event(TOperable_field& o, TField_event e, long jolly); + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + virtual void next_page(int p); + virtual void on_idle(); + +public: + + TGenera_ordini_mask(); + ~TGenera_ordini_mask(); +}; + +/////////////////////////////////////////////////////////// +// TCreazione_ordini +/////////////////////////////////////////////////////////// + +class TCreazione_ordini : public TSkeleton_application +{ + TGenera_ordini_mask* _mask; + +protected: + virtual const char * extra_modules() const {return "or";} + TString_array _userfld; + void aggiorna_stato_doc_orig(const TRectype& rdoc); + +public: + void generate_orders(); + void generate_carics(); + virtual bool create(); + virtual void main_loop(); + virtual bool destroy(); + virtual void print(); + void print_doc(const TRectype & doc); +}; + +inline TCreazione_ordini & capp() { return (TCreazione_ordini &) main_app();} + +/////////////////////////////////////////////////////////// +// TGenera_ordini_mask +/////////////////////////////////////////////////////////// + +void TGenera_ordini_mask::update_sheet() +{ + _filter_changed = false; + + TWait_cursor hourglass; + const TDate oggi(TODAY); + + TSheet_field& sf = sfield(F_ARTICLES); + TEsercizi_contabili esc; + TString query(_anamag_query); + TString16 grmerc(get(F_GRMERC)); + const int pos = query.find("KEY "); + TArticolo_giacenza art; + TString8 codmag(get(F_MAG)); + const TString4 codnum(get(F_CODNUM)); + const bool check_expr = codnum == _disable_num; + int anno = get_int(F_ANNO); + if (anno <= 0) + anno = oggi.year(); + + codmag.left_just(3); + codmag << get(F_DEP); + codmag.trim(); + + grmerc.left_just(3); + grmerc << get(F_SGRMERC); + grmerc.trim(); + + if (grmerc.full()) + { + if (pos > 0) + query[pos + 4] = '3'; + query << "\nFROM GRMERC=#GRMERC\nTO GRMERC=#GRMERC"; + } + else + if (pos > 0) + query[pos + 4] = '2'; + + TString select; + + 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 << "\"))"; + } + + if (select.full()) + { + int pos = query.find("SELECT "); + if (pos > 0) + { + const int acapo = query.find('\n', pos); + query.insert("((", pos+7); + select.insert(")&&("); + select << "))"; + query.insert(select, acapo+2); + } + else + { + pos = query.find('\n'); + select.insert("\nSELECT "); + query.insert(select, pos); + } + } + + + TArticoli_recordset recset(query, get_bool(F_SOTTOSCORTA), esc.date2esc(oggi), get(F_MAG)); + TVariant var ; + + var = grmerc; + recset.set_var("#GRMERC", var); + var = user(); + recset.set_var("#USER", var); + TString8 codes; codes.format("%04d", esc.date2esc(oggi)); + var = codmag; + recset.set_var("#CODMAG", var); + var = (long)anno; + recset.set_var("#ANNOES", var); + + 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(LF_ANAMAG, ANAMAG_CODART).as_string(); + + row.add(codart, sf.cid2index(F_CODART)); + art.read(codart); + const real giac = art.giacenza_anno(codmag, "", anno); + row.add(recset.get(LF_ANAMAG, ANAMAG_DESCR).as_string(), sf.cid2index(F_DESCR)); + row.add(recset.get("UMART.UM").as_string(), sf.cid2index(F_UM)); + + const long codforn = recset.get(LF_ANAMAG, ANAMAG_CODFORN).as_int(); + + row.add(codforn, sf.cid2index(F_FORNITORE)); + row.add(recset.get("CLIFO.RAGSOC").as_string(), sf.cid2index(F_RAGSOC)); + row.add(recset.get(LF_ANAMAG, ANAMAG_GIORNIRIOR).as_string(), sf.cid2index(F_LEADTIME)); + row.add(recset.get(LF_ANAMAG, ANAMAG_LOTTORIOR).as_string(), sf.cid2index(F_LOTTOMIN)); + row.add(recset.get(LF_ANAMAG, ANAMAG_DESCRAGG).as_string(), sf.cid2index(F_DESCRAGG)); + row.add(giac.string(), sf.cid2index(F_GIACENZA)); + + row.add(recset.get(LF_ANAMAG, ANAMAG_PPCONF).as_string(), sf.cid2index(F_PPCONF)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER1).as_string(), sf.cid2index(F_USER1)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER2).as_string(), sf.cid2index(F_USER2)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER3).as_string(), sf.cid2index(F_USER3)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER4).as_string(), sf.cid2index(F_USER4)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER5).as_string(), sf.cid2index(F_USER5)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER6).as_string(), sf.cid2index(F_USER6)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER7).as_string(), sf.cid2index(F_USER7)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER8).as_string(), sf.cid2index(F_USER8)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER9).as_string(), sf.cid2index(F_USER9)); + row.add(recset.get(LF_ANAMAG, ANAMAG_USER10).as_string(), sf.cid2index(F_USER10)); + const real disp = art.disponibilita(codes, get(F_MAG), NULL); + row.add(disp.string(), sf.cid2index(F_DISPON)); + sf.check_row(i); + if (check_expr) + { + for (int j = _dis.numvar() - 1; j >= 0; j--) + { + const TString16 varn =_dis.varname(j); + + if (varn == "GIAC") + _dis.setvar(j, giac.string()); + else + if (varn == "USER") + _dis.setvar(j, user()); + else + _dis.setvar(j, recset.get(varn).as_string()); + } + if (_dis.as_bool()) + sf.disable_row(i); + + } + i++; + } + + sf.force_update(); +} + +void TGenera_ordini_mask::update_orders() +{ + _order_changed = false; + TWait_cursor hourglass; + + TSheet_field& sh = sfield(F_ORDERS); + sh.destroy(); + + TString query; + query << "USE RDOC\n"; + query << "SELECT (CODARTMAG!=\"\")&&(CODCMS==#CODCMS)" + << "&&(BETWEEN(33.STATO,#DASTATO,#ASTATO))" + << "&&(RIGAEVASA!=\"X\")\n"; + query << "JOIN ANAMAG INTO CODART==CODART\n"; + query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; + query << "JOIN CLIFO TO DOC INTO TIPOCF=\"F\" CODCF==CODCF\n"; + query << "FROM CODNUM=#CODNUM ANNO=#DAANNO\n"; + query << "TO CODNUM=#CODNUM ANNO=#ADANNO\n"; + + const long anno = get_int(F_ANNO); + + TISAM_recordset orders(query); + orders.set_var("#DASTATO", TVariant(get(F_DASTATO))); + orders.set_var("#ASTATO", TVariant(get(F_ASTATO))); + orders.set_var("#CODCMS", TVariant(get(F_CDCT))); + orders.set_var("#CODNUM", TVariant(get(F_CODNUM))); + orders.set_var("#DAANNO", TVariant(anno-2L)); + orders.set_var("#ADANNO", TVariant(anno)); + + TMask& m = sh.sheet_mask(); + TRelation& rel = *orders.cursor()->relation(); + + const int status_pos = sh.cid2index(S_STATODOC); + for (bool ok = orders.move_first(); ok; ok = orders.move_next()) + { + TToken_string& row = sh.row(-1); + FOR_EACH_MASK_FIELD(m, i, f) + { + const TFieldref* fr = f->field(); + if (fr != NULL) + { + const int j = sh.cid2index(f->dlg()); + row.add(fr->read(rel), j); + } + } + const int nrow = sh.items()-1; + switch (row.get_int(status_pos)) + { + case 1: sh.set_back_and_fore_color(NORMAL_BACK_COLOR, NORMAL_COLOR, nrow); break; + case 2: sh.set_back_and_fore_color(REQUIRED_BACK_COLOR, NORMAL_COLOR, nrow); break; + default: sh.set_back_and_fore_color(DISABLED_BACK_COLOR, DISABLED_COLOR, nrow); break; + } + sh.check_row(nrow); + } + sh.force_update(); +} + +void TGenera_ordini_mask::next_page(int p) +{ + TAutomask::next_page(p); + + if (_filter_changed) + { + const TSheet_field& sf = sfield(F_ARTICLES); + if (win() == sf.parent()) + update_sheet(); + } + if (_order_changed) + { + const TSheet_field& sf = sfield(F_ORDERS); + if (win() == sf.parent()) + update_orders(); + } + +} + +bool TGenera_ordini_mask::on_sheet_event(TOperable_field& o, TField_event e, long jolly) +{ + switch(e) + { + case se_query_del: + case se_query_add: + return false; + case fe_init: + if (o.dlg() == F_ARTICLES) + update_sheet(); + else + update_orders(); + break; + + case se_notify_modify: + if (o.dlg() == F_ARTICLES) + { + TEdit_field& cc = efield(F_CAZ_CODART); + cc.reset(); + cc.set_focus(); + } + break; + + default: + break; + } + return true; +} + +void TGenera_ordini_mask::reconstruction(const TDocumento& doc2delete) +{ + const char* const defpar = "or"; + TConfig c(CONFIG_USER, defpar); + const char statoini = c.get_char("OR14_STATOINI"); + + const int rows = doc2delete.rows(); + for (int i=1; i<=rows; i++) + { + const TRiga_documento& r = doc2delete[i]; + const TRectype* original_doc = r.find_original_doc(); + if (original_doc != NULL) + { + TDocumento d(*original_doc); + const long nriga = r.get_long(RDOC_DAIDRIGA); + if (nriga != 0) + { + TRiga_documento& original_row = d[nriga]; + const real qta = r.quantita(); + const TString& name = original_row.field_qtaevasa(); + real qtaevasa = original_row.get_real(name) - qta; + if (qtaevasa < ZERO) + qtaevasa = ZERO; + original_row.put(name, qtaevasa); + if (qtaevasa < original_row.quantita()) + original_row.zero(RDOC_RIGAEVASA); + else + original_row.put(RDOC_RIGAEVASA, "X"); + if (statoini != ' ') + d.stato(statoini); + d.rewrite(); + } + } + } +} + + +bool TGenera_ordini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + bool ok = true; + switch (o.dlg()) + { + case F_GRMERC: + case F_SGRMERC: + case F_SOTTOSCORTA: + 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_CODNUM: + if (e == fe_modify) + { + _order_changed = true; + _filter_changed = true; + } + break; + case F_TIPODOC: + if (e == fe_init || e == fe_modify) + { + const TTipo_documento tipodoc(o.get()); + const bool is_ordine = tipodoc.is_ordine(); + enable(DLG_ELABORA, is_ordine); + } + break; + case F_ANNO: + if (e == fe_init && o.empty()) + { + const TDate oggi(TODAY); + TString4 anno; anno << oggi.year(); + o.set(anno); + } + if (e == fe_modify) + _filter_changed = true; + // continue + case F_DASTATO: + case F_ASTATO: + if (e == fe_modify) + update_orders(); + break; + + case F_CAZ_CODART: //ricerca riga da codart in testa alla maschera + if (e == fe_modify) + { + int found = -1; + bool non_esiste = true; + + const TString& selected_codart = o.get(); + //ricerca sui codici articolo in anagrafica possibili (sono quelli sullo sheet) + TSheet_field& sf_righe = sfield(F_ARTICLES); + FOR_EACH_SHEET_ROW(sf_righe, r, row) + { + const TString& riga_codart = row->get(0); + if (selected_codart == riga_codart) + { + found = r; + break; + } + } + //se non lo pesca in anagrafica tenta con i codici articolo fornitore (CODCORR_CODARTALT) + if (found < 0) + { + FOR_EACH_SHEET_ROW(sf_righe, r, row) + { + const TString& riga_codart = row->get(0); + TString query; + query << "USE CODCORR"; + query << "\nSELECT CODARTALT=#CODARTALT"; + query << "\nFROM CODART=#CODART"; + query << "\nTO CODART=#CODART"; + TISAM_recordset recset(query); + recset.set_var("#CODARTALT", selected_codart); + recset.set_var("#CODART", riga_codart); + const int items = recset.items(); + //usando la chiave 1 -> items puo' essere 1 o 0 per ogni riga dello sheet + if (items == 1) + { + if (found < 0) + found = r; + else + { + error_box(FR("Il codice %s puo' riferirsi alle righe %d e %d!\nRisolvere l'ambiguita' in anagrafica articoli."), + (const char*)selected_codart, found + 1, r + 1); + found = -1; + non_esiste = false; + break; + } + } //if(items==1... + } //FOR_EACH_SHEET_ROW(sf_righe,... + } //if(found<0... + + //ha trovato l'articolo nello sheet e si posiziona sulla sua riga + if (found >= 0) + { + _riga_da_selezionare = found; + } + else //se non l'ha trovato -> segnala che l'articolo selezionato non esiste nello sheet + { + if (non_esiste) + error_box(TR("L'articolo %s selezionato non esiste nella lista"), (const char*)selected_codart); + } + } + break; + + case DLG_PRINT: + if (e == fe_button) + { + TConsumi_report cr; + cr.mask2report(*this); + TReport_book book; + book.add(cr); + book.print_or_preview(); + ok = false; // Non uscire + } + break; + case DLG_PRINTDOC: + if (e == fe_button) + { + TString query; + + query << "USE 33 "; + if (_doc_filter.full()) + query << "SELECT " << _doc_filter; // CODCMS=#CODCMS\n" + query << "\n" + << "JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF\n" + << "FROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM\n" + << "TO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; + TISAM_recordset rset(query); + rset.set_var("#CODCMS", TVariant(get(F_CDCT))); + rset.set_var("#ANNO", TVariant(get(F_ANNO))); + rset.set_var("#CODNUM", TVariant(get(F_CODNUM))); + + TCursor* c = rset.cursor(); + TCursor_sheet sht(c, " |CODNUM|NDOC|DATADOC|DATACONS|CODCF|20->RAGSOC", TR("Selezione Documenti"), + HR("@1|Ordine@6|Numero\nDoc.@7|Data\nDoc.@10|Data\nConsegna@10|Fornitore|Ragione Sociale@50"),0,1); + sht.uncheck(-1); + + if (sht.run() && sht.one_checked()) + { + const int items = c->items(); + for (*c = 0L; c->pos() < items; ++(*c)) if (sht.checked(c->pos())) + capp().print_doc(c->curr()); + + update_sheet(); + update_orders(); + } + ok = false; // Non uscire + } + break; + case DLG_DELREC: + if (e == fe_button) + { + TString query; + TString select; + + query << "USE 33"; + if (_doc_filter.full()) + select << "(" << _doc_filter << ')'; // CODCMS=#CODCMS\n" + if (_days_interval > 0) + { + TDate datalim(TODAY); + datalim -= _days_interval; + if (select.full()) + select << "&&"; + select << "(STR(NUM(ANSI(DATADOC))>" << datalim.date2ansi() << "))"; + } + if (select.full()) + query << " SELECT " << select; + query << "\n" + << "JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF\n" + << "FROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM\n" + << "TO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; + TISAM_recordset rset(query); + rset.set_var("#CODCMS", TVariant(get(F_CDCT))); + rset.set_var("#ANNO", TVariant(get(F_ANNO))); + rset.set_var("#CODNUM", TVariant(get(F_CODNUM))); + + TCursor* c = rset.cursor(); + TCursor_sheet sht(c, " |CODNUM|NDOC|DATADOC|DATACONS|CODCF|20->RAGSOC", TR("Selezione Documenti"), + HR("@1|Ordine@6|Numero\nDoc.@7|Data\nDoc.@10|Data\nConsegna@10|Fornitore|Ragione Sociale@50"),0,1); + sht.uncheck(-1); + if (sht.run() && sht.one_checked() && yesno_box("Si desidera cancellare %d documenti", sht.checked())) + { + const int items = c->items(); + c->freeze(); + for (*c = 0; c->pos() < items; ++(*c)) if (sht.checked(c->pos())) + { + TDocumento doc(c->curr()); + reconstruction(doc); // funzione che ricostruisce la situazione precedente al documento + doc.remove(); + } + update_sheet(); + update_orders(); + } + ok = false; // Non uscire + } + break; + case DLG_OK: + if (e == fe_button && jolly == 0) + { + capp().generate_orders(); + update_orders(); + update_sheet(); + ok = false; + } + break; + case DLG_ELABORA: + if (e == fe_button && jolly == 0) + { + capp().generate_carics(); + update_orders(); + update_sheet(); + ok = false; + } + break; + default: + if (o.is_kind_of(CLASS_SHEET_FIELD)) + ok = on_sheet_event(o, e, jolly); + break; + } + return ok; +} + +void TGenera_ordini_mask::serialize(bool bSave) +{ + const char* const defpar = "or"; + TConfig ini(CONFIG_DITTA, defpar); + for (int i = fields()-1; i >= 0; i--) + { + TMask_field& f = fld(i); + const TFieldref* fr = f.field(); + if (fr != NULL) + { + if (bSave) + fr->write(ini, defpar, f.get()); + else + f.set(fr->read(ini, defpar)); + } + } +} + +void TGenera_ordini_mask::load_user_defs() +{ + const char* const defpar = "or"; + TConfig ini(CONFIG_USER, defpar); + for (int i = fields()-1; i >= 0; i--) + { + TMask_field& f = fld(i); + const TFieldref* fr = f.field(); + if (fr != NULL) + { + const char * val = fr->read(ini, defpar); + if (*val) + { + f.set(val); + f.disable(); + } + } + } +} + +void TGenera_ordini_mask::on_idle() +{ + TAutomask::on_idle(); + if (_riga_da_selezionare >= 0) + { + //si posiziona sulla qta + TSheet_field& sf_righe = sfield(F_ARTICLES); + const int column = sf_righe.cid2index(F_QTA); + sf_righe.select(_riga_da_selezionare, column, true); + _riga_da_selezionare = -1; + sf_righe.set_focus(); + } +} + +TGenera_ordini_mask::TGenera_ordini_mask() + : TAutomask("ps0430300a"), _filter_changed(false), _order_changed(false) +{ + serialize(false); + load_user_defs(); + + TConfig c(CONFIG_DITTA, "or"); + _anamag_query = c.get("OR14_QUERY"); + if (_anamag_query.blank()) + { + _anamag_query = "USE ANAMAG KEY 2\nJOIN UMART INTO CODART==CODART NRIGA==1"; + _anamag_query << "\nJOIN CLIFO INTO TIPOCF==\"F\" CODCF==CODFORN"; + } + else + _anamag_query = esc(_anamag_query); + + _disable_num = esc(c.get("OR14_DISNUM")); + _disable_expr = esc(c.get("OR14_DISABLE")); + _dis.set(_disable_expr); + + _doc_filter = c.get("OR14_FILTER"); + if (_doc_filter.empty() && !field(F_CDCT).empty()) + _doc_filter = "CODCMS=#CODCMS"; // Utile al Cigno + + _days_interval = c.get_int("OR14_DAYS"); + TSheet_field& sh = sfield(F_ARTICLES); + TMask& sh_mask = sh.sheet_mask(); + TString 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); + } + } + + //resetta l'indicatore di riga da selezionare + _riga_da_selezionare = -1; +} + +TGenera_ordini_mask::~TGenera_ordini_mask() +{ +// serialize(true); +} + +/////////////////////////////////////////////////////////// +// TCreazione_ordini +/////////////////////////////////////////////////////////// + +bool TCreazione_ordini::create() +{ + open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_DESLIN, LF_CODCORR, + LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_PCON, LF_MOV, LF_STOMAG, + LF_MOVMAG, LF_RMOVMAG, LF_MAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_ATTIV, LF_CAUSALI, 0); + + TConfig c(CONFIG_DITTA); + for (int i = 0; i < 10; i++ ) + _userfld.add(c.get("USERFLD", NULL, i + 1), i); + + _mask = new TGenera_ordini_mask; + + return TSkeleton_application::create(); +} + +bool TCreazione_ordini::destroy() +{ + delete _mask; + return TSkeleton_application::destroy(); +} + +void TCreazione_ordini::print() +{ + _mask->field(DLG_PRINT).on_hit(); +} +void TCreazione_ordini::print_doc(const TRectype & doc) +{ + const TTipo_documento tipo(doc.get(DOC_TIPODOC)); + + TFilename rep; tipo.main_print_profile(rep, 0); + rep.ext("rep"); + + TString commandline; + if (rep.custom_path()) // Esiste il nuovo report :-) + commandline = "ve1 -2"; + else // Esiste il vecchio form :-( + commandline = "ve1 -0"; + + commandline << ' ' << doc.get(DOC_CODNUM) << ' ' << doc.get(DOC_ANNO) << ' '; + commandline << doc.get(DOC_PROVV) << ' ' << doc.get(DOC_NDOC) << ' ' << doc.get(DOC_NDOC); + commandline << " D"; + + const int ncopie = tipo.ncopie(); + if (ncopie > 0) + commandline << ' ' << ncopie; + + TExternal_app interattivo( commandline ); + + interattivo.run(); +} + +void TCreazione_ordini::aggiorna_stato_doc_orig(const TRectype& rdoc) +{ + const char provv = rdoc.get_char(RDOC_PROVV); + const int anno = rdoc.get_int(RDOC_ANNO); + const TString8 codnum = rdoc.get(RDOC_CODNUM); + const long ndoc = rdoc.get_long(RDOC_NDOC); + TDocumento doc_orig(provv, anno, codnum, ndoc); + if (doc_orig.is_evaso()) + { + const char* const defpar = "or"; + TConfig c(CONFIG_USER, defpar); + const char statoevaso = c.get_char("OR14_STATOEVASO"); + if (statoevaso != ' ') + { + doc_orig.stato(statoevaso); + doc_orig.rewrite(); + } + } +} + +void TCreazione_ordini::generate_carics() +{ + TGenera_ordini_mask& mask = *_mask; + TSheet_field& sf = mask.sfield(F_ORDERS); + + long minforn = 999999L; + long maxforn = 0L; + TAssoc_array orders; + + if (sf.items() > 0) + { + const TDate datadoc = mask.get_date(F_DATADOCCAR); + + const char* const defpar = "or"; + TConfig c(CONFIG_USER, defpar); + const TString& codnum = c.get("OR14_NUMCAR"); + const TString& tipodoc = c.get("OR14_TIPCAR"); + + const TTipo_documento tipo(tipodoc); + + //const bool ultimo_prezzo = mask.get(F_PREZZO) == "U"; + const TString& commessat = mask.get(F_CDCT); + const TString& faset = mask.get(F_FSCT); + + //TString8 codmag(mask.get(F_MAG)); + //codmag.right_just(3); + //codmag << mask.get(F_DEP); + + //TString8 codmagc(mask.get(F_MAGC)); + //codmagc.right_just(3); + //codmagc << mask.get(F_DEPC); + + TLocalisamfile righedoc(LF_RIGHEDOC); + + TProgind pi(sf.items(), TR("Generazione documenti di carico"), true, true); + FOR_EACH_SHEET_ROW(sf, n, row) + { + if (!pi.setstatus(n)) + break; + if (row->get_char(sf.cid2index(S_DAEVADERE) == 'X')) + { + const real qta = row->get(sf.cid2index(S_QTADAEVADERE)); + if (!qta.is_zero()) + { + const TString8 codforn(row->get(sf.cid2index(S_FORNITORE))); + const long cod = atol(codforn); + TString8 key; key.format("F|%ld", cod); + const TRectype& forn = cache().get(LF_CLIFO, key); + const TDate datacons(row->get(sf.cid2index(S_DATACONS))); + const TString4 codval(forn.get(CLI_CODVAL)); + const TRectype& forven = cache().get(LF_CFVEN, key); + const TString4 codiva(forven.get(CFV_ASSFIS)); + const TString commessa = row->get(sf.cid2index(S_CDC)); + const TString fase = row->get(sf.cid2index(S_FSC)); + + TDocumento* d = (TDocumento*)orders.objptr(codforn); + if (d == NULL) + { + d = new TDocumento('D', datadoc.year(), codnum, 0L); + d->put(DOC_TIPODOC, tipodoc); + d->put(DOC_TIPOCF, "F"); + d->put(DOC_CODCF, codforn); + d->put(DOC_DATADOC, datadoc); + d->put(DOC_DATACONS, datacons); + d->put(DOC_CODVAL, codval); + d->put(DOC_CODLIN, forn.get(CLI_CODLIN)); + d->put(DOC_CODPAG, forn.get(CLI_CODPAG)); + d->put(DOC_CODABIA, forn.get(CLI_CODABI)); + d->put(DOC_CODCABA, forn.get(CLI_CODCAB)); + d->put(DOC_IBAN, forn.get(CLI_IBAN)); + d->put(DOC_CODABIP, forven.get(CFV_CODABIPR)); + d->put(DOC_CODCABP, forven.get(CFV_CODCABPR)); + d->put(DOC_RAGGR, forven.get(CFV_RAGGDOC)); + d->put(DOC_RAGGREFF, forven.get(CFV_RAGGEFF)); + d->put(DOC_CODINDSP, forven.get(CFV_CODINDSP)); + d->put(DOC_CODAG, forven.get(CFV_CODAG)); + d->put(DOC_ZONA, forven.get(CFV_CODZONA)); + d->put(DOC_CODSPMEZZO, forven.get(CFV_CODSPMEZZO)); + d->put(DOC_CODPORTO, forven.get(CFV_CODPORTO)); + d->put(DOC_CODNOTESP1, forven.get(CFV_CODNOTESP1)); + d->put(DOC_CODNOTESP2, forven.get(CFV_CODNOTESP2)); + d->put(DOC_CODNOTE, forven.get(CFV_CODNOTE)); + d->put(DOC_CODVETT1, forven.get(CFV_CODVETT1)); + d->put(DOC_CODVETT2, forven.get(CFV_CODVETT2)); + d->put(DOC_CODVETT3, forven.get(CFV_CODVETT3)); + d->put(DOC_PERCSPINC, forven.get(CFV_PERCSPINC)); + d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI)); + d->put(DOC_CATVEN, forven.get(CFV_CATVEN)); + d->put(DOC_CODLIST, forven.get(CFV_CODLIST)); + d->put(DOC_CODCMS, commessat); + // le note non dovrebbero servire + //d->put(DOC_NOTE, mask.get(F_NOTE)); + + const TString& causmag = tipo.caus_mov(); + d->put(DOC_CAUSMAG, causmag); + + orders.add(codforn, d); + if (cod < minforn) + minforn = cod; + if (cod > maxforn) + maxforn = cod; + } + + TRiga_documento& rdoc = d->new_row("01"); + + + /* guy si e' molto arrabbiato nel leggere queste righe di pseudo codice (attenzione, morde!) + const TString codart(row->get(sf.cid2index(S_CODART))); + + //rdoc.put(RDOC_CODMAG, codmag); + //rdoc.put(RDOC_CODMAGC, codmagc); + rdoc.put(RDOC_CODART, codart); + rdoc.put(RDOC_CODARTMAG, codart); + rdoc.put(RDOC_CHECKED, "X"); + rdoc.put(RDOC_DESCR, row->get(sf.cid2index(S_DESCART))); + + //const TString descr_agg(row->get(sf.cid2index(S_DESCRAGG))); + //if (descr_agg.full()) + //{ + // rdoc.put(RDOC_DESCLUNGA, "X"); + // rdoc.put(RDOC_DESCEST, descr_agg); + //} + + rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(S_UM))); + rdoc.put(RDOC_QTA, qta); + rdoc.put(RDOC_DATACONS, datacons); + + const TRectype& articolo = cache().get(LF_ANAMAG, codart); + //TPrice prezzo; + //if (ultimo_prezzo) + // prezzo = articolo.get_real(ANAMAG_ULTCOS1); + //else + // prezzo = articolo.get_real(ANAMAG_COSTSTD); + //prezzo.change_value(codval); + //rdoc.put(RDOC_PREZZO, prezzo.get_num()); + if (codiva.full()) + rdoc.put(RDOC_CODIVA, codiva); + else + rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA)); + rdoc.put(RDOC_CODCMS, commessa); + rdoc.put(RDOC_FASCMS, fase); + + for (int i = 0; i < 10 ; i++) + if (_userfld.row(i).full()) + rdoc.put(_userfld.row(i), mask.get(F_USER1 + i)); + + rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(F_CODAGG1))); + rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(F_CODAGG2))); + */ + const TDate dataord = row->get(sf.cid2index(S_DATADOC)); + const long ndoc = row->get_long(sf.cid2index(S_NUMDOC)); + const int nriga = row->get_int(sf.cid2index(S_NUMRIGA)); + TRectype& rigord = righedoc.curr(); + rigord.put(RDOC_PROVV, 'D'); + rigord.put(RDOC_ANNO, dataord.year()); + rigord.put(RDOC_CODNUM, mask.get(F_CODNUM)); + rigord.put(RDOC_NDOC, ndoc); + rigord.put(RDOC_NRIGA, nriga); + int err = righedoc.read(_isequal, _lock); + if (err == NOERR) + { + d->copy_data(rdoc, rigord); + rdoc.put(rdoc.field_qta(), qta); + rigord.add(rdoc.field_qtaevasa(), qta); + if (rigord.get_real(rdoc.field_qtaevasa()) >= rigord.get_real(rdoc.field_qta())) + rigord.put(RDOC_RIGAEVASA, true); + rdoc.put(RDOC_DACODNUM, rigord.get(RDOC_CODNUM)); + rdoc.put(RDOC_DAANNO, rigord.get(RDOC_ANNO)); + rdoc.put(RDOC_DAPROVV, rigord.get(RDOC_PROVV)); + rdoc.put(RDOC_DANDOC, rigord.get(RDOC_NDOC)); + rdoc.put(RDOC_DAIDRIGA, rigord.get(RDOC_NRIGA)); + err = righedoc.rewrite(); + if (err == NOERR) + aggiorna_stato_doc_orig(rigord); + + } + if (err != NOERR) + error_box(FR("Impossibile aggiornare la riga %d del doc. %ld"), nriga, ndoc); + } + } + } + } + + if (orders.items() > 0) + { + TProgind pi(orders.items(), TR("Registrazione documenti di carico"), true, true); + TString cmdline; + int cnt = 0; + TString8 key; + long mindoc = 0, maxdoc = 0; + for (long cod = minforn; cod <= maxforn; cod++) + { + key.format("%ld", cod); + TDocumento* d = (TDocumento*)orders.objptr(key); + if (d != NULL) + { + if (!pi.addstatus(1)) + break; + if (d->write() == NOERR) + { + if (cmdline.blank()) + { + const TTipo_documento& tipo = d->tipo(); + TFilename rep; + tipo.main_print_profile(rep, 1); + + rep.ext("rep"); + + if (rep.custom_path()) // Esiste il nuovo report :-) + cmdline = "ve1 -2"; + else // Esiste il vecchio form :-( + cmdline = "ve1 -0"; + } + cnt++; + const long ndoc = d->get_long(DOC_NDOC); + if (mindoc <= 0 || ndoc < mindoc) + mindoc = ndoc; + if (ndoc > maxdoc) + maxdoc = ndoc; + } + } + } + if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt)) + { + const TString& codnum = mask.get(F_CODNUM); + const TDate datadoc(TODAY); + const int anno = datadoc.year(); + cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc; + TExternal_app prg(cmdline); + prg.run(true, true, false); + } + } +} + +void TCreazione_ordini::generate_orders() +{ + TGenera_ordini_mask& mask = *_mask; + TSheet_field& sf = mask.sfield(F_ARTICLES); + + long minforn = 999999L; + long maxforn = 0L; + TAssoc_array orders; + + if (sf.items() > 0) + { + const TDate datadoc = mask.get_date(F_DATADOC); + const TString& codnum = mask.get(F_CODNUM); + const TString& tipodoc = mask.get(F_TIPODOC); + const TTipo_documento tipo(tipodoc); + + const bool ultimo_prezzo = mask.get(F_PREZZO) == "U"; + const TString& commessat = mask.get(F_CDCT); + const TString& faset = mask.get(F_FSCT); + + TString8 codmag(mask.get(F_MAG)); + codmag.right_just(3); + codmag << mask.get(F_DEP); + + TString8 codmagc(mask.get(F_MAGC)); + codmagc.right_just(3); + codmagc << mask.get(F_DEPC); + + TProgind pi(sf.items(), TR("Generazione ordini"), true, true); + FOR_EACH_SHEET_ROW(sf, n, row) + { + if (!pi.setstatus(n)) + break; + + const real qta = row->get(sf.cid2index(F_QTA)); + if (!qta.is_zero()) + { + const TString8 codforn(row->get(sf.cid2index(F_FORNITORE))); + const long cod = atol(codforn); + TString8 key; key.format("F|%ld", cod); + const TRectype& forn = cache().get(LF_CLIFO, key); + const TDate datacons(row->get(sf.cid2index(F_DATACONS))); + const TString4 codval(forn.get(CLI_CODVAL)); + const TRectype& forven = cache().get(LF_CFVEN, key); + const TString4 codiva(forven.get(CFV_ASSFIS)); + const TString commessa = row->get(sf.cid2index(F_CDC)); + const TString fase = row->get(sf.cid2index(F_FSC)); + + TDocumento* d = (TDocumento*)orders.objptr(codforn); + if (d == NULL) + { + d = new TDocumento('D', datadoc.year(), codnum, 0L); + d->put(DOC_TIPODOC, tipodoc); + d->put(DOC_TIPOCF, "F"); + d->put(DOC_CODCF, codforn); + d->put(DOC_DATADOC, datadoc); + d->put(DOC_DATACONS, datacons); + d->put(DOC_CODVAL, codval); + d->put(DOC_CODLIN, forn.get(CLI_CODLIN)); + d->put(DOC_CODPAG, forn.get(CLI_CODPAG)); + d->put(DOC_CODABIA, forn.get(CLI_CODABI)); + d->put(DOC_CODCABA, forn.get(CLI_CODCAB)); + d->put(DOC_IBAN, forn.get(CLI_IBAN)); + d->put(DOC_CODABIP, forven.get(CFV_CODABIPR)); + d->put(DOC_CODCABP, forven.get(CFV_CODCABPR)); + d->put(DOC_RAGGR, forven.get(CFV_RAGGDOC)); + d->put(DOC_RAGGREFF, forven.get(CFV_RAGGEFF)); + d->put(DOC_CODINDSP, forven.get(CFV_CODINDSP)); + d->put(DOC_CODAG, forven.get(CFV_CODAG)); + d->put(DOC_ZONA, forven.get(CFV_CODZONA)); + d->put(DOC_CODSPMEZZO, forven.get(CFV_CODSPMEZZO)); + d->put(DOC_CODPORTO, forven.get(CFV_CODPORTO)); + d->put(DOC_CODNOTESP1, forven.get(CFV_CODNOTESP1)); + d->put(DOC_CODNOTESP2, forven.get(CFV_CODNOTESP2)); + d->put(DOC_CODNOTE, forven.get(CFV_CODNOTE)); + d->put(DOC_CODVETT1, forven.get(CFV_CODVETT1)); + d->put(DOC_CODVETT2, forven.get(CFV_CODVETT2)); + d->put(DOC_CODVETT3, forven.get(CFV_CODVETT3)); + d->put(DOC_PERCSPINC, forven.get(CFV_PERCSPINC)); + d->put(DOC_ADDBOLLI, forven.get(CFV_ADDBOLLI)); + d->put(DOC_CATVEN, forven.get(CFV_CATVEN)); + d->put(DOC_CODLIST, forven.get(CFV_CODLIST)); + d->put(DOC_CODCMS, commessat); + d->put(DOC_NOTE, mask.get(F_NOTE)); + + const TString& causmag = tipo.caus_mov(); + d->put(DOC_CAUSMAG, causmag); + + orders.add(codforn, d); + if (cod < minforn) + minforn = cod; + if (cod > maxforn) + maxforn = cod; + } + + TRiga_documento& rdoc = d->new_row("01"); + const TString codart(row->get(sf.cid2index(F_CODART))); + + rdoc.put(RDOC_CODMAG, codmag); + rdoc.put(RDOC_CODMAGC, codmagc); + rdoc.put(RDOC_CODART, codart); + rdoc.put(RDOC_CODARTMAG, codart); + rdoc.put(RDOC_CHECKED, "X"); + rdoc.put(RDOC_DESCR, row->get(sf.cid2index(F_DESCR))); + + const TString descr_agg(row->get(sf.cid2index(F_DESCRAGG))); + if (descr_agg.full()) + { + rdoc.put(RDOC_DESCLUNGA, "X"); + rdoc.put(RDOC_DESCEST, descr_agg); + } + + rdoc.put(RDOC_UMQTA, row->get(sf.cid2index(F_UM))); + rdoc.put(RDOC_QTA, qta); + rdoc.put(RDOC_DATACONS, datacons); + + const TRectype& articolo = cache().get(LF_ANAMAG, codart); + TPrice prezzo; + if (ultimo_prezzo) + prezzo = articolo.get_real(ANAMAG_ULTCOS1); + else + prezzo = articolo.get_real(ANAMAG_COSTSTD); + prezzo.change_value(codval); + rdoc.put(RDOC_PREZZO, prezzo.get_num()); + if (codiva.full()) + rdoc.put(RDOC_CODIVA, codiva); + else + rdoc.put(RDOC_CODIVA, articolo.get(ANAMAG_CODIVA)); + rdoc.put(RDOC_CODCMS, commessa); + rdoc.put(RDOC_FASCMS, fase); + + for (int i = 0; i < 10 ; i++) + if (_userfld.row(i).full()) + rdoc.put(_userfld.row(i), mask.get(F_USER1 + i)); + + rdoc.put(RDOC_CODAGG1, row->get(sf.cid2index(F_CODAGG1))); + rdoc.put(RDOC_CODAGG2, row->get(sf.cid2index(F_CODAGG2))); + } + } + } + + if (orders.items() > 0) + { + TProgind pi(orders.items(), TR("Registrazione ordini"), true, true); + TString cmdline; + int cnt = 0; + TString8 key; + long mindoc = 0, maxdoc = 0; + for (long cod = minforn; cod <= maxforn; cod++) + { + key.format("%ld", cod); + TDocumento* d = (TDocumento*)orders.objptr(key); + if (d != NULL) + { + if (!pi.addstatus(1)) + break; + if (d->write() == NOERR) + { + if (cmdline.blank()) + { + const TTipo_documento& tipo = d->tipo(); + TFilename rep; + tipo.main_print_profile(rep, 0); + rep.ext("rep"); + + if (rep.custom_path()) // Esiste il nuovo report :-) + cmdline = "ve1 -2"; + else // Esiste il vecchio form :-( + cmdline = "ve1 -0"; + } + cnt++; + const long ndoc = d->get_long(DOC_NDOC); + if (mindoc <= 0 || ndoc < mindoc) + mindoc = ndoc; + if (ndoc > maxdoc) + maxdoc = ndoc; + } + } + } + if (yesno_box(TR("Sono stati generati %d documenti:\nSi desidera stamparli ora?"), cnt)) + { + const TString& codnum = mask.get(F_CODNUM); + const TDate datadoc(TODAY); + const int anno = datadoc.year(); + cmdline << " " << codnum << ' ' << anno << " D " << mindoc << ' ' << maxdoc; + TExternal_app prg(cmdline); + prg.run(true, true, false); + } + } +} + +void TCreazione_ordini::main_loop() +{ + + KEY tasto = K_ENTER; + while (tasto == K_ENTER) + tasto = _mask->run(); +} + +int ps0430300(int argc, char* argv[]) +{ + TCreazione_ordini a; + a.run(argc,argv,TR("Generazione Ordini a fornitore")); + return 0; +} + diff --git a/ps/ps0430300a.uml b/ps/ps0430300a.uml index 0d1f3ae73..f2579b88d 100755 --- a/ps/ps0430300a.uml +++ b/ps/ps0430300a.uml @@ -1,1000 +1,874 @@ -#include "ps0430300a.h" - -TOOLBAR "" 0 -2 0 2 - -BUTTON 1 15 2 -BEGIN - PROMPT -17 -11 "~Elabora" - PICTURE BMP_ELABORA -END - -BUTTON 24 15 2 -BEGIN - PROMPT -27 -11 "Stampa ~Consumi" -END - -BUTTON DLG_PRINTDOC 15 2 -BEGIN - PROMPT -37 -11 "~Stampa Doc." -END - -BUTTON 17 15 2 -BEGIN - PROMPT -47 -11 "E~limina Doc." -END - -BUTTON DLG_PRINTINV 15 2 -BEGIN - PROMPT -57 -11 "Stampa ~Invent." - MESSAGE RUN,MG4,-1 -END - -BUTTON 27 15 2 -BEGIN - PROMPT -67 -11 "~Gen. carichi" - MESSAGE 13 -END - -BUTTON DLG_QUIT 15 2 -BEGIN - PROMPT -77 -11 "" -END - -ENDPAGE - -PAGE "Gestione Documenti" 0 0 0 -3 - -STRING F_CAZ_CODART 20 -BEGIN - PROMPT 30 1 "Codice articolo " - USE LF_ANAMAG - INPUT CODART F_CAZ_CODART - DISPLAY "Codice@20" CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_CAZ_CODART CODART - CHECKTYPE SEARCH -END - -DATE F_DATADOC -BEGIN - PROMPT 1 1 "Data documento " - FLAGS "A" -END - -SPREADSHEET F_ARTICLES -BEGIN -PROMPT 1 3 "Articoli" - ITEM "Codice\nArticolo@15F" - ITEM "Quantità@10F" - ITEM "Data\nConsegna@10F" - ITEM "UM@F" - ITEM "Descrizione@35" - ITEM "Codice\nForn.@6" - ITEM "Ragione sociale@30" - ITEM "Commessa@20" - ITEM "Fase@10" - ITEM "Id Cespite@20" - ITEM "Codice\nAggiuntivo 2@20" - ITEM "Lead\ntime@5" - ITEM "Lotto minimo\ndi riordino@10" - ITEM "Descrizione aggiuntiva@50" - ITEM "Giacenza@15" - ITEM "Pezzi per\nconfezione@15" - ITEM "Disponibilità@15" - ITEM "Campo Aggiuntivo 1@15" - ITEM "Campo Aggiuntivo 2@15" - ITEM "Campo Aggiuntivo 3@15" - ITEM "Campo Aggiuntivo 4@15" - ITEM "Campo Aggiuntivo 5@15" - ITEM "Campo Aggiuntivo 6@15" - ITEM "Campo Aggiuntivo 7@15" - ITEM "Campo Aggiuntivo 8@15" - ITEM "Campo Aggiuntivo 9@15" - ITEM "Campo Aggiuntivo 10@15" -END - -ENDPAGE - -PAGE "Stato Documenti" 0 0 0 -3 - -STRING F_DASTATO 1 -BEGIN - PROMPT 1 1 "Dallo stato " - USE %STD - INPUT CODTAB F_DASTATO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_DASTATO CODTAB - CHECKTYPE NORMAL - FIELD OR14_DASTATO -END - -STRING F_ASTATO 1 -BEGIN - PROMPT 21 1 "Allo stato " - COPY USE F_DASTATO - INPUT CODTAB F_ASTATO - COPY DISPLAY F_DASTATO - OUTPUT F_ASTATO CODTAB - CHECKTYPE NORMAL - FIELD OR14_ASTATO -END - -NUMBER F_ANNO 4 -BEGIN - PROMPT 51 1 "Anno " - CHECKTYPE REQUIRED - FIELD OR14_ANNO -END - -DATE F_DATADOCCAR -BEGIN - PROMPT 65 1 "Data doc. " - FLAGS "A" -END - -SPREADSHEET F_DOCUMENTS -BEGIN -PROMPT 1 2 "Ordini" - ITEM "Data\nDoc.@10" - ITEM "Numero\nDoc.@7" - ITEM "Riga\nDoc.@4" - ITEM "Stato\nDoc.@4" - ITEM "Codice\nArticolo@20" - ITEM "Descrizione@50" - ITEM "UM" - ITEM "Quantità@15" - ITEM "Qta evasa@15" - ITEM "Residuo@15" - ITEM "Da\nEvadere" - ITEM "Qta da evadere@15" - ITEM "Data di\nconsegna@10" - ITEM "Fornitore" - ITEM "Ragione sociale@50" - ITEM "Commessa@20" - ITEM "Fase@10" - ITEM "Descrizione aggiuntiva@50" - ITEM "Pezzi\nper conf." - ITEM "Taglie@10" -FLAGS "D" -END - -ENDPAGE - -PAGE "Note" 0 0 0 -3 - -MEMO 168 70 -1 -BEGIN - PROMPT 1 1 "Note " - FLAGS "" -END - -ENDPAGE - -PAGE "Filtri" 0 0 0 -3 - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 1 "@bGruppo merceologico" -END - -STRING F_GRMERC 3 -BEGIN - PROMPT 2 2 "Gruppo merc. " - USE GMC KEY 1 SELECT CODTAB[4,5]=="" - INPUT CODTAB F_GRMERC - DISPLAY "Codice" CODTAB[1,3] - DISPLAY "Descrizione@50" S0 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_DGRMERC S0 - FLAGS "U" - CHECKTYPE NORMAL - FIELD OR14_GRM -END - -STRING F_DGRMERC 50 -BEGIN - PROMPT 25 2 "" - USE GMC KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_DGRMERC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - COPY OUTPUT F_GRMERC - CHECKTYPE SEARCH -END - -STRING F_SGRMERC 3 -BEGIN - PROMPT 2 3 "Sottogr. merc. " - USE GMC - INPUT CODTAB[1,3] F_GRMERC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_GRMERC CODTAB[1,3] - OUTPUT F_SGRMERC CODTAB[4,5] - OUTPUT F_DSGRMERC S0 - FLAGS "U" - CHECKTYPE NORMAL - FIELD OR14_SGR -END - -STRING F_DSGRMERC 50 -BEGIN - PROMPT 25 3 "" - USE GMC KEY 2 SELECT CODTAB[4,5] != "" - INPUT S0 F_DSGRMERC - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_SGRMERC - CHECKTYPE NORMAL -END - -BOOLEAN F_SOTTOSCORTA -BEGIN - PROMPT 2 4 "Sottoscorta" - FIELD OR14_SSC -END - -GROUPBOX DLG_NULL 78 5 -BEGIN - PROMPT 1 6 "@bArticolo" -END - -STRING F_SCODART 20 -BEGIN - PROMPT 2 7 "Codice " - USE LF_ANAMAG - INPUT CODART F_SCODART - DISPLAY "Codice@20" CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_SCODART CODART - OUTPUT F_SDESART DESCR - OUTPUT F_SDESAGG DESCRAGG - CHECKTYPE NORMAL - FLAGS "U" -END - -STRING F_SDESART 50 -BEGIN - PROMPT 2 8 "Descrizione " - USE LF_ANAMAG KEY 2 - INPUT DESCR F_SDESART - DISPLAY "Descrizione@50" DESCR - DISPLAY "Codice@20" CODART - COPY OUTPUT F_SCODART -END - -STRING F_SDESAGG 50 -BEGIN - PROMPT 2 9 "Descr. agg. " - FLAGS "D" -END - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 11 "@bFornitore" -END - -STRING F_SCODFOR 7 -BEGIN - PROMPT 2 12 "Codice " - USE LF_CLIFO - INPUT TIPOCF "F" - INPUT CODCF F_SCODFOR - DISPLAY "Codice " CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_SCODFOR CODCF - OUTPUT F_SRAGSOC RAGSOC - CHECKTYPE NORMAL -END - -STRING F_SRAGSOC 50 -BEGIN - PROMPT 2 13 "Rag. soc. " - USE LF_CLIFO KEY 2 - INPUT TIPOCF "F" - INPUT RAGSOC F_SRAGSOC - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Codice " CODCF - COPY OUTPUT F_SCODFOR - FLAGS "" - CHECKTYPE NORMAL -END - -ENDPAGE - -PAGE "Parametri" 0 0 0 -3 - -GROUPBOX DLG_NULL 78 4 -BEGIN - PROMPT 1 1 "@bTipologia documento ordine" -END - -STRING F_CODNUM 4 -BEGIN - PROMPT 2 2 "Numerazione " - USE %NUM SELECT (CODTAB=="BACQ")||(CODTAB=="MAG")||(CODTAB=="ORF")||(CODTAB=="ORFT")||(CODTAB=="MAGT") - INPUT CODTAB F_CODNUM - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@60" S0 - OUTPUT F_CODNUM CODTAB - OUTPUT F_DESNUM S0 - OUTPUT F_TIPODOC S2[1,4] - OUTPUT 100 S2[1,4] - OUTPUT 101 S2[5,8] - OUTPUT 102 S2[9,12] - OUTPUT 103 S2[13,16] - OUTPUT 104 S2[17,20] - OUTPUT 105 S2[21,24] - FLAGS "UG" - CHECKTYPE REQUIRED - FIELD OR14_NUM - MESSAGE RESET,F_MAGC|RESET,F_DESMAGC -END - -STRING F_DESNUM 50 -BEGIN - PROMPT 21 2 "" - USE %NUM KEY 2 SELECT (CODTAB=="BACQ")||(CODTAB=="MAG")||(CODTAB=="ORF")||(CODTAB=="ORFT")||(CODTAB=="MAGT") - INPUT S0 F_DESNUM - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_CODNUM - CHECKTYPE REQUIRED -END - -STRING 100 4 -BEGIN -PROMPT 2 12 "1 " -FLAGS "H" -END - -STRING 101 4 -BEGIN -PROMPT 9 12 "2 " -FLAGS "H" -END - -STRING 102 4 -BEGIN -PROMPT 16 12 "3 " -FLAGS "H" -END - -STRING 103 4 -BEGIN -PROMPT 23 12 "4 " -FLAGS "H" -END - -STRING 104 4 -BEGIN -PROMPT 30 12 "5 " -FLAGS "H" -END - -STRING 105 4 -BEGIN -PROMPT 37 12 "6 " -FLAGS "H" -END - -STRING F_TIPODOC 4 -BEGIN - PROMPT 2 3 "Tipo " - USE %TIP SELECT (CODTAB==#100)||(CODTAB==#101)||(CODTAB==#102)||(CODTAB==#103)||(CODTAB==#104)||(CODTAB==#105) - INPUT CODTAB F_TIPODOC - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@60" S0 - OUTPUT F_TIPODOC CODTAB - OUTPUT F_DESTIPODOC S0 - CHECKTYPE REQUIRED - FLAGS "UG" - FIELD OR14_TIP -END - -STRING 160 50 -BEGIN - PROMPT 21 3 "" - USE %TIP KEY 2 SELECT (CODTAB==#100)||(CODTAB==#101)||(CODTAB==#102)||(CODTAB==#103)||(CODTAB==#104)||(CODTAB==#105) - INPUT S0 F_DESTIPODOC - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_TIPODOC - CHECKTYPE REQUIRED -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 5 "@bCentro di costo / Commessa" -END - -STRING F_CDCT 20 -BEGIN - PROMPT 2 6 "CDC/Commessa " - USE CMS - INPUT CODTAB F_CDCT - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CDCT CODTAB - FIELD OR14_CDCT - FLAGS "UZ" - CHECKTYPE NORMAL -END - -STRING F_FSCT 10 -BEGIN - PROMPT 50 6 "Fase " - FLAGS "DUZ" - USE FSC - INPUT CODTAB F_FSCT - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_FSCT CODTAB - FIELD OR14_FSCT - CHECKTYPE NORMAL -END - -GROUPBOX DLG_NULL 78 6 -BEGIN - PROMPT 1 8 "@bMagazzino / Deposito" -END - -STRING F_MAG 3 -BEGIN - PROMPT 2 9 "Magazzino " - USE MAG SELECT CODTAB[4,5]=="" - INPUT CODTAB F_MAG - DISPLAY "Codice " CODTAB[1,3] - DISPLAY "Denominazione mag.@50 " S0 - OUTPUT F_MAG CODTAB[1,3] - OUTPUT F_DESMAG S0 - CHECKTYPE NORMAL - FIELD OR14_MAG - FLAGS "UG" -END - -STRING F_DESMAG 50 -BEGIN - PROMPT 21 9 "" - USE MAG KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_DESMAG - DISPLAY "Denominazione magazzino@50" S0 - DISPLAY "Cod. magazzino" CODTAB[1,3] - DISPLAY "Cod. deposito" CODTAB[4,5] - COPY OUTPUT F_MAG - CHECKTYPE SEARCH - FLAGS "UG" -END - -STRING F_DEP 2 -BEGIN - PROMPT 2 10 "Deposito " - USE MAG SELECT (CODTAB[1,3]==#F_MAG)&&(CODTAB[4,5]!="") - INPUT CODTAB[1,3] F_MAG - INPUT CODTAB[4,5] F_DEP - DISPLAY "Codice" CODTAB - DISPLAY "Denominazione dep.@50 " S0 - OUTPUT F_MAG CODTAB[1,3] - OUTPUT F_DEP CODTAB[4,5] - FLAGS "HU" - CHECKTYPE SEARCH - FIELD OR14_DEP -END - -STRING F_DESDEP 50 -BEGIN - PROMPT 21 10 "" - USE MAG KEY 2 SELECT (CODTAB[1,3]==#F_MAG)&&(CODTAB[4,5]!="") - INPUT S0 F_DESDEP - DISPLAY "Denominazione deposito@50" S0 - DISPLAY "Codice" CODTAB - COPY OUTPUT F_DEP - FLAGS "H" - CHECKTYPE SEARCH -END - -STRING F_MAGC 3 -BEGIN - PROMPT 2 11 "Mag.coll. " - USE MAG SELECT CODTAB[4,5]=="" - INPUT CODTAB F_MAGC - DISPLAY "Codice" CODTAB[1,3] - DISPLAY "Denominazione mag.@50 " S0 - OUTPUT F_MAGC CODTAB[1,3] - OUTPUT F_DESMAGC S0 - FLAGS "UG" - CHECKTYPE NORMAL - FIELD OR14_MAGC -END - -STRING F_DESMAGC 50 -BEGIN - PROMPT 21 11 "" - USE MAG KEY 2 SELECT CODTAB[4,5]=="" - INPUT S0 F_DESMAGC - DISPLAY "Denominazione magazzino@50" S0 - DISPLAY "Cod. magazzino" CODTAB[1,3] - DISPLAY "Cod. deposito" CODTAB[4,5] - OUTPUT F_MAGC CODTAB[1,3] - OUTPUT F_DESMAGC S0 - CHECKTYPE SEARCH -END - -STRING F_DEPC 2 -BEGIN - PROMPT 2 12 "Deposito " - USE MAG SELECT (CODTAB[1,3]==#F_MAGC)&&(CODTAB[4,5]!="") - INPUT CODTAB[1,3] F_MAGC - INPUT CODTAB[4,5] F_DEPC - DISPLAY "Codice " CODTAB - DISPLAY "Denominazione deposito@50 " S0 - OUTPUT F_MAGC CODTAB[1,3] - OUTPUT F_DEPC CODTAB[4,5] - FLAGS "HU" - CHECKTYPE SEARCH - FIELD OR14_DEPC -END - -STRING F_DESDEPC 50 -BEGIN - PROMPT 21 12 "" - USE MAG KEY 2 SELECT (CODTAB[1,3]==#F_MAGC)&&(CODTAB[4,5]!="") - INPUT S0 F_DESDEPC - DISPLAY "Denominazione deposito@50" S0 - DISPLAY "Codice" CODTAB - OUTPUT F_DEPC CODTAB[4,5] - FLAGS "HU" - CHECKTYPE SEARCH -END - -GROUPBOX -1 78 3 -BEGIN - PROMPT 1 14 "@bValorizzazione" -END - -LIST F_PREZZO 15 -BEGIN - PROMPT 2 15 "Prezzo " - ITEM "U|Ultimo Costo" - ITEM "S|Costo Standard" - FIELD OR14_TPR -END - -ENDPAGE - -ENDMASK - -//---Maschere di riga degli sheet---// - -//---Riga sheet degli articoli SA---// -TOOLBAR "" 0 -2 0 3 - -BUTTON 1 10 2 -BEGIN - PROMPT -12 -11 "" -END - -BUTTON 2 10 2 -BEGIN - PROMPT -22 -11 "" -END - -ENDPAGE - -PAGE "Righe ordine" -1 -1 80 20 - -STRING SA_CODART 20 -BEGIN - PROMPT 1 2 "Articolo " - FLAGS "D" -END - -STRING SA_DESCR 50 38 -BEGIN - PROMPT 32 2 "" - FLAGS "D" -END - -STRING SA_UM 2 -BEGIN - PROMPT 1 3 "U.M. " - USE LF_UMART KEY 2 SELECT CODART==#SA_CODART - JOIN %UMS INTO CODTAB==UM - INPUT CODART SA_CODART SELECT - INPUT UM SA_UM - DISPLAY "U.M." UM - DISPLAY "Descrizione@50" %UMS->S0 - DISPLAY "F.C.@10" FC - OUTPUT SA_UM UM - CHECKTYPE REQUIRED - FLAGS "UG" -END - -NUMBER SA_QTA 13 5 -BEGIN - PROMPT 16 3 "Quantità " -END - -DATA SA_DATACONS -BEGIN - PROMPT 43 3 "Data di consegna " - WARNING "Indicare la data di consegna" - VALIDATE 12 1 104 -END - -NUMBER SA_FORNITORE 6 -BEGIN - PROMPT 1 5 "Fornitore " - FIELD CODCF - USE LF_CLIFO - INPUT TIPOCF "F" - INPUT CODCF SA_FORNITORE - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT SA_FORNITORE CODCF - OUTPUT SA_RAGSOC RAGSOC - CHECKTYPE NORMAL - FLAGS "D" -END - -STRING SA_RAGSOC 50 -BEGIN - FLAGS "D" - PROMPT 20 5 "" - USE LF_CLIFO KEY 2 - INPUT TIPOCF "F" - INPUT RAGSOC SA_RAGSOC - DISPLAY "Ragione sociale@50" RAGSOC - DISPLAY "Codice" CODCF - COPY OUTPUT SA_FORNITORE - CHECKTYPE SEARCH -END - -//versione 3.2 -STRING SA_CDC 20 -BEGIN - PROMPT 1 8 "Commessa " - USE CMS - INPUT CODTAB SA_CDC - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT SA_CDC CODTAB - CHECKTYPE NORMAL - FLAGS "DUZ" -END - -/* Versione 10.0 -STRING SA_CDC 20 -BEGIN - PROMPT 1 8 "Commessa " - USE LF_COMMESSE - INPUT CODCMS SA_CDC - DISPLAY "Codice@20" CODCMS - DISPLAY "Descrizione@50" DESCRIZ - OUTPUT SA_CDC CODCMS - CHECKTYPE NORMAL - FLAGS "D" -END*/ - -//versione 3.2 -STRING SA_FSC 10 -BEGIN - PROMPT 45 8 "Fase " - USE FSC - INPUT CODTAB SA_FSC - DISPLAY "Codice@20" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT SA_FSC CODTAB - CHECKTYPE NORMAL - FLAGS "DUZ" -END - -/* Versione 10.0 (deve essere legabile alla commessa!!) -STRING SA_FSC 10 -BEGIN - PROMPT 45 8 "Fase " - USE LF_FASI - INPUT CODFASE SA_FSC SELECT CODCMSFAS==#SA_CDC - DISPLAY "Codice@20" CODFASE - DISPLAY "Descrizione@50" descriz - OUTPUT SA_FSC CODfase - CHECKTYPE NORMAL - FLAGS "DUZ" -END*/ - -STRING SA_CODAGG1 20 -BEGIN - PROMPT 1 7 "Cespite " - FLAGS "D" -END - -STRING SA_CODAGG2 20 -BEGIN - PROMPT 37 7 "Codice agg.2 " - FLAGS "D" -END - -NUMBER SA_LEADTIME 5 -BEGIN - PROMPT 1 15 "Lead time " - FLAGS "D" -END - -NUMBER SA_LOTTOMIN 10 3 -BEGIN - PROMPT 19 15 "Lotto " - FLAGS "D" -END - -MEMO SA_DESCRAGG 50 4 -BEGIN - PROMPT 1 10 "Descr.aggiuntiva" - FLAGS "D" -END - -NUMBER SA_GIACENZA 15 5 -BEGIN - PROMPT 1 17 "Giacenza" - FLAGS "D" -END - -NUMBER SA_PPCONF 15 -BEGIN - PROMPT 38 15 "Pezzi per conf. " - FLAGS "D" -END - -NUMBER SA_DISPON 15 5 -BEGIN - PROMPT 39 17 "Disponibilita' " - FLAGS "D" -END - -ENDPAGE - -PAGE "Campi Utente" -1 -1 80 20 - -STRING SA_USER1 20 -BEGIN -PROMPT 2 2 "Campo utente 1 " -FLAGS "D" -END - -STRING SA_USER2 20 -BEGIN -PROMPT 2 4 "Campo utente 2 " -FLAGS "D" -END - -STRING SA_USER3 20 -BEGIN -PROMPT 2 6 "Campo utente 3 " -FLAGS "D" -END - -STRING SA_USER4 20 -BEGIN -PROMPT 2 8 "Campo utente 4 " -FLAGS "D" -END - -STRING SA_USER5 20 -BEGIN -PROMPT 2 10 "Campo utente 5 " -FLAGS "D" -END - -STRING SA_USER6 20 -BEGIN -PROMPT 2 12 "Campo utente 6 " -FLAGS "D" -END - -STRING SA_USER7 20 -BEGIN -PROMPT 2 14 "Campo utente 7 " -FLAGS "D" -END - -STRING SA_USER8 20 -BEGIN -PROMPT 2 16 "Campo utente 8 " -FLAGS "D" -END - -STRING SA_USER9 20 -BEGIN -PROMPT 2 18 "Campo utente 9 " -FLAGS "D" -END - -STRING SA_USER10 20 -BEGIN -PROMPT 2 20 "Campo utente 10 " -FLAGS "D" -END - -ENDPAGE -ENDMASK - -//---Riga sheet degi documenti SD---// - -TOOLBAR "" 0 -2 0 3 - -BUTTON 2 10 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON 1 10 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -PAGE "Documenti" -1 -1 80 20 - -GROUPBOX DLG_NULL 80 3 -BEGIN - PROMPT 1 0 "@bEstremi del documento" -END - -DATE 101 -BEGIN - PROMPT 2 1 "Data " - FIELD 33.DATADOC - FLAGS "D" -END - -NUMBER 102 6 -BEGIN - PROMPT 25 1 "Numero " - FIELD NDOC - FLAGS "D" -END - -NUMBER 103 4 -BEGIN -PROMPT 43 1 "Riga " -FIELD NRIGA -FLAGS "D" -END - -STRING 104 1 -BEGIN -PROMPT 57 1 "Stato " -FIELD 33.STATO -FLAGS "D" -END - -GR -1 80 6 -BEGIN -PROMPT 1 3 "@bArticolo" -END - -STRING 105 20 -BEGIN -PROMPT 2 4 "Codice " -FIELD CODART -FLAGS "D" -END - -STRING 106 50 -BEGIN -PROMPT 2 5 "Descrizione " -FIELD 47.DESCR -FLAGS "D" -END - -STRING 107 2 -BEGIN -PROMPT 2 6 "Quantità " -FLAGS "UD" -FIELD UMQTA -END - -NUMBER 108 13 5 -BEGIN -PROMPT 18 6 "" -FIELD QTA -FLAGS "D" -END - -NUMBER 109 13 5 -BEGIN -PROMPT 34 6 "Evasa " -FIELD QTAEVASA - CHECKTYPE NORMAL -FLAGS "D" -END - -NUMBER 110 13 5 -BEGIN -PROMPT 56 6 "Residuo " -VA 14 1 #108-#109 -DR 108 109 - CHECKTYPE NORMAL -FLAGS "DG" -END - -BO 111 -BEGIN -PROMPT 2 7 "Da evadere" -MESSAGE 0 CLEAR, 112 -MESSAGE 1 ENABLE,112 -END - -NUMBER 112 13 5 -BEGIN -PROMPT 16 7 "Qta da evadere" -END - -DATA 113 -BEGIN -PROMPT 47 7 "Data di consegna " -FIELD DATACONS -END - -GROUPBOX DLG_NULL 80 3 -BEGIN -PROMPT 1 8 "@bFornitore" -END - -NUMBER SD_FORNITORE 6 -BEGIN - PROMPT 2 10 "" - FIELD 33.CODCF - FLAGS "D" -END - -STRING 115 50 -BEGIN -PROMPT 14 10 "" -FIELD 20.RAGSOC -FLAGS "D" -END - -GR -1 80 4 -BEGIN -PROMPT 1 11 "@bCentro di costo/Commessa" -END - -STRING 116 20 -BEGIN -PROMPT 2 13 "Codice " -FLAGS "UZD" -FIELD CODCMS -END - -STRING 117 10 -BEGIN -PROMPT 2 14 "Fase " -FLAGS "UZD" -FIELD FASCMS -END - -STRING 118 50 -BEGIN -PROMPT 2 16 "Descr. agg. " -FIELD 47.DESCRAGG[1,50] -FLAGS "D" -END - -NUMBER 119 15 -BEGIN -PROMPT 2 17 "P.per conf. " -FIELD 47.PPCONF -FLAGS "D" -END - -STRING 120 20 -BEGIN -PROMPT 42 17 "Taglie " -FIELD 47.USER2 -FLAGS "D" -END - -ENDPAGE -ENDMASK +#include "ps0430300a.h" + +TOOLBAR "" 0 -2 0 2 +BU 1 15 2 +BE +PR -17 -11 "~Elabora" +PI 120 +EN +BU 24 15 2 +BE +PR -27 -11 "Stampa ~Consumi" +EN +BU 178 15 2 +BE +PR -37 -11 "~Stampa Doc." +EN +BU 17 15 2 +BE +PR -47 -11 "E~limina Doc." +EN +BU 179 15 2 +BE +PR -57 -11 "Stampa ~Inv." +ME RU,MG4,-1 +EN +BU 27 15 2 +BE +PR -67 -11 "~Gen. carichi" +ME 13 +EN +BU 9 15 2 +BE +PR -77 -11 "" +EN +ENDPAGE + +PAGE "Gestione Documenti" 0 0 0 -3 + +STRING F_CAZ_CODART 20 +BEGIN + PROMPT 30 1 "Codice articolo " + USE LF_ANAMAG + INPUT CODART F_CAZ_CODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_CAZ_CODART CODART + CHECKTYPE SEARCH +END + +DATE F_DATADOC +BEGIN + PROMPT 1 1 "Data documento " + FLAGS "A" +END + +SPREADSHEET F_ARTICLES +BEGIN +PROMPT 1 3 "Articoli" +IT "Codice\nArticolo@15" +IT "Descrizione@35" +IT "UM" +IT "Quantità@10" +IT "Data\nConsegna@10" +IT "Codice\nForn.@6" +IT "Ragione sociale@30" +IT "Commessa@20" +IT "Fase@10" +IT "Id Cespite@20" +IT "Codice\nAggiuntivo 2@20" +IT "Lead\ntime@5" +IT "Lotto minimo\ndi riordino@10" +IT "Descrizione aggiuntiva@50" +IT "Giacenza@15" +IT "Pezzi per\nconfezione@15" +IT "Disponibilità@15" +IT "Campo Aggiuntivo 1@15" +IT "Campo Aggiuntivo 2@15" +IT "Campo Aggiuntivo 3@15" +IT "Campo Aggiuntivo 4@15" +IT "Campo Aggiuntivo 5@15" +IT "Campo Aggiuntivo 6@15" +IT "Campo Aggiuntivo 7@15" +IT "Campo Aggiuntivo 8@15" +IT "Campo Aggiuntivo 9@15" +IT "Campo Aggiuntivo 10@15" +END + +ENDPAGE + +PAGE "Stato Documenti" 0 0 0 -3 + +ST 201 1 +BE +PR 1 1 "Dallo stato " +US %STD +IN CODTAB 201 +DI "Codice" CODTAB +DI "Descrizione@50" S0 +OU 201 CODTAB +CH NORMAL +FI OR14_DASTATO +EN +ST 202 1 +BE +PR 21 1 "Allo stato " +CO US 201 +IN CODTAB 202 +CO DI 201 +OU 202 CODTAB +CH NORMAL +FI OR14_ASTATO +EN +NU 203 4 +BE +PR 51 1 "Anno " +CH REQUIRED +FI OR14_ANNO +EN +DA 204 +BE +PR 65 1 "Data doc. " +FL "A" +EN +SPREADSHEET 210 +BE +PR 1 2 "Ordini" +IT "Data\nDoc.@10" +IT "Numero\nDoc.@7" +IT "Riga\nDoc.@4" +IT "Stato\nDoc.@4" +IT "Codice\nArticolo@20" +IT "Descrizione@50" +IT "UM" +IT "Quantità@15" +IT "Qta evasa@15" +IT "Residuo@15" +IT "Da\nEvadere" +IT "Qta da evadere@15" +IT "Data di\nconsegna@10" +IT "Fornitore" +IT "Ragione sociale@50" +IT "Commessa@20" +IT "Fase@10" +IT "Descrizione aggiuntiva@50" +IT "Pezzi\nper conf." +IT "Taglie@10" +FL "D" +EN + +ENDPAGE + +PAGE "Note" 0 0 0 -3 + +ME 168 70 -1 +BE +PR 1 1 "Note " +FLAGS "" +EN + +ENDPAGE + +PAGE "Filtri" 0 0 0 -3 + +GR -1 78 5 +BE +PR 1 1 "@bGruppo merceologico" +EN +ST 149 2 +BE +PR 2 2 "Gruppo merceologico " +FLAG "U" +US GMC KE 1 SE CODTAB[3,5]=="" +IN CODTAB 149 +DI "Codice" CODTAB[1,2] +DI "Descrizione@50" S0 +OU 151 CODTAB[1,3] +OU 149 CODTAB[1,2] +OU 152 S0 +ME 0 CO,151 +CH NO +EN +ST 150 3 +BE +PR 2 3 "Sottogruppo merceologico " +FLAG "U" +US GMC +IN CODTAB[1,2] 149 +IN CODTAB[3,5] 150 +DI "Codice" CODTAB +DI "Descrizione@50" S0 +OU 151 CODTAB[1,3] +OU 153 CODTAB[4,5] +OU 150 CODTAB[3,5] +OU 154 S0 +CH NO +ME 0 CO,153 +EN +ST 151 3 +BE +PR 2 2 "Gruppo merceologico " +FLAG "UH" +CH SE +FI OR14_GRM +EN +ST 152 50 35 +BE +PR 35 2 "" +US GMC KE 2 SE CODTAB[4,5]=="" +IN S0 152 +DI "Codice" CODTAB +DI "Descrizione@50" S0 +OU 151 CODTAB[1,3] +OU 149 CODTAB[1,2] +OU 152 S0 +CH SE +EN +ST 153 2 +BE +PR 2 3 "Sottogruppo merceologico " +FLAG "UH" +US GMC +CH SE +FI OR14_SGR +EN +ST 154 50 35 +BE +PR 35 3 "" +US GMC KE 2 SE CODTAB[4,5] != "" +IN S0 154 +DI "Descrizione@50" S0 +DI "Codice" CODTAB +CO OU 153 +CH NORMAL +EN +BO 155 +BE +PR 2 4 "Sottoscorta" +FI OR14_SSC +EN +GR -1 78 5 +BE +PR 1 9 "@bArticolo" +EN +ST 169 20 +BE +PR 2 10 "Codice " +EN +ST 170 50 +BE +PR 2 11 "Descrizione " +EN +ST 171 50 +BE +PR 2 12 "Descrizione aggiuntiva " +EN +GR -1 78 4 +BE +PR 1 14 "@bFornitore" +EN +ST 172 7 +BE +PR 2 15 "Codice " +US 20 +IN TIPOCF "F" +IN CODCF 172 +DI "Codice " CODCF +DI "Ragione sociale@50" RAGSOC +OU 172 CODCF +EN +ST 173 50 +BE +PR 2 16 "Ragione sociale " +FL "D" +EN + +ENDPAGE + +PAGE "Parametri" 0 0 0 -3 + +GR -1 78 4 +BE +PR 1 1 "@bTipologia documento ordine" +EN +ST 157 4 +BE +PR 2 2 "Numerazione " +US %NUM SE (CODTAB=="BACQ")||(CODTAB=="MAG")||(CODTAB=="ORF")||(CODTAB=="ORFT")||(CODTAB=="MAGT") +IN CODTAB 157 +DI "Codice" CODTAB +DI "Descrizione@60" S0 +OU 157 CODTAB +OU 158 S0 +OU 159 S2[1,4] +OU 100 S2[1,4] +OU 101 S2[5,8] +OU 102 S2[9,12] +OU 103 S2[13,16] +OU 104 S2[17,20] +OU 105 S2[21,24] +FLAG "UG" +CH REQUIRED +FI OR14_NUM +ME RESET,174|RESET,175 +EN +ST 158 50 30 +BE +PR 24 2 "" +US %NUM KE 2 SE (CODTAB=="BACQ")||(CODTAB=="MAG")||(CODTAB=="ORF")||(CODTAB=="ORFT")||(CODTAB=="MAGT") +IN S0 158 +DI "Descrizione@60" S0 +DI "Codice" CODTAB +CO OU 157 +CH REQUIRED +EN + +ST 100 4 +BE +PR 2 12 "1 " +FL "H" +EN + +ST 101 4 +BE +PR 9 12 "2 " +FL "H" +EN + +ST 102 4 +BE +PR 16 12 "3 " +FL "H" +EN + +ST 103 4 +BE +PR 23 12 "4 " +FL "H" +EN + +ST 104 4 +BE +PR 30 12 "5 " +FL "H" +EN + +ST 105 4 +BE +PR 37 12 "6 " +FL "H" +EN + +ST 159 4 +BE +PR 2 3 "Tipo " +// US %TIP SE (CODTAB=="BACQ")||(CODTAB=="ORF")||(CODTAB=="MMAG")||(CODTAB=="TRAS")||(CODTAB=="ORFT")||(CODTAB=="MMGT")||(CODTAB=="TRAT")||(CODTAB=="TRCA") +US %TIP SE (CODTAB==#100)||(CODTAB==#101)||(CODTAB==#102)||(CODTAB==#103)||(CODTAB==#104)||(CODTAB==#105) +IN CODTAB 159 +DI "Codice" CODTAB +DI "Descrizione@60" S0 +OU 159 CODTAB +OU 160 S0 +CH REQUIRED +FLAG "UG" +FI OR14_TIP +EN + +ST 160 50 30 +BE +PR 24 3 "" +// US %TIP KE 2 SE (CODTAB=="BACQ")||(CODTAB=="ORF")||(CODTAB=="MMAG")||(CODTAB=="TRAS")||(CODTAB=="ORFT")||(CODTAB=="MMGT")||(CODTAB=="TRAT")||(CODTAB=="TRCA") +US %TIP SE (CODTAB==#100)||(CODTAB==#101)||(CODTAB==#102)||(CODTAB==#103)||(CODTAB==#104)||(CODTAB==#105) +IN S0 160 +DI "Descrizione@60" S0 +DI "Codice" CODTAB +CO OU 159 +CH REQUIRED +EN + +GR -1 78 3 +BE +PR 1 5 "@bCentro di costo / Commessa" +EN +ST 166 20 +BE +PR 2 6 "CDC/Commessa " +FL "UZ" +US CMS +IN CODTAB 166 +DI "Codice@20" CODTAB +DI "Descrizione@70" S0 +OU 166 CODTAB +FI OR14_CDCT +CH NORMAL +EN +ST 167 10 +BE +PR 50 6 "Fase " +FL "DUZ" +US FSC +IN CODTAB 167 +DI "Codice@20" CODTAB +DI "Descrizione@70" S0 +OU 167 CODTAB +FI OR14_FSCT +CH NORMAL +EN + +GR -1 78 6 +BE +PR 1 8 "@bMagazzino / Deposito" +EN +ST 161 3 +BE +PR 2 9 "Magazzino " +FL "UG" +US MAG SE CODTAB[4,5]=="" +IN CODTAB 161 +DI "Codice " CODTAB[1,3] +DI "Denominazione mag.@50 " S0 +OU 161 CODTAB[1,3] +OU 162 S0 +CH NORMAL +FI OR14_MAG +EN +ST 162 50 +BE +PR 24 9 "" +FL "DUG" +US MAG KE 2 SE CODTAB[4,5]=="" +IN S0 162 +DI "Denominazione magazzino@50" S0 +DI "Cod. magazzino" CODTAB[1,3] +DI "Cod. deposito" CODTAB[4,5] +OU 161 CODTAB[1,3] +OU 162 S0 +CH SE +EN +ST 163 2 +BE +PR 2 10 "Deposito " +FL "HU" +US MAG SE (CODTAB[1,3]==#161)&&(CODTAB[4,5]!="") +IN CODTAB[1,3] 161 +IN CODTAB[4,5] 163 +DI "Codice " CODTAB +DI "Denominazione dep.@50 " S0 +OU 161 CODTAB[1,3] +OU 163 CODTAB[4,5] +CH SE +FI OR14_DEP +EN +ST 164 50 +BE +PR 24 10 "" +FL "H" +US MAG KE 2 SE (CODTAB[1,3]==#161)&&(CODTAB[4,5]!="") +IN S0 164 +CO DI 162 +OU 163 CODTAB[4,5] +CH SE +EN + +ST 174 3 +BE +PR 2 11 "Mag.coll. " +FL "UG" +US MAG SE CODTAB[4,5]=="" +IN CODTAB 174 +DI "Codice " CODTAB[1,3] +DI "Denominazione mag.@50 " S0 +OU 174 CODTAB[1,3] +OU 175 S0 +CH NORMAL +FI OR14_MAGC +EN +ST 175 50 +BE +PR 24 11 "" +US MAG KE 2 SE CODTAB[4,5]=="" +IN S0 175 +DI "Denominazione magazzino@50" S0 +DI "Cod. magazzino" CODTAB[1,3] +DI "Cod. deposito" CODTAB[4,5] +OU 174 CODTAB[1,3] +OU 175 S0 +CH SE +EN +ST 176 2 +BE +PR 2 12 "Deposito " +FL "HU" +US MAG SE (CODTAB[1,3]==#161)&&(CODTAB[4,5]!="") +IN CODTAB[1,3] 174 +IN CODTAB[4,5] 176 +DI "Codice " CODTAB +DI "Denominazione dep.@50 " S0 +OU 174 CODTAB[1,3] +OU 176 CODTAB[4,5] +CH SE +FI OR14_DEPC +EN +ST 177 50 +BE +PR 24 12 "" +US MAG KE 2 SE (CODTAB[1,3]==#161)&&(CODTAB[4,5]!="") +FL "HU" +IN S0 177 +CO DI 162 +OU 176 CODTAB[4,5] +CH SE +EN + +GR -1 78 3 +BE +PR 1 14 "@bValorizzazione" +EN +LI 165 15 +BE +PR 2 15 "Prezzo " +IT "U|Ultimo Costo" +IT "S|Costo Standard" +FI OR14_TPR +EN +EN +ENDMASK +TOOLBAR "" 0 -3 0 3 +BU 1 10 2 +BE +PR -12 -11 "" +EN +BU 2 10 2 +BE +PR -22 -11 "" +EN + +ENDPAGE + +PAGE "Righe ordine" -1 -1 80 20 + +ST 101 20 +BE +PR 1 2 "Codice " +FL "D" +EN +ST 102 50 35 +BE +PR 42 2 "" +FL "D" +EN +ST 103 2 +BE +PR 2 4 "Unità di misura " +FL "UG" +US 49 KE 2 SE CODART==#101 +JO %UMS INTO CODTAB==UM +IN CODART 101 SE +IN UM 103 +DI "U.M.@10" UM +DI "Descrizione@50" %UMS->S0 +DI "F.C.@10" FC +OU 103 UM +CH REQUIRED +EN + +NUMBER F_QTA 13 5 +BEGIN + PROMPT 25 4 "Quantità " +END + +DATA F_DATACONS +BEGIN + PROMPT 48 4 "Data di consegna " + WARNING "Indicare la data di consegna" + VALIDATE 12 1 104 +END + +NU 106 6 +BE +PR 2 6 "Codice fornitore " +FI CODCF +US 20 +FL "D" +IN TIPOCF "F" +IN CODCF 106 +DI "Codice " CODCF +DI "Ragione sociale@50" RAGSOC +OU 106 CODCF +OU 107 RAGSOC +CH NORMAL +ADD RU CG0 -1 +EN +ST 107 50 35 +BE +FL "D" +PR 42 6 "" +US 20 KE 2 +IN TIPOCF "F" +IN RAGSOC 107 +DI "Ragione sociale@50" RAGSOC +DI "Codice " CODCF +CO OU 106 +CH SE +ADD RU CG0 -1 +EN +ST 108 20 +BE +PR 2 8 "CDC/Commessa " +FL "DUZ" +US CMS +IN CODTAB 108 +DI "Codice@20" CODTAB +DI "Descrizione@70" S0 +OU 108 CODTAB +CH NORMAL +EN +ST 109 10 +BE +PR 42 8 "Fase " +FL "DUZ" +US FSC +IN CODTAB 109 +DI "Codice@20" CODTAB +DI "Descrizione@70" S0 +OU 109 CODTAB +CH NORMAL +EN + +STRING F_CODAGG1 20 +BEGIN + PROMPT 2 9 "ID Cespite " +END + +ST 111 20 +BE +PR 42 9 "Codice agg. 2 " +FL "D" +EN +NU 112 5 +BE +PR 2 11 "Lead time " +FL "D" +EN +NU 113 10 3 +BE +PR 42 11 "Lotto " +FL "D" +EN +ME 114 50 4 +BE +PR 2 12 "Descr.aggiuntiva" +FL "D" +EN +NU 115 15 5 +BE +PR 2 16 "Giacenza" +FL "D" +EN +NU 116 15 +BE +PR 42 16 "Pezzi per conf. " +FL "D" +EN +NU 117 15 5 +BE +PR 2 17 "Disponibilità" +FL "D" +EN + +ENDPAGE + +PAGE "Campi Utente" -1 -1 80 20 + +ST 118 20 +BE +PR 2 2 "Campo utente 1 " +FL "D" +EN +ST 119 20 +BE +PR 2 4 "Campo utente 2 " +FL "D" +EN +ST 120 20 +BE +PR 2 6 "Campo utente 3 " +FL "D" +EN +ST 121 20 +BE +PR 2 8 "Campo utente 4 " +FL "D" +EN +ST 122 20 +BE +PR 2 10 "Campo utente 5 " +FL "D" +EN +ST 123 20 +BE +PR 2 12 "Campo utente 6 " +FL "D" +EN +ST 124 20 +BE +PR 2 14 "Campo utente 7 " +FL "D" +EN +ST 125 20 +BE +PR 2 16 "Campo utente 8 " +FL "D" +EN +ST 126 20 +BE +PR 2 18 "Campo utente 9 " +FL "D" +EN +ST 127 20 +BE +PR 2 20 "Campo utente 10 " +FL "D" +EN + +ENDPAGE +ENDMASK + +PAGE "Ordini" -1 -1 80 20 +GR -1 80 3 +BE +PR 1 0 "@bEstremi del documento" +EN +DA 101 +BE +PR 2 1 "Data " +FI 33.DATADOC +FL "D" +EN +NU 102 6 +BE +PR 25 1 "Numero " +FI NDOC +FL "D" +EN +NU 103 4 +BE +PR 43 1 "Riga " +FI NRIGA +FL "D" +EN +ST 104 1 +BE +PR 57 1 "Stato " +FI 33.STATO +FL "D" +EN +GR -1 80 6 +BE +PR 1 3 "@bArticolo" +EN +ST 105 20 +BE +PR 2 4 "Codice " +FI CODART +FL "D" +EN +ST 106 50 +BE +PR 2 5 "Descrizione " +FI 47.DESCR +FL "D" +EN +ST 107 2 +BE +PR 2 6 "Quantità " +FL "UD" +FI UMQTA +EN +NU 108 13 5 +BE +PR 18 6 "" +FI QTA +FL "D" +EN +NU 109 13 5 +BE +PR 34 6 "Evasa " +FI QTAEVASA +CH NORMAL +FL "D" +EN +NU 110 13 5 +BE +PR 56 6 "Residuo " +VA 14 1 #108-#109 +DR 108 109 +CH NORMAL +FL "DG" +EN +BO 111 +BE +PR 2 7 "Da evadere" +ME 0 CLEAR, 112 +ME 1 ENABLE,112 +EN +NU 112 13 5 +BE +PR 16 7 "Qta da evadere" +EN +DATA 113 +BE +PR 47 7 "Data di consegna " +FI DATACONS +EN +GR -1 80 3 +BE +PR 1 8 "@bFornitore" +EN +NU 114 6 +BE +PR 2 10 "" +FI 33.CODCF +FL "D" +EN +ST 115 50 +BE +PR 14 10 "" +FI 20.RAGSOC +FL "D" +EN +GR -1 80 4 +BE +PR 1 11 "@bCentro di costo/Commessa" +EN +ST 116 20 +BE +PR 2 13 "Codice " +FL "UZD" +FI CODCMS +EN +ST 117 10 +BE +PR 2 14 "Fase " +FL "UZD" +FI FASCMS +EN +ST 118 50 +BE +PR 2 16 "Descr. agg. " +FI 47.DESCRAGG[1,50] +FL "D" +EN +NU 119 15 +BE +PR 2 17 "P.per conf. " +FI 47.PPCONF +FL "D" +EN +ST 120 20 +BE +PR 42 17 "Taglie " +FI 47.USER2 +FL "D" +EN +BU 2 10 2 +BE +PR -12 -1 "" +EN +BU 1 10 2 +BE +PR -22 -1 "" +EN + +ENDPAGE +ENDMASK