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
This commit is contained in:
bonazzi 2017-08-28 15:39:35 +00:00
parent 0bd9fdbf99
commit 9000f1532c
5 changed files with 357 additions and 51 deletions

2
src/bs/bs0100a.h Normal file
View File

@ -0,0 +1,2 @@
#define F_DATASOURCE 101
#define F_LOG 102

View File

@ -1,3 +1,5 @@
#include "bs0100a.h"
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
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

View File

@ -10,6 +10,9 @@
#include "../mg/mglib.h"
#include "../cg/cglib01.h"
#include "../cg/cg2101.h"
#include "../ve/velib.h"
#include <doc.h>
#include <rdoc.h>
#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;

30
src/bs/bs0200a.h Normal file
View File

@ -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

View File

@ -1,45 +1,47 @@
#include "bs0200a.h"
TOOLBAR "topbar" 0 0 0 2
#include <elabar.h>
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