diff --git a/ab/ab0.cpp b/ab/ab0.cpp new file mode 100755 index 000000000..3283c7175 --- /dev/null +++ b/ab/ab0.cpp @@ -0,0 +1,30 @@ +#include +#include + +#include "ab0.h" + +#define usage "Error - usage : %s -{0|1|2|3|4|5}" + +int main(int argc,char** argv) +{ + int n = (argc > 1) ? atoi(argv[1]+1) : -1; + + switch (n) + { + case 0: + ab0100(argc,argv); break; + case 1: + ab0200(argc,argv); break; + case 2: + ab0300(argc,argv); break; + // case 3: + // m71310(argc,argv); break; + // case 4: + // m71295(argc,argv); break; + // case 5: + // m71230(argc,argv); break; + default: + error_box(usage, argv[0]) ; + } + return 0; +} diff --git a/ab/ab0.h b/ab/ab0.h new file mode 100755 index 000000000..f5f578bfd --- /dev/null +++ b/ab/ab0.h @@ -0,0 +1,5 @@ + +extern int ab0100 (int argc, char* argv[]); //Tabella periodi di bilancio +extern int ab0200 (int argc, char* argv[]); //Piano dei conti analisi di bilancio +extern int ab0300 (int argc, char* argv[]); //Compatta il Piano dei Conti + diff --git a/ab/ab0.url b/ab/ab0.url new file mode 100755 index 000000000..34658958a --- /dev/null +++ b/ab/ab0.url @@ -0,0 +1,22 @@ +#include + +MENU TASK_MENUBAR + SUBMENU MENU_FILE "~File" + + +MENUBAR MENU_BAR(1) + +MENU MENU_BAR(1) + SUBMENU MENU_FILE "~File" + + +MENUBAR MENU_BAR(2) + +MENU MENU_BAR(2) + SUBMENU MENU_FILE "~File" + +MENUBAR MENU_BAR(3) + +MENU MENU_BAR(3) + SUBMENU MENU_FILE "~File" + diff --git a/ab/ab0100.cpp b/ab/ab0100.cpp new file mode 100755 index 000000000..a96d2bb10 --- /dev/null +++ b/ab/ab0100.cpp @@ -0,0 +1,102 @@ + +#include +#include +#include +#include +#include +#include +#include + +#include "batbpdb.h" + +class Tabanabil_application : public Tab_application +{ +private: + TMask* _msk; + TString _tabname; + +public: + bool user_create(); + + static bool giorno_handler(TMask_field& f, KEY k); + static bool mese_handler (TMask_field& f, KEY k); + + Tabanabil_application() {} + virtual ~Tabanabil_application() {} +}; + +HIDDEN inline Tabanabil_application& app() {return (Tabanabil_application&) main_app();} + +bool Tabanabil_application::giorno_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.mask().is_running()) + { + int giorno = atoi(f.get()); + + if (giorno > 31) + return f.warning_box("Valore non valido per il giorno"); + + int mese = (f.dlg() == F_GIORNO_INI ? f.mask().get_int(F_MESE_INI) : f.mask().get_int(F_MESE_FINE)); + + if (mese == 2) + if (giorno > 29) + return f.warning_box("Valore non valido per il giorno"); + + if (mese == 11 || mese == 4 || mese == 6 || mese == 9) + if (giorno > 30) + return f.warning_box("Valore non valido per il giorno"); + } + + return TRUE; +} + +bool Tabanabil_application::mese_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.mask().is_running()) + { + int mese = atoi(f.get()); + + if (mese < 1 || mese > 12) + return f.warning_box("Valore non valido per il mese"); + + int giorno = (f.dlg() == F_MESE_INI ? f.mask().get_int(F_GIORNO_INI) : f.mask().get_int(F_GIORNO_FINE)); + + if (mese == 2) + if (giorno > 29) + return f.warning_box("Valore non valido per il giorno"); + + if (mese == 11 || mese == 4 || mese == 6 || mese == 9) + if (giorno > 30) + return f.warning_box("Valore non valido per il giorno"); + } + + return TRUE; +} + +bool Tabanabil_application::user_create() +{ + Tab_application::user_create(); + + _msk = get_mask(); + _tabname = get_tabname(); + + if (_tabname == "%PDB") + { + _msk->set_handler(F_GIORNO_INI, giorno_handler); + _msk->set_handler(F_MESE_INI, mese_handler); + _msk->set_handler(F_GIORNO_FINE, giorno_handler); + _msk->set_handler(F_MESE_FINE, mese_handler); + } + + return TRUE; +} + +ab0100(int argc, char* argv[]) +{ + Tabanabil_application a; + + a.run(argc,argv, "Tabelle"); + return 0; +} + + diff --git a/ab/ab0200.cpp b/ab/ab0200.cpp new file mode 100755 index 000000000..bd8641043 --- /dev/null +++ b/ab/ab0200.cpp @@ -0,0 +1,264 @@ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ab0200.h" + +class TPconAb : public TRelation_application +{ + TMask* _msk; + TRelation* _rel; + TLocalisamfile* _pcon; + + TString _codice; + int _indbil,_newindbil; + bool _isparametri; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual int rewrite(const TMask& m); + virtual int write (const TMask& m); + virtual bool remove(); + virtual TRelation* get_relation() const { return _rel; } + virtual TMask* get_mask(int mode) {return _msk;} + virtual bool changing_mask(int mode) {return FALSE;} + virtual void init_query_mode (TMask&); + virtual void init_modify_mode (TMask&); + virtual void init_insert_mode (TMask&); + +public: + + static bool ContoSezBilOpp(TMask_field& f, KEY key); + static bool IndBil (TMask_field& f, KEY key); + static bool LivelloStrutt (TMask_field& f, KEY key); + + void ScriviContoSezOpp (const TString& codice, const TString& val); + + TPconAb() {} ; +}; +/* + TPconAb::TPconAb(const char* codice, char indbil): _codice(codice), _indbil(indbil) + { + } + */ +// Handler che controlla, nel caso venga scelto un conto di sezione opposta gia' esistente, +// l'indicatore di bilancio del conto di sezione opposta e' "opposto" rispetto al conto +// "di partenza". Controlla inoltre, nel caso il conto di sezione opposta abbia a sua volta +// un conto di sezione opposta significativo, che quest'ultimo coincida con il conto "di partenza". + +bool TPconAb::ContoSezBilOpp(TMask_field& f, KEY k) +{ + if ( (k == K_TAB && f.mask().is_running()) || k == K_ENTER) + { + TLocalisamfile pcon (LF_ABPCON); + + TString16 codice (f.get()); + + pcon.setkey(1); + pcon.zero(); + pcon.put("CODCBL", codice); + if (pcon.read() == NOERR) + { + int indbilI = f.mask().get_int(F_INDBIL); + int indbilII = pcon.get_int("INDBIL"); + + if (indbilI == 1 && indbilII != 2) + return f.warning_box("L'indicatore di bilancio del conto di sezione opposta deve essere una passivita'"); + + if (indbilI == 2 && indbilII != 1) + return f.warning_box("L'indicatore di bilancio del conto di sezione opposta deve essere un'attivita'"); + + if (indbilI == 3 && indbilII != 4) + return f.warning_box("L'indicatore di bilancio del conto di sezione opposta deve essere un ricavo"); + + if (indbilI == 4 && indbilII != 3) + return f.warning_box("L'indicatore di bilancio del conto di sezione opposta deve essere un costo"); + + TString16 codice1 (f.mask().get(F_CODICE)); + TString16 codice2 (pcon.get("CODCONTR")); + + if (codice2 != "" && codice1 != codice2) + return f.warning_box("Il conto di sezione opposta risulta diverso dal conto di sezione di partenza"); + } + } + + return TRUE; +} + +// Handler che abilita il campo "Conto di sezione opposta" se l'indicatore +// di bilancio e' compreso tra 1 e 4, e lo disabilita in tutti gli altri casi. + +bool TPconAb::IndBil(TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + int indbil = atoi(f.get()); + + if (indbil == 1 || indbil == 2 || indbil == 3 || indbil == 4) + f.mask().enable(F_CODCONTR); + else + f.mask().disable(F_CODCONTR); + } + + return TRUE; +} + +// Handler che controlla la validita' del campo "Livello di struttura": +// il suo valore deve essere >= 1 e <= 99. + +bool TPconAb::LivelloStrutt(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.mask().is_running()) + { + int livello = atoi(f.get()); + + if (livello < 1 || livello > 99) + return f.warning_box("Valore non valido per livello struttura"); + } + + return TRUE; +} + +void TPconAb::init_query_mode(TMask&) +{ + if (_isparametri) + { + _msk->set(F_CODCONTR, _codice); + _msk->set(F_INDBIL, _newindbil); + _msk->disable(F_CODCONTR); + _msk->disable(F_INDBIL); + } +} + +void TPconAb::init_modify_mode(TMask&) +{ + if (_isparametri) + { + _msk->set(F_CODCONTR, _codice); + _msk->set(F_INDBIL, _newindbil); + _msk->disable(F_CODCONTR); + _msk->disable(F_INDBIL); + } +} + +void TPconAb::init_insert_mode(TMask&) +{ + if (_isparametri) + { + _msk->set(F_CODCONTR, _codice); + _msk->set(F_INDBIL, _newindbil); + _msk->disable(F_CODCONTR); + _msk->disable(F_INDBIL); + } +} + +void TPconAb::ScriviContoSezOpp(const TString& codice, const TString& val) +{ + TLocalisamfile pcon (LF_ABPCON); + + pcon.setkey(1); + pcon.zero(); + pcon.put("CODCBL", codice); + if (pcon.read() == NOERR) + { + pcon.put("CODCONTR", val); + pcon.rewrite(); + } +} + +int TPconAb::rewrite(const TMask& m) +{ + TString16 codopp = _rel->curr(LF_ABPCON).get("CODCONTR"); + ScriviContoSezOpp(codopp,""); + + m.autosave(_rel); + + codopp = m.get(F_CODCONTR); + TString16 val (m.get(F_CODICE)); + ScriviContoSezOpp(codopp,val); + + return _rel->rewrite(); +} + +int TPconAb::write(const TMask& m) +{ + TString16 codopp (m.get(F_CODCONTR)); + TString16 val (m.get(F_CODICE)); + ScriviContoSezOpp(codopp,val); + + m.autosave(_rel); + + return _rel->write(); +} + +bool TPconAb::remove() +{ + TString16 codopp = _rel->curr(LF_ABPCON).get("CODCONTR"); + + ScriviContoSezOpp(codopp,""); + + return TRelation_application::remove(); +} + +bool TPconAb::user_create() +{ + _pcon = new TLocalisamfile (LF_ABPCON); + + _rel = new TRelation (LF_ABPCON); + + _msk = new TMask("ab0200a") ; + + _msk->set_handler(F_CODCONTR, ContoSezBilOpp); + _msk->set_handler(F_INDBIL, IndBil); + _msk->set_handler(F_LIVELLO, LivelloStrutt); + + _isparametri = FALSE; + + if (argv(2) != "" && argv(3) != "") + { + _codice = argv(2); + if (_codice != "-uPRASSI") + { + _indbil = atoi(argv(3)); + + if (_indbil == 1) _newindbil = 2; + if (_indbil == 2) _newindbil = 1; + if (_indbil == 3) _newindbil = 4; + if (_indbil == 4) _newindbil = 3; + + _isparametri = TRUE; + } + } + + set_search_field(F_CODICE); + + return TRUE; +} + +bool TPconAb::user_destroy() +{ + delete _msk; + delete _rel; + delete _pcon; + + return TRUE; +} + +int ab0200(int argc, char* argv[]) +{ + TPconAb a; + + a.run(argc, argv, "Piano dei Conti"); + + return TRUE; +} + + + diff --git a/ab/ab0200.h b/ab/ab0200.h new file mode 100755 index 000000000..e5cb8bc15 --- /dev/null +++ b/ab/ab0200.h @@ -0,0 +1,11 @@ +// campi maschera ab0200a.uml + +#define F_CODICE 101 +#define F_DESCRIZ1 102 +#define F_DESCRIZ2 103 +#define F_LIVELLO 104 +#define F_INDBIL 105 +#define F_CODCONTR 106 +#define F_DETTAGLIO 107 +#define F_DESCRCONTR1 108 +#define F_DESCRCONTR2 109 diff --git a/ab/ab0200a.uml b/ab/ab0200a.uml new file mode 100755 index 000000000..0e514f97e --- /dev/null +++ b/ab/ab0200a.uml @@ -0,0 +1,119 @@ +#include "ab0200.h" + +TOOLBAR "" 0 20 0 2 + +#include + +ENDPAGE + +PAGE "Piano dei Conti" 0 -1 0 19 + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +NUMBER F_CODICE 10 +BEGIN + PROMPT 2 1 "Codice tabella " + HELP "Codice della tabella Piano dei Conti" + FIELD LF_ABPCON->CODCBL + KEY 1 + USE LF_ABPCON KEY 1 + INPUT CODCBL F_CODICE + DISPLAY "Codice@10" CODCBL + DISPLAY "Descrizione@80" DESCRIZ + OUTPUT F_CODICE CODCBL + OUTPUT F_DESCRIZ1 DESCRIZ[1,40] + OUTPUT F_DESCRIZ2 DESCRIZ[41,] + CHECKTYPE REQUIRED + FLAGS "R" +END + +STRING F_DESCRIZ1 40 +BEGIN + PROMPT 2 2 "I parte descrizione " + FIELD LF_ABPCON->DESCRIZ[1,40] + KEY 2 + USE LF_ABPCON KEY 2 + INPUT DESCRIZ[1,40] F_DESCRIZ1 + DISPLAY "Descrizione@80" DESCRIZ + DISPLAY "Codice@10" CODCBL + COPY OUTPUT F_CODICE + HELP "Prima parte della descrizione" + WARNING "Manca la descrizione" + CHECKTYPE REQUIRED // Guy: perche' non cosi'? +END + +STRING F_DESCRIZ2 40 +BEGIN + PROMPT 2 3 "II parte descrizione " + FIELD LF_ABPCON->DESCRIZ[41,] + KEY 2 + HELP "Seconda parte della descrizione" +END + +NUMBER F_LIVELLO 2 +BEGIN + PROMPT 2 6 "Livello di struttura " + HELP "Inserire il livello di struttura: il valore deve essere compreso fra 1 e 99" + FIELD LF_ABPCON->LIVELLO + FLAGS "R" + CHECKTYPE REQUIRED +END + +LIST F_INDBIL 14 +BEGIN + PROMPT 2 8 "Indicatore di bilancio " + FIELD LF_ABPCON->INDBIL + ITEM "1|Attivita'" + ITEM "2|Passivita'" + ITEM "3|Costi" + ITEM "4|Ricavi" + ITEM "5|Conti d'ordine" + ITEM "9|Varie" +END + +NUMBER F_CODCONTR 10 +BEGIN + PROMPT 2 10 "Conto di sez.bil.opposta " + HELP "Inserire il conto di sezione di bilancio opposta" + FIELD LF_ABPCON->CODCONTR + USE LF_ABPCON KEY 1 + INPUT CODCBL F_CODCONTR + DISPLAY "Codice@10" CODCBL + DISPLAY "Ind.bil" INDBIL + DISPLAY "Descrizione@80" DESCRIZ + OUTPUT F_CODCONTR CODCBL + OUTPUT F_DESCRCONTR1 DESCRIZ[1,33] + OUTPUT F_DESCRCONTR2 DESCRIZ[34,] + CHECKTYPE NORMAL + ADD RUN AB0 -1 #F_CODICE #F_INDBIL + FLAGS "R" +END + +STRING F_DESCRCONTR1 33 +BEGIN + PROMPT 41 10 "" + FLAGS "D" +END + +STRING F_DESCRCONTR2 47 +BEGIN + PROMPT 27 11 "" + FLAGS "D" +END + +LIST F_DETTAGLIO 10 +BEGIN + PROMPT 2 13 "Dettaglio/Movimenti " + FIELD LF_ABPCON->DETT + ITEM " |Nessuno" + ITEM "D|Dettaglio" + ITEM "M|Movimenti" +END + +ENDPAGE + +ENDMASK diff --git a/ab/ab0300.cpp b/ab/ab0300.cpp new file mode 100755 index 000000000..d5a7e9283 --- /dev/null +++ b/ab/ab0300.cpp @@ -0,0 +1,67 @@ +// Compatta Piano dei Conti Analisi di Bilancio + +#include +#include +#include +#include +#include +#include + +#include "ab0.h" + +class Comp_abpcon : public TApplication +{ + //TSystemisamfile* _abpcon; + TLocalisamfile* _abpcon; + +public: + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + + Comp_abpcon() {} +}; + +bool Comp_abpcon::create() +{ + TApplication::create(); + + //_abpcon = new TSystemisamfile (LF_ABPCON); + _abpcon = new TLocalisamfile (LF_ABPCON); + + //_abpcon->packfile(); + //_abpcon->packindex(); + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool Comp_abpcon::destroy() +{ + delete _abpcon; + + return TApplication::destroy(); +} + +bool Comp_abpcon::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return FALSE; + + return FALSE; +} + +int ab0300 (int argc, char* argv[]) +{ + Comp_abpcon main_app; + main_app.run(argc, argv, "Compatta"); + return TRUE; +} + + + + + + + diff --git a/ab/batbpdb.h b/ab/batbpdb.h new file mode 100755 index 000000000..955a59656 --- /dev/null +++ b/ab/batbpdb.h @@ -0,0 +1,9 @@ +// campi maschera batbpdb.uml + +#define F_CODTAB 101 +#define F_DESCR 102 +#define F_GIORNO_INI 103 +#define F_MESE_INI 104 +#define F_GIORNO_FINE 105 +#define F_MESE_FINE 106 +#define F_DESCRAGG 107 diff --git a/ab/batbpdb.uml b/ab/batbpdb.uml new file mode 100755 index 000000000..8345bed0f --- /dev/null +++ b/ab/batbpdb.uml @@ -0,0 +1,99 @@ +#include "batbpdb.h" + +TOOLBAR "" 0 20 0 2 + +#include + +ENDPAGE + +PAGE "Tabella periodi di bilancio" 0 -1 0 19 + +GROUPBOX DLG_NULL 76 4 +BEGIN + PROMPT 1 0 "" + FLAGS "R" +END + +STRING F_CODTAB 2 +BEGIN + PROMPT 2 1 "Codice tabella " + HELP "Codice della tabella periodi di bilancio" + FIELD %PDB->CODTAB + KEY 1 + USE %PDB KEY 1 + INPUT CODTAB F_CODTAB + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + DISPLAY "Giorno inizio" I0 + DISPLAY "Mese inizio" I1 + DISPLAY "Giorno fine" I2 + DISPLAY "Mese fine" I3 + OUTPUT F_CODTAB CODTAB + OUTPUT F_DESCR S0 + CHECKTYPE REQUIRED +END + +STRING F_DESCR 50 +BEGIN + PROMPT 2 2 "Descrizione " + HELP "Descrizione del codice tabella periodi di bilancio" + CHECKTYPE REQUIRED + FIELD %PDB->S0 +END + +NUMBER F_GIORNO_INI 2 +BEGIN + PROMPT 2 5 "Inizio periodo " + HELP "Inserire il giorno relativo al periodo di inizio" + FIELD %PDB->I0 + FLAGS "R" + CHECKTYPE REQUIRED +END + +NUMBER F_MESE_INI 2 +BEGIN + PROMPT 21 5 "" + HELP "Inserire il mese relativo al periodo di inizio" + FIELD %PDB->I1 + FLAGS "R" + CHECKTYPE REQUIRED +END + +TEXT DLG_NULL +BEGIN + PROMPT 25 5 "gg/mm" +END + +NUMBER F_GIORNO_FINE 2 +BEGIN + PROMPT 2 7 "Fine periodo " + HELP "Inserire il giorno relativo alla fine del periodo" + FIELD %PDB->I2 + FLAGS "R" + CHECKTYPE REQUIRED +END + +NUMBER F_MESE_FINE 2 +BEGIN + PROMPT 21 7 "" + HELP "Inserire il mese relativo alla fine del periodo" + FIELD %PDB->I3 + FLAGS "R" + CHECKTYPE REQUIRED +END + +TEXT DLG_NULL +BEGIN + PROMPT 25 7 "gg/mm" +END + +STRING F_DESCRAGG 50 +BEGIN + PROMPT 2 9 "Descrizione " + FLAGS "D" + FIELD %PDB->S1 +END + +ENDPAGE + +ENDMASK