diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 1c83796c0..c2e551914 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -2,15 +2,15 @@ #include #include #include -#include +#include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -209,7 +209,7 @@ void TMask_field::update_flags(const char* f, bool reset) } TMask_field::TMask_field(TMask* m) - : _mask(m), _groups(NULL), _ctl(NULL) + : _mask(m), _groups(NULL), _modules(NULL), _ctl(NULL) { } // Certified 100% @@ -217,6 +217,7 @@ TMask_field::~TMask_field() { if (_ctl) delete _ctl; if (_groups) delete _groups; + if (_modules) delete _modules; } // Certified 100% @@ -383,7 +384,7 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent) _ctl_data._dlg, (const char*)m.source_file()); scanner.push(); } - if (_ctl_data._dlg > 0) + if (_ctl_data._dlg > DLG_NULL) { FOR_EACH_MASK_FIELD(m, i, mf) { @@ -396,14 +397,23 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent) while(scanner.popkey() != "EN") // END of control parse_item(scanner); - if (class_id() == CLASS_EDIT_FIELD) + if (is_edit()) { - TBrowse * b = ((TEdit_field *) this)->browse(); - + TBrowse* b = ((TEdit_field*)this)->browse(); if (b != NULL) b->custom_display(); } + // Controllo se il campo (anche non operable) e' visibile solo con certi moduli + if (in_module(0) && _ctl_data._flags.find('H') < 0) + { + long mod = _modules->last_one(); + for (; mod > BAAUT; mod--) + if (main_app().has_module(mod)) + break; + if (mod <= 0) + _ctl_data._flags << 'H'; + } create(parent); } @@ -422,6 +432,28 @@ void TMask_field::set_group(byte group) _groups->set(0L); } +void TMask_field::set_module(word m) +{ + if (m > BAAUT && m < ENDAUT) + { + if (_modules == NULL) + _modules = new TBit_array; + _modules->set(long(m)); + } +} + +bool TMask_field::in_module(word m) const +{ + if (_modules != NULL) + { + if (m == BAAUT || m >= ENDAUT) + return _modules->first_one() > BAAUT; + else + return (*_modules)[m]; + } + return false; +} + bool TMask_field::parse_item(TScanner& scanner) { if (scanner.key() == "PR") // PROMPT @@ -440,7 +472,7 @@ bool TMask_field::parse_item(TScanner& scanner) return true; } - if (scanner.key() == "GR") + if (scanner.key() == "GR") // GROUPS { if (_groups == NULL) _groups = new TBit_array; @@ -449,6 +481,19 @@ bool TMask_field::parse_item(TScanner& scanner) return true; } + if (scanner.key() == "MO") // MODULES + { + TToken_string m(scanner.line(), ','); + FOR_EACH_TOKEN(m, mod) + { + const word cod = dongle().module_name2code(mod); + set_module(cod); + } + + return true; + } + + NFCHECK("'%s' Token non riconosciuto nel campo %d: %s", (const char*)scanner.token(), (int)dlg(), (const char*)_ctl_data._prompt); return false; @@ -512,6 +557,8 @@ void TMask_field::show( { if (_ctl) { + if (on && !_flags.show_default && in_module(0)) + on = false; // Nego la visibiltà in assenza del modulo opportuno _ctl->show(on); _flags.shown = on; } @@ -1707,8 +1754,9 @@ word TEditable_field::create_prompt( { if (_ctl_data._prompt.not_empty()) { - TString flags; - if (hidden()) flags << 'H'; + TString4 flags; + if (hidden() || _ctl_data._flags.find('H') >= 0) + flags << 'H'; if (height < 3) { @@ -1732,6 +1780,10 @@ word TEditable_field::create_prompt( void TEditable_field::show(bool on) { + // Cerco di mostrare un campo di un modulo proibito? + if (on && !_flags.show_default && in_module(0)) + on = false; // Ho detto di Nooo! + TOperable_field::show(on); if (_prompt) _prompt->show(on); } @@ -2212,24 +2264,32 @@ void TBrowse::custom_display() { switch(_cursor->file().num()) { - case LF_ANAMAG : - if (_cursor->key() == 2 && ini_get_bool(CONFIG_DITTA, "Main", "CUSTOM_SEARCH_" TOSTRING(LF_ANAMAG), false, 2)) + case LF_ANAMAG: + if (_cursor->key() == 2 && ini_get_bool(CONFIG_DITTA, "Main", "CUSTOM_SEARCH_" TOSTRING(LF_ANAMAG), false, 2)) + { + TToken_string & it = (TToken_string &) items(); + if (it.find(ANAMAG_DESCRAGG) < 0) { - TToken_string & it = (TToken_string &) items(); - if (it.find(ANAMAG_DESCRAGG) < 0) - { - const char * s = it.get(0); - for (int i = 0; s && *s; s = it.get(++i)) - if (strcmp(s, ANAMAG_DESCR) == 0) - { - add_display_field("Descrizione aggiuntiva@50", ANAMAG_DESCRAGG, i + 1); - break; - } - } + const char * s = it.get(0); + for (int i = 0; s && *s; s = it.get(++i)) + if (strcmp(s, ANAMAG_DESCR) == 0) + { + add_display_field("Descrizione aggiuntiva@50", ANAMAG_DESCRAGG, i + 1); + break; + } } - break; - default: - break; + } + break; + case LF_TABMOD: + { + _cursor->file().zero(); // Azzera il record corrente in modo da impostare "MOD" + const TString& mod =_cursor->curr().get("MOD"); + const word cod = dongle().module_name2code(mod); + field().set_module(cod); + } + break; + default: + break; } } @@ -2559,6 +2619,8 @@ int TBrowse::do_input( for (const char* fld = _inp_id.get(); fld; fld = _inp_id.get()) { + const TFieldref fldref(_inp_fn.get(), 0); // Output field + if (*fld == '"') { val = (fld+1); @@ -2588,11 +2650,28 @@ int TBrowse::do_input( { const TMask_field& f = *campf; val = f.get(); - - if (f.class_id() == CLASS_DATE_FIELD && f.right_justified()) + + switch (f.class_id()) { - const TDate d(val); - val = d.string(ANSI); + case CLASS_REAL_FIELD: + // Cerco di allineare correttamente i campi numerici salvati parzialmente su codtab + if (fldref.to() > 1 && f.size() > 1 && val.full() && + ((TReal_field&)f).decimals() == 0 && fldref.name() == "CODTAB") + { + const int len = fldref.len(cur); + if (f.size() == len && val.len() < len) + val.right_just(len); + } + break; + case CLASS_DATE_FIELD: + if (f.right_justified()) + { + const TDate d(val); + val = d.string(ANSI); + } + break; + default: + break; } const bool filter_flag = strchr(fld, '@') != NULL; @@ -2601,7 +2680,6 @@ int TBrowse::do_input( ne++; // Increment not empty fields count } } - const TFieldref fldref(_inp_fn.get(), 0); // Output field fldref.write(val, *_cursor->relation()); if (tofilter) { @@ -4457,10 +4535,9 @@ bool TDate_field::on_key(KEY key) bool TDate_field::autosave(TRelation& r) { - if (field()) + if (field() != NULL) { const char* td = get(); - if (right_justified()) { TDate d(td); @@ -4745,6 +4822,25 @@ void TReal_field::set_decimals(int d) } } +bool TReal_field::autosave(TRelation& r) +{ + // Qundo salvo un intero in un sottocampo (ad esempio CODTAB[2,7]) lo allineo a destra + if (field() != NULL && field()->to() > 1 && decimals() == 0 && + size() > 1 && !empty() && field()->name() == "CODTAB") + { + const int len = field()->len(r.curr(field()->file())); + if (size() == len && get().len() < len) + { + TString16 val = get(); + val.right_just(len); + field()->write(val, r); + return true; + } + } + return TEditable_field::autosave(r); +} + + /////////////////////////////////////////////////////////// // Currency_field /////////////////////////////////////////////////////////// diff --git a/include/maskfld.h b/include/maskfld.h index 51264e70c..6d83cc548 100755 --- a/include/maskfld.h +++ b/include/maskfld.h @@ -77,6 +77,9 @@ class TMask_field : public TObject // @cmember:(INTERNAL) Gruppi cui appartiene il campo TBit_array* _groups; + // @cmember:(INTERNAL) Moduli cui appartiene il campo + TBit_array* _modules; + // @access Protected Member protected: // @cmember Controllo vero e proprio @@ -383,6 +386,10 @@ public: // @cmember Assegna il campo al gruppo

void set_group(byte group); + + // @cmember Assegna il campo al modulo

+ void set_module(word module); + bool in_module(word m) const; // @cmember Setta il focus al campo virtual void set_focus() const; @@ -1344,6 +1351,8 @@ protected: // TEditable_field // @cmember Gestisce la pressione del tasto (true se la gestione ha avuto successo) virtual bool on_key(KEY key); + + virtual bool autosave(TRelation& r); // @access Public Member public: diff --git a/include/mov.h b/include/mov.h index ef87dd168..905ef4bd6 100755 --- a/include/mov.h +++ b/include/mov.h @@ -47,6 +47,8 @@ #define MOV_DNDOC "DNDOC" #define MOV_DATAINC "DATAINC" #define MOV_LIQDIFF "LIQDIFF" +#define MOV_CONTRATTO "CONTRATTO" +#define MOV_NOPROFIT "NOPROFIT" #define NUMREG_PROVVISORIO 999999L diff --git a/include/pconti.h b/include/pconti.h index a31f4d7e5..040985251 100755 --- a/include/pconti.h +++ b/include/pconti.h @@ -31,6 +31,7 @@ #define PCN_CODCMS "CODCMS" #define PCN_FASCMS "FASCMS" #define PCN_ANALITICA "ANALITICA" +#define PCN_SERVIZI "SERVIZI" #endif diff --git a/include/recset.cpp b/include/recset.cpp index 05279899c..72ff89ef8 100755 --- a/include/recset.cpp +++ b/include/recset.cpp @@ -108,13 +108,14 @@ bool TRecordset::save_as_html(const char* path) save_html_head(out, main_app().title()); out << "" << endl; + /* More annoyng than useful TString qry; parsed_text(qry); if (qry.full()) { for (int i = qry.find('\n'); i > 0; i = qry.find('\n', i+1)) qry.insert("
", i+1); out << "

" << qry << "

" << endl; - } + }*/ out << ""; out << " " << endl; @@ -135,7 +136,7 @@ bool TRecordset::save_as_html(const char* path) case _longfld: case _realfld: out << "align=\"right\""; break; case _boolfld: out << "align=\"center\""; break; - default : out << "style=\"mso-number-format:\\@\""; break; + default : out << "style=\"mso-number-format:\\@\""; break; // Stringa! } out << " />" << endl; } diff --git a/include/relation.cpp b/include/relation.cpp index 3b7607745..199d0c495 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -2407,7 +2407,7 @@ void TFieldref::write(TConfig& ini, const char* defpar, const char* val) const if ((val == NULL || *val == '\0') && !ini.exist(_name)) return; - const char* para = _id.empty() ? defpar : (const char *) _id; + const char* para = _id.empty() ? defpar : (const char*)_id; if (_from > 0 || _to > 0) { buffer = ini.get(_name, para); diff --git a/include/textset.cpp b/include/textset.cpp index b000a2de8..9a6d8ca49 100755 --- a/include/textset.cpp +++ b/include/textset.cpp @@ -90,6 +90,8 @@ int TText_recordset::find_column(const char* column) const { if (real::is_natural(column)) n = atoi(column); + if (strlen(column) > 2) + n = TRecordset::find_column(column); else { n = 0; diff --git a/include/textset.h b/include/textset.h index 3186b5055..35feed8e8 100755 --- a/include/textset.h +++ b/include/textset.h @@ -114,7 +114,7 @@ protected: virtual bool save_as_text(const char* path); TAS400_column_info* parse_field(const char* column, int& c, bool create); - bool set_field(const TAS400_column_info& fi, const TVariant& var); + virtual bool set_field(const TAS400_column_info& fi, const TVariant& var); virtual const TVariant& get_field(const TAS400_column_info& fi) const; public:
" << main_app().title() << "