From c02ff1482ca693295ee8ddfceeb3931cc2a8aee0 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Mon, 18 May 2020 11:00:06 +0200 Subject: [PATCH 1/3] Patch level : 12.0 no-patch Files correlati : f90.exe d181.des f181.dir f181.trr all-masks Commento : - F9: migliorato codice. - Implementata gestione configurazione - Aggiunta classe per documenti cartacei - Aggiunti controlli per gestione file cart. se la cartella esiste - Corretto controllo file eliminati se la cartella esiste (se no dava errore) - Aggiunta colonna informazione errore per file non trovato nella cartella --- src/f9/f90.h | 6 +- src/f9/f90100.cpp | 45 ++++++------- src/f9/f90100.h | 58 +--------------- src/f9/f90200.cpp | 18 ++--- src/f9/f90300.cpp | 161 ++++++++++++++++++++++++++++++--------------- src/f9/f90300a.h | 3 +- src/f9/f90300a.uml | 24 ++++--- src/f9/f9lib01.cpp | 6 +- src/f9/f9lib01.h | 61 +++++++++++++++-- 9 files changed, 221 insertions(+), 161 deletions(-) diff --git a/src/f9/f90.h b/src/f9/f90.h index 85372265c..36222b9e2 100644 --- a/src/f9/f90.h +++ b/src/f9/f90.h @@ -1,8 +1,8 @@ -#ifndef __F90_H -#define __F90_H +#ifndef _F90_H_ +#define _F90_H_ int f90100(int argc, char* argv[]); int f90200(int argc, char* argv[]); int f90300(int argc, char* argv[]); -#endif // __F90_H +#endif // _F90_H_ diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index 1ef8f0203..54208855a 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -41,7 +41,12 @@ TString get_checksum(const int version) // Utilities //////////////////////////////////////////////////////// -TF9_config F9CONF; +// Getters per semplificare i get dai TRecorset + +const TString& recset_get_string(const TRecordset& rec, const char* field, int zero_filled = -1); +int recset_get_int(const TRecordset& rec, const char* field, int zero_filled = -1); +bool recset_get_bool(const TRecordset& rec, const char* field); +real recset_get_real(const TRecordset& rec, const char* field); TMask& descr_msk() { @@ -323,19 +328,12 @@ bool TMonitor_mask::save_conf_handler(TMask_field& f, KEY key) TString old_codsoc = F9CONF.get_ambiente(); if(config_mask.get(CF_CODSOC).empty()) warning_box("Codice Ambiente vuoto. Impossibile salvare i dati."); - F9CONF.set_ambiente (config_mask.get(CF_CODSOC)); - F9CONF.set_addr_doc (config_mask.get(CF_ADDRDOC)); - F9CONF.set_has_cartexp (config_mask.get_bool(CF_CARTEXP)); - F9CONF.set_has_checkvend (config_mask.get_bool(CF_CHECKVEND)); - F9CONF.set_viewmov (config_mask.get_bool(CF_VIEWMOVPRE)); + F9CONF.set_ambiente (config_mask.get(CF_CODSOC)); + F9CONF.set_addr_doc (config_mask.get(CF_ADDRDOC)); + F9CONF.set_has_cartexp (config_mask.get_bool(CF_CARTEXP)); + F9CONF.set_has_checkvend(config_mask.get_bool(CF_CHECKVEND)); + F9CONF.set_viewmov (config_mask.get_bool(CF_VIEWMOVPRE)); - if (F9CONF.get_ambiente().full()) - ini_set_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9, F9CONF.get_ambiente()); - if (F9CONF.get_addr_doc().full()) - ini_set_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9, F9CONF.get_addr_doc()); - ini_set_bool(CONFIG_DITTA, PAR_MOD, CHECKVEND_F9, F9CONF.get_has_checkvend()); - ini_set_bool(CONFIG_DITTA, PAR_MOD, CARTEXP_F9, F9CONF.get_has_cartexp()); - ini_set_bool(CONFIG_DITTA, PAR_MOD, VIEWMOV_F9, F9CONF.get_viewmov()); config_mask.close(); f9_app().edit_wa(old_codsoc); return true; @@ -692,11 +690,11 @@ void TMonitor_mask::open_win_conf() const m->set_handler(DLG_OK, save_conf_handler); - m->set(CF_CODSOC, ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9)); - m->set(CF_ADDRDOC, ini_get_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9)); - m->set(CF_CHECKVEND, ini_get_bool(CONFIG_DITTA, PAR_MOD, CHECKVEND_F9, true)); - m->set(CF_CARTEXP, ini_get_bool(CONFIG_DITTA, PAR_MOD, CARTEXP_F9)); - m->set(CF_VIEWMOVPRE, ini_get_bool(CONFIG_DITTA, PAR_MOD, VIEWMOV_F9)); + m->set(CF_CODSOC, F9CONF.get_ambiente()); + m->set(CF_ADDRDOC, F9CONF.get_addr_doc()); + m->set(CF_CHECKVEND, F9CONF.get_has_checkvend()); + m->set(CF_CARTEXP, F9CONF.get_has_cartexp()); + m->set(CF_VIEWMOVPRE, F9CONF.get_viewmov()); } m->run(); } @@ -892,13 +890,10 @@ TMask& TControllo_mask::get_win_order() m->add_radio(F_VERSO, 0, "Verso:", 1, 3, 59, "A|D", "Crescente|Decrescente", "Z"); //m->set_handler(DLG_OK, save_conf_handler); - _ordin = ini_get_string(CONFIG_DITTA, PAR_MOD, "ORDINAM", "D")[0]; - _verso = ini_get_string(CONFIG_DITTA, PAR_MOD, "VERSO", "A")[0]; + _ordin = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", "D")[0]; + _verso = ini_get_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", "A")[0]; m->set(F_ORDER, &_ordin); m->set(F_VERSO, &_verso); - - /*m->set(CF_CODSOC, ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9)); - m->set(CF_ADDRDOC, ini_get_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9));*/ } return *m; } @@ -909,8 +904,8 @@ void TControllo_mask::open_win_order() m.run(); _ordin = m.get(F_ORDER)[0]; _verso = m.get(F_VERSO)[0]; - ini_set_string(CONFIG_DITTA, PAR_MOD, "ORDINAM", &_ordin); - ini_set_string(CONFIG_DITTA, PAR_MOD, "VERSO", &_verso); + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "ORDINAM", &_ordin); + ini_set_string(CONFIG_DITTA, INI_PAR_MOD, "VERSO", &_verso); } TToken_string* TControllo_mask::selected_mov() diff --git a/src/f9/f90100.h b/src/f9/f90100.h index e0dd2e440..2c55f7403 100644 --- a/src/f9/f90100.h +++ b/src/f9/f90100.h @@ -1,12 +1,5 @@ -#ifndef __F90100H__ -#define __F90100H__ - -#define PAR_MOD "F9" -#define AMBIENTE_F9 "CODSOC" // Codice ambiente (codsoc) -#define ADDRCART_F9 "ADDDOC" // Indirizzo documenti cartacei -#define CHECKVEND_F9 "CHECKVEND" // Flag controlli per vendite (quando hai fatt. con Campo) -#define CARTEXP_F9 "CARTEXP" // Flag esporta documenti cartacei -#define VIEWMOV_F9 "VIEWMOVPRE" // Flag visualizza moviementi prima di estrarre +#ifndef _F90100_H_ +#define _F90100_H_ #include "execp.h" #include "f90100a.h" @@ -53,41 +46,6 @@ public: -class TF9_config -{ - // todo: controllare che siano sqlsafe - - TString _ambiente; // Codice ambiente (codsoc) - TString _addr_doc; // Indirizzo documenti cartacei - bool _cartexp{ false }; - bool _checkvend{ false }; - bool _viewmovpre{ false }; - -public: - const TString& get_ambiente() const { return _ambiente; } - const TString& get_addr_doc() const { return _addr_doc; } - bool get_has_cartexp() const { return _cartexp; } - bool get_has_checkvend() const { return _checkvend; } - bool get_viewmov() const { return _viewmovpre; } - - void set_ambiente(const char* cod) { _ambiente.cut(0) << cod; } - void set_addr_doc(const char* add) { _addr_doc.cut(0) << add; } - void set_has_cartexp(const bool flag) { _cartexp = flag; } - void set_has_checkvend(const bool flag){ _checkvend = flag; } - void set_viewmov(const bool flag) { _viewmovpre = flag; } // Unused. - - TF9_config() - { - _ambiente = ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9); - _addr_doc = ini_get_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9); - } -}; - -extern TF9_config F9CONF; - - - - class TF9_app : public TSkeleton_application { //friend class TEstrai_mask; @@ -261,14 +219,4 @@ inline bool open_mov(const TRectype& mov) return ok; } - - - -// Getters per semplificare i get dai TRecorset - -const TString& recset_get_string(const TRecordset& rec, const char* field, int zero_filled = -1); -int recset_get_int(const TRecordset& rec, const char* field, int zero_filled = -1); -bool recset_get_bool(const TRecordset& rec, const char* field); -real recset_get_real(const TRecordset& rec, const char* field); - -#endif //__F90100H__ \ No newline at end of file +#endif //_F90100_H_ \ No newline at end of file diff --git a/src/f9/f90200.cpp b/src/f9/f90200.cpp index ece67f31d..1ed6cd970 100644 --- a/src/f9/f90200.cpp +++ b/src/f9/f90200.cpp @@ -184,15 +184,15 @@ void TF9_categorie_doc::main_loop() DRT_TIPOCAU ", " DRT_TIPOMOV ", " DRT_OPCEE ")\nVALUES('" << - ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9) << "', '" << - row->get(1) << "', '" << // Catdoc - escape(row->get(2)) << "', '" << // Descr - row->get(3) << "', '" << // Classe doc sost. - row->get(4) << "', '" << // Causale sost. - escape(row->get(5)) << "', '" << // Causale cont - escape(row->get(6)) << "', '" << // Tipo caus. cont - escape(row->get(7)) << "', '" << // Tipo mov. - row->get(8) << "');\n"; // "Operat. CEE" + F9CONF.get_ambiente() << "', '" << + row->get(1) << "', '" << // Catdoc + escape(row->get(2)) << "', '" << // Descr + row->get(3) << "', '" << // Classe doc sost. + row->get(4) << "', '" << // Causale sost. + escape(row->get(5)) << "', '" << // Causale cont + escape(row->get(6)) << "', '" << // Tipo caus. cont + escape(row->get(7)) << "', '" << // Tipo mov. + row->get(8) << "');\n"; // "Operat. CEE" ok &= fp_db().sq_set_exec(query, false) && fp_db().sq_commit(); if (!ok) break; diff --git a/src/f9/f90300.cpp b/src/f9/f90300.cpp index 8fc75bba8..eddc66b76 100644 --- a/src/f9/f90300.cpp +++ b/src/f9/f90300.cpp @@ -14,10 +14,9 @@ #include "mov.h" #include "isam.h" #include "f9cart.h" +#include "f9lib01.h" -#define INI_ESTENSIONI "DOCUMENTI_EXT" #define TABMOD_CARTDIR "S0" -#define F9_ADDRCART "ADDRCART" /////////////////////////////////////////////////////////////////////////////// // TImport_msk @@ -52,24 +51,25 @@ class TGestione_doc_cartacei_f9_msk : public TAutomask TString numreg; TString user; }; - TString _addr_cart; // Indirizzo cartella doc. cartacei F9 + const TString& _addr_cart; // Indirizzo cartella doc. cartacei F9 std::unique_ptr> _extensions; // todo: controllare che con TString funzioni l'ordinamento, quindi la find std::unique_ptr _import_msk; std::map _list_file; bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + void check_addr_cart() const; static void check_deleted(); bool check_file_exist(const TString& file) const; void delete_file(); - bool doc_already_exists(_In_ const TFilename& file, _Out_ TString& numreg) const; + bool doc_already_exists(const TFilename& file, _Out_ TString& numreg) const; void fill(); - static TString get_addrcart(); static TToken_string& get_valid_extensions(); void load_extensions(); bool load_file(const TFilename& file, const TString& numreg); void open_config_win() const; void open_import_win(); + static void remove_file_from_f9cart(const std::set& files); bool verify_extension(const TFilename& file); public: @@ -99,36 +99,49 @@ bool TGestione_doc_cartacei_f9_msk::on_field_event(TOperable_field& o, TField_ev return true; } +void TGestione_doc_cartacei_f9_msk::check_addr_cart() const +{ + const TFilename f(_addr_cart); + if (f.full() && !f.exist()) + { + warning_box("Cartella documenti cartacei non trovata.\nSalvare nuovamente le impostazioni."); + open_config_win(); + } +} + void TGestione_doc_cartacei_f9_msk::check_deleted() { // Controllo che non ci siano file nella cartella eliminati da piu' di un mese, altrimenti li elimino TString_array result; - TString s = get_addrcart(); s << "eliminati\\"; - list_files(s, result); - FOR_EACH_ARRAY_ITEM(result, nr, file) + TFilename s; s << TFilename(F9CONF.get_addr_cart()).slash_terminate() << "eliminati\\"; + if (s.exist()) { - const char* deletedfile = *(TString*)(file); - HANDLE h_file = CreateFile(deletedfile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - FILETIME last_access_time; - SYSTEMTIME time; - bool flag = false; - if (h_file != INVALID_HANDLE_VALUE) + list_files(s, result); + FOR_EACH_ARRAY_ITEM(result, nr, file) { - if(GetFileTime(h_file, NULL, &last_access_time, NULL)) + const char* deletedfile = *(TString*)(file); + HANDLE h_file = CreateFile(deletedfile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + FILETIME last_access_time; + SYSTEMTIME time; + bool flag = false; + if (h_file != INVALID_HANDLE_VALUE) { - FileTimeToSystemTime(&last_access_time, &time); - TDate today = TDate(TODAY); - if(time.wMonth < (unsigned short)today.month() - 1 || - time.wMonth == (unsigned short)today.month() - 1 && time.wDay <= (unsigned short)today.day()) + if (GetFileTime(h_file, NULL, &last_access_time, NULL)) { - flag = true; - CloseHandle(h_file); - DeleteFile(deletedfile); + FileTimeToSystemTime(&last_access_time, &time); + TDate today = TDate(TODAY); + if (time.wMonth < (unsigned short)today.month() - 1 || + time.wMonth == (unsigned short)today.month() - 1 && time.wDay <= (unsigned short)today.day()) + { + flag = true; + CloseHandle(h_file); + DeleteFile(deletedfile); + } } } + if (!flag) + CloseHandle(h_file); } - if(!flag) - CloseHandle(h_file); } } @@ -153,8 +166,11 @@ void TGestione_doc_cartacei_f9_msk::delete_file() f9cart.put(F9C_FILENAME, filename); f9cart.put(F9C_NUMREG, numreg); f9cart.read(); - TFilename filecart = get_addrcart(); filecart << filename; - TFilename deleted = get_addrcart(); deleted << "eliminati" << SLASH; + TFilename filecart(F9CONF.get_addr_cart()); + filecart.slash_terminate(); + TFilename deleted(filecart); + filecart << filename; + deleted << "eliminati" << SLASH; if (!deleted.exist()) make_dir(deleted); deleted << filename; @@ -189,14 +205,15 @@ void TGestione_doc_cartacei_f9_msk::fill() sf.hide(); sf.destroy(); _list_file.clear(); - std::vector file_err; + std::set file_err; if(files.first() == NOERR) { do { const TString& namefile = files.get(F9C_FILENAME); - if(!check_file_exist(namefile)) - file_err.emplace_back(namefile); + bool not_exist = false; + if((not_exist = !check_file_exist(namefile))) + file_err.insert(namefile); const TString& numreg = files.get(F9C_NUMREG); TString datamov, caus, numdoc, nprot, descrmov; mov.zero(); @@ -207,39 +224,62 @@ void TGestione_doc_cartacei_f9_msk::fill() caus = mov.get(MOV_CODCAUS); numdoc = mov.get(MOV_NUMDOCEXT); if(numdoc.empty()) numdoc = mov.get(MOV_NUMDOC); - nprot = mov.get(MOV_PROTIVA); + nprot << mov.get(MOV_REG) << "/" << mov.get(MOV_PROTIVA); descrmov = mov.get(MOV_DESCR); } TToken_string& r = sf.row(-1); - r.add(" ", 0); // F_SEL - r.add(namefile); // F_FILENAME - r.add(files.get(F9C_LOADDATE)); // F_DATACARIC - r.add(numreg); // F_NUMREG - r.add(datamov); // F_DATAMOV - r.add(caus); // F_CAUS - r.add(numdoc); // F_NUMDOC - r.add(nprot); // F_NPROTOCOL - r.add(descrmov); // F_DESCRMOV + r.add(" ", 0); // F_SEL + r.add(namefile); // F_FILENAME + r.add(files.get(F9C_LOADDATE)); // F_DATACARIC + r.add(numreg); // F_NUMREG + r.add(datamov); // F_DATAMOV + r.add(caus); // F_CAUS + r.add(numdoc); // F_NUMDOC + r.add(nprot); // F_NPROTOCOL + r.add(descrmov); // F_DESCRMOV + r.add(not_exist ? "IL FILE NON E' PRESENTE IN ARCHIVIO." : ""); // F_INFO _list_file.insert({ namefile, { namefile, files.get(F9C_LOADDATE), numreg, files.get(F9C_USER) } }); } while (files.next() == NOERR); sf.force_update(); } sf.show(); -} + if(!file_err.empty()) + { + int count = 0; + const bool m = (int)file_err.size() == 1; + const char p = m ? 'o' : 'i'; + TString msg; msg << (int)file_err.size() << " file non " << (m ? "e'" : "sono") << " stat" << p << + " trovat" << p << ".\nSi prega di rimuoverl" << p << " dall'elenco\n\nFile non trovat" << p << ":"; -TString TGestione_doc_cartacei_f9_msk::get_addrcart() -{ - return ini_get_string(CONFIG_DITTA, "F9", F9_ADDRCART); + for(auto it = file_err.begin(); it != file_err.end(); ++it) + { + if (count++ == 10) + { + msg << "\n" << "..."; + break; + } + msg << "\n" << *it << " [Num. Reg.: " << _list_file.find(*it)->second.numreg << "]"; + } +#ifndef DBG + const bool del = warning_box(msg); +#else + if (yesno_box(msg)) + { + remove_file_from_f9cart(file_err); + fill(); + } +#endif + } } TToken_string& TGestione_doc_cartacei_f9_msk::get_valid_extensions() { - static TToken_string ext(ini_get_string(CONFIG_DITTA, "F9", "DOCUMENTI_EXT"), ','); + static TToken_string ext(F9CONF.get_estensioni(), ','); if (ext.items() == 0) { ext = ".pdf, .doc, .docx, .xls, .xlsx, .jpg, .jpeg, .png"; - ini_set_string(CONFIG_DITTA, "F9", INI_ESTENSIONI, ext); + F9CONF.set_estensioni(ext); } ext.replace(" ", ""); return ext; @@ -285,7 +325,7 @@ bool TGestione_doc_cartacei_f9_msk::load_file(const TFilename& file, const TStri #else f9cart.put(F9C_USER, user()); #endif - TFilename fdestin = get_addrcart(); + TFilename fdestin = F9CONF.get_addr_cart(); const TString filename = file.name(); fdestin << filename; const bool ok = CopyFile(file, fdestin, true); @@ -320,8 +360,8 @@ void TGestione_doc_cartacei_f9_msk::open_config_win() const msk->add_static (DLG_NULL, 0, "@BInserire nome cartella, all'interno della area dati della ditta", 2, 5); msk->add_string (102, 0, "", 2, 6, 64, "", 30); - msk->set(101, ini_get_string(CONFIG_DITTA, "F9", INI_ESTENSIONI)); - TString s = ini_get_string(CONFIG_DITTA, "F9", F9_ADDRCART); + msk->set(101, F9CONF.get_estensioni()); + TString s = F9CONF.get_addr_cart(); s.rtrim(1); s.ltrim(s.rfind('\\') + 1); msk->set(102, s); @@ -336,9 +376,9 @@ void TGestione_doc_cartacei_f9_msk::open_config_win() const warning_box("Si prega di inserire il nome della cartella per i documenti cartacei."); continue; } - else break; + break; } - ini_set_string(CONFIG_DITTA, "F9", INI_ESTENSIONI, msk->get(101)); + F9CONF.set_estensioni(msk->get(101)); TString dir = msk->get(102); if (dir.empty()) { @@ -362,8 +402,7 @@ void TGestione_doc_cartacei_f9_msk::open_config_win() const } else continue; } - ini_set_string(CONFIG_DITTA, "F9", F9_ADDRCART, path); - + F9CONF.set_addr_cart(path); break; } } @@ -391,24 +430,40 @@ void TGestione_doc_cartacei_f9_msk::open_import_win() fill(); } +void TGestione_doc_cartacei_f9_msk::remove_file_from_f9cart(const std::set& files) +{ + TLocalisamfile f9cart(LF_F9CART); + for(auto it = files.begin(); it != files.end(); ++it) + { + f9cart.zero(); + f9cart.put(F9C_FILENAME, *it); + f9cart.read(); + f9cart.remove(); + } +} + bool TGestione_doc_cartacei_f9_msk::verify_extension(const TFilename& file) { load_extensions(); return _extensions->find(file.ext()) != _extensions->end(); } -TGestione_doc_cartacei_f9_msk::TGestione_doc_cartacei_f9_msk(): TAutomask("f90300a"), _addr_cart(get_addrcart()) +TGestione_doc_cartacei_f9_msk::TGestione_doc_cartacei_f9_msk(): TAutomask("f90300a"), _addr_cart(F9CONF.get_addr_cart()) { if (_addr_cart.empty()) { message_box("Inserire nome cartella documenti cartacei."); open_config_win(); } + else + check_addr_cart(); check_deleted(); fill(); } + + /////////////////////////////////////////////////////////////////////////////// // TGestione_doc_cartacei_f9_app /////////////////////////////////////////////////////////////////////////////// diff --git a/src/f9/f90300a.h b/src/f9/f90300a.h index e9c7856fb..aaa90ac16 100644 --- a/src/f9/f90300a.h +++ b/src/f9/f90300a.h @@ -14,4 +14,5 @@ #define F_CAUS 106 #define F_NUMDOC 107 #define F_NPROTOCOL 108 -#define F_DESCRMOV 109 \ No newline at end of file +#define F_DESCRMOV 109 +#define F_INFO 110 diff --git a/src/f9/f90300a.uml b/src/f9/f90300a.uml index 8a6f542b7..6cd23189a 100644 --- a/src/f9/f90300a.uml +++ b/src/f9/f90300a.uml @@ -69,14 +69,15 @@ SPREADSHEET S_IMPORTED -1 -1 BEGIN PROMPT 0 0 "Doc Importati" ITEM "" - ITEM "FILENAME" - ITEM "DATACARIC" - ITEM "NUMREG" - ITEM "DATAMOV" - ITEM "CAUS" - ITEM "NUMDOC" - ITEM "NPROTOCOL" - ITEM "DESCRMOV" + ITEM "Nome File@25" + ITEM "Data\nCaricamento@10" + ITEM "Movimento\nContabile N.@7" + ITEM "Data\nMovimento@10" + ITEM "Causale@7" + ITEM "Num. Doc.@7" + ITEM "Reg./Prot. IVA@10" + ITEM "Descrizione@20" + ITEM "Info (Errori)@25" END ENDPAGE @@ -131,7 +132,7 @@ BEGIN PROMPT 0 6 "Numero documento" END -NUMBER F_NPROTOCOL 6 +STRING F_NPROTOCOL 10 BEGIN PROMPT 0 7 "Numero Protocollo IVA" END @@ -141,6 +142,11 @@ BEGIN PROMPT 0 8 "Descrizione mov." END +STRING F_INFO 50 +BEGIN + PROMPT 0 9 "Informazione file." +END + ENDPAGE diff --git a/src/f9/f9lib01.cpp b/src/f9/f9lib01.cpp index 11be372cb..4c1d27af6 100644 --- a/src/f9/f9lib01.cpp +++ b/src/f9/f9lib01.cpp @@ -1,9 +1,10 @@ #include "f9lib01.h" + #include "f1lib.h" #include "f901tab.h" #include "progind.h" #include "clifo.h" -#include +#include "cg2103.h" #include "mov.h" #include "../fp/fplib.h" @@ -837,6 +838,9 @@ std::shared_ptr TCategorie_doc::mov2cat(const int nu return find_tipodoc(tipodoc); } + + + /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/f9/f9lib01.h b/src/f9/f9lib01.h index 58aa1a4fe..4b750bdb2 100644 --- a/src/f9/f9lib01.h +++ b/src/f9/f9lib01.h @@ -1,11 +1,14 @@ -#ifndef __F901001_H__ -#define __F901001_H__ +#ifndef _F901001_H_ +#define _F901001_H_ + +#include #include "strings.h" #include "date.h" #include "real.h" -#include -#include +#include "cglib01.h" + +#define INI_PAR_MOD "F9" const TDate today(TODAY); @@ -69,6 +72,46 @@ enum state_fppro err_read_db = 999 // Errore lettura da fppro }; +class TF9_config +{ + // todo: controllare che siano sqlsafe + // Config in f90100: + + TString _ambiente; // Codice ambiente (codsoc) + TString _addr_doc; // Indirizzo documenti cartacei WebApp + bool _cartexp; + bool _checkvend; + bool _viewmovpre; + + // Config in f90300: + + TString _addr_cart; // Indirizzo cartella documenti cartacei + TString _estensioni; // Estensioni valide per il caricamenti dei doc. cart. + +public: + const TString& get_ambiente() const { return _ambiente; } + const TString& get_addr_doc() const { return _addr_doc; } + bool get_has_cartexp() const { return _cartexp; } + bool get_has_checkvend() const { return _checkvend; } + bool get_viewmov() const { return _viewmovpre; } + + const TString& get_addr_cart() const { return _addr_cart; } + const TString& get_estensioni() const { return _estensioni; } + + void set_ambiente(const TString& cod_amb); + void set_addr_doc(const TString& path); + void set_has_cartexp(bool flag); + void set_has_checkvend(bool flag); + void set_viewmov(bool flag); + + void set_addr_cart(const TString& path); + void set_estensioni(const TString& ext); + + TF9_config(); +}; + +extern TF9_config F9CONF; + class TCategorie_doc { public: @@ -317,4 +360,12 @@ public: TF9_dberr(); }; -#endif // #ifndef __F901001_H__ +class TF9_doccart : public TLocalisamfile +{ +public: + bool mov2doc(int numreg, _Out_ TFilename& doc); + + TF9_doccart() : TLocalisamfile(LF_F9CART) { } +}; + +#endif // #ifndef _F901001_H_ From 9b281f3916f7a25505238c3d5cd8b7469294798c Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Mon, 18 May 2020 11:06:10 +0200 Subject: [PATCH 2/3] Patch level : 12.0 no-patch Files correlati : f90.exe fpmenu.men d181.des f181.dir f181.trr all-masks Commento : Aggiunti programmi f9 al menu fp --- build/f90.vcxproj | 3 +++ build/f90.vcxproj.filters | 9 ++++++--- src/fp/fpmenu.men | 13 +++++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/build/f90.vcxproj b/build/f90.vcxproj index f693fb669..e9a484fa8 100644 --- a/build/f90.vcxproj +++ b/build/f90.vcxproj @@ -192,6 +192,9 @@ + + false + diff --git a/build/f90.vcxproj.filters b/build/f90.vcxproj.filters index 37a771970..206dccabc 100644 --- a/build/f90.vcxproj.filters +++ b/build/f90.vcxproj.filters @@ -48,15 +48,15 @@ Headers - - Headers - Headers Headers + + Headers + @@ -74,6 +74,9 @@ Sources + + Sources + diff --git a/src/fp/fpmenu.men b/src/fp/fpmenu.men index 8813a270b..862b5b31c 100644 --- a/src/fp/fpmenu.men +++ b/src/fp/fpmenu.men @@ -6,7 +6,7 @@ Flags = "" Item_01 = "Manutenzione modulo", [FPMENU_003] Item_02 = "Invio fatture", "fp0 -2", "" Item_03 = "Monitor Fatture Passive", "fp0 -3", "" -Item_04 = "Archiviazione Sostitutiva", "f90 -0", "" +Item_04 = "Archiviazione Sostitutiva", [FPMENU_004] Item_05 = "Stampe", [FPMENU_002] [FPMENU_002] @@ -24,4 +24,13 @@ Module = fp Flags = "" Item_01 = "Configurazione", "fp0 -0", "", 10210 Item_02 = "Inserimento riferimenti C/F", "fp0 -1", "" -Item_03 = "Personalizzazioni FP", "fp0 -4", "" \ No newline at end of file +Item_03 = "Personalizzazioni FP", "fp0 -4", "" + +[FPMENU_004] +Caption = "Archiviazione Sostitutiva" +Picture = +Module = f9 +Flags = "" +Item_01 = "Estrazioni", "f90 -0", "" +Item_02 = "Categorie documentali", "f90 -1", "" +Item_03 = "Gestione file doc. cartacei", "f90 -2", "" \ No newline at end of file From 3751907260decda46070d0fc5e1f30eaa073cfd0 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Mon, 18 May 2020 11:30:18 +0200 Subject: [PATCH 3/3] Patch level : 12.0 no-patch Files correlati : f90.exe fpmenu.men d181.des f181.dir f181.trr all-masks Commento : Aggiunto file al progetto --- src/f9/f9lib02.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/f9/f9lib02.cpp diff --git a/src/f9/f9lib02.cpp b/src/f9/f9lib02.cpp new file mode 100644 index 000000000..a9d54a0a7 --- /dev/null +++ b/src/f9/f9lib02.cpp @@ -0,0 +1,84 @@ +#include + +#include "f9lib01.h" + +#include "applicat.h" + +#define AMBIENTE_F9 "CODSOC" // Codice ambiente (codsoc) +#define ADDRCART_F9 "ADDRCART" +#define ADDRDOC_F9 "ADDDOC" // Indirizzo documenti cartacei +#define ESTENSIONI_F9 "DOCUMENTI_EXT" // +#define CARTEXP_F9 "CARTEXP" // Flag esporta documenti cartacei +#define CHECKVEND_F9 "CHECKVEND" // Flag controlli per vendite (quando hai fatt. con Campo) +#define VIEWMOV_F9 "VIEWMOVPRE" // Flag visualizza moviementi prima di estrarre + +TF9_config F9CONF; + +void TF9_config::set_ambiente(const TString& cod_amb) +{ + ini_set_string(CONFIG_DITTA, "F9", AMBIENTE_F9, cod_amb); + _ambiente = cod_amb; +} + +void TF9_config::set_addr_doc(const TString& path) +{ + ini_set_string(CONFIG_DITTA, "F9", ADDRDOC_F9, path); + _addr_doc = path; +} + +void TF9_config::set_has_cartexp(const bool flag) +{ + ini_set_bool(CONFIG_DITTA, "F9", CARTEXP_F9, flag); + _cartexp = flag; +} + +void TF9_config::set_has_checkvend(const bool flag) +{ + ini_set_bool(CONFIG_DITTA, "F9", CHECKVEND_F9, flag); + _checkvend = flag; +} + +void TF9_config::set_viewmov(const bool flag) +{ + ini_set_bool(CONFIG_DITTA, "F9", VIEWMOV_F9, flag); + _viewmovpre = flag; +} + +void TF9_config::set_addr_cart(const TString& path) +{ + ini_set_string(CONFIG_DITTA, "F9", ADDRCART_F9, path); + _addr_cart = path; +} + +void TF9_config::set_estensioni(const TString& ext) +{ + ini_set_string(CONFIG_DITTA, "F9", ESTENSIONI_F9, ext); + _estensioni = ext; +} + +TF9_config::TF9_config() +{ + _ambiente = ini_get_string(CONFIG_DITTA, "F9", AMBIENTE_F9); + _addr_cart = ini_get_string(CONFIG_DITTA, "F9", ADDRCART_F9); + _addr_doc = ini_get_string(CONFIG_DITTA, "F9", ADDRDOC_F9); + _cartexp = ini_get_bool (CONFIG_DITTA, "F9", CARTEXP_F9); + _checkvend = ini_get_bool (CONFIG_DITTA, "F9", CHECKVEND_F9, true); + _estensioni = ini_get_string(CONFIG_DITTA, "F9", ESTENSIONI_F9); + _viewmovpre = ini_get_bool (CONFIG_DITTA, "F9", VIEWMOV_F9); +} + +/////////////////////////////////////////////////////////////////////////////// +// TF9_doccart +/////////////////////////////////////////////////////////////////////////////// + +bool TF9_doccart::mov2doc(int numreg, _Out_ TFilename& doc) +{ + zero(); + setkey(2); // Ricerca per NUMREG + put(F9C_NUMREG, numreg); + const bool ok = read() == NOERR; + doc.cut(0); + if (ok) + doc << TFilename(F9CONF.get_addr_cart()).slash_terminate() << get(F9C_FILENAME); + return ok; +} \ No newline at end of file