From 9000f1532c4986e87d0b4867d69c3433da6ec2b5 Mon Sep 17 00:00:00 2001 From: bonazzi Date: Mon, 28 Aug 2017 15:39:35 +0000 Subject: [PATCH] Patch level : 12.0 434 Files correlati : bs0.exe bs0100a.msk bs0200a.msk Trasferimento documenti BeeStore git-svn-id: svn://10.65.10.50/branches/R_10_00@24050 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/bs/bs0100a.h | 2 + src/bs/bs0100a.uml | 6 +- src/bs/bs0200.cpp | 215 ++++++++++++++++++++++++++++++++++++++++++--- src/bs/bs0200a.h | 30 +++++++ src/bs/bs0200a.uml | 155 ++++++++++++++++++++++++-------- 5 files changed, 357 insertions(+), 51 deletions(-) create mode 100644 src/bs/bs0100a.h create mode 100644 src/bs/bs0200a.h diff --git a/src/bs/bs0100a.h b/src/bs/bs0100a.h new file mode 100644 index 000000000..b319029a1 --- /dev/null +++ b/src/bs/bs0100a.h @@ -0,0 +1,2 @@ +#define F_DATASOURCE 101 +#define F_LOG 102 diff --git a/src/bs/bs0100a.uml b/src/bs/bs0100a.uml index 6d6862cbd..63ddc1ef6 100644 --- a/src/bs/bs0100a.uml +++ b/src/bs/bs0100a.uml @@ -1,3 +1,5 @@ +#include "bs0100a.h" + TOOLBAR "topbar" 0 0 0 2 #include ENDPAGE @@ -9,7 +11,7 @@ BEGIN PROMPT 1 1 "@bODBC" END -STRING 101 50 +STRING F_DATASOURCE 50 BEGIN PROMPT 2 2 "Data Source Name (DSN) " FLAGS "B" @@ -17,7 +19,7 @@ BEGIN FIELD DSN END -STRING 102 260 50 +STRING F_LOG 260 50 BEGIN PROMPT 2 3 "File di log errori SQL " FIELD Log diff --git a/src/bs/bs0200.cpp b/src/bs/bs0200.cpp index 2ccfb8ce0..3082b39aa 100644 --- a/src/bs/bs0200.cpp +++ b/src/bs/bs0200.cpp @@ -10,6 +10,9 @@ #include "../mg/mglib.h" #include "../cg/cglib01.h" #include "../cg/cg2101.h" +#include "../ve/velib.h" +#include +#include #include "bs0.h" @@ -157,7 +160,8 @@ private: void add_rmov(TMovimentoPN& mov, const real& importo, const TCausale& caus, const char* cod) const; protected: - bool save_and_delete_doc(TMov_mag*& doc) const; + bool save_and_delete_movmag(TMov_mag*& doc) const; + bool save_and_delete_doc(TDocumento*& doc) const; void load_origine_1(TISAM_recordset& out_set, const char* in_table, const TString_array& pairs); void save_origine_2(TISAM_recordset& in_set, const char* out_table, const TString_array& pairs, TFieldEvaluator* feval = NULL); @@ -176,8 +180,12 @@ protected: 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_scontrini(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); @@ -191,7 +199,7 @@ const TString& date2sql(const TDate& d) { TString& tmp = get_tmp_string(); if (d.ok()) - tmp.format("'%02d-%02d-%04d'", d.day(), d.month(), d.year()); + tmp.format("'%04d-%02d-%02d'", d.year(), d.month(), d.day()); else tmp = "NULL"; return tmp; @@ -1012,7 +1020,7 @@ void TBeeStore_sync::sync_clifo(int cfmask, const TDate& dal, const TDate& al) save_clifo(cfmask, dal, al); } -bool TBeeStore_sync::save_and_delete_doc(TMov_mag*& doc) const +bool TBeeStore_sync::save_and_delete_movmag(TMov_mag*& doc) const { int err = 0; if (doc != NULL) @@ -1038,6 +1046,32 @@ bool TBeeStore_sync::save_and_delete_doc(TMov_mag*& doc) const return err == 0; } +bool TBeeStore_sync::save_and_delete_doc(TDocumento*& doc) const +{ + int err = 0; + if (doc != NULL) + { + if (doc->rows() > 0) + { + err = doc->write(); + if (err != NOERR) + { + TString msg; + + msg.format(FR("Errore %d in registrazione dcoumento %s/%ld del %s"), err, + (const char *) doc->get(DOC_CODNUM), doc->get_long(DOC_NDOC), (const char*)doc->get(DOC_DATADOC)); + _log->log(2, msg); + msg << TR("\nSi desidera proseguire ugualmente?"); + if (noyes_box(msg)) + err = 0; + } + } + delete doc; + doc = NULL; + } + return err == 0; +} + void TBeeStore_sync::sync_val(const TDate& dal, const TDate& al) { TString_array fields; @@ -1096,10 +1130,11 @@ void TBeeStore_sync::sync_listino(const TString& listino) } } -void TBeeStore_sync::sync_scontrini(const TDate& dal, const TDate& al) +void TBeeStore_sync::sync_mov(int tipotestata, const TDate& dal, const TDate& al) { - const TString8 codcaus = ini_get_string(CONFIG_DITTA, "bs", MOVMAG_CODCAUS); - if (codcaus.blank()) + 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; @@ -1107,7 +1142,7 @@ void TBeeStore_sync::sync_scontrini(const TDate& dal, const TDate& al) TString str(255); str << "ODBC(" << _dsn << ")\n"; - str << "SELECT * FROM tieDMovMag WHERE Origine=1"; + str << "SELECT * FROM tieDMovMag WHERE Origine=1 AND TipoTestata=" << tipotestata; if (dal.ok() || al.ok()) { str << " AND DataMov"; @@ -1134,7 +1169,7 @@ void TBeeStore_sync::sync_scontrini(const TDate& dal, const TDate& al) nm = mov.get("NumMov").as_string(); if (nm != num_mov) { - if (!save_and_delete_doc(doc)) + if (!save_and_delete_movmag(doc)) break; num_mov = nm; const TDate datadoc = mov.get("DataMov").as_date(); @@ -1149,7 +1184,7 @@ void TBeeStore_sync::sync_scontrini(const TDate& dal, const TDate& al) if (!pi.add_status()) break; } - save_and_delete_doc(doc); // Salva ultimo documento in sospeso + 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 @@ -1173,6 +1208,157 @@ void TBeeStore_sync::add_rmov(TMovimentoPN& mov, const real& importo, const TCau } } +void TBeeStore_sync::sync_doc(const TDate& dal, const TDate& al) +{ + const TString8 codcausdef = ini_get_string(CONFIG_DITTA, "bs", MOVMAG_CODCAUS, "", 2); + + if (codcausdef.blank()) + { + _log->log(2, "Configurare parametri per movimenti Bee Store"); + return; + } + + TString str(255); + str << "ODBC(" << _dsn << ")\n"; + str << "SELECT tieDMovMag.*,tieTBolFat.* FROM tieDMovMag,tieTBolFat WHERE tieDMovMag.Origine=1 AND tieDMovMag.TipoTestata=2 AND tieDMovMag.CodTestata=tieTBolFat.Cod_PK"; // verificare + if (dal.ok() || al.ok()) + { + str << " AND DataMov"; + if (dal.ok() && al.ok()) + str << " BETWEEN " << date2sql(dal) << " AND " << date2sql(al); + else + { + if (dal.ok()) + str << ">=" << date2sql(dal); + else + str << "<=" << date2sql(al); + } + } + str << "\nORDER BY NumMov,NumRiga"; + + TODBC_recordset docs(str); + TProgress_monitor pi(docs.items(), str); + + long num_doc = -1, nd, codcf ; + TString4 tipocf; + TDocumento* doc = NULL; + + for (bool ok = docs.move_first(); ok; ok = docs.move_next()) + { + TToken_string test(docs.get("CodTestata").as_string(), '\\'); + + nd = atol(test.get()); + TString wrk = docs.get("CodCliente").as_string(); + + while(wrk[0] >= 'A') + wrk.ltrim(1); + + codcf = atol(wrk); + tipocf = docs.get("TipoIntestatario").as_string(); + if (tipocf != "C") // verificare + tipocf ="F"; + + if (nd != num_doc) + { + if (num_doc > 0 && !save_and_delete_doc(doc)) + break; + num_doc = nd; + const TDate datadoc = docs.get("DataMov").as_date(); + TString8 numdoc =docs.get("TipoDocCE").as_string(); + TString8 tipodoc =docs.get("TipoDocCE").as_string(); + +numdoc = "B099"; +tipodoc = "B01"; + + TTipo_documento tipo(tipodoc); + const TString8 codcaus = tipo.caus_mov().blank() ? codcausdef : tipo.caus_mov(); + + doc = new TDocumento(); + doc->put(DOC_ANNO, datadoc.year()); + doc->put(DOC_DATADOC, datadoc); + doc->put(DOC_NDOC, nd); + doc->put(DOC_PROVV, "D"); + doc->put(DOC_CODNUM, numdoc); + doc->put(DOC_TIPODOC, tipodoc); + doc->put(DOC_TIPOCF, tipocf); + doc->put(DOC_CODCF, codcf); + doc->cli2doc(); + + const TString8 codval = docs.get("CodValuta").as_string(); + const real cambio = docs.get("CambioValuta").as_real(); + const TString asp = docs.get("AspettoBeni").as_string(); + const int ncolli = docs.get("NumeroColli").as_int(); + + doc->put(DOC_CODVAL, codval); + doc->put(DOC_CAMBIO, cambio); + doc->put(DOC_ASPBENI1, asp.sleft(50)); + doc->put(DOC_ASPBENI2, asp.smid(50)); + doc->put(DOC_NCOLLI, ncolli); + doc->put(DOC_CAUSMAG, codcaus); + } + const int tipoart = docs.get("TipoArticolo").as_int(); + TString4 tiporiga = tipoart == 2 ? "04" : "02"; + TRectype& rdoc = doc->new_row("01"); + const TString80 codart = docs.get("CodArticolo").as_string(); + + rdoc.put(RDOC_CODART, codart); + + if (tipoart == 2) + { + if (cache().get("SPP" , codart).not_empty()) + rdoc.put(RDOC_CODARTMAG, codart); + } + else + { + if (cache().get(LF_ANAMAG, codart).not_empty()) + rdoc.put(RDOC_CODARTMAG, codart); + } + + rdoc.put(RDOC_CODARTMAG, codart); +// rdoc.check_row(); + + const TString descr = docs.get("DSRiga").as_string(); + + rdoc.put(RDOC_DESCR, descr.sleft(50)); + if (descr.len() > 50) + { + rdoc.put(RDOC_DESCLUNGA, "X"); + rdoc.put(RDOC_DESCEST, descr.smid(50)); + } + 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()); + rdoc.put(RDOC_QTA, docs.get("Quantita").as_real()); + rdoc.put(RDOC_PREZZO, docs.get("PrzNettoSede").as_real()); // o PrzNettoValuta ?? + + real valsconto1(docs.get("Sconto1").as_real()); + real valsconto2(docs.get("Sconto2").as_real()); + real valsconto3(docs.get("Sconto3").as_real()); + TString80 sconto; + + if (valsconto1 != ZERO) + sconto << valsconto1.stringa(6, 2); + if (valsconto2 != ZERO) + { + if (sconto.full()) + sconto << "+"; + sconto << valsconto2.stringa(6, 2); + } + if (valsconto3 != ZERO) + { + if (sconto.full()) + sconto << "+"; + sconto << valsconto3.stringa(6, 2); + } + rdoc.put(RDOC_SCONTO, sconto); + rdoc.put(RDOC_CODIVA, docs.get("CodIva").as_string()); + + if (!pi.add_status()) + break; + } + save_and_delete_doc(doc); // Salva ultimo documento in sospeso +} + void TBeeStore_sync::sync_corrisp(const TDate&, const TDate&) { const TString8 codcaus = ini_get_string(CONFIG_DITTA, "bs", "CODCAUSC"); @@ -1310,6 +1496,7 @@ void TBeeStore_sync::sync_corrisp(const TDate&, const TDate&) } } + bool TBeeStore_sync::create() { _dsn = ini_get_string(CONFIG_DITTA, "bs", "DSN", "BEESTORE"); @@ -1369,10 +1556,16 @@ void TBeeStore_sync::main_loop() if (mask.get("SyncListino").full()) sync_listino(mask.get("SyncListino")); - if (mask.get_bool("SyncSontr")) + 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); _log->preview(); delete _log; diff --git a/src/bs/bs0200a.h b/src/bs/bs0200a.h new file mode 100644 index 000000000..878b97e53 --- /dev/null +++ b/src/bs/bs0200a.h @@ -0,0 +1,30 @@ +#define F_DAL 101 +#define F_AL 102 + +#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_C_CARSCAR 201 +#define F_D_CARSCAR 202 +#define F_C_DOCUMENTI 203 +#define F_D_DOCUMENTI 204 +#define F_C_SCONTRINI 205 +#define F_D_SCONTRINI 206 +#define F_C_GENERICI 207 +#define F_D_GENERICI 208 + +#define F_C_CORRISPETTIVI 301 +#define F_D_CORRISPETTIVI 302 diff --git a/src/bs/bs0200a.uml b/src/bs/bs0200a.uml index 9d05ed81c..b871bbb75 100644 --- a/src/bs/bs0200a.uml +++ b/src/bs/bs0200a.uml @@ -1,45 +1,47 @@ +#include "bs0200a.h" + TOOLBAR "topbar" 0 0 0 2 #include ENDPAGE PAGE "Sincronizzazione Bee Store" 0 2 0 0 -GROUPBOX DLG_NULL 78 9 +GROUPBOX DLG_NULL 78 13 BEGIN PROMPT 1 1 "@bArchivi" END -BOOLEAN 103 +BOOLEAN F_UMS BEGIN PROMPT 2 2 "Unità di misura " FIELD SyncUMS END -BOOLEAN 104 +BOOLEAN F_IVA BEGIN PROMPT 2 3 "Codici IVA " FIELD SyncIVA END -BOOLEAN 105 +BOOLEAN F_LINEART BEGIN PROMPT 2 4 "Linee Articolo " FIELD SyncLinee END -BOOLEAN 106 +BOOLEAN F_CATMER BEGIN PROMPT 2 5 "Categorie Merceologiche" FIELD SyncCatMer END -BOOLEAN 147 +BOOLEAN F_ART BEGIN PROMPT 2 6 "Articoli " FIELD SyncAnamag END -STRING 148 3 +STRING F_LIST 3 BEGIN PROMPT 40 6 "Listino " USE LF_CONDV @@ -57,57 +59,74 @@ BEGIN FIELD SyncListino END -BOOLEAN 149 +BOOLEAN F_SCONTRINI BEGIN PROMPT 2 7 "Scontrini " FIELD SyncScontr END -BOOLEAN 150 +BOOLEAN F_CORRISPETTIVI BEGIN PROMPT 2 8 "Corrispettivi " FIELD SyncCorr END -BOOLEAN 151 +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 +END + +BOOLEAN F_VALUTE BEGIN PROMPT 40 2 "Valute" FIELD SyncVAL END -BOOLEAN 152 +BOOLEAN F_CLIENTI BEGIN PROMPT 40 3 "Clienti" FIELD SyncClienti END -BOOLEAN 153 +BOOLEAN F_FORNITORI BEGIN PROMPT 40 4 "Fornitori " FIELD SyncFornitori END -BOOLEAN 154 +BOOLEAN F_BARCODE BEGIN PROMPT 40 5 "Codici a barre" FIELD SyncBarCode END - -GROUPBOX DLG_NULL 78 8 +GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 10 "@bFiltri" + PROMPT 1 14 "@bFiltri" END -DATE 100 +DATE F_DAL BEGIN - PROMPT 2 11 "Dalla data di modifica " + PROMPT 2 15 "Dalla data di modifica " FIELD SyncDateFrom END -DATE 101 +DATE F_AL BEGIN - PROMPT 42 11 " al " + PROMPT 42 15 " al " FIELD SyncDateTo END @@ -115,53 +134,113 @@ ENDPAGE PAGE "Parametri" 0 2 0 0 -GROUPBOX DLG_NULL 78 4 +GROUPBOX DLG_NULL 78 7 BEGIN - PROMPT 1 1 "@bScontrini" + PROMPT 1 1 "@bMovimenti" END -STRING 201 4 +STRING F_C_CARSCAR 4 BEGIN - PROMPT 2 2 "Causale magazzino " + PROMPT 2 2 "Causale magazzino car./scar. " USE %CAU SELECT (S2[8,8]=1)&&(S6="P") - INPUT CODTAB 201 + INPUT CODTAB F_C_CARSCAR DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 - OUTPUT 201 CODTAB - OUTPUT 202 S0 + OUTPUT F_C_CARSCAR CODTAB + OUTPUT F_D_CARSCAR S0 CHECKTYPE NORMAL - FIELD CODCAUS + FIELD CODCAUS(1) ADD RUN mg0 -0 %CAU END -STRING 202 50 46 +STRING F_D_CARSCAR 50 36 BEGIN - PROMPT 30 2 "" + PROMPT 40 2 "" + FLAGS "D" +END + +STRING F_C_DOCUMENTI 4 +BEGIN + PROMPT 2 3 "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 3 "" + FLAGS "D" +END + +STRING F_C_SCONTRINI 4 +BEGIN + PROMPT 2 4 "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 4 "" + FLAGS "D" +END + +STRING F_C_GENERICI 4 +BEGIN + PROMPT 2 5 "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 5 "" FLAGS "D" END GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 5 "@bCorrispettivi" + PROMPT 1 8 "@bCorrispettivi" END -STRING 301 4 +STRING F_C_CORRISPETTIVI 4 BEGIN - PROMPT 2 6 "Causale contabile " + PROMPT 2 9 "Causale contabile " USE LF_CAUSALI SELECT TIPODOC="CR" - INPUT CODCAUS 301 + INPUT CODCAUS F_C_CORRISPETTIVI DISPLAY "Codice" CODCAUS DISPLAY "Descrizione@50" DESCR - OUTPUT 301 CODCAUS - OUTPUT 302 DESCR + OUTPUT F_C_CORRISPETTIVI CODCAUS + OUTPUT F_D_CORRISPETTIVI DESCR CHECKTYPE NORMAL FIELD CODCAUSC ADD RUN cg0 -4 END -STRING 302 50 46 +STRING F_D_CORRISPETTIVI 50 36 BEGIN - PROMPT 30 6 "" + PROMPT 40 9 "" FLAGS "D" END