diff --git a/ca/ca0.cpp b/ca/ca0.cpp index b2970c135..7d4dd7bae 100755 --- a/ca/ca0.cpp +++ b/ca/ca0.cpp @@ -9,7 +9,7 @@ int main(int argc, char** argv) { // case 1: ca0200(argc,argv); break; // stampa tabelle case 2: ca0300(argc,argv); break; // parametri configurazione Contabilita' Analitica -// case 3: ca0400(argc,argv); break; //immissione dati nei files CDC,CMS,FSC + case 3: ca0400(argc,argv); break; //immissione piano dei conti // case 5: ca0600(argc,argv); break; // ribaltamenti default: ca0100(argc,argv); break; // gestione tabelle } diff --git a/ca/ca0.h b/ca/ca0.h index 208cd8e56..56ae0c960 100755 --- a/ca/ca0.h +++ b/ca/ca0.h @@ -4,7 +4,7 @@ int ca0100(int argc, char* argv[]); //int ca0200(int argc, char* argv[]); int ca0300(int argc, char* argv[]); -//int ca0400(int argc, char* argv[]); +int ca0400(int argc, char* argv[]); //int ca0600(int argc, char* argv[]); #endif // __CA0_H diff --git a/ca/ca0100.cpp b/ca/ca0100.cpp index 04eea9564..9528beca0 100755 --- a/ca/ca0100.cpp +++ b/ca/ca0100.cpp @@ -2,7 +2,6 @@ #include #include #include -#include //////////////////////////////////////////////////////////////////////// //MASCHERA @@ -58,8 +57,8 @@ public: virtual ~Tab_app_ca() {} }; - HIDDEN inline Tab_app_ca& app() { return (Tab_app_ca&)main_app(); } + // costruttore Tab_app_ca::Tab_app_ca() {} @@ -98,10 +97,9 @@ int Tab_app_ca::rewrite(const TMask& m) return Tab_application::rewrite(m); } - int ca0100(int argc, char* argv[]) { - Tab_app_ca a; + Tab_app_ca a; a.run(argc, argv, TR("Tabella")); return 0; } diff --git a/ca/ca0300a.uml b/ca/ca0300a.uml index 8750a6b9c..c7ba7dc0b 100755 --- a/ca/ca0300a.uml +++ b/ca/ca0300a.uml @@ -1,15 +1,15 @@ #include "ca0300a.h" -TOOLBAR "" 0 20 0 2 +TOOLBAR "" 0 -2 0 2 BUTTON DLG_OK 10 2 BEGIN - PROMPT -12 -1 "" + PROMPT -12 -11 "" END BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -22 -1 "" + PROMPT -22 -11 "" END ENDPAGE diff --git a/ca/ca0400.cpp b/ca/ca0400.cpp new file mode 100755 index 000000000..1edf91e8e --- /dev/null +++ b/ca/ca0400.cpp @@ -0,0 +1,48 @@ +// Gestione Contabilita' Analitica +#include + +#include "calib01.h" +#include "ca0400a.h" + +class TPiano_conti_anal_msk : public TSimple_anal_msk +{ +protected: + virtual int get_logicnum() const { return LF_PCONANA; } + virtual const char* get_key_var() const { return "Pdci"; } + virtual const char* get_des_var() const { return "PdciDes"; } + virtual short get_key_id(int n) const { return n >= 0 && n < 4 ? F_KEY_1+n : 0; } + virtual short get_des_id(int n) const { return n >= 0 && n < 4 ? F_DES_1+n : 0; } + +public: + TPiano_conti_anal_msk(); + virtual ~TPiano_conti_anal_msk(); +}; + +TPiano_conti_anal_msk::TPiano_conti_anal_msk() : TSimple_anal_msk("ca0400a") +{ + create_key_fields(); + offset_fields(); +} + +TPiano_conti_anal_msk::~TPiano_conti_anal_msk() +{ +} + +/////////////////////////////////////////////////////////// +// TAnalisi_app +/////////////////////////////////////////////////////////// + +class TAnalisi_app : public TAnal_app +{ +protected: + virtual TAnal_msk* create_mask() const { return new TPiano_conti_anal_msk; } + virtual TConfig* create_config() const { return new TConfig(CONFIG_DITTA, "ca"); } +}; + + +int ca0400(int argc, char* argv[]) +{ + TAnalisi_app app; + app.run(argc, argv, TR("Gestione Piano dei conti analitico")); + return 0; +} \ No newline at end of file diff --git a/ca/ca0400a.h b/ca/ca0400a.h new file mode 100755 index 000000000..93c2db7b1 --- /dev/null +++ b/ca/ca0400a.h @@ -0,0 +1,10 @@ +#define F_KEY_1 101 +#define F_KEY_2 102 +#define F_KEY_3 103 +#define F_KEY_4 104 + +#define F_DES_1 111 +#define F_DES_2 112 +#define F_DES_3 113 +#define F_DES_4 114 + diff --git a/ca/ca0400a.uml b/ca/ca0400a.uml new file mode 100755 index 000000000..c01b64ba3 --- /dev/null +++ b/ca/ca0400a.uml @@ -0,0 +1,26 @@ +#include "ca0400a.h" + +TOOLBAR "" 0 20 0 2 + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "Piano dei conti" -1 -1 78 10 + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 0 "" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/ca/calib01.cpp b/ca/calib01.cpp new file mode 100755 index 000000000..1d5ed97b9 --- /dev/null +++ b/ca/calib01.cpp @@ -0,0 +1,174 @@ +#include "calib01.h" + +/////////////////////////////////////////////////////////// +// TAnal_msk +/////////////////////////////////////////////////////////// + +bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + return true; +} + +void TAnal_msk::offset_fields() +{ + const WINDOW tw = toolwin(); + + RCT rct; xvt_vobj_get_client_rect(win(), &rct); + const int width = rct.right; + int rightmost = 0; + + for (int i = fields()-1; i > 0; i--) + { + TMask_field& f = fld(i); + if (f.dlg() < 1000 && f.parent() != tw) + { + f.get_rect(rct); + if (rct.right > rightmost) + rightmost = rct.right; + } + } + + const int delta = width - rightmost; + if (delta > 0) + { + for (int i = fields()-1; i >= 0; i--) + { + TMask_field& f = fld(i); + if (f.dlg() < 1000 && f.parent() != tw) + { + f.get_rect(rct); + xvt_rect_offset(&rct, delta, 0); + f.set_rect(rct); + } + } + } +} + +TAnal_msk::TAnal_msk(const char* name) +{ + read_mask(name, 0, 0); +} + +/////////////////////////////////////////////////////////// +// TSimple_anal_msk +/////////////////////////////////////////////////////////// + +void TSimple_anal_msk::get_key_fields(TString& key1, TString& key2) const +{ + const RecDes& des = prefix().get_recdes(get_logicnum()); + + const KeyDes k1 = des.Ky[0]; + key1 = des.Fd[k1.FieldSeq[0] % MaxFields].Name; + + const KeyDes k2 = des.Ky[1]; + key2 = des.Fd[k2.FieldSeq[0] % MaxFields].Name; +} + +void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig& cfg) +{ + TString16 key1, key2; + get_key_fields(key1, key2); + + TFilename tmp; tmp.temp(); + ofstream out(tmp); + out << "US " << get_logicnum() << endl; + out << "KE 1" << endl; + + int from = 1, to = 1; + for (int i = 0; i < level; i++) + { + const TString& picture = cfg.get(get_key_var(), NULL, i); + const TString& prompt = cfg.get(get_des_var(), NULL, i); + to = from + picture.len()-1; + TString field; field.format("%s[%d,%d]", (const char*)key1, from, to); + out << "IN " << field << ' ' << get_key_id(i) << endl; + out << "DI \"" << prompt << '@' << (from-to+1) << "\" " << field << endl; + out << "OU " << get_key_id(i) << ' ' << field << endl; + from = to+1; + } + out << "DI \"Descrizione@50\" " << key2 << endl; + out << "OU " << get_des_id(level-1) << ' ' << key2 << endl; + out << "CH " << (level == 1 ? "RE" : "NO") << endl; + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_removefile(tmp); +} + +int TSimple_anal_msk::create_key_fields() +{ + TConfig cfg(CONFIG_DITTA, "ca"); + const char* keyvar = get_key_var(); + const char* desvar = get_des_var(); + + int maxkeylen = 0, maxdeslen = 0; + int level; + for (level = 1; ; level++) + { + const TString& prompt = cfg.get(desvar, NULL, level); + if (prompt.blank()) + break; + const TString& picture = cfg.get(keyvar, NULL, level); + const int keylen = picture.len(); + const int deslen = prompt.len(); + if (keylen > maxkeylen) maxkeylen = keylen; + if (deslen > maxdeslen) maxdeslen = deslen; + } + maxdeslen++; + const int tab0 = 2; + const int tab1 = tab0 + maxdeslen + maxkeylen + 3; + for (int i = 1; i < level; i++) + { + const short kid = get_key_id(i-1); + CHECKD(kid > 100, "Invalid field id:", kid); + + const TString& picture = cfg.get(keyvar, NULL, i); + TString80 prompt = cfg.get(desvar, NULL, i); + prompt.left_just(maxdeslen); + TEdit_field& kfld = add_string(kid, 0, prompt, tab0, i, picture.len(), "B"); + create_key_browse(kfld, i, cfg); + + const short did = get_des_id(i-1); + if (did > kid) + { + add_string(did, 0, "", tab1, i, 50, "", 76-tab1); + } + } + + return level; +} + +TSimple_anal_msk::TSimple_anal_msk(const char* name) : TAnal_msk(name) +{ +} + + + +/////////////////////////////////////////////////////////// +// TAnal_app +/////////////////////////////////////////////////////////// + +TRelation* TAnal_app::create_relation() const +{ + return new TRelation(_msk->get_logicnum()); +} + +bool TAnal_app::user_create() +{ + _msk = create_mask(); + _rel = create_relation(); + return true; +} + +bool TAnal_app::user_destroy() +{ + if (_msk != NULL) + delete _msk; + if (_rel != NULL) + delete _rel; + return true; +} diff --git a/ca/calib01.h b/ca/calib01.h new file mode 100755 index 000000000..0270b012a --- /dev/null +++ b/ca/calib01.h @@ -0,0 +1,71 @@ +#ifndef __CALIB01_H +#define __CALIB01_H + +#ifndef __AUTOMASK_H +#include +#endif + +#ifndef __RELAPP_H +#include +#endif + +/////////////////////////////////////////////////////////// +// TAnal_msk +/////////////////////////////////////////////////////////// + +class TAnal_msk : public TAutomask +{ +protected: + virtual int create_key_fields() pure; + void offset_fields(); + +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + TAnal_msk(const char* name); + +public: + virtual int get_logicnum() const pure; +}; + +/////////////////////////////////////////////////////////// +// TSimple_anal_msk +/////////////////////////////////////////////////////////// + +class TSimple_anal_msk : public TAnal_msk +{ +protected: + virtual const char* get_key_var() const pure; + virtual const char* get_des_var() const pure; + virtual short get_key_id(int n) const pure; + virtual short get_des_id(int n) const pure; + + void get_key_fields(TString& key1, TString& key2) const; + void create_key_browse(TEdit_field& kfld, int level, TConfig& cfg); + virtual int create_key_fields(); + +protected: + TSimple_anal_msk(const char* name); +}; + +/////////////////////////////////////////////////////////// +// TAnal_app +/////////////////////////////////////////////////////////// + +class TAnal_app : public TRelation_application +{ + TRelation* _rel; + TAnal_msk* _msk; + +protected: + virtual bool changing_mask(int) { return false; } + virtual TMask* get_mask(int) { return _msk; } + virtual TRelation* get_relation() const { return _rel; } + virtual bool user_create(); + virtual bool user_destroy(); + +protected: + virtual TAnal_msk* create_mask() const pure; + virtual TRelation* create_relation() const; +}; + +#endif