#include #include #include #include #include #include #include #include "ci0.h" #include "cilib.h" #include "ci0400.h" #include "ci0400a.h" #include "..\ve\velib.h" /////////////////////////////////////////////////////////// // TImmissioneDocumenti_app /////////////////////////////////////////////////////////// // Inizializzazioni void TImmissioneDocumenti_app::init_tabs() { TImmissioneDocumenti_mask & m = mask(); m.filters().destroy(); m.ordered().reset(); TConfig configfile(CONFIG_DITTA, "ci"); int items = 0; TToken_string pagenames; while (items == 0 || configfile.exist("Descr",items)) { pagenames.add(configfile.get("Descr", NULL,items, "Fatture")); m.filters().add(configfile.get("Filter", NULL,items, "F01")); m.activate_almanac(F_AL01 + items, items, TDate(TODAY)); items++; } m.set_caption(pagenames); m.disable_page(items); } void TImmissioneDocumenti_app::init_flags() { TImmissioneDocumenti_mask & m = mask(); const int items = m.filters().items(); TDate currdate; TDate currstart; m.ordered().reset(); for(int i = 0; i < items; i++) { TString filter; filter << "(ANNO==\"" << _year << "\")" << "&&" << "(CODNUM==\"" << m.filters().row(i) << "\")"; TRelation relation(LF_DOC); TSorted_cursor cursor(&relation, "DATADOC", filter); TCodice_numerazione c(m.filters().row(i)); if (!c.dont_test_datadoc()) m.ordered().set(i); const int items = cursor.items(); if (m.flags().items()>i) ((TBit_array&) m.flags()[i]).reset(); else m.flags().add(new TBit_array(366),i); TBit_array & fl = (TBit_array&) m.flags()[i]; TDate caput_anni(1, 1, _year); for (cursor = 0; cursor.pos() < items; ++cursor) fl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1); caput_anni += fl.last_one(); m.almanac(i).set_insert_date(m.ordered()[i] ? caput_anni : botime); } } // Overrides bool TImmissioneDocumenti_app::create() { _mask = new TImmissioneDocumenti_mask(); init_tabs(); init_flags(); return TSkeleton_application::create(); } bool TImmissioneDocumenti_app::destroy() { delete _mask; return TSkeleton_application::destroy(); } void TImmissioneDocumenti_app::main_loop() { while (_mask->run() != K_QUIT); } // Chiamate dalla maschera void TImmissioneDocumenti_app::change_year(int newyear, bool init_flg) { _year = newyear; if (init_flg) init_flags(); } bool TImmissioneDocumenti_app::has_documents(int currpage, TDate& day) { const TDate caput_anni(1, 1, _year); return (((TBit_array&) _mask->flags()[currpage])[day - caput_anni]); } /////////////////////////////////////////////////////////// // TImmissioneDocumenti_mask /////////////////////////////////////////////////////////// // Routines Proprietarie void TImmissioneDocumenti_mask::open_day_mask(TDate date) { if (!date.ok()) date = curr_almanac().selected_date(); const int currpage = curr_page(); const TString & doctype = filters().row(currpage); TString filter; filter << "(ANSI(DATADOC)==\"" << date.string(ANSI) << "\")" << "&&" << "(CODNUM==\"" << doctype << "\")"; TRelation relation(LF_DOC); relation.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); TCursor cursor(&relation, filter); if (!almanac().can_insert(date) && is_date_void(currpage, date)) return; 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"), almanac().can_insert(date) ? 0x02|0x04 : 0x04); KEY exitval = sheet.run(); switch(exitval) { case K_ENTER: call_ve0(exitval, relation, date, doctype); break; case K_DEL: call_ve0(exitval, relation, date, doctype); break; case K_INS: call_ve0(exitval, relation, date, doctype); break; case K_ESC: break; default: break; } if (ordered()[currpage]) { TDate caput_anni(1, 1, date.year()); TBit_array & fl = (TBit_array&) flags()[currpage]; filter.cut(0); filter << "(ANNO==\"" << date.year() << "\")" << "&&" << "(CODNUM==\"" << filters().row(currpage) << "\")"; cursor.setfilter(filter); const int items = cursor.items(); for (cursor = 0; cursor.pos() < items; ++cursor) fl.set(relation.lfile().get_date(DOC_DATADOC) - caput_anni, 1); caput_anni += fl.last_one(); almanac(currpage).set_insert_date(caput_anni); } } void TImmissioneDocumenti_mask::call_ve0(int exitval, TRelation& relation, TDate& date, const TString& doctype) { TFilename tempfile; tempfile.tempdir(); tempfile.add("ci.ini"); { TConfig configfile(tempfile); switch(exitval) { case K_ENTER: configfile.set("Action", "Modify", "Transaction"); configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33"); break; case K_DEL: configfile.set("Action", "Delete", "Transaction"); configfile.set("NDOC", relation.lfile().get(DOC_NDOC), "33"); break; case K_INS: configfile.set("Action", "Insert", "Transaction"); configfile.set("DATADOC", date.string(), "33"); break; default: break; } configfile.set("PROVV", "D", "33"); configfile.set("ANNO", date.year(), "33"); configfile.set("CODNUM", doctype, "33"); } TString commandline; commandline.format("ve0 -0 /i%s",(const char*)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(int currpage, TDate& cdate) { return !(immissione_documenti_app().has_documents(currpage, cdate)); } /////////////////////////////////////////////////////////// // Mains /////////////////////////////////////////////////////////// int ci0300(int argc, char* argv[]) { TImmissioneDocumenti_app a ; a.run(argc, argv, TR("Immissione Documenti")); return 0; } int ci0400(int argc, char* argv[]) { TImmissioneDocumenti_app a ; a.run(argc, argv, TR("Immissione Documenti")); return 0; }