From 8d64ad881919143f89f2569fb8dae2c79f102acd Mon Sep 17 00:00:00 2001 From: mtollari Date: Mon, 10 Jul 2017 15:02:18 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:=2012.?= =?UTF-8?q?0=20420=20Files=20correlati=20=20=20=20=20:=20Commento=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20:=20Spostata=20classe=20per=20gestio?= =?UTF-8?q?ne=20db=20nel=20file=20principale,=20c'=C3=A8=20qualcosa=20che?= =?UTF-8?q?=20non=20la=20fa=20funzionare=20al=20momento=20lasciamo=20tutto?= =?UTF-8?q?=20cos=C3=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/branches/R_10_00@23935 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/tf/tf0100.cpp | 231 +++++++++++++++++++++++++++++++++++++++++++++- src/tf/tf0102.cpp | 221 -------------------------------------------- 2 files changed, 227 insertions(+), 225 deletions(-) diff --git a/src/tf/tf0100.cpp b/src/tf/tf0100.cpp index 833df5727..aef09537a 100644 --- a/src/tf/tf0100.cpp +++ b/src/tf/tf0100.cpp @@ -252,6 +252,228 @@ bool saveRec(TToken_string row, bool esportato) return rCust.write_rewrite(trasfatt) == NOERR; } +///////////////////////////////////////////////////////////////////////////////////// +// TTrFa_record +///////////////////////////////////////////////////////////////////////////////////// + +// Imposta il valore di un campo variant +void TTrFa_record::set(const char* fld, const TVariant& var) +{ + CHECK(fld && *fld, "Null field name"); + + if (var.is_null()) + { + _fields.remove(fld); + } + else + { + TVariant* obj = (TVariant*)_fields.objptr(fld); + if (obj != NULL) + *obj = var; + else + _fields.add(fld, new TVariant(var)); + } +} + +// Imposta il valore di un campo intero +void TTrFa_record::set(const char* fld, long val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo stringa +void TTrFa_record::set(const char* fld, const char* val) +{ + if (val == NULL) + set(fld, NULL_VARIANT); + else + { + const TVariant var(val); + set(fld, var); + } +} + +// Imposta il valore di un campo stringa +void TTrFa_record::set(const char* fld, const TString& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo numerico +void TTrFa_record::set(const char* fld, const real& val) +{ + const TVariant var(val); + set(fld, var); +} + +// Imposta il valore di un campo data in formato ISO +void TTrFa_record::set(const char* fld, const TDate& val) +{ + if (val.ok()) + { + const TVariant var(val); + set(fld, var); + } + else + set(fld, ""); +} + +// Imposta il valore di un campo booleano +void TTrFa_record::set(const char* fld, bool var) +{ + set(fld, var ? "SI" : "NO"); +} + +// Legge il valore di un campo variant +const TVariant& TTrFa_record::get(const char* fld) const +{ + const TVariant* var = (const TVariant*)_fields.objptr(fld); + return var ? *var : NULL_VARIANT; +} + +// Converte un variant in una stringa valida per SQLite +const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var) const +{ + const TFieldtypes vt = var.type(); + if (vt == _realfld) + { + const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0); + TString& tmp = get_tmp_string(); + tmp << '\'' << v.string() << '\''; + tmp.replace(',','.'); + return tmp; + } + if (vt == _datefld) + { + TString& tmp = get_tmp_string(); + tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; + return tmp; + } + + const TString& str = var.as_string(); + + bool apici = vt == _alfafld; + if (apici && str[0] != '0' && real::is_natural(str)) + apici = false; + + if (!apici) + return str; + + TString& tmp = get_tmp_string(); + tmp = str; + for (int a = str.rfind('\''); a >= 0; a--) + { + if (tmp[a] == '\'') + tmp.insert("'", a); + } + tmp.insert("'", 0); + tmp << '\''; + return tmp; +} + +// Elimina il record in base ai campi chiave +bool TTrFa_record::remove() +{ + TString256 query; + query << "DELETE FROM " << _table << " WHERE "; + int nkf = 0; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + if (nkf++ > 0) + query << " AND "; + query << fld << '=' << var2str(fld, var) ; + } + } + CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); + query << ';'; + return xvt_sql_execute(_db, query, NULL, 0L) > 0; +} + +// Callback per la sottostante funzione search() +static int tff_search_record(void* jolly, int cols, char** values, char** names) +{ + TTrFa_record& rec = *(TTrFa_record*)jolly; + for (int i = 0; i < cols; i++) + rec.set(names[i], values[i]); + return 0; +} + +// Carica un record in base ai campi chiave +bool TTrFa_record::search() +{ + CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table); + TString256 query; + query << "SELECT * FROM " << _table << " WHERE "; + FOR_EACH_TOKEN(_key, fld) + { + const TVariant& var = get(fld); + if (!var.is_null()) + query << fld << '=' << var2str(fld, var) << " AND "; + } + query.rtrim(5); + query << ';'; + return xvt_sql_execute(_db, query, tff_search_record, this) == 1; +} + +// Carica un record in base ad un massimo di 3 campi chiave +bool TTrFa_record::search(const char* k1, const char* k2, const char* k3) +{ + _fields.destroy(); + + set(_key.get(0), k1); + if (k2 && *k2) + set(_key.get(1), k2); + if (k3 && *k3) + set(_key.get(2), k3); + + return search(); +} + +// Aggiunge un record al db +bool TTrFa_record::insert() +{ + CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); + + TString query, values; + query << "INSERT INTO " << _table << "\n("; + FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) + { + const TVariant& var = get(fld); + if (!var.is_null()) + { + query << fld << ','; + values << var2str(fld, var) << ','; + } + } + query.rtrim(1); values.rtrim(1); + query << ")\nVALUES (" << values << ");"; + return xvt_sql_execute(_db, query, NULL, 0L) == 1; +} + +// Crea un record della tabella data ed imposta i nomi dei campi chiave +TTrFa_record::TTrFa_record(const char* table) : _table(table), _key(15, ',') +{ + _key = ini_get_string("./tff.ini", table, "INDEX_1"); + if (_key.empty()) + { + // Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT + TConfig cfg("tff.ini", table); + TAssoc_array& fields = cfg.list_variables(); + FOR_EACH_ASSOC_STRING(fields, obj, key, str) + { + if (key[3] == 'K') + _key.add(key); + } + } + CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); +} + + ///////////////////////////////////////////////////////////////////////////////////// // TTrFa_app ///////////////////////////////////////////////////////////////////////////////////// @@ -489,6 +711,7 @@ bool TTrFa_app::send(TTrFa_mask* msk) { log(-1, "WTF!?"); xvt_sql_rollback(_db); + message_box("Esportazione fallita"); return false; } if(xvt_sql_commit(_db)) @@ -575,7 +798,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) cli = true; else fo = true; - if(cli & fo) break; + if(cli || fo) break; } // Metto qua il numero di telefono per dopo TString80 tel; tel << firm.get("PTEL") << firm.get("TEL"); @@ -606,7 +829,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) dte.set("P1_KEYPRGINVIO", DTE_PROVV); dte.set("P1_TRASMITTPAESE", paese); - dte.set("P1_TRASMITTCOD", _cofi); + dte.set("P1_TRASMITTCOD", ""); dte.set("P1_TIPOINVIO", "DTE"); dte.set("P1_TELEFONO", tel); dte.set("P1_MAIL", firm.get("MAIL")); @@ -642,7 +865,7 @@ bool TTrFa_app::tff0100(TSheet_field& sheet) dtr.set("P1_KEYPRGINVIO", DTR_PROVV); dtr.set("P1_TRASMITTPAESE", paese); - dtr.set("P1_TRASMITTCOD", _cofi); + dtr.set("P1_TRASMITTCOD", ""); dtr.set("P1_TIPOINVIO", "DTR"); dtr.set("P1_TELEFONO", tel); dtr.set("P1_MAIL", firm.get("MAIL")); @@ -731,7 +954,7 @@ bool TTrFa_app::tff0300(TString key, TRectype r_ana) // Per il nome e cognome non mi faccio gli stessi problemi con i cli/fo in quanto stiamo parlando di cose "nuove" // Se il cliente ha messo nome e cognome insieme puņ bruciare nelle fiamme dei controlli dell'agenzia delle entrate TString paiv = rfso.partita_IVA(), ragsoc = rfso.ragione_sociale(), nom = rfso.nome(), cog = rfso.cognome(); - + TTrFa_record tff0300f("TFF0300F"); tff0300f.set("P3_KEYPRGINVIO", key); tff0300f.set("P3_FISCIVAPAESE", rfso.stato_residenzaISO()); diff --git a/src/tf/tf0102.cpp b/src/tf/tf0102.cpp index a70de1905..6e48b85f8 100644 --- a/src/tf/tf0102.cpp +++ b/src/tf/tf0102.cpp @@ -2,227 +2,6 @@ #include "tf0100b.h" -///////////////////////////////////////////////////////////////////////////////////// -// TTrFa_record -///////////////////////////////////////////////////////////////////////////////////// - -// Imposta il valore di un campo variant -void TTrFa_record::set(const char* fld, const TVariant& var) -{ - CHECK(fld && *fld, "Null field name"); - - if (var.is_null()) - { - _fields.remove(fld); - } - else - { - TVariant* obj = (TVariant*)_fields.objptr(fld); - if (obj != NULL) - *obj = var; - else - _fields.add(fld, new TVariant(var)); - } -} - -// Imposta il valore di un campo intero -void TTrFa_record::set(const char* fld, long val) -{ - const TVariant var(val); - set(fld, var); -} - -// Imposta il valore di un campo stringa -void TTrFa_record::set(const char* fld, const char* val) -{ - if (val == NULL) - set(fld, NULL_VARIANT); - else - { - const TVariant var(val); - set(fld, var); - } -} - -// Imposta il valore di un campo stringa -void TTrFa_record::set(const char* fld, const TString& val) -{ - const TVariant var(val); - set(fld, var); -} - -// Imposta il valore di un campo numerico -void TTrFa_record::set(const char* fld, const real& val) -{ - const TVariant var(val); - set(fld, var); -} - -// Imposta il valore di un campo data in formato ISO -void TTrFa_record::set(const char* fld, const TDate& val) -{ - if (val.ok()) - { - const TVariant var(val); - set(fld, var); - } - else - set(fld, ""); -} - -// Imposta il valore di un campo booleano -void TTrFa_record::set(const char* fld, bool var) -{ - set(fld, var ? "SI" : "NO"); -} - -// Legge il valore di un campo variant -const TVariant& TTrFa_record::get(const char* fld) const -{ - const TVariant* var = (const TVariant*)_fields.objptr(fld); - return var ? *var : NULL_VARIANT; -} - -// Converte un variant in una stringa valida per SQLite -const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var) const -{ - const TFieldtypes vt = var.type(); - if (vt == _realfld) - { - const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0); - TString& tmp = get_tmp_string(); - tmp << '\'' << v.string() << '\''; - tmp.replace(',','.'); - return tmp; - } - if (vt == _datefld) - { - TString& tmp = get_tmp_string(); - tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\''; - return tmp; - } - - const TString& str = var.as_string(); - - bool apici = vt == _alfafld; - if (apici && str[0] != '0' && real::is_natural(str)) - apici = false; - - if (!apici) - return str; - - TString& tmp = get_tmp_string(); - tmp = str; - for (int a = str.rfind('\''); a >= 0; a--) - { - if (tmp[a] == '\'') - tmp.insert("'", a); - } - tmp.insert("'", 0); - tmp << '\''; - return tmp; -} - -// Elimina il record in base ai campi chiave -bool TTrFa_record::remove() -{ - TString256 query; - query << "DELETE FROM " << _table << " WHERE "; - int nkf = 0; - FOR_EACH_TOKEN(_key, fld) - { - const TVariant& var = get(fld); - if (!var.is_null()) - { - if (nkf++ > 0) - query << " AND "; - query << fld << '=' << var2str(fld, var) ; - } - } - CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table); - query << ';'; - return xvt_sql_execute(_db, query, NULL, 0L) > 0; -} - -// Callback per la sottostante funzione search() -static int tff_search_record(void* jolly, int cols, char** values, char** names) -{ - TTrFa_record& rec = *(TTrFa_record*)jolly; - for (int i = 0; i < cols; i++) - rec.set(names[i], values[i]); - return 0; -} - -// Carica un record in base ai campi chiave -bool TTrFa_record::search() -{ - CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table); - TString256 query; - query << "SELECT * FROM " << _table << " WHERE "; - FOR_EACH_TOKEN(_key, fld) - { - const TVariant& var = get(fld); - if (!var.is_null()) - query << fld << '=' << var2str(fld, var) << " AND "; - } - query.rtrim(5); - query << ';'; - return xvt_sql_execute(_db, query, tff_search_record, this) == 1; -} - -// Carica un record in base ad un massimo di 3 campi chiave -bool TTrFa_record::search(const char* k1, const char* k2, const char* k3) -{ - _fields.destroy(); - - set(_key.get(0), k1); - if (k2 && *k2) - set(_key.get(1), k2); - if (k3 && *k3) - set(_key.get(2), k3); - - return search(); -} - -// Aggiunge un record al db -bool TTrFa_record::insert() -{ - CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table); - - TString query, values; - query << "INSERT INTO " << _table << "\n("; - FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm) - { - const TVariant& var = get(fld); - if (!var.is_null()) - { - query << fld << ','; - values << var2str(fld, var) << ','; - } - } - query.rtrim(1); values.rtrim(1); - query << ")\nVALUES (" << values << ");"; - return xvt_sql_execute(_db, query, NULL, 0L) == 1; -} - -// Crea un record della tabella data ed imposta i nomi dei campi chiave -TTrFa_record::TTrFa_record(const char* table) : _table(table), _key(15, ',') -{ - _key = ini_get_string("./tff.ini", table, "INDEX_1"); - if (_key.empty()) - { - // Cerco di costruire i nomi della chiave cercando la K, come in P1_KEYHEADERFATT - TConfig cfg("tff.ini", table); - TAssoc_array& fields = cfg.list_variables(); - FOR_EACH_ASSOC_STRING(fields, obj, key, str) - { - if (key[3] == 'K') - _key.add(key); - } - } - CHECKS(!_key.empty_items(), "Invalid primary key for table ", table); -} - ///////////////////////////////////////////////////////////////////////////////////// // TTrFa_cursors /////////////////////////////////////////////////////////////////////////////////////