diff --git a/src/ca/ca0400.cpp b/src/ca/ca0400.cpp index b99b312c7..539ebc20d 100755 --- a/src/ca/ca0400.cpp +++ b/src/ca/ca0400.cpp @@ -97,6 +97,7 @@ class TAnalisi_app : public TAnal_app TAnalisi_rec * _rows; int _maxlev; bool _riclassificato; + TPiano_conti_anal_msk * _msk; protected: virtual const char * extra_modules() const {return "ci|cm";} //funziona anche con autorizzazione CM @@ -119,6 +120,9 @@ protected: virtual bool create(); virtual bool user_create(); virtual bool user_destroy(); + virtual bool has_filtered_cursor() const { return true; } + TPiano_conti_anal_msk & mask() const { return *_msk; }; + virtual TCursor * get_filtered_cursor() const { return mask().efield(F_KEY1 + _maxlev - 1).browse()->cursor();} }; void TAnalisi_app::rec2row(const TMask& m) @@ -243,7 +247,7 @@ void TAnalisi_app::init_indbil(TMask& mask) int level = 0; for (level = _maxlev; level > 0; level--) { - if (mask.field(F_KEY1+level).shown()) + if (mask.field(F_KEY1 + level - 1).shown()) break; } enabled = level < _maxlev || _riclassificato; // Le foglie sono sempre disabilitate @@ -269,7 +273,7 @@ void TAnalisi_app::init_indbil(TMask& mask) void TAnalisi_app::init_modify_mode(TMask& mask) { - const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1); + const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev - 1, 1); mask.enable_page(1, mask.get(id).not_empty()); TAnal_app::init_modify_mode(mask); @@ -278,7 +282,7 @@ void TAnalisi_app::init_modify_mode(TMask& mask) void TAnalisi_app::init_insert_mode(TMask& mask) { - const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1); + const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev - 1, 1); mask.enable_page(1, mask.get(id).not_empty()); TAnal_app::init_insert_mode(mask); @@ -321,16 +325,21 @@ bool TAnalisi_app::user_create() if (ok) { _rows = new TAnalisi_rec(); - TPiano_conti_anal_msk * m = (TPiano_conti_anal_msk * ) get_mask(0); + const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_PCONANA); + + _msk = (TPiano_conti_anal_msk *)get_mask(0); + _maxlev = mci.levels(); + set_search_field(F_KEY1 + _maxlev - 1); - for (int i = 0; i < 4; i++) + if (_maxlev > 1) { - const short id = m->get_field_id(i, 1); - if (id <= 0 || m->id2pos(id) < 0) - break; - _maxlev = i; + TBrowse * b = mask().efield(F_KEY1 + _maxlev - 1).browse(); + TString inp(b->get_input_fields()); + + b->set_filter(""); + inp.strip("@"); + b->set_input_fields(inp); } - set_search_field(F_DES1 + _maxlev - 1); } return ok; } diff --git a/src/ca/ca0400a.uml b/src/ca/ca0400a.uml index 40c93c58f..1b7ff02a2 100755 --- a/src/ca/ca0400a.uml +++ b/src/ca/ca0400a.uml @@ -35,7 +35,7 @@ BEGIN ITEM "2|2. Passivita'" ITEM "3|3. Costi" ITEM "4|4. Ricavi" -// ITEM "5|5. Conti d'ordine" + ITEM "5|5. Conti d'ordine" FIELD INDBIL END diff --git a/src/ca/ca0500.cpp b/src/ca/ca0500.cpp index 8ffa80a7e..cdb1bc057 100755 --- a/src/ca/ca0500.cpp +++ b/src/ca/ca0500.cpp @@ -6,6 +6,7 @@ #include "calib01.h" #include "ca0500a.h" #include "cdc.h" +#include "calibmsk.h" //////////////////////////////////////////////////////////////////////// //MASCHERA @@ -55,6 +56,7 @@ class TCdC_app : public TAnal_app { int _maxlev; bool _has_filter; + TCdC_anal_msk * _msk; protected: virtual bool filtered() const; @@ -63,7 +65,9 @@ protected: virtual void init_insert_mode(TMask& mask); virtual bool protected_record(TRectype& record); virtual TSimple_anal_msk* create_mask() const { return new TCdC_anal_msk; } - virtual bool user_create(); + TCdC_anal_msk & mask() const { return *_msk; }; + virtual TCursor * get_filtered_cursor() const { return mask().efield(F_KEY1 + _maxlev - 1).browse()->cursor(); } + virtual bool user_create(); }; bool TCdC_app::filtered() const @@ -108,17 +112,33 @@ void TCdC_app::init_insert_mode(TMask& mask) bool TCdC_app::user_create() { - const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_CDC); + const bool ok = TAnal_app::user_create(); - _maxlev = mci.levels(); - if (_maxlev <= 0) - return error_box(TR("I centri di costo non sono stati configurati")); + if (ok) + { + const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_CDC); - //eventuali filtri per utente - _has_filter = cache().get("%AUC", user(), "S1").full(); -// set_search_field(F_CDCPDA1 + _maxlev - 1); + _maxlev = mci.levels(); + if (_maxlev <= 0) + return error_box(TR("I centri di costo non sono stati configurati")); - return TAnal_app::user_create(); + //eventuali filtri per utente + _has_filter = cache().get("%AUC", user(), "S1").full(); + + _msk = (TCdC_anal_msk *)get_mask(0); + + set_search_field(F_KEY1 + _maxlev - 1); + + if (_maxlev > 1) + { + TBrowse * b = mask().efield(F_KEY1 + _maxlev - 1).browse(); + TString inp(b->get_input_fields()); + + inp.strip("@"); + b->set_input_fields(inp); + } + } + return ok; } int ca0500(int argc, char* argv[]) diff --git a/src/ca/ca0600.cpp b/src/ca/ca0600.cpp index d0eb50947..2235c2cfc 100755 --- a/src/ca/ca0600.cpp +++ b/src/ca/ca0600.cpp @@ -7,6 +7,8 @@ #include "ca0600a.h" #include "commesse.h" #include "cfcms.h" +#include "calibmsk.h" + //////////////////////////////////////////////////////////////////////// //MASCHERA @@ -56,6 +58,7 @@ class TCms_app : public TAnal_app { int _maxlev; bool _has_filter; + TCms_anal_msk * _msk; protected: void fin2row(const TMask& m); @@ -76,7 +79,9 @@ protected: virtual void init_insert_mode(TMask& mask); virtual bool protected_record(TRectype& record); virtual TSimple_anal_msk* create_mask() const { return new TCms_anal_msk; } - virtual bool user_create(); + TCms_anal_msk & mask() const { return *_msk; }; + virtual TCursor * get_filtered_cursor() const { return mask().efield(F_KEY1 + _maxlev - 1).browse()->cursor(); } + virtual bool user_create(); public: @@ -398,16 +403,32 @@ void TCms_app::init_insert_mode(TMask& mask) bool TCms_app::user_create() { - const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_COMMESSE); + const bool ok = TAnal_app::user_create(); - _maxlev = mci.levels(); - if (_maxlev <= 0) - return error_box(TR("Le commesse non sono state configurate")); + if (ok) + { + const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_COMMESSE); - //eventuali filtri per utente - _has_filter = cache().get("%AUC", user(), "S0").full(); + _maxlev = mci.levels(); + if (_maxlev <= 0) + return error_box(TR("Le commesse non sono state configurate")); - return TAnal_app::user_create(); + //eventuali filtri per utente + _has_filter = cache().get("%AUC", user(), "S0").full(); + + _msk = (TCms_anal_msk *)get_mask(0); + set_search_field(F_KEY1 + _maxlev - 1); + + if (_maxlev > 1) + { + TBrowse * b = mask().efield(F_KEY1 + _maxlev - 1).browse(); + TString inp(b->get_input_fields()); + + inp.strip("@"); + b->set_input_fields(inp); + } + } + return ok; } int ca0600(int argc, char* argv[]) diff --git a/src/ca/ca0700.cpp b/src/ca/ca0700.cpp index 12c1bf7ac..117b04d7b 100755 --- a/src/ca/ca0700.cpp +++ b/src/ca/ca0700.cpp @@ -67,6 +67,8 @@ TFsc_anal_msk::TFsc_anal_msk() class TFsc_app : public TAnal_app { bool _has_filter; + int _maxlev; + TFsc_anal_msk * _msk; protected: virtual const char * extra_modules() const {return "cm";} //funziona anche con autorizzazione CM @@ -74,7 +76,9 @@ protected: virtual bool filtered() const; virtual bool protected_record(TRectype& record); virtual TSimple_anal_msk* create_mask() const { return new TFsc_anal_msk; } - virtual bool user_create(); + TFsc_anal_msk & mask() const { return *_msk; }; + virtual TCursor * get_filtered_cursor() const { return mask().efield(F_KEY1 + _maxlev - 1).browse()->cursor(); } + virtual bool user_create(); }; bool TFsc_app::filtered() const @@ -120,14 +124,29 @@ bool TFsc_app::protected_record(TRectype& record) bool TFsc_app::user_create() { - const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_FASI); - if (mci.levels() <= 0) - return error_box(TR("Le fasi non sono state configurate")); + const bool ok = TAnal_app::user_create(); - //eventuali filtri per utente - _has_filter = cache().get("%AUC", user(), "S2").full(); + if (ok) + { + const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_FASI); - return TAnal_app::user_create(); + _maxlev = mci.levels(); + if (mci.levels() <= 0) + return error_box(TR("Le fasi non sono state configurate")); + + //eventuali filtri per utente + _has_filter = cache().get("%AUC", user(), "S2").full(); + + _msk = (TFsc_anal_msk *)get_mask(0); + set_search_field(F_KEY1 + _maxlev - 1); + + TBrowse * b = mask().efield(F_KEY1 + _maxlev - 1).browse(); + TString inp(b->get_input_fields()); + + inp.strip("@"); + b->set_input_fields(inp); + } + return ok; } int ca0700(int argc, char* argv[])