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/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_
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
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