diff --git a/ci/ci0300.cpp b/ci/ci0300.cpp index 752c76cec..afcc06fb0 100755 --- a/ci/ci0300.cpp +++ b/ci/ci0300.cpp @@ -1,12 +1,9 @@ #include #include -#include -#include -#include -#include +#include #include #include -#include +#include #include @@ -14,106 +11,16 @@ #include "cilib.h" #include "ci0300.h" -/////////////////////////////////////////////////////////// -// TSelezioneGiorno_mask -/////////////////////////////////////////////////////////// - -class TSelezioneGiorno_mask : public TAlmanac_mask -{ -protected: -// ereditato da TMask - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return TRUE; } - -public: -// apertura del foglio interno di gestione dei documenti - void open_inner_sheet(TDate date, TString doctype); - -public: -// Costruttore - TSelezioneGiorno_mask() : TAlmanac_mask() { } -// Distruttore - ~TSelezioneGiorno_mask() { } -}; - -void TSelezioneGiorno_mask::open_inner_sheet(TDate date, TString doctype) -{ - TString filter; - TRelation* relation; - TCursor* cursor; - TCursor_sheet* sheet; - int exitval; - - filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")"; - filter << "&&"; - filter << "(TIPODOC==\"" << doctype << "\")"; - - relation = new TRelation(LF_DOC); - relation->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); - cursor = new TCursor(relation, filter); - sheet = new TCursor_sheet(cursor, - "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC", - TR("Selezione documenti"), - HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"), - 0, 1); - // tbc: gestione dei buttons per bene - - exitval = sheet->run(); - - switch(exitval) - { - case K_ENTER: - break; - case K_DEL: - break; - //case K_NEW: tbc: gestione di questi eventi. come chiamare applicazione e come al posto di k_del e bmp nelle maschere - // break; - default: - break; - } -} /////////////////////////////////////////////////////////// -// TImmissioneDocumenti +// TImmissioneDocumenti_app /////////////////////////////////////////////////////////// -class TImmissioneDocumenti: public TSkeleton_application -{ -private: - TSelezioneGiorno_mask* _mask; - - TString_array _tabs; // titoli dei tabs - TString_array _filters; // filtri tipodoc per ogni tab - TBit_array _flags; // flag di presenza dei documenti - - TDate* _newyearsday; // capodanno dell'anno corrente, per uso interno - int _year; // anno corrente - -private: - void init_tabs(); - void init_flags(); - -protected: - virtual bool create(void); - virtual void main_loop(); - virtual bool destroy(void) ; - -public: - bool has_documents(TDate& day); // passata come funzione alla maschera - void change_year(int newyear); // passata come funzione alla maschera - -public: - TImmissioneDocumenti() : _flags(366) {} - virtual ~TImmissioneDocumenti() {} -}; - // Overrides -bool TImmissioneDocumenti::create() +bool TImmissioneDocumenti_app::create() { - _mask = new TSelezioneGiorno_mask(); - - _year = TDate(TODAY).year(); - _newyearsday = new TDate(1,1,_year); + _mask = new TImmissioneDocumenti_mask(); init_tabs(); init_flags(); @@ -121,14 +28,14 @@ bool TImmissioneDocumenti::create() return TSkeleton_application::create(); } -bool TImmissioneDocumenti::destroy() +bool TImmissioneDocumenti_app::destroy() { delete _mask; return TSkeleton_application::destroy(); } -void TImmissioneDocumenti::main_loop() +void TImmissioneDocumenti_app::main_loop() { while (_mask->run() == K_ENTER) { @@ -138,25 +45,24 @@ void TImmissioneDocumenti::main_loop() // Chiamate dalla maschera -void TImmissioneDocumenti::change_year(int newyear) +void TImmissioneDocumenti_app::change_year(int newyear) { _year = newyear; - _newyearsday = new TDate(1,1,_year); + _newyearsday.set_year(_year); init_flags(); } -bool TImmissioneDocumenti::has_documents(TDate& day) +bool TImmissioneDocumenti_app::has_documents(TDate& day) { - return ((_flags)[day-*_newyearsday]); + return ((_flags)[day-_newyearsday]); } // Inizializzazioni -void TImmissioneDocumenti::init_tabs() +void TImmissioneDocumenti_app::init_tabs() { - TMask_field* currpage; - TConfig* configfile; + TString almanacname; TString pagename; TString currfilter; int items; @@ -164,59 +70,157 @@ void TImmissioneDocumenti::init_tabs() _tabs.destroy(); _filters.destroy(); - configfile = new TConfig("ci0300.ini"); - configfile->list_paragraphs(_tabs); + TConfig configfile("ci0300.ini"); + configfile.list_paragraphs(_tabs); items = _tabs.items(); for (int i=0;iget("Filtro",_tabs.row(i)); - currpage = _mask->find_by_fieldname(pagename); + currfilter = configfile.get("Filtro",_tabs.row(i)); + TMask_field* currpage = _mask->find_by_fieldname(pagename); currpage->set_prompt(_tabs.row(i)); _filters.add(currfilter); - _mask->activate_almanac(i, TDate(TODAY)); + almanacname.format("Almanacco %2d",i); + _mask->activate_almanac((TAlmanac_field*)_mask->find_by_fieldname(almanacname), i, TDate(TODAY)); } } -void TImmissioneDocumenti::init_flags() +void TImmissioneDocumenti_app::init_flags() { + int items; TDate currdate; TDate currstart; TString filter; - TRelation* relation; - TSorted_cursor* cursor; - int items; filter << "ANNO==\"" << _year << "\""; - relation = new TRelation(LF_DOC); - cursor = new TSorted_cursor(relation, "ANNO", filter); + TRelation relation(LF_DOC); - items =cursor->items(); + TSorted_cursor cursor(&relation, "ANNO", filter); - for (*cursor=0;cursor->pos()lfile().get_date(DOC_DATADOC); - _flags.set(currdate-*_newyearsday, 1); + currdate = relation.lfile().get_date(DOC_DATADOC); + _flags.set(currdate-_newyearsday, 1); } } +/////////////////////////////////////////////////////////// +// TImmissioneDocumenti_mask +/////////////////////////////////////////////////////////// + +// Routines Proprietarie + +void TImmissioneDocumenti_mask::open_inner_sheet(TDate date, TString doctype) +{ + int exitval; + + TString filter; + filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")"; + filter << "&&"; + filter << "(CODNUM==\"" << doctype << "\")"; + + TRelation relation(LF_DOC); + relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); + + TCursor cursor(&relation, filter); + + TCursor_sheet sheet(&cursor, + "ANNO|CODNUM|TIPODOC|NUMDOCRIF|STATO|DATADOCRIF|NDOC|20->RAGSOC", + TR("Selezione documenti"), + HR("Anno|Num.|Tipo|Docum.Rif.|Stato|Data@10|Documento|Ragione Sociale@50"), + 0x10||0x02||0x04); + + exitval = sheet.run(); + + switch(exitval) + { + case K_ENTER: + case K_DEL: + case K_INS: + call_ve0(exitval, relation, date, doctype); + break; + case K_ESC: + break; + default: + break; + } +} + +void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, TString& doctype) +{ + TFilename tempfile; + tempfile.tempdir(); + tempfile.add("cicallsve0.ini"); + + { + TConfig configfile(tempfile); + + switch(exitval) + { + case K_ENTER: + configfile.set("Action", "Modify", "main"); + configfile.set("CODNUM", doctype, "33"); + configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33"); + break; + case K_DEL: + configfile.set("Action", "Delete", "main"); + configfile.set("CODNUM", doctype, "33"); + configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33"); + break; + case K_INS: + configfile.set("Action", "Insert", "main"); + configfile.set("NDOC", date.string(), "33"); + break; + default: + break; + } + + configfile.set("PROVV", "D", "33"); + configfile.set("ANNO", curr_almanac()->selected_year(), "33"); + configfile.set("CODNUM", doctype, "33"); + } + + TString commandline; + + commandline.format("ve0 -0 /i%s",tempfile); + + TExternal_app ve(commandline); + ve.run(); + + remove_file(tempfile); +} + +// Richiami all'applicazione + +void TImmissioneDocumenti_mask::change_year(int newyear) +{ + immissione_documenti_app().change_year(newyear); +} + +bool TImmissioneDocumenti_mask::is_date_void(TDate& cdate) +{ + return !(immissione_documenti_app().has_documents(cdate)); +} + /////////////////////////////////////////////////////////// // Mains /////////////////////////////////////////////////////////// int ci0300(int argc, char* argv[]) { - TImmissioneDocumenti a ; + TImmissioneDocumenti_app a ; a.run(argc, argv, TR("Immissione Documenti")); return 0; } int ci0400(int argc, char* argv[]) { - TImmissioneDocumenti a ; + TImmissioneDocumenti_app a ; a.run(argc, argv, TR("Immissione Documenti")); return 0; } diff --git a/ci/ci0300.h b/ci/ci0300.h index 094513bb0..1702a9a76 100755 --- a/ci/ci0300.h +++ b/ci/ci0300.h @@ -1,6 +1,70 @@ #ifndef __CI0300_H #define __CI0300_H +/////////////////////////////////////////////////////////// +// TImmissioneDocumenti_mask +/////////////////////////////////////////////////////////// +class TImmissioneDocumenti_mask : public TAlmanac_mask +{ +protected: +// ereditato da TMask + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly) { return TRUE; } + +public: +// ereditato da TAlmanac_mask + virtual bool is_date_void(TDate& cdate); + virtual void change_year(int newyear); + +public: +// apertura del foglio interno di gestione dei documenti + void open_inner_sheet(TDate date, TString doctype); + +private: +// chiamata del programma ve0 + void call_ve0(int exitval, TRelation& relation, TDate& date, TString& doctype); + +public: +// Costruttore + TImmissioneDocumenti_mask() : TAlmanac_mask() { } +// Distruttore + ~TImmissioneDocumenti_mask() { } +}; + +/////////////////////////////////////////////////////////// +// TImmissioneDocumenti_app +/////////////////////////////////////////////////////////// + +class TImmissioneDocumenti_app: public TSkeleton_application +{ +private: + TImmissioneDocumenti_mask* _mask; + + TString_array _tabs; // titoli dei tabs + TString_array _filters; // filtri tipodoc per ogni tab + TBit_array _flags; // flag di presenza dei documenti + + TDate _newyearsday; // capodanno dell'anno corrente, per uso interno + int _year; // anno corrente + +private: + void init_tabs(); + void init_flags(); + +protected: + virtual bool create(void); + virtual void main_loop(); + virtual bool destroy(void) ; + +public: + bool has_documents(TDate& day); // passata come funzione alla maschera + void change_year(int newyear); // passata come funzione alla maschera + +public: + TImmissioneDocumenti_app() : _flags(366), _year(TDate(TODAY).year()), _newyearsday(1,1,_year) {} + virtual ~TImmissioneDocumenti_app() {} +}; + +inline TImmissioneDocumenti_app& immissione_documenti_app() { return (TImmissioneDocumenti_app&)main_app(); } #endif // __CI0300_H diff --git a/ci/cilib.cpp b/ci/cilib.cpp index 904280dc6..7419ad00e 100755 --- a/ci/cilib.cpp +++ b/ci/cilib.cpp @@ -16,6 +16,14 @@ // TAlmanac_mask /////////////////////////////////////////////////////////// +TMask_field* TAlmanac_mask::parse_field(TScanner& scanner) +{ + const TString& k = scanner.key(); + if (k == "ALMANAC") + return new TAlmanac_field(this); + return TAutomask::parse_field(scanner); +} + bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { int year; @@ -55,9 +63,9 @@ bool TAlmanac_mask::on_field_event(TOperable_field& o, TField_event e, long joll return TRUE; } -void TAlmanac_mask::activate_almanac(int page, TDate& sdate) +void TAlmanac_mask::activate_almanac(TAlmanac_field* fld, int page, TDate& sdate) { - _almanacs[page] = new TAlmanac_field(this); + _almanacs[page] = fld; _almanacs[page]->set_selected_date(sdate); if (page>_activepages) { @@ -76,13 +84,12 @@ void TAlmanac_mask::activate_almanac(int page, TDate& sdate) void TAlmanac_mask::change_year(int newyear) { - // tbc: gestire il pointer a funzione + return; } - bool TAlmanac_mask::has_documents(TDate& cdate) + bool TAlmanac_mask::is_date_void(TDate& cdate) { - return FALSE; - // tbc: gestire il pointer a funzione + return TRUE; } TAlmanac_mask::TAlmanac_mask() @@ -108,9 +115,9 @@ TField_window* TAlmanac_field::create_window(int x, int y, int dx, int dy, WINDO return new TAlmanac_window(x, y, dx, dy, parent, this); } -bool TAlmanac_field::has_documents(TDate& cdate) +bool TAlmanac_field::is_date_void(TDate& cdate) { - return almanac_mask().has_documents(cdate); + return almanac_mask().is_date_void(cdate); } void TAlmanac_field::set_selected_day(int nday) @@ -165,11 +172,6 @@ void TAlmanac_window::update() TField_window::update(); - if (almanac_fld().show_month_name()) - { - // tbc: gestire la scritta del mese e dei giorni - } - cdate = almanac_fld().selected_date(); cdate.set_day(1); @@ -178,14 +180,30 @@ void TAlmanac_window::update() pad = - almanac_fld().padding(); row = 3; + if (almanac_fld().show_month_name()) + { + str.format("%s", itom(cdate.month())); + rct_l = rct.left + rct_w; + rct_t = rct.top + rct_h; + stringat(rct_l + pad + 2, rct_t + pad + 2, str); + } + + for (int i=1;i<7;i++) + { + str.format("%c", itow(i)[0]); + rct_l = rct.left + rct_w*i; + rct_t = rct.top + rct_h*2; + stringat(rct_l + pad + 2, rct_t + pad + 2, str); + } + set_color(COLOR_GRAY, COLOR_LTGRAY); while (!cdate.is_end_month()) { - if (almanac_fld().has_documents(cdate)) - col_b=COLOR_YELLOW; - else + if (almanac_fld().is_date_void(cdate)) col_b=COLOR_LTGRAY; + else + col_b=COLOR_YELLOW; if (almanac_fld().is_selected(cdate.day())) col_f=COLOR_RED; diff --git a/ci/cilib.h b/ci/cilib.h index e7dbc57f0..60c1239d8 100755 --- a/ci/cilib.h +++ b/ci/cilib.h @@ -87,7 +87,7 @@ public: // @access Public Member public: - bool has_documents(TDate& cdate); + bool is_date_void(TDate& cdate); // @access Public Member public: @@ -157,11 +157,13 @@ protected: protected: // override da TAutomask virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + // override da TAutomask + virtual TMask_field* parse_field(TScanner& scanner); // @access Public Member public: // @cmember Gestione calendari: Attiva l'almanacco sulla pagina specificata per la data specificata - void activate_almanac(int page, TDate& sdate); + void activate_almanac(TAlmanac_field* fld, int page, TDate& sdate); // @cmember Gestione calendari: Cambia l'anno su tutti i calendari void set_year(int newyear); // @cmember Gestione calendari: Ritorna il giorno selezionato nella pagina corrente @@ -170,9 +172,9 @@ public: // @access Public Member public: // @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva - bool has_documents(TDate& cdate); // tbc: gestire il puntatore a funzione + virtual bool is_date_void(TDate& cdate); // @cmember Gestione eventi calendario: Controlla la presenza di documenti nella data attiva - void change_year(int newyear); + virtual void change_year(int newyear); // @access Public Member public: diff --git a/ci/cilib.uml b/ci/cilib.uml index 49fd55a3d..7176aa7ab 100755 --- a/ci/cilib.uml +++ b/ci/cilib.uml @@ -49,50 +49,144 @@ ENDPAGE PAGE "Pagina 00" -1 -1 80 20 +ALMANAC "Almanacco 00" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 01" -1 -1 80 20 +ALMANAC "Almanacco 01" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 02" -1 -1 80 20 +ALMANAC "Almanacco 02" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 03" -1 -1 80 20 +ALMANAC "Almanacco 03" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 04" -1 -1 80 20 +ALMANAC "Almanacco 04" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 05" -1 -1 80 20 +ALMANAC "Almanacco 05" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 06" -1 -1 80 20 +ALMANAC "Almanacco 06" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 07" -1 -1 80 20 +ALMANAC "Almanacco 07" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 08" -1 -1 80 20 +ALMANAC "Almanacco 08" 76 16 +BEGIN +END + ENDPAGE PAGE "Pagina 09" -1 -1 80 20 +ALMANAC "Almanacco 09" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 10" -1 -1 80 20 + +ALMANAC "Almanacco 10" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 11" -1 -1 80 20 + +ALMANAC "Almanacco 11" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 12" -1 -1 80 20 + +ALMANAC "Almanacco 12" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 13" -1 -1 80 20 + +ALMANAC "Almanacco 13" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 14" -1 -1 80 20 + +ALMANAC "Almanacco 14" 76 16 +BEGIN +END + +ENDPAGE + + +PAGE "Pagina 15" -1 -1 80 20 + +ALMANAC "Almanacco 15" 76 16 +BEGIN +END + ENDPAGE