diff --git a/src/bs/bs0.cpp b/src/bs/bs0.cpp index 520da762f..07242df99 100644 --- a/src/bs/bs0.cpp +++ b/src/bs/bs0.cpp @@ -6,8 +6,9 @@ int main(int argc, char** argv) const int p = argc > 1 ? argv[1][1]-'0' : 0; switch(p) { - case 1: bs0200(argc, argv); break; - default: bs0100(argc, argv); break; + case 1: bs0200(argc, argv); break; // Impostazioni Beestore + case 2: bs0300(argc, argv); break; // Importazione da SKNET + default: bs0100(argc, argv); break; // Beestore Synchronizer } return 0; } diff --git a/src/bs/bs0.h b/src/bs/bs0.h index 1c404d95e..35acb3fc5 100644 --- a/src/bs/bs0.h +++ b/src/bs/bs0.h @@ -1,3 +1,3 @@ -int bs0200(int argc, char* argv[]); int bs0100(int argc, char* argv[]); - +int bs0200(int argc, char* argv[]); +int bs0300(int argc, char* argv[]); diff --git a/src/bs/bs0200.cpp b/src/bs/bs0200.cpp index 721051476..ea3691f57 100644 --- a/src/bs/bs0200.cpp +++ b/src/bs/bs0200.cpp @@ -25,6 +25,8 @@ #include #include +#include "bsutility.h" + #define BS_DTULTAGG "DtUltAgg" /////////////////////////////////////////////////////////// @@ -196,94 +198,6 @@ public: virtual void main_loop(); }; -// Converte una TDate in una data SQL -const TString& date2sql(const TDate& d) -{ - TString& tmp = get_tmp_string(); - if (d.ok()) - tmp.format("'%04d-%02d-%02d'", d.year(), d.month(), d.day()); - else - tmp = "NULL"; - return tmp; -} - -// Coverte un qualsiasi TVariant in stringa SQL -const TString& var2sql(const TVariant& var) -{ - TString& tmp = get_tmp_string(); - switch (var.type()) - { - case _nullfld: - tmp = "NULL"; - break; - case _boolfld: - tmp = var.as_bool() ? "1" : "0"; - break; - case _datefld: - tmp = date2sql(var.as_date()); - break; - case _intfld: - case _longfld: - var.as_string(tmp); - break; - case _realfld: - if (var.is_empty()) - tmp = "0"; - else - { - tmp = var.as_real().string(0, 2); - if (tmp.ends_with(".00")) - tmp.rtrim(3); - } - break; - default: - { - var.as_string(tmp); - const int pos = tmp.find('\''); - if (pos >= 0) - { - for (int i = tmp.len()-1; i >= pos; i--) - if (tmp[i] == '\'') tmp.insert("'", i); - } - tmp.insert("'"); - tmp << "'"; - } - break; - } - return tmp; -} - -// Coverte una qualsiasi espressione in stringa SQL -const TString& expr2sql(const TISAM_recordset& set, const char* expr) -{ - TVariant var; - TExpression e(expr, _strexpr, true); - if (e.numvar() == 0) - { - if (real::is_natural(expr)) - var = atoi(expr); - else - var = expr; - } else - if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr)) - { - var = set.get(expr); - } - else - { - for (int v = e.numvar()-1; v >= 0; v--) - { - var = set.get(e.varname(v)); - if (var.is_real() || var.is_bool()) - e.setvar(v, var.as_real()); - else - e.setvar(v, var.as_string()); - } - var = e.as_string(); - } - return var2sql(var); -} - // Carica da BeeStore i record con Origine=1, cioè generati da lui ed eventualmente aggiorna i corrispondenti in Campo void TBeeStore_sync::load_origine_1(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs) { @@ -444,7 +358,7 @@ void TBeeStore_sync::save_origine_2(TISAM_recordset& in_set, const char* out_tab str.cut(0) << "INSERT INTO " << out_table << "\n("; FOR_EACH_ARRAY_ROW(fields, sr, srow) str << (sr ? ", " : "") << srow->get(0); - str << ", Origine, Errore, "BS_DTULTAGG; + str << ", Origine, Errore, " BS_DTULTAGG; str << ")\nVALUES ("; FOR_EACH_ARRAY_ROW(fields, ir, irow) @@ -625,14 +539,14 @@ void TBeeStore_sync::sync_catmer(const TDate& dal, const TDate& al) void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) { TString_array fields; - fields.add("CodPadre|"ANAMAG_CODART); - fields.add("DSArticolo|"ANAMAG_DESCR); - fields.add("DSArticoloAgg|"ANAMAG_DESCRAGG"[1,70]"); + fields.add("CodPadre|" ANAMAG_CODART); + fields.add("DSArticolo|" ANAMAG_DESCR); + fields.add("DSArticoloAgg|" ANAMAG_DESCRAGG"[1,70]"); fields.add("CodUntMagazzino|49->UM"); - fields.add("CodIva|"ANAMAG_CODIVA); - fields.add("CodLinea|"ANAMAG_GRMERC"[1,3]"); - fields.add("CodCategMerceologica|"ANAMAG_GRMERC); - fields.add("Bloccato|"ANAMAG_SOSPESO); + fields.add("CodIva|" ANAMAG_CODIVA); + fields.add("CodLinea|" ANAMAG_GRMERC"[1,3]"); + fields.add("CodCategMerceologica|" ANAMAG_GRMERC); + fields.add("Bloccato|" ANAMAG_SOSPESO); TString query = build_query(LF_ANAMAG, dal, al); query << "\nJOIN " << LF_UMART << " INTO CODART==CODART"; @@ -641,16 +555,16 @@ void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) sync_table(art, "tieArticoli", fields); fields.destroy(); - fields.add("CodArticolo|"ANAMAG_CODART); - fields.add("CodPadre|"ANAMAG_CODART); + fields.add("CodArticolo|" ANAMAG_CODART); + fields.add("CodPadre|" ANAMAG_CODART); save_origine_2(art, "tieArtVarianti", fields); } void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al) { TString_array fields; - fields.add("CodArticolo|"ANAMAG_CODART); - fields.add("BarCode|"ANAMAG_DESCR); + fields.add("CodArticolo|" ANAMAG_CODART); + fields.add("BarCode|" ANAMAG_DESCR); TString str(255); str << "SELECT "; @@ -794,7 +708,7 @@ void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al) var = a.fisica() ? 1 : 2; return true; } - if (xvt_str_same(fldname, "Cliente")) + if (xvt_str_same(fldname, " CLIente")) { const char tipocf = rec.get(CLI_TIPOCF).as_string()[0]; var = tipocf == 'C'; @@ -806,7 +720,7 @@ void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al) var = tipocf == 'F'; return true; } - if (_strnicmp(fldname,"Cli_",4) == 0) + if (_strnicmp(fldname," CLI_",4) == 0) { const char tipocf = rec.get(CLI_TIPOCF).as_string()[0]; return tipocf != 'C'; @@ -862,7 +776,7 @@ void TBeeStore_sync::load_clifo(char tipocf) { TString str(255); str << "SELECT * FROM tieAnagCFP WHERE (Origine=1)AND"; - str << '(' << (tipocf == 'F' ? "Fornitore" : "Cliente") << "=1);"; + str << '(' << (tipocf == 'F' ? "Fornitore" : " CLIente") << "=1);"; TFast_isamfile clifo(LF_CLIFO); @@ -870,11 +784,11 @@ void TBeeStore_sync::load_clifo(char tipocf) odbc.connect(_dsn, _usr, _psw); const TRecnotype n = odbc.items(); - str.cut(0) << TR("Importazione ") << (tipocf == 'F' ? TR("Fornitori") : TR("Clienti")); + str.cut(0) << TR("Importazione ") << (tipocf == 'F' ? TR("Fornitori") : TR(" CLIenti")); TProgress_monitor pi(n, str); for (bool ok = odbc.move_first(); ok; ok = odbc.move_next()) { - long codcf = odbc.get(tipocf == 'F' ? "For_CodFor" : "Cli_CodCG").as_int(); + long codcf = odbc.get(tipocf == 'F' ? "For_CodFor" : " CLI_CodCG").as_int(); if (codcf <= 0) { const TString& cod_pk = odbc.get("Cod_PK").as_string(); @@ -970,33 +884,33 @@ void TBeeStore_sync::load_clifo(char tipocf) void TBeeStore_sync::save_clifo(int cfmask, const TDate& dal, const TDate& al) { TString_array fields; - fields.add("Cod_PK|"CLI_CODCF); - fields.add("RagSoc|"CLI_RAGSOC); - fields.add("Cognome|"CLI_RAGSOC); - fields.add("Nome|"CLI_RAGSOC); - fields.add("Indirizzo|"CLI_INDCF); - fields.add("Citta|"CLI_COMCF); - fields.add("Cap|"CLI_CAPCF); + fields.add("Cod_PK|" CLI_CODCF); + fields.add("RagSoc|" CLI_RAGSOC); + fields.add("Cognome|" CLI_RAGSOC); + fields.add("Nome|" CLI_RAGSOC); + fields.add("Indirizzo|" CLI_INDCF); + fields.add("Citta|" CLI_COMCF); + fields.add("Cap|" CLI_CAPCF); fields.add("Provincia|"); fields.add("Telefono|PTEL+TEL"); fields.add("Cellulare|PTEL2+TEL2"); fields.add("CellulareSMS|PTEL3+TEL3"); - fields.add("EMail|"CLI_MAIL); - fields.add("PartitaIva|"CLI_PAIV); - fields.add("CodFiscale|"CLI_COFI); + fields.add("EMail|" CLI_MAIL); + fields.add("PartitaIva|" CLI_PAIV); + fields.add("CodFiscale|" CLI_COFI); fields.add("Tipo|1"); - fields.add("Sesso|"CLI_SESSO); - fields.add("DTNascita|"CLI_DATANASC); - fields.add("ComuneNascita|"CLI_COMNASC); + fields.add("Sesso|" CLI_SESSO); + fields.add("DTNascita|" CLI_DATANASC); + fields.add("ComuneNascita|" CLI_COMNASC); fields.add("PVNascita|"); - fields.add("Cliente|"); + fields.add(" CLIente|"); fields.add("Fornitore|"); - fields.add("For_CodFor|"CLI_CODCF); - fields.add("For_Blocco|"CLI_SOSPESO); - fields.add("Cli_CodCG|"CLI_CODCF); - fields.add("Cli_Blocco|"CLI_SOSPESO); + fields.add("For_CodFor|" CLI_CODCF); + fields.add("For_Blocco|" CLI_SOSPESO); + fields.add(" CLI_CodCG|" CLI_CODCF); + fields.add(" CLI_Blocco|" CLI_SOSPESO); fields.add("MagInserAnagrafica|1"); - fields.add("CodStato|"CLI_STATOCF); + fields.add("CodStato|" CLI_STATOCF); fields.add("Annullato|0"); TString query = build_query(LF_CLIFO, dal, al); @@ -1115,16 +1029,16 @@ void TBeeStore_sync::sync_listino(const TString& listino) TString dtfin; dtfin << "DTFine|'" << dt_fine.string() << '\''; TString_array fields; - fields.add("Cod_PK|"RCONDV_CODRIGA); - fields.add("CodPadre|"RCONDV_CODRIGA); + fields.add("Cod_PK|" RCONDV_CODRIGA); + fields.add("CodPadre|" RCONDV_CODRIGA); //fields.add("CodArticolo|"RCONDV_CODRIGA); // NON metterlo! fields.add("TipoPrezzo|'1'"); // 1=Listino fields.add(eur); - fields.add("Prezzo|"RCONDV_PREZZO); + fields.add("Prezzo|" RCONDV_PREZZO); fields.add("Prezzo2|0"); - fields.add("Sconto|"RCONDV_SCONTO); + fields.add("Sconto|" RCONDV_SCONTO); if (real::is_natural(listino)) - fields.add("NumListino|"RCONDV_COD); + fields.add("NumListino|" RCONDV_COD); fields.add(descr); fields.add(dtini); fields.add(dtfin); diff --git a/src/bs/bs0300.cpp b/src/bs/bs0300.cpp index 9a6d8d24f..c89140dc1 100644 --- a/src/bs/bs0300.cpp +++ b/src/bs/bs0300.cpp @@ -28,6 +28,8 @@ #include #include +#include "bsutility.h" + #define BS_DTULTAGG "DtUltAgg" /////////////////////////////////////////////////////////// @@ -87,10 +89,10 @@ const TString clifo_add_note(TLocalisamfile& cfv, TString& note) } /////////////////////////////////////////////////////////// -// TBeeStore_cache +// TSknet_cache /////////////////////////////////////////////////////////// -class TBeeStore_cache : TCache +class TSknet_cache : TCache { protected: virtual TObject* key2obj(const char* key) @@ -118,90 +120,14 @@ public: { return anag(rec.cursor()->curr()); } }; -static TBeeStore_cache _anagr; +static TSknet_cache _anagr; + /////////////////////////////////////////////////////////// -// TBeestore_bin +// TSknet_mask /////////////////////////////////////////////////////////// -class TBeestore_bin : public TObject -{ -private: - std::maptables; - std::map>idSpool; - TString _dsn; - TString _usr; - TString _psw; - -public: - void addTable(const TString table, const TString key); - void put(const TString table, const TString id); - bool clean(); - void setConnection(const TString dsn, const TString usr, const TString psw); - TBeestore_bin() {} -}; - -void TBeestore_bin::addTable(const TString table, const TString key) -{ - tables.insert(std::pair(table, key)); -} - -void TBeestore_bin::put(const TString table, const TString id) -{ - if (idSpool.find(table) == idSpool.end()) - { - std::vector app; app.push_back(id); - idSpool.insert(std::pair>(table, app)); - } - else - { - idSpool[table].push_back(id); - } -} - -bool TBeestore_bin::clean() -{ - TODBC_recordset rcs(""); - rcs.connect(_dsn, _usr, _psw); - bool ok = true; - for (auto it = tables.begin(); it != tables.end() && ok; ++it) - { - TString query; - for (auto ij = idSpool[it->first].begin(); ij != idSpool[it->first].end(); ++ij) - { - query << "DELETE FROM [" << it->first << "] WHERE [" << it->second << "] = '" << *ij << "';\n"; - } - ok &= rcs.exec(query) == 1; - } - if (ok) - { - tables.clear(); - idSpool.clear(); - ok = rcs.commit() != -1; - } - return ok; -} - -void TBeestore_bin::setConnection(const TString dsn, const TString usr, const TString psw) -{ - _dsn = dsn; - _usr = usr; - _psw = psw; -} - -TBeestore_bin& mastroBin() -{ - TBeestore_bin* mosieurBinne = NULL; - if (mosieurBinne == NULL) - mosieurBinne = new TBeestore_bin; - return *mosieurBinne; -} - -/////////////////////////////////////////////////////////// -// TBeeStore_mask -/////////////////////////////////////////////////////////// - -class TBeeStore_mask : public TAutomask +class TSknet_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); @@ -216,11 +142,11 @@ public: TDate get_date(const char* fld) { TMask_field* f = find_by_fieldname(fld); return TDate(f ? f->get() : EMPTY_STRING); } - TBeeStore_mask() : TAutomask("bs0200a") { autoload(); } - ~TBeeStore_mask() { autosave(); } + TSknet_mask() : TAutomask("bs0300a") { autoload(); } + ~TSknet_mask() { autosave(); } }; -bool TBeeStore_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +bool TSknet_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { if (e == fe_modify && !o.empty()) { @@ -254,7 +180,7 @@ bool TBeeStore_mask::on_field_event(TOperable_field& o, TField_event e, long jol return true; } -void TBeeStore_mask::autoload() +void TSknet_mask::autoload() { // Carica i valori default dei parametri dal [bs] in ditta,ini FOR_EACH_MASK_FIELD(*this, i, f) @@ -265,7 +191,7 @@ void TBeeStore_mask::autoload() } } -void TBeeStore_mask::autosave() const +void TSknet_mask::autosave() const { // Salva i valori dei parametri in [bs] in ditta,ini FOR_EACH_MASK_FIELD(*this, i, f) @@ -277,12 +203,12 @@ void TBeeStore_mask::autosave() const } /////////////////////////////////////////////////////////// -// TBeeStore_sync +// TSknet_sync /////////////////////////////////////////////////////////// typedef bool TFieldEvaluator(const TISAM_recordset& rec, const char* fldname, const char* expr, TVariant& var); -class TBeeStore_sync : public TSkeleton_application +class TSknet_sync : public TSkeleton_application { TString _dsn; TString _usr; @@ -290,13 +216,11 @@ class TBeeStore_sync : public TSkeleton_application TFilename _sqlog; TLog_report* _log; bool hasConai; - bool enableDelete; private: const TString& comune(const TRecordset& recset, const char* fld_cap, const char* fld_den) const; bool split_phone(const TRecordset& odbc, const char* number, TIsamfile& clifo, const char* pre, const char* num) const; - void load_clifo(char tipocf); - void save_clifo(int cfmask, const TDate& dal, const TDate& al); + void load_clifo(const char tipocf); void add_rmov(TMovimentoPN& mov, const real& importo, const TCausale& caus, const char* cod) const; protected: @@ -304,140 +228,29 @@ protected: bool save_and_delete_doc(TDocumento*& doc) const; void load_their_origine(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs); - void save_my_origine(TISAM_recordset& in_set, const char* out_table, const TString_array& pairs, TFieldEvaluator* feval = NULL); void sync_table(TISAM_recordset& in_set, const char* out_table, const TString_array& pairs); void sync_table(const char* in_table, const char* out_table, - const TString_array& fields, const TDate& dal, const TDate& al); + const TString_array& fields); void sync_table(const int logicnum, const char* out_table, - const TString_array& fields, const TDate& dal, const TDate& al); + const TString_array& fields); - void sync_iva (const TDate& dal, const TDate& al); - void sync_ums (const TDate& dal, const TDate& al); - void sync_lines (const TDate& dal, const TDate& al); - void sync_catmer (const TDate& dal, const TDate& al); - void sync_val (const TDate& dal, const TDate& al); - void sync_anamag (const TDate& dal, const TDate& al); - void sync_barcode (const TDate& dal, const TDate& al); - void sync_corrisp (const TDate& dal, const TDate& al); - void sync_mov(int tipotestata, const TDate& dal, const TDate& al); - void sync_scontrini(const TDate& dal, const TDate& al) { sync_mov(3, dal, al);} - void sync_doc (const TDate& dal , const TDate& al); - void sync_carscar (const TDate& dal, const TDate& al) { sync_mov(1, dal, al);} - void sync_generici (const TDate& dal , const TDate& al) { sync_mov(4, dal, al);} - void sync_clifo (int cfmask, const TDate& dal, const TDate& al); - void sync_listino (const TString& listino); + void sync_iva (); + void sync_ums (); + void sync_val (); + void sync_anamag (); + void sync_doc (); + void sync_clifo (int cfmask); + void clean(); public: virtual bool create(); virtual void main_loop(); }; -// Converte una TDate in una data SQL -const TString& date2sql(const TDate& d, int hour = 0) -{ - TString& tmp = get_tmp_string(); - if (d.ok()) - { - tmp.format("'%04d-%02d-%02d", d.year(), d.month(), d.day()); - switch (hour) - { - case 1: - tmp << "T00:00:00.000'"; - break; - case 2: - tmp << "T23:59:59.999'"; - break; - default: - case 0: - tmp << "'"; - } - } - else - tmp = "NULL"; - return tmp; -} - -// Coverte un qualsiasi TVariant in stringa SQL -const TString& var2sql(const TVariant& var) -{ - TString& tmp = get_tmp_string(); - switch (var.type()) - { - case _nullfld: - tmp = "NULL"; - break; - case _boolfld: - tmp = var.as_bool() ? "1" : "0"; - break; - case _datefld: - tmp = date2sql(var.as_date()); - break; - case _intfld: - case _longfld: - var.as_string(tmp); - break; - case _realfld: - if (var.is_empty()) - tmp = "0"; - else - { - tmp = var.as_real().string(0, 2); - if (tmp.ends_with(".00")) - tmp.rtrim(3); - } - break; - default: - { - var.as_string(tmp); - const int pos = tmp.find('\''); - if (pos >= 0) - { - for (int i = tmp.len()-1; i >= pos; i--) - if (tmp[i] == '\'') tmp.insert("'", i); - } - tmp.insert("'"); - tmp << "'"; - } - break; - } - return tmp; -} - -// Coverte una qualsiasi espressione in stringa SQL -const TString& expr2sql(const TISAM_recordset& set, const char* expr) -{ - TVariant var; - TExpression e(expr, _strexpr, true); - if (e.numvar() == 0) - { - if (real::is_natural(expr)) - var = atoi(expr); - else - var = expr; - } else - if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr)) - { - var = set.get(expr); - } - else - { - for (int v = e.numvar()-1; v >= 0; v--) - { - var = set.get(e.varname(v)); - if (var.is_real() || var.is_bool()) - e.setvar(v, var.as_real()); - else - e.setvar(v, var.as_string()); - } - var = e.as_string(); - } - return var2sql(var); -} - // Carica da BeeStore i record con Origine=their_origin(), cioè generati da lui ed eventualmente aggiorna i corrispondenti in Campo -void TBeeStore_sync::load_their_origine(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs) +void TSknet_sync::load_their_origine(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs) { TString str(255); str << "SELECT "; @@ -533,7 +346,7 @@ void TBeeStore_sync::load_their_origine(TISAM_recordset& out_set, const char* in { TRectype& rec = file.curr(); if (rec.exist(CLI_UTENTE)) - rec.put(CLI_UTENTE, "BEESTORE"); + rec.put(CLI_UTENTE, ini_get_string(CONFIG_DITTA, "bs", "SKImportUser")); if (rec.exist(CLI_DATAAGG)) rec.put(CLI_DATAAGG, dtultagg); } @@ -587,7 +400,7 @@ void TBeeStore_sync::load_their_origine(TISAM_recordset& out_set, const char* in } } } - if (ini_get_bool(CONFIG_DITTA, "BS", "EmptyOnImp")) + if (ini_get_bool(CONFIG_DITTA, "BS", "SKEmptyOnImp")) { str.cut(0) << "DELETE FROM " << in_table << " WHERE Origine=" << their_origin() << ";"; odbc.exec(str); @@ -595,171 +408,56 @@ void TBeeStore_sync::load_their_origine(TISAM_recordset& out_set, const char* in } } -void TBeeStore_sync::save_my_origine(TISAM_recordset& in_set, const char* out_table, const TString_array& fields, TFieldEvaluator* fval) -{ - if (!ini_get_bool(CONFIG_DITTA, "BS", "EnableExp")) - return; - const TRecnotype n = in_set.items(); - TString str(255); - TODBC_recordset odbc(str); - odbc.connect(_dsn, _usr, _psw); - str.cut(0) << "DELETE FROM " << out_table << " WHERE Origine=" << my_origin() << ";"; - odbc.exec(str); - - str.format(TR("Esportazione %ld record in %s"), n, out_table); - _log->log(0, ""); - _log->log(0, str); - - const TRectype& curr = in_set.cursor()->curr(); - - TProgress_monitor pi(n, str); - for (bool ok = in_set.move_first(); ok; ok = in_set.move_next()) - { - - str.cut(0) << "INSERT INTO " << out_table << "\n("; - FOR_EACH_ARRAY_ROW(fields, sr, srow) - str << (sr ? ", " : "") << srow->get(0); - str << ", Origine, Errore, " BS_DTULTAGG; - str << ")\nVALUES ("; - - FOR_EACH_ARRAY_ROW(fields, ir, irow) - { - if (ir) str << ", "; - if (fval) - { - const char* fname = irow->get(0); // BeeStore field name - const char* fexpr = irow->get(); // Campo expression - TVariant var; - if (fval(in_set, fname, fexpr, var)) - { - str << var2sql(var); - continue; - } - } - - const TFixed_string cfld = irow->get(1); - if (cfld.find("SCONTO")>=0) - { - real sconto; - const TString& exp = curr.get(cfld); - if (exp.full()) - { - if (real::is_natural(exp)) - sconto = real(exp); - else - { - TString80 goodexp; real val_perc; - if (scontoexpr2perc(exp, false, goodexp, val_perc) && val_perc != UNO) - { - sconto = CENTO - CENTO*val_perc; - sconto.round(5); - } - } - } - str << var2sql(sconto); - } else - if ((cfld[0] >= 'A' && cfld[0] <= 'Z') || cfld.find("->") > 0) - str << expr2sql(in_set, cfld); - else - str << cfld; - } - - str << ", 2, 0, GETDATE()"; - str << ");"; - - const long err = odbc.exec(str); - if (err <= 0) - { - TParagraph_string par(str, 75); - if (par.items() > 4) - { - str.cut(0); - bool values = false; - FOR_EACH_TOKEN(par, s) - { - if (str.full() && !values) - { - values = _strnicmp(s, "VALUES", 6) == 0; - if (!values) - continue; - } - str << s << '\n'; - } - str.trim(); - } - _log->log(1, str); - str.format("SQL error %d", abs(err)); - _log->log(2, str); - } - - if (!pi.add_status()) - break; - } - - odbc.exec("COMMIT;"); -} - -void TBeeStore_sync::sync_table(TISAM_recordset& in_set, const char* out_table, const TString_array& fields) +void TSknet_sync::sync_table(TISAM_recordset& in_set, const char* out_table, const TString_array& fields) { load_their_origine(in_set, out_table, fields); - save_my_origine(in_set, out_table, fields); } -static TString& build_query(const char* table, const TDate& dal, const TDate& al) +static TString& build_query(const char* table) { TString& q = get_tmp_string(); q << "USE " << table; - if (dal.ok() || al.ok()) - q << "SELECT BETWEEN(DATAAGG," << dal.date2ansi() << ',' << al.date2ansi() << ")"; return q; } -static TString& build_query(const int logicnum, const TDate& dal, const TDate& al) +static TString& build_query(const int logicnum) { const TRectype rec(logicnum); TString& q = get_tmp_string(); q << "USE " << logicnum; if (rec.exist(CLI_UTENTE)) - q << " SELECT (UTENTE!=\"BEESTORE\")"; + q << " SELECT (UTENTE!=\"" << ini_get_string(CONFIG_DITTA, "bs", "SKImportUser") << "\")"; - if ((dal.ok() || al.ok()) && rec.exist(CLI_DATAAGG)) - { - if (q.find(" SELECT ") < 0) - q << " SELECT "; - else - q << "&&"; - q << "(BETWEEN(DATAAGG," << dal.date2ansi() << ',' << al.date2ansi() << "))"; - } return q; } -void TBeeStore_sync::sync_table(const char* table, const char* out_table, - const TString_array& fields, const TDate& dal, const TDate& al) +void TSknet_sync::sync_table(const char* table, const char* out_table, + const TString_array& fields) { - const TString& q = build_query(table, dal, al); + const TString& q = build_query(table); TISAM_recordset set(q); sync_table(set, out_table, fields); } -void TBeeStore_sync::sync_table(const int logicnum, const char* out_table, - const TString_array& fields, const TDate& dal, const TDate& al) +void TSknet_sync::sync_table(const int logicnum, const char* out_table, + const TString_array& fields ) { - const TString& q = build_query(logicnum, dal, al); + const TString& q = build_query(logicnum); TISAM_recordset set(q); sync_table(set, out_table, fields); } -void TBeeStore_sync::sync_ums(const TDate& dal, const TDate& al) +void TSknet_sync::sync_ums() { TString_array fields; fields.add("CodUntMis|CODTAB"); fields.add("DSUntMis|S0"); - sync_table("%UMS", "tieUntMisura", fields, dal, al); + sync_table("%UMS", "tieUntMisura", fields); } -void TBeeStore_sync::sync_iva(const TDate& dal, const TDate& al) +void TSknet_sync::sync_iva() { TString_array fields; fields.add("CodIva|CODTAB"); @@ -767,37 +465,10 @@ void TBeeStore_sync::sync_iva(const TDate& dal, const TDate& al) fields.add("DSIva|S0"); fields.add("Aliquota|R0"); - sync_table("%IVA", "tieIva", fields, dal, al); + sync_table("%IVA", "tieIva", fields); } -void TBeeStore_sync::sync_lines(const TDate& dal, const TDate& al) -{ - TString_array fields; - fields.add("CodLinea|CODTAB"); - fields.add("DSLinea|S0"); - - TString query = build_query("GMC", dal, al); - if (query.find("SELECT") < 0) - query << " SELECT "; - else - query << "&&"; - query << "(CODTAB?='???')"; - - TISAM_recordset lin(query); - sync_table(lin, "tieLineeArt", fields); -} - -void TBeeStore_sync::sync_catmer(const TDate& dal, const TDate& al) -{ - TString_array fields; - fields.add("CodCategoriaMerceologica|CODTAB"); - fields.add("DSCategoriaMerceologica|S0"); - fields.add("CodTipoEtichetta|''"); - - sync_table("GMC", "tieCategorieMerceologiche", fields, dal, al); -} - -void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) +void TSknet_sync::sync_anamag() { TString_array fields; fields.add("CodPadre|" ANAMAG_CODART); @@ -809,7 +480,7 @@ void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) fields.add("CodCategMerceologica|" ANAMAG_GRMERC); fields.add("Bloccato|" ANAMAG_SOSPESO); - TString query = build_query(LF_ANAMAG, dal, al); + TString query = build_query(LF_ANAMAG); query << "\nJOIN " << LF_UMART << " INTO CODART==CODART"; TISAM_recordset art(query); @@ -850,6 +521,7 @@ void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) rccor.put(CODCORR_CODART, odbc.get("CodPadre").as_string()); rccor.put(CODCORR_NRIGA, riga++); rccor.put(CODCORR_CODARTALT, odbc.get("CodArticolo").as_string()); + rccor.put(CODCORR_UM, ini_get_string(CONFIG_DITTA, "BS", "SKCodUmsDef")); ccor.write(rccor); } } @@ -905,72 +577,9 @@ void TBeeStore_sync::sync_anamag(const TDate& dal, const TDate& al) } } } - - if (ini_get_bool(CONFIG_DITTA, "BS", "EnableExp")) - { - fields.destroy(); - fields.add("CodArticolo|" ANAMAG_CODART); - fields.add("CodPadre|" ANAMAG_CODART); - save_my_origine(art, "tieArtVarianti", fields); - } } -void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al) -{ - TString_array fields; - fields.add("CodArticolo|" ANAMAG_CODART); - fields.add("BarCode|" ANAMAG_DESCR); - - TString str(255); - str << "SELECT "; - FOR_EACH_ARRAY_ROW(fields, f, row) - str << row->get(0) << ','; - str.rtrim(1); // toglie ultima virgola - str << "\nFROM tieArtBarCode WHERE (Origine= " << their_origin() << ");"; - - TODBC_recordset odbc(str); - odbc.connect(_dsn, _usr, _psw); - const TRecnotype n = odbc.items(); - if (n > 0) - { - TProgress_monitor pi(n, "Importazione codici a barre"); - for (bool go = odbc.move_first(); go; go = odbc.move_next()) - { - const TCodice_articolo ca = odbc.get("CodArticolo").as_string(); - const TCodice_articolo bc = odbc.get("BarCode").as_string(); - int tipo = 0; - switch (bc.len()) - { - case 8: tipo = 8; break; - case 13: tipo = 1; break; - default: break; - } - if (tipo) - { - TRecord_array codcor(ca, LF_CODCORR); - int n = 0; - for (n = codcor.last_row(); n > 0; n = codcor.pred_row(n)) - { - const TRectype& row = codcor.row(n); - if (row.get("CODARTALT") == bc && row.get_int("TIPO") == tipo) - break; // trovato! - } - if (n <= 0) - { - TRectype& row = codcor.row(-1, true); // Add new row - row.put("CODARTALT", bc); - row.put("TIPO", tipo); - codcor.rewrite(); - } - } - if (!pi.add_status()) - break; - } - } -} - - - static bool ClifoEvaluator(const TISAM_recordset& rec, const char* fldname, const char* expr, TVariant& var) +static bool ClifoEvaluator(const TISAM_recordset& rec, const char* fldname, const char* expr, TVariant& var) { const TAnagrafica& a = _anagr.anag(rec); @@ -1089,14 +698,14 @@ void TBeeStore_sync::sync_barcode(const TDate& dal, const TDate& al) return false; } -const TString& TBeeStore_sync::comune(const TRecordset& recset, const char* fld_cap, const char* fld_den) const +const TString& TSknet_sync::comune(const TRecordset& recset, const char* fld_cap, const char* fld_den) const { TString8 cap; if (fld_cap && *fld_cap) cap = recset.get(fld_cap).as_string().left(5); TString80 den; if (fld_den && *fld_den) den = recset.get(fld_den).as_string(); return ::cap2comune(cap, den); } -bool TBeeStore_sync::split_phone(const TRecordset& odbc, const char* number, TIsamfile& clifo, const char* pre, const char* num) const +bool TSknet_sync::split_phone(const TRecordset& odbc, const char* number, TIsamfile& clifo, const char* pre, const char* num) const { TString pn = odbc.get(number).as_string(); if (pn.full()) @@ -1127,7 +736,7 @@ bool TBeeStore_sync::split_phone(const TRecordset& odbc, const char* number, TIs return pn.full(); } -void TBeeStore_sync::load_clifo(char tipocf) +void TSknet_sync::load_clifo(const char tipocf) { TString str(255); str << "SELECT * FROM tieAnagCFP WHERE (Origine=" << their_origin() << ")AND"; @@ -1143,24 +752,16 @@ void TBeeStore_sync::load_clifo(char tipocf) TProgress_monitor pi(n, str); for (bool ok = odbc.move_first(); ok; ok = odbc.move_next()) { + if (odbc.get("Cod_PK").as_string().len() == 1) + continue; long codcf = odbc.get(tipocf == 'F' ? "For_CodFor" : "Cli_CodCG").as_int(); - TLocalisamfile cfv(LF_CFVEN); - cfv.put(CFV_TIPOCF, tipocf); - cfv.put(CFV_CODCF, codcf); - if (cfv.read(_isequal) != NOERR) - { - cfv.zero(); - cfv.put(CFV_TIPOCF, tipocf); - cfv.put(CFV_CODCF, codcf); - } if (codcf <= 0) { const TString& cod_pk = odbc.get("Cod_PK").as_string(); - if (!ini_get_bool(CONFIG_DITTA, "BS", "ClifoDC") || (cod_pk.len() == 8 && cod_pk[7] == tipocf)) // Prima era solo per i clienti, proviamoci sempre! - codcf = atol(cod_pk.mid(1,6)); + codcf = atol(cod_pk.mid(1)); } - - if (codcf > 0) + TLocalisamfile cfv(LF_CFVEN); + if (codcf > 0) { clifo.put(CLI_TIPOCF, tipocf); clifo.put(CLI_CODCF, codcf); @@ -1173,32 +774,28 @@ void TBeeStore_sync::load_clifo(char tipocf) } else { - codcf = 1L; - if (tipocf == 'F') - { - if (clifo.last() == NOERR && clifo.get_char(CLI_TIPOCF)=='F') - codcf += clifo.get_long(CLI_CODCF); - } - else - { - clifo.put(CLI_TIPOCF, 'F'); - clifo.put(CLI_CODCF, 0); - if (clifo.read(_isgteq) == NOERR) - { - if (clifo.prev() == NOERR && clifo.get_char(CLI_TIPOCF)=='C') - codcf += clifo.get_long(CLI_CODCF); - } - } - clifo.zero(); - clifo.put(CLI_TIPOCF, tipocf); - clifo.put(CLI_CODCF, codcf); - clifo.write(); - - TString8 codprcf; codprcf.format("C%06ld%c", codcf, tipocf); - cfv.put(CFV_CODPRCF, codprcf); + // NON É POSSIBILE + TString err = "Attenzione è prensente un cliente con codice errato: "; err << odbc.get("Cod_PK").as_string() << " Non verrà importato."; + _log->log(2, err); + continue; } + + cfv.put(CFV_TIPOCF, tipocf); + cfv.put(CFV_CODCF, codcf); + if (cfv.read(_isequal) != NOERR) + { + cfv.zero(); + cfv.put(CFV_TIPOCF, tipocf); + cfv.put(CFV_CODCF, codcf); + TString8 codprcf; codprcf.format("C%06ld%c", codcf, tipocf); + cfv.put(CFV_CODPRCF, codprcf); + } + clifo.put(CLI_RAGSOC, odbc.get("RagSoc").as_string()); - + clifo.put(CLI_PAIV, odbc.get("PartitaIva").as_string()); + clifo.put(CLI_COFI, odbc.get("CodiceFiscale").as_string()); + clifo.put(CLI_MAIL, odbc.get("EMail").as_string()); + const int tipo = odbc.get("Tipo").as_int(); // 1=Fisica; 2=Giuridica; 3=Altro if (tipo == 1) { @@ -1277,7 +874,6 @@ void TBeeStore_sync::load_clifo(char tipocf) split_phone(odbc, "CellulareSMS", clifo, CLI_PTEL3, CLI_TEL3); clifo.put(CLI_MAIL, odbc.get("EMail").as_string()); - clifo.put(CLI_MAIL, odbc.get("RaggDoc").as_int() == 1); if (hasConai) { cfv.put(CFV_DATAECONAI, odbc.get("CNDataEs").as_date()); @@ -1290,15 +886,19 @@ void TBeeStore_sync::load_clifo(char tipocf) // So bad is so good! TString prodConai; - prodConai << odbc.get("CNPac").as_int() == 1 ? "X" : " "; // Produttore Acciaio - prodConai << odbc.get("CNPal").as_int() == 1 ? "X" : " "; // Produttore Alluminio - prodConai << odbc.get("CNPca").as_int() == 1 ? "X" : " "; // Produttore Carta - prodConai << odbc.get("CNPpl").as_int() == 1 ? "X" : " "; // Produttore Plastica - prodConai << odbc.get("CNPle").as_int() == 1 ? "X" : " "; // Produttore Legno - prodConai << odbc.get("CNPve").as_int() == 1 ? "X" : " "; // Produttore Vetro + prodConai << (odbc.get("CNPac").as_int() == 1 ? "X" : " "); // Produttore Acciaio + prodConai << (odbc.get("CNPal").as_int() == 1 ? "X" : " "); // Produttore Alluminio + prodConai << (odbc.get("CNPca").as_int() == 1 ? "X" : " "); // Produttore Carta + prodConai << (odbc.get("CNPpl").as_int() == 1 ? "X" : " "); // Produttore Plastica + prodConai << (odbc.get("CNPle").as_int() == 1 ? "X" : " "); // Produttore Legno + prodConai << (odbc.get("CNPve").as_int() == 1 ? "X" : " "); // Produttore Vetro cfv.put("PRODCONAI", prodConai); + cfv.put(CFV_ADDCONAI, prodConai.blank()); + //cfv.put(CFV_CONAIASS, prodConai.blank()); Non c'è modo di sapere quando metterlo } + cfv.put(CFV_RAGGDOC, !odbc.get("RaggDoc").as_string().blank()); + TLocalisamfile cfb(LF_CFBAN); cfb.put("TIPOCF", tipocf); cfb.put("CODCF", codcf); @@ -1354,11 +954,12 @@ void TBeeStore_sync::load_clifo(char tipocf) cfb.put("CAB", cab); cfb.put("NUMCC", contcor); cfb.put("IBAN", iban); - cfb.write_rewrite(); } // Parso il campo Note TToken_string note (odbc.get("Note").as_string()); + if (!note.blank() && note[note.len() - 1] == '|') + note.cut(note.len() - 1); for (int i = 0; i < note.items(); i++) { int pipe = note.find('|'); @@ -1371,13 +972,10 @@ void TBeeStore_sync::load_clifo(char tipocf) for (int k = 0; k < pne.items(); k++) { TToken_string pno(pne.get(k), '/'); - for (int j = 0; j < pne.items(); j++) - { - // DA GIORNO DA MESE A GIORNO A MESE - nonacc << pno.get(0) << "-" << pno.get(1) << ";" << pno.get(2) << "-" << pno.get(3) << ";"; - // IL GIORNO IL MESE - nonscd << pno.get(4) << "-" << pno.get(5) << ";"; - } + // DA GIORNO DA MESE A GIORNO A MESE + nonacc << pno.get(0) << "-" << pno.get(1) << "," << pno.get(2) << "-" << pno.get(3) << ";"; + // IL GIORNO IL MESE + nonscd << pno.get(4) << "-" << pno.get(5) << ";"; } nonacc.cut(nonacc.len() - 1); nonscd.cut(nonscd.len() - 1); @@ -1395,6 +993,19 @@ void TBeeStore_sync::load_clifo(char tipocf) cfv.put(CFV_CODNOTE, clifo_add_note(cfv, note)); } else + if (token.starts_with("ENAMAIL=")) + { + bool bymail = false; + TString email = ""; + if (token.mid(8).full()) + { + bymail = true; + email = odbc.get("EMail").as_string(); + } + clifo.put(CLI_BYMAIL, bymail); + clifo.put(CLI_DOCMAIL, email); + } + else { if (!token.blank()) { @@ -1402,93 +1013,81 @@ void TBeeStore_sync::load_clifo(char tipocf) } else { - TString err = "Token non riconosciuto: "; + TString err = "Token non riconosciuto per il c/f "; + err << tipocf << codcf << ": "; err << token.left(token.find('=')) << "\nQuesto dato non verrà importato"; - warning_box(err); + _log->log(2, err); } } } - cfv.write_rewrite(); - - TString user = ini_get_string(CONFIG_DITTA, "BS", "ImportUser"); + TString user = ini_get_string(CONFIG_DITTA, "BS", "SKImportUser"); if (user.empty()) user = "BEESTORE"; clifo.put(CLI_UTENTE, user); TDate dua = odbc.get(BS_DTULTAGG).as_date(); if (!dua.ok()) dua = TDate(TODAY); clifo.put(CLI_DATAAGG, dua); - - clifo.rewrite(); + + cfb.write_rewrite(); + cfv.write_rewrite(); + clifo.write_rewrite(); if (!pi.add_status()) break; } } -void TBeeStore_sync::save_clifo(int cfmask, const TDate& dal, const TDate& al) -{ - TString_array fields; - fields.add("Cod_PK|" CLI_CODCF); - fields.add("RagSoc|" CLI_RAGSOC); - fields.add("Cognome|" CLI_RAGSOC); - fields.add("Nome|" CLI_RAGSOC); - fields.add("Indirizzo|" CLI_INDCF); - fields.add("Citta|" CLI_COMCF); - fields.add("Cap|" CLI_CAPCF); - fields.add("Provincia|"); - fields.add("Telefono|PTEL+TEL"); - fields.add("Cellulare|PTEL2+TEL2"); - fields.add("CellulareSMS|PTEL3+TEL3"); - fields.add("EMail|" CLI_MAIL); - fields.add("PartitaIva|" CLI_PAIV); - fields.add("CodFiscale|" CLI_COFI); - fields.add("Tipo|1"); - fields.add("Sesso|" CLI_SESSO); - fields.add("DTNascita|" CLI_DATANASC); - fields.add("ComuneNascita|" CLI_COMNASC); - fields.add("PVNascita|"); - fields.add("Cliente|"); - fields.add("Fornitore|"); - fields.add("For_CodFor|" CLI_CODCF); - fields.add("For_Blocco|" CLI_SOSPESO); - fields.add("Cli_CodCG|" CLI_CODCF); - fields.add("Cli_Blocco|" CLI_SOSPESO); - fields.add("MagInserAnagrafica|1"); - fields.add("CodStato|" CLI_STATOCF); - fields.add("Annullato|0"); - - TString query = build_query(LF_CLIFO, dal, al); - query << "\nJOIN " << LF_CFVEN << " INTO TIPOCF==TIPOCF CODCF==CODCF"; - if (cfmask == 1) - query << "\nFROM TIPOCF=C\nTO TIPOCF=C"; else - if (cfmask == 2) - query << "\nFROM TIPOCF=F\nTO TIPOCF=F"; - - TISAM_recordset clifo(query); - save_my_origine(clifo, "tieAnagCFP", fields, ClifoEvaluator); -} - -void TBeeStore_sync::sync_clifo(int cfmask, const TDate& dal, const TDate& al) +void TSknet_sync::sync_clifo(int cfmask) { if (cfmask & 1) load_clifo('C'); if (cfmask & 2) load_clifo('F'); - - - if (enableDelete) - { - TString str(255); - TODBC_recordset clifo(str); - clifo.connect(_dsn, _usr, _psw); - str << "DELETE FROM tieAnagCFP WHERE Origine=" << their_origin() << ";"; - clifo.exec(str); // Elimina tutte le anagrafiche importate da BeeStore - } - - if (ini_get_bool(CONFIG_DITTA, "BS", "EnableExp")) - save_clifo(cfmask, dal, al); } -bool TBeeStore_sync::save_and_delete_movmag(TMov_mag*& doc) const +void TSknet_sync::clean() +{ + if (yesno_box("Vuoi svuotare il database?") == 1) + { + TString str; + TODBC_recordset voldemort(str); + voldemort.connect(_dsn, _usr, _psw); + // Clienti + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncClienti")) + str << "DELETE FROM tieAnagCFP WHERE Origine=" << their_origin() << " AND Cliente=1;\n"; + // Fornitori + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncFornitori")) + str << "DELETE FROM tieAnagCFP WHERE Origine=" << their_origin() << " AND Fornitore=1;\n"; + + // Documenti + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncDoc")) + { + str << "DELETE FROM tieTBolFat WHERE Origine=" << their_origin() << ";\n"; + str << "DELETE FROM tieDMovMag WHERE Origine=" << their_origin() << ";\n"; + str << "DELETE FROM tieDMovMagCONAI WHERE Origine=" << their_origin() << ";\n"; + } + // Articoli di Magazzino + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncAnamag")) + { + str << "DELETE FROM tieArticoli WHERE Origine=" << their_origin() << ";\n"; + str << "DELETE FROM tieArtVarianti WHERE Origine=" << their_origin() << ";\n"; + str << "DELETE FROM tieArtCONAI WHERE Origine=" << their_origin() << ";\n"; + } + // Valute + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncVAL")) + str << "DELETE FROM tieValute WHERE Origine=" << their_origin() << ";\n"; + // Codici IVA + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncIVA")) + str << "DELETE FROM tieIVA WHERE Origine=" << their_origin() << ";\n"; + // UMS + if (ini_get_bool(CONFIG_DITTA, "BS", "SKSyncUMS")) + str << "DELETE FROM tieUntMisura WHERE Origine=" << their_origin() << ";\n"; + + voldemort.exec(str); // Elimina tutte le anagrafiche importate da BeeStore + voldemort.commit(); + } +} + +bool TSknet_sync::save_and_delete_movmag(TMov_mag*& doc) const { int err = 0; if (doc != NULL) @@ -1514,7 +1113,7 @@ bool TBeeStore_sync::save_and_delete_movmag(TMov_mag*& doc) const return err == 0; } -bool TBeeStore_sync::save_and_delete_doc(TDocumento*& doc) const +bool TSknet_sync::save_and_delete_doc(TDocumento*& doc) const { int err = 0; if (doc != NULL) @@ -1540,142 +1139,16 @@ bool TBeeStore_sync::save_and_delete_doc(TDocumento*& doc) const return err == 0; } -void TBeeStore_sync::sync_val(const TDate& dal, const TDate& al) +void TSknet_sync::sync_val() { TString_array fields; fields.add("CodValuta|CODTAB"); fields.add("DSValuta|S0"); fields.add("Simbolo|CODTAB"); - sync_table("%VAL", "tieValute", fields, dal, al); + sync_table("%VAL", "tieValute", fields); } -void TBeeStore_sync::sync_listino(const TString& listino) -{ - TString str(255); - TODBC_recordset prz(str); - prz.connect(_dsn, _usr, _psw); - str = "DELETE FROM tiePrzVendita WHERE Origine="; str << their_origin() << ""; - prz.exec(str); // Ignora tutti i listini di BeeStore - - str.cut(0) << "USE " << LF_RCONDV << " SELECT " << LF_ANAMAG << ".CODART!=\"\"" - << "\nJOIN " << LF_ANAMAG << " INTO CODART==CODRIGA" - << "\nFROM TIPO=L TIPORIGA=A COD=" << listino - << "\nTO TIPO=L TIPORIGA=A COD=" << listino; - TISAM_recordset lis(str); - if (lis.move_first()) - { - TString16 eur; eur << "CodValuta|'" << TCurrency::get_euro_val() << "'"; - - TString16 key; key << "L||||" << listino; - const TRectype& condv = cache().get(LF_CONDV, key); - - TDate dt_inizio = condv.get(CONDV_VALIN); - if (!dt_inizio.ok()) dt_inizio = TDate(1,1,2000); - TDate dt_fine = condv.get(CONDV_VALFIN); - if (dt_fine < dt_inizio) dt_fine = TDate(31,12,2100); - - TString descr; descr << "DSListino|'" << condv.get(CONDV_DESCR) << '\''; - TString dtini; dtini << "DTInizio|'" << dt_inizio.string() << '\''; - TString dtfin; dtfin << "DTFine|'" << dt_fine.string() << '\''; - - TString_array fields; - fields.add("Cod_PK|" RCONDV_CODRIGA); - fields.add("CodPadre|" RCONDV_CODRIGA); - //fields.add("CodArticolo|" RCONDV_CODRIGA); // NON metterlo! - fields.add("TipoPrezzo|'1'"); // 1=Listino - fields.add(eur); - fields.add("Prezzo|" RCONDV_PREZZO); - fields.add("Prezzo2|0"); - fields.add("Sconto|" RCONDV_SCONTO); - if (real::is_natural(listino)) - fields.add("NumListino|" RCONDV_COD); - fields.add(descr); - fields.add(dtini); - fields.add(dtfin); - - save_my_origine(lis, "tiePrzVendita", fields); - } -} - -void TBeeStore_sync::sync_mov(int tipotestata, const TDate& dal, const TDate& al) -{ - const TString8 codcaus = ini_get_string(CONFIG_DITTA, "bs", MOVMAG_CODCAUS, "", tipotestata); - - if (codcaus.blank()) - { - _log->log(2, "Configurare parametri per movimenti Bee Store"); - return; - } - - TString str(255); - str << "SELECT * FROM tieDMovMag WHERE Origine=" << their_origin() << " AND TipoTestata=" << tipotestata; - if (dal.ok() || al.ok()) - { - str << " AND DataMov"; - if (dal.ok() && al.ok()) - str << " BETWEEN " << date2sql(dal, 1) << " AND " << date2sql(al, 2); - else - { - if (dal.ok()) - str << ">=" << date2sql(dal, 1); - else - str << "<=" << date2sql(al, 2); - } - } - str << "\nORDER BY NumMov,NumRiga"; - - TODBC_recordset mov(str); - mov.connect(_dsn, _usr, _psw); - TProgress_monitor pi(mov.items(), str); - - TString num_mov, nm; - TMov_mag* doc = NULL; - - for (bool ok = mov.move_first(); ok; ok = mov.move_next()) - { - nm = mov.get("NumMov").as_string(); - if (nm != num_mov) - { - if (!save_and_delete_movmag(doc)) - break; - num_mov = nm; - const TDate datadoc = mov.get("DataMov").as_date(); - doc = new TMov_mag; - doc->put(MOVMAG_CODCAUS, codcaus); - doc->put(MOVMAG_DATAREG, datadoc); - } - TRectype& rdoc = doc->new_row(); - rdoc.put(RMOVMAG_CODART, mov.get("CodArticolo").as_string()); - rdoc.put(RMOVMAG_UM, mov.get("CodUntMis").as_string()); - rdoc.put(RMOVMAG_PREZZO, mov.get("PrzCassaValuta").as_real()); - if (!pi.add_status()) - break; - } - save_and_delete_movmag(doc); // Salva ultimo documento in sospeso -} - -void TBeeStore_sync::add_rmov(TMovimentoPN& mov, const real& importo, const TCausale& caus, const char* cod_da) const -{ - if (!importo.is_zero()) - { - TRectype& rmov = mov.cg(-1); - rmov.put(RMV_SEZIONE, caus.sezione_clifo()); - rmov.put(RMV_IMPORTO, importo); - int i = caus.last(); - for (; i > 15; i--) - { - const char* cod = caus.cod_desc_agg(i); - if (xvt_str_same(cod, cod_da)) - break; - } - TBill zio1; caus.bill(1, zio1); - TBill zio2; caus.bill(i, zio2); - zio2.put(rmov); - zio1.put(rmov, true); - } -} - -void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) +void TSknet_sync::sync_doc() { const TString8 codcausdef = ini_get_string(CONFIG_DITTA, "bs", MOVMAG_CODCAUS, "", 2); /* @@ -1692,19 +1165,6 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) str << "LEFT JOIN tieDMovMagCONAI ON tieDMovMag.Cod_PK = tieDMovMagCONAI.Cod_PK\n"; str << "WHERE tieTBolFat.Origine = " << their_origin(); //str << "WHERE tieDMovMag.Origine = " << their_origin() << " AND tieDMovMag.TipoTestata = 2"; // verificare - if (dal.ok() || al.ok()) - { - str << " AND DataMov"; - if (dal.ok() && al.ok()) - str << " BETWEEN " << date2sql(dal, 1) << " AND " << date2sql(al, 2); - else - { - if (dal.ok()) - str << ">=" << date2sql(dal, 1); - else - str << "<=" << date2sql(al, 2); - } - } str << "\nORDER BY tieTBolFat.Cod_PK,tieDMovMag.NumRiga"; TODBC_recordset docs(str); @@ -1715,24 +1175,8 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) TString4 tipocf; TDocumento* doc = NULL; - if (enableDelete) - { - // Aggiungo le tabelle al cestino globale - mastroBin().addTable("tieTBolFat", "Cod_Pk"); - mastroBin().addTable("tieDMovMag", "Cod_Pk"); - if (hasConai) - mastroBin().addTable("tieDMovMagCONAI", "Cod_Pk"); - } for (bool ok = docs.move_first(); ok; ok = docs.move_next()) { - if (enableDelete) - { - // Aggiungo a cestino i record da eliminare - mastroBin().put("tieTBolFat", docs.get("Cod_Pk").as_string()); - mastroBin().put("tieDMovMag", docs.get("CodTestata").as_string()); - if (hasConai) - mastroBin().put("tieDMovMagCONAI", docs.get("Cod_Pk").as_string()); - } //TToken_string test(docs.get("CodTestata").as_string(), '\\'); const TString keyDoc = docs.get("CodTestata").as_string(); nd = docs.get("NumRif").as_int(); @@ -1762,24 +1206,24 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) switch (docs.get("TipoDoc").as_int()) { case 1: // Bolla - numdoc = ini_get_string(CONFIG_DITTA, "BS", "CODNUMBOL"); - tipodoc = ini_get_string(CONFIG_DITTA, "BS", "TIPODOCBOL"); + numdoc = ini_get_string(CONFIG_DITTA, "BS", "SKCODNUMBOL"); + tipodoc = ini_get_string(CONFIG_DITTA, "BS", "SKTIPODOCBOL"); break; case 2: // Fattura - numdoc = ini_get_string(CONFIG_DITTA, "BS", "CODNUMFAT"); - tipodoc = ini_get_string(CONFIG_DITTA, "BS", "TIPODOCFAT"); + numdoc = ini_get_string(CONFIG_DITTA, "BS", "SKCODNUMFAT"); + tipodoc = ini_get_string(CONFIG_DITTA, "BS", "SKTIPODOCFAT"); break; case 6: // NC - numdoc = ini_get_string(CONFIG_DITTA, "BS", "CODNUMNC"); - tipodoc = ini_get_string(CONFIG_DITTA, "BS", "TIPODOCNC"); + numdoc = ini_get_string(CONFIG_DITTA, "BS", "SKCODNUMNC"); + tipodoc = ini_get_string(CONFIG_DITTA, "BS", "SKTIPODOCNC"); break; case 7: // Richiesta Trasferimento da Altro Magazzino - numdoc = ini_get_string(CONFIG_DITTA, "BS", "CODNUMTAM"); - tipodoc = ini_get_string(CONFIG_DITTA, "BS", "TIPODOCTAM"); + numdoc = ini_get_string(CONFIG_DITTA, "BS", "SKCODNUMTAM"); + tipodoc = ini_get_string(CONFIG_DITTA, "BS", "SKTIPODOCTAM"); break; case 9: // Ordine Cliente - numdoc = ini_get_string(CONFIG_DITTA, "BS", "CODNUMORC"); - tipodoc = ini_get_string(CONFIG_DITTA, "BS", "TIPODOCORC"); + numdoc = ini_get_string(CONFIG_DITTA, "BS", "SKCODNUMORC"); + tipodoc = ini_get_string(CONFIG_DITTA, "BS", "SKTIPODOCORC"); break; default: warning_box("Attenzione! Per il doc con codice: %s è presente un tipo documento non supportato.\nIl documento saltato", keyDoc); @@ -1804,7 +1248,7 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) static TDocumento existDoc; if (existDoc.read('D', datadoc.year(), numdoc, nd) == NOERR) // Ha uno stato che considero bloccato { - if (existDoc.stato() < '2' && docs.get("DOCANNULLATO").as_int() == 1) + if (existDoc.stato() <= '2')// && docs.get("DOCANNULLATO").as_int() == 1) { existDoc.remove(); } @@ -1859,14 +1303,14 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) switch (tipoart) { default: - case 1: + case 0: // Tiporiga 1 -> Merce - if(hasConai && ini_get_bool(CONFIG_DITTA, "bs", "UseCustomRiga", false)) - tiporiga = ini_get_string(CONFIG_DITTA, "bs", "NumCustomRiga", "14"); + if(hasConai && ini_get_bool(CONFIG_DITTA, "BS", "SKUseCustomRiga", false)) + tiporiga = ini_get_string(CONFIG_DITTA, "BS", "SKNumCustomRiga", "14"); else tiporiga = "01"; break; - case 2: + case 1: // Se la QTA è 0 sarà una spesa a spesa a valore if (docs.get("Quantita").as_int() == 0) { @@ -1877,7 +1321,7 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) tiporiga = "03"; } break; - case 3: + case 2: // Se non ho QTA sarà una descrizione if (docs.get("Quantita").as_int() == 0) { @@ -1918,7 +1362,10 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) } rdoc.put(RDOC_CODMAG, docs.get("CodMagazzino").as_string().left(5)); rdoc.put(RDOC_CODMAGC, docs.get("CodMagazDest").as_string().left(5)); - rdoc.put(RDOC_UMQTA, docs.get("CodUntMis").as_string()); + TString ums = docs.get("CodUntMis").as_string(); + if(ums.blank() && cache().get("%TRI", tiporiga, "S7") == "M") + ums = ini_get_string(CONFIG_DITTA, "BS", "SKCodUmsDef"); + rdoc.put(RDOC_UMQTA, ums); rdoc.put(RDOC_QTA, docs.get("Quantita").as_real()); rdoc.put(RDOC_PREZZO, docs.get("PrzNettoSede").as_real()); // o PrzNettoValuta ?? @@ -1931,7 +1378,7 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) { codiva = cache().get(LF_ANAMAG, codart, "CODIVA"); if (codiva.blank()) - codiva = ini_get_string(CONFIG_DITTA, "bs", "CodIvaDef"); + codiva = ini_get_string(CONFIG_DITTA, "BS", "SKCodIvaDef"); } rdoc.put(RDOC_CODIVA, codiva); @@ -1995,155 +1442,15 @@ void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) break; } save_and_delete_doc(doc); // Salva ultimo documento in sospeso - mastroBin().clean(); } -void TBeeStore_sync::sync_corrisp(const TDate&, const TDate&) +bool TSknet_sync::create() { - const TString8 codcaus = ini_get_string(CONFIG_DITTA, "bs", "CODCAUSC"); - if (codcaus.blank()) - { - _log->log(2, "Configurare la causale corrispettivi Bee Store"); - return; - } - - TString str(255); - str << "SELECT * FROM tieCorrispettivi WHERE Origine=" << their_origin() << ""; - str << "\nORDER BY DataCorr,CodCorrispettivo"; - - TODBC_recordset corr(str); - corr.connect(_dsn, _usr, _psw); - TProgress_monitor pi(corr.items(), str); - - TString num_mov, nm; - TMov_mag* doc = NULL; - - TMovimentoPN mov; - mov.read(_islast); - long numreg = mov.curr().get_long(MOV_NUMREG)+1; - - for (bool ok = corr.move_first(); ok; ok = corr.move_next()) - { - TRectype& mrec = mov.curr(); - mov.destroy_rows(numreg); - - const TDate datareg = corr.get("DataCorr").as_date(); - mrec.put(MOV_NUMREG, numreg); - mrec.put(MOV_DATAREG, datareg); - mrec.put(MOV_ANNOIVA, datareg.year()); - - mrec.put(MOV_DATADOC, datareg); - TString80 desc; desc.format(FR("Corrispettivi %s"), datareg.stringa()); - mrec.put(MOV_DESCR, desc); - - TEsercizi_contabili esc; - mrec.put(MOV_DATACOMP, datareg); - mrec.put(MOV_ANNOES, esc.date2esc(datareg)); - - const TCausale caus(codcaus, datareg.year()); - mrec.put(MOV_CODCAUS, codcaus); - mrec.put(MOV_REG, caus.reg().name()); - - const real totdoc = corr.get("Valore").as_real(); - mrec.put(MOV_TOTDOC, totdoc); - - str << "SELECT * FROM tieDCorrispettivi WHERE (Origine=" << their_origin() << ")"; - str << "AND(CodCorrispettivo='" << corr.get("CodCorrispettivo") << "')"; - TODBC_recordset dett(str); - dett.connect(_dsn, _usr, _psw); - - TBill zio1; caus.bill(1, zio1); - TBill zio2; caus.bill(2, zio2); - TBill zio3; caus.bill(3, zio3); - - int nriga = 0; - real imponibile, imposta; - for (bool dok = dett.move_first(); dok; dok = dett.move_next()) - { - const real imp = dett.get("ImportoReparto").as_real(); - const real iva = dett.get("ImportoIva").as_real(); - TRectype& irec = mov.iva(nriga++); - irec.put(RMI_IMPONIBILE, imp); - irec.put(RMI_CODIVA, dett.get("CodIva").as_string()); - irec.put(RMI_IMPOSTA, iva); - zio2.put(irec); - imponibile += imp; - imposta += iva; - } - - const char sez1 = caus.sezione_clifo(); - TRectype& r1 = mov.cg(0); - r1.put(RMV_SEZIONE, sez1); - r1.put(RMV_IMPORTO, totdoc); - zio1.put(r1); - zio2.put(r1, true); - r1.put(RMV_ROWTYPE, 'T'); - - const char sez2 = sez1=='D'?'A':'D'; - TRectype& r2 = mov.cg(1); - r2.put(RMV_SEZIONE, sez2); - r2.put(RMV_IMPORTO, imponibile); - zio2.put(r2); - zio1.put(r2, true); - r2.put(RMV_ROWTYPE, 'I'); - - TRectype& r3 = mov.cg(2); - r3.put(RMV_SEZIONE, sez2); - r3.put(RMV_IMPORTO, imposta); - zio3.put(r3); - zio1.put(r3, true); - r3.put(RMV_ROWTYPE, 'D'); - - TRectype& r4 = mov.cg(3); - r4.put(RMV_SEZIONE, sez2); - r4.put(RMV_IMPORTO, totdoc); - zio1.put(r4); - zio1.put(r4, true); - - const real contanti = corr.get("IncContanti").as_real(); - const real bancomat = corr.get("IncBancomat").as_real(); - const real credcard = corr.get("IncCarteCredito").as_real(); - const real assegni = corr.get("IncAssegni").as_real(); - real altro = corr.get("IncFinanziato").as_real(); - altro += corr.get("IncCrediti").as_real(); - altro += corr.get("IncBonifici").as_real(); - altro += corr.get("IncAltro").as_real(); - - add_rmov(mov, contanti, caus, "BEECN"); - add_rmov(mov, bancomat, caus, "BEEBM"); - add_rmov(mov, credcard, caus, "BEECC"); - add_rmov(mov, assegni, caus, "BEEAS"); - add_rmov(mov, altro, caus, "BEEAL"); - - while (mov.write() == _isreinsert) - mrec.put(MOV_NUMREG, numreg++); - - if (!pi.add_status()) - break; - } - - if (!pi.is_cancelled()) - { - TString str(255); - TODBC_recordset sco(str); - sco.connect(_dsn, _usr, _psw); - str = "DELETE FROM tieCorrispettivi WHERE Origine="; str << their_origin() << ""; - sco.exec(str); - - str = "DELETE FROM tieDCorrispettivi WHERE Origine="; str << their_origin() << ""; - sco.exec(str); - } -} - - -bool TBeeStore_sync::create() -{ - _dsn = ini_get_string(CONFIG_DITTA, "bs", "DSN", "BEESTORE"); - _sqlog = ini_get_string(CONFIG_DITTA, "bs", "Log", ""); - _usr = ini_get_string(CONFIG_DITTA, "bs", "USR", "BEESTORE"); - _psw = decode(ini_get_string(CONFIG_DITTA, "bs", "PSW", "BEESTORE")); - hasConai = ini_get_bool(CONFIG_DITTA, "bs", "EnabCONAI", false); - enableDelete = ini_get_bool(CONFIG_DITTA, "BS", "EmptyOnImp"); + _dsn = ini_get_string(CONFIG_DITTA, "BS", "DSN", "BEESTORE"); + _sqlog = ini_get_string(CONFIG_DITTA, "BS", "Log", ""); + _usr = ini_get_string(CONFIG_DITTA, "BS", "USR", "BEESTORE"); + _psw = decode(ini_get_string(CONFIG_DITTA, "BS", "PSW", "BEESTORE")); + hasConai = ini_get_bool(CONFIG_DITTA, "BS", "SKEnabCONAI", false); if (_dsn.full()) { @@ -2165,62 +1472,49 @@ bool TBeeStore_sync::create() } -void TBeeStore_sync::main_loop() +void TSknet_sync::main_loop() { - TBeeStore_mask mask; + TSknet_mask mask; while (mask.run() == K_ENTER) { mask.autosave(); // Rende definitivi tutti i paramentri in [bs] _log = new TLog_report; - const TDate dal = mask.get_date("SyncDateFrom"); - const TDate al = mask.get_date("SyncDateTo"); + if (mask.get_bool("SKSyncUMS")) + sync_ums(); + if (mask.get_bool("SKSyncIVA")) + sync_iva(); + if (mask.get_bool("SKSyncAnamag")) + sync_anamag(); - if (mask.get_bool("SyncUMS")) - sync_ums(dal, al); - if (mask.get_bool("SyncIVA")) - sync_iva(dal, al); - if (mask.get_bool("SyncLinee")) - sync_lines(dal, al); - if (mask.get_bool("SyncCatMer")) - sync_catmer(dal, al); - if (mask.get_bool("SyncAnamag")) - sync_anamag(dal, al); - if (mask.get_bool("SyncBarCode")) - sync_barcode(dal, al); - if (mask.get_bool("SyncVAL")) - sync_val(dal, al); + if (mask.get_bool("SKSyncVAL")) + sync_val(); int cfmask = 0; - if (mask.get_bool("SyncClienti")) cfmask |= 1; - if (mask.get_bool("SyncFornitori")) cfmask |= 2; + if (mask.get_bool("SKSyncClienti")) cfmask |= 1; + if (mask.get_bool("SKSyncFornitori")) cfmask |= 2; if (cfmask) - sync_clifo(cfmask, dal, al); + sync_clifo(cfmask); - if (mask.get("SyncListino").full()) - sync_listino(mask.get("SyncListino")); - if (mask.get_bool("SyncScontr")) - sync_scontrini(dal, al); - if (mask.get_bool("SyncCorr")) - sync_corrisp(dal, al); - if (mask.get_bool("SyncDoc")) - sync_doc(dal, al); - if (mask.get_bool("SyncCarScar")) - sync_carscar(dal, al); - if (mask.get_bool("SyncGenerici")) - sync_generici(dal, al); + if (mask.get_bool("SKSyncDoc")) + sync_doc(); + _log->log(0, "Procedura terminata!"); _log->preview(); delete _log; _log = NULL; + + if (mask.get_bool("SKEmptyOnImp")) + clean(); + } } -int bs0200(int argc, char* argv[]) +int bs0300(int argc, char* argv[]) { - TBeeStore_sync bss; - bss.run(argc, argv, TR("BeeStore Synchronizer")); + TSknet_sync bss; + bss.run(argc, argv, TR("SKNT Importer")); return 0; } \ No newline at end of file diff --git a/src/bs/bs0300a.h b/src/bs/bs0300a.h index a04d77861..316926052 100644 --- a/src/bs/bs0300a.h +++ b/src/bs/bs0300a.h @@ -3,19 +3,11 @@ #define F_UMS 103 #define F_IVA 104 -#define F_LINEART 105 -#define F_CATMER 106 -#define F_ART 107 -#define F_LIST 108 -#define F_SCONTRINI 109 -#define F_CORRISPETTIVI 110 -#define F_DOCUMENTI 111 -#define F_CARSCAR 112 -#define F_GENERICI 113 -#define F_VALUTE 114 -#define F_CLIENTI 115 -#define F_FORNITORI 116 -#define F_BARCODE 117 +#define F_ART 105 +#define F_DOCUMENTI 106 +#define F_VALUTE 107 +#define F_CLIENTI 108 +#define F_FORNITORI 109 #define F_CODNUMBOL 201 #define F_TIPODOCBOL 202 @@ -27,23 +19,13 @@ #define F_TIPODOCTAM 208 #define F_CODNUMORC 209 #define F_TIPODOCORC 210 -#define F_C_CARSCAR 211 -#define F_D_CARSCAR 212 -#define F_C_DOCUMENTI 213 -#define F_D_DOCUMENTI 214 -#define F_C_SCONTRINI 215 -#define F_D_SCONTRINI 216 -#define F_C_GENERICI 217 -#define F_D_GENERICI 218 -#define F_CLIFODC 219 -#define F_OVERRIG 220 -#define F_NUMCUSTRIG 221 -#define F_IMPORTUSER 222 -#define F_ENIMPORT 223 -#define F_ENEXPORT 224 -#define F_EMPTYONIMP 225 -#define F_ENABCONAI 226 -#define F_CODIVADEF 227 +#define F_OVERRIG 211 +#define F_NUMCUSTRIG 212 +#define F_IMPORTUSER 213 +#define F_EMPTYONIMP 214 +#define F_ENABCONAI 215 +#define F_CODIVADEF 216 +#define F_CODUMSDEF 217 #define F_C_CORRISPETTIVI 301 #define F_D_CORRISPETTIVI 302 diff --git a/src/bs/bs0300a.uml b/src/bs/bs0300a.uml index ca84b40e5..bf0d5a757 100644 --- a/src/bs/bs0300a.uml +++ b/src/bs/bs0300a.uml @@ -1,12 +1,12 @@ -#include "bs0200a.h" +#include "bs0300a.h" TOOLBAR "topbar" 0 0 0 2 #include ENDPAGE -PAGE "Sincronizzazione Bee Store" 0 2 0 0 +PAGE "SKNT Importer" 0 2 0 0 -GROUPBOX DLG_NULL 78 13 +GROUPBOX DLG_NULL 78 5 BEGIN PROMPT 1 1 "@bArchivi" END @@ -14,135 +14,54 @@ END BOOLEAN F_UMS BEGIN PROMPT 2 2 "Unità di misura " - FIELD SyncUMS + FIELD SKSyncUMS END BOOLEAN F_IVA BEGIN - PROMPT 2 3 "Codici IVA " - FIELD SyncIVA -END - -BOOLEAN F_LINEART -BEGIN - PROMPT 2 4 "Linee Articolo " - FIELD SyncLinee -END - -BOOLEAN F_CATMER -BEGIN - PROMPT 2 5 "Categorie Merceologiche" - FIELD SyncCatMer -END - -BOOLEAN F_ART -BEGIN - PROMPT 2 6 "Articoli " - FIELD SyncAnamag -END - -STRING F_LIST 3 -BEGIN - PROMPT 40 6 "Listino " - USE LF_CONDV - INPUT TIPO "L" - INPUT CATVEN "" - INPUT TIPOCF "" - INPUT CODCF "" - INPUT COD 148 - DISPLAY "Codice" COD - DISPLAY "Descrizione@50" DESCR - DISPLAY "Valuta@5" CODVAL - DISPLAY "Inizio@10" VALIN - DISPLAY "Fine@10" VALFIN - OUTPUT 148 COD - FIELD SyncListino -END - -BOOLEAN F_SCONTRINI -BEGIN - PROMPT 2 7 "Scontrini " - FIELD SyncScontr -END - -BOOLEAN F_CORRISPETTIVI -BEGIN - PROMPT 2 8 "Corrispettivi " - FIELD SyncCorr -END - -BOOLEAN F_DOCUMENTI -BEGIN - PROMPT 2 9 "Documenti " - FIELD SyncDoc -END - -BOOLEAN F_CARSCAR -BEGIN - PROMPT 2 10 "Carichi/scarichi " - FIELD SyncCarScar -END - -BOOLEAN F_GENERICI -BEGIN - PROMPT 2 11 "Mov.generici " - FIELD SyncGenerici + PROMPT 30 2 "Codici IVA " + FIELD SKSyncIVA END BOOLEAN F_VALUTE BEGIN - PROMPT 40 2 "Valute" - FIELD SyncVAL + PROMPT 60 2 "Valute" + FIELD SKSyncVAL END BOOLEAN F_CLIENTI BEGIN - PROMPT 40 3 "Clienti" - FIELD SyncClienti + PROMPT 2 3 "Clienti" + FIELD SKSyncClienti END BOOLEAN F_FORNITORI BEGIN - PROMPT 40 4 "Fornitori " - FIELD SyncFornitori + PROMPT 30 3 "Fornitori " + FIELD SKSyncFornitori END -BOOLEAN F_BARCODE +BOOLEAN F_ART BEGIN - PROMPT 40 5 "Codici a barre" - FIELD SyncBarCode + PROMPT 2 4 "Articoli " + FIELD SKSyncAnamag END -GROUPBOX DLG_NULL 78 4 +BOOLEAN F_DOCUMENTI BEGIN - PROMPT 1 14 "@bFiltri" + PROMPT 30 4 "Documenti " + FIELD SKSyncDoc END -DATE F_DAL -BEGIN - PROMPT 2 15 "Dalla data di modifica " - FIELD SyncDateFrom -END - -DATE F_AL -BEGIN - PROMPT 42 15 " al " - FIELD SyncDateTo -END - -ENDPAGE - -PAGE "Parametri" 0 2 0 0 - GROUPBOX DLG_NULL 78 7 BEGIN - PROMPT 1 1 "@bImpostazioni documenti" + PROMPT 1 6 "@bImpostazioni documenti" END STRING F_CODNUMBOL 4 BEGIN - PROMPT 2 2 "Numerazione bolle " - FIELD CODNUMBOL + PROMPT 2 7 "Numerazione bolle " + FIELD SKCODNUMBOL HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUMBOL @@ -156,8 +75,8 @@ END STRING F_TIPODOCBOL 4 BEGIN - PROMPT 40 2 "Tipo bolle " - FIELD TIPODOCBOL + PROMPT 40 7 "Tipo bolle " + FIELD SKTIPODOCBOL HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOCBOL @@ -169,8 +88,8 @@ END STRING F_CODNUMFAT 4 BEGIN - PROMPT 2 3 "Numerazione fatture " - FIELD CODNUMFAT + PROMPT 2 8 "Numerazione fatture " + FIELD SKCODNUMFAT HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUMFAT @@ -184,8 +103,8 @@ END STRING F_TIPODOCFAT 4 BEGIN - PROMPT 40 3 "Tipo fatture " - FIELD TIPODOCFAT + PROMPT 40 8 "Tipo fatture " + FIELD SKTIPODOCFAT HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOCFAT @@ -197,8 +116,8 @@ END STRING F_CODNUMNC 4 BEGIN - PROMPT 2 4 "Numerazione NC " - FIELD CODNUMNC + PROMPT 2 9 "Numerazione NC " + FIELD SKCODNUMNC HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUMNC @@ -212,8 +131,8 @@ END STRING F_TIPODOCNC 4 BEGIN - PROMPT 40 4 "Tipo NC " - FIELD TIPODOCNC + PROMPT 40 9 "Tipo NC " + FIELD SKTIPODOCNC HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOCNC @@ -225,8 +144,8 @@ END STRING F_CODNUMTAM 4 BEGIN - PROMPT 2 5 "Numerazione TAM " - FIELD CODNUMTAM + PROMPT 2 10 "Numerazione TAM " + FIELD SKCODNUMTAM HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUMTAM @@ -240,8 +159,8 @@ END STRING F_TIPODOCTAM 4 BEGIN - PROMPT 40 5 "Tipo TAM " - FIELD TIPODOCTAM + PROMPT 40 10 "Tipo TAM " + FIELD SKTIPODOCTAM HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOCTAM @@ -253,8 +172,8 @@ END STRING F_CODNUMORC 4 BEGIN - PROMPT 2 6 "Numerazione ORC " - FIELD CODNUMORC + PROMPT 2 11 "Numerazione ORC " + FIELD SKCODNUMORC HELP "Codice numerazione" USE %NUM INPUT CODTAB F_CODNUMORC @@ -268,8 +187,8 @@ END STRING F_TIPODOCORC 4 BEGIN - PROMPT 40 6 "Tipo ORC " - FIELD TIPODOCORC + PROMPT 40 11 "Tipo ORC " + FIELD SKTIPODOCORC HELP "Codice tipo documento" USE %TIP INPUT CODTAB F_TIPODOCORC @@ -279,141 +198,9 @@ BEGIN FLAG "UP" END -GROUPBOX DLG_NULL 78 6 -BEGIN - PROMPT 1 8 "@bMovimenti" -END - -STRING F_C_CARSCAR 4 -BEGIN - PROMPT 2 9 "Causale magazzino car./scar. " - USE %CAU SELECT (S2[8,8]=1)&&(S6="P") - INPUT CODTAB F_C_CARSCAR - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_C_CARSCAR CODTAB - OUTPUT F_D_CARSCAR S0 - CHECKTYPE NORMAL - FIELD CODCAUS(1) - ADD RUN mg0 -0 %CAU -END - -STRING F_D_CARSCAR 50 36 -BEGIN - PROMPT 40 9 "" - FLAGS "D" -END - -STRING F_C_DOCUMENTI 4 -BEGIN - PROMPT 2 10 "Causale magazzino documenti " - USE %CAU SELECT (S2[8,8]=1)&&(S6="P") - INPUT CODTAB F_C_DOCUMENTI - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_C_DOCUMENTI CODTAB - OUTPUT F_D_DOCUMENTI S0 - CHECKTYPE NORMAL - FIELD CODCAUS(2) - ADD RUN mg0 -0 %CAU -END - -STRING F_D_DOCUMENTI 50 36 -BEGIN - PROMPT 40 10 "" - FLAGS "D" -END - -STRING F_C_SCONTRINI 4 -BEGIN - PROMPT 2 11 "Causale magazzino scontrini " - USE %CAU SELECT (S2[8,8]=1)&&(S6="P") - INPUT CODTAB F_C_SCONTRINI - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_C_SCONTRINI CODTAB - OUTPUT F_D_SCONTRINI S0 - CHECKTYPE NORMAL - FIELD CODCAUS(3) - ADD RUN mg0 -0 %CAU -END - -STRING F_D_SCONTRINI 50 36 -BEGIN - PROMPT 40 11 "" - FLAGS "D" -END - -STRING F_C_GENERICI 4 -BEGIN - PROMPT 2 12 "Causale magazzino mov.generici " - USE %CAU SELECT (S2[8,8]=1)&&(S6="P") - INPUT CODTAB F_C_GENERICI - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_C_GENERICI CODTAB - OUTPUT F_D_GENERICI S0 - CHECKTYPE NORMAL - FIELD CODCAUS(4) - ADD RUN mg0 -0 %CAU -END - -STRING F_D_GENERICI 50 36 -BEGIN - PROMPT 40 12 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 78 3 -BEGIN - PROMPT 1 14 "@bCorrispettivi" -END - -STRING F_C_CORRISPETTIVI 4 -BEGIN - PROMPT 2 15 "Causale contabile " - USE LF_CAUSALI SELECT TIPODOC="CR" - INPUT CODCAUS F_C_CORRISPETTIVI - DISPLAY "Codice" CODCAUS - DISPLAY "Descrizione@50" DESCR - OUTPUT F_C_CORRISPETTIVI CODCAUS - OUTPUT F_D_CORRISPETTIVI DESCR - CHECKTYPE NORMAL - FIELD CODCAUSC - ADD RUN cg0 -4 -END - -STRING F_D_CORRISPETTIVI 50 36 -BEGIN - PROMPT 40 15 "" - FLAGS "D" -END - -BOOLEAN F_CLIFODC -BEGIN - PROMPT 2 17 "Doppio controllo cod.cli" - FIELD ClifoDC -END - -BOOLEAN F_OVERRIG -BEGIN - PROMPT 40 17 "Riga merce custom" - FIELD UseCustomRiga - MESSAGE FALSE DISABLE,F_NUMCUSTRIG - MESSAGE TRUE ENABLE,F_NUMCUSTRIG -END - -STRING F_NUMCUSTRIG 2 -BEGIN - PROMPT 60 17 "" - FIELD NumCustomRiga - FLAGS "D" - CHECKYPE REQUIRED -END - STRING F_CODIVADEF 4 BEGIN - PROMPT 2 18 "Utilizza cod.IVA default " + PROMPT 2 13 "Utilizza cod.IVA default " USE %IVA INPUT CODTAB F_CODIVADEF DISPLAY "Codice" CODTAB @@ -422,38 +209,55 @@ BEGIN DISPLAY "Tipo" S1 OUTPUT F_CODIVADEF CODTAB HELP "Codice IVA per righe con valore nullo" - FIELD CodIvaDef + FIELD SKCodIvaDef CHECKTYPE REQUIRED END -BOOLEAN F_ENIMPORT +STRING F_CODUMSDEF 4 BEGIN - PROMPT 2 19 "Abilita Importazione" - FIELD EnableImp + PROMPT 2 14 "Utilizza UMS default " + USE %UMS + INPUT CODTAB F_CODUMSDEF + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODUMSDEF CODTAB + HELP "Codice UmS per righe con valore nullo" + FIELD SKCodUmsDef + CHECKTYPE REQUIRED END -BOOLEAN F_ENEXPORT +BOOLEAN F_OVERRIG BEGIN - PROMPT 40 19 "Abilita Esportazione" - FIELD EnableExp + PROMPT 2 15 "Riga merce custom" + FIELD SKUseCustomRiga + MESSAGE FALSE DISABLE,F_NUMCUSTRIG + MESSAGE TRUE ENABLE,F_NUMCUSTRIG +END + +STRING F_NUMCUSTRIG 2 +BEGIN + PROMPT 40 15 "" + FIELD SKNumCustomRiga + FLAGS "D" + CHECKYPE REQUIRED END BOOLEAN F_EMPTYONIMP BEGIN - PROMPT 2 20 "Svuola DB dopo importazione" - FIELD EmptyOnImp + PROMPT 2 16 "Svuola DB dopo importazione" + FIELD SKEmptyOnImp END BOOLEAN F_ENABCONAI BEGIN - PROMPT 40 20 "Abilita gestione CONAI" - FIELD EnabCONAI + PROMPT 40 16 "Abilita gestione CONAI" + FIELD SKEnabCONAI END STRING F_IMPORTUSER 20 BEGIN - PROMPT 2 21 "Utente che effettua l'importazione " - FIELD ImportUser + PROMPT 2 17 "Utente che effettua l'importazione " + FIELD SKImportUser END ENDPAGE diff --git a/src/bs/bsmenu.men b/src/bs/bsmenu.men index 083916b46..f4fa1a62c 100644 --- a/src/bs/bsmenu.men +++ b/src/bs/bsmenu.men @@ -5,3 +5,4 @@ Module = bs Flags = "F" Item_01 = "Configurazione", "bs0 -0", "F", 9015 Item_02 = "Sincronizzazione", "bs0 -1", "F", 9015 +Item_02 = "SKNET Importer", "bs0 -2", "F", 9015 diff --git a/src/bs/bsutility.cpp b/src/bs/bsutility.cpp new file mode 100644 index 000000000..8f71c7bc7 --- /dev/null +++ b/src/bs/bsutility.cpp @@ -0,0 +1,104 @@ +#include "bsutility.h" + + +// Converte una TDate in una data SQL +const TString& date2sql(const TDate& d, int hour) +{ + TString& tmp = get_tmp_string(); + if (d.ok()) + { + tmp.format("'%04d-%02d-%02d", d.year(), d.month(), d.day()); + switch (hour) + { + case 1: + tmp << "T00:00:00.000'"; + break; + case 2: + tmp << "T23:59:59.999'"; + break; + default: + case 0: + tmp << "'"; + } + } + else + tmp = "NULL"; + return tmp; +} + +const TString& var2sql(const TVariant& var) +{ + TString& tmp = get_tmp_string(); + switch (var.type()) + { + case _nullfld: + tmp = "NULL"; + break; + case _boolfld: + tmp = var.as_bool() ? "1" : "0"; + break; + case _datefld: + tmp = date2sql(var.as_date()); + break; + case _intfld: + case _longfld: + var.as_string(tmp); + break; + case _realfld: + if (var.is_empty()) + tmp = "0"; + else + { + tmp = var.as_real().string(0, 2); + if (tmp.ends_with(".00")) + tmp.rtrim(3); + } + break; + default: + { + var.as_string(tmp); + const int pos = tmp.find('\''); + if (pos >= 0) + { + for (int i = tmp.len() - 1; i >= pos; i--) + if (tmp[i] == '\'') tmp.insert("'", i); + } + tmp.insert("'"); + tmp << "'"; + } + break; + } + return tmp; +} + + +const TString& expr2sql(const TISAM_recordset& set, const char* expr) +{ + TVariant var; + TExpression e(expr, _strexpr, true); + if (e.numvar() == 0) + { + if (real::is_natural(expr)) + var = atoi(expr); + else + var = expr; + } + else + if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr)) + { + var = set.get(expr); + } + else + { + for (int v = e.numvar() - 1; v >= 0; v--) + { + var = set.get(e.varname(v)); + if (var.is_real() || var.is_bool()) + e.setvar(v, var.as_real()); + else + e.setvar(v, var.as_string()); + } + var = e.as_string(); + } + return var2sql(var); +} \ No newline at end of file diff --git a/src/bs/bsutility.h b/src/bs/bsutility.h new file mode 100644 index 000000000..cd3bd210e --- /dev/null +++ b/src/bs/bsutility.h @@ -0,0 +1,11 @@ +#include +#include + +// Converte una TDate in una data SQL +const TString& date2sql(const TDate& d, int hour = 0); + +// Coverte un qualsiasi TVariant in stringa SQL +const TString& var2sql(const TVariant& var); + +// Coverte una qualsiasi espressione in stringa SQL +const TString& expr2sql(const TISAM_recordset& set, const char* expr); \ No newline at end of file