Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/branches/R_10_00@22223 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5ea1fa9367
commit
9fb2626891
@ -56,7 +56,7 @@ bool THA_table_app::get_next_key(TToken_string& key)
|
||||
const TString& codart = curr_mask().get(F_CODART);
|
||||
if (codart.full())
|
||||
{
|
||||
const TString& codtab = get_next_att_key(codart);
|
||||
const TString& codtab = hd_get_next_att_key(codart);
|
||||
|
||||
//riempie la token_string con i dati richiesti
|
||||
key.add(F_CODART);
|
||||
|
12
ha/ha0200a.h
12
ha/ha0200a.h
@ -30,11 +30,13 @@
|
||||
//==============================
|
||||
//pagina 2
|
||||
//esportazione dati
|
||||
#define F_OUTPUT_PATH 250
|
||||
#define F_OU_CARDOC_NUM 251
|
||||
#define F_OU_CARDOC_TIP 252
|
||||
#define F_OU_CARDOC_STA 253
|
||||
#define F_OU_BARCODE_TIP 254
|
||||
#define F_OUTPUT_PATH 250
|
||||
#define F_CONCENTRATORE_PATH 251
|
||||
#define F_TRANSACTION_PATH 252
|
||||
#define F_OU_CARDOC_NUM 253
|
||||
#define F_OU_CARDOC_TIP 254
|
||||
#define F_OU_CARDOC_STA 255
|
||||
#define F_OU_BARCODE_TIP 256
|
||||
|
||||
//importazione dati
|
||||
#define F_INPUT_PATH 260
|
||||
|
@ -327,12 +327,12 @@ PAGE "Trasferimenti" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 76 7
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bEsportazione"
|
||||
PROMPT 1 0 "@bEsportazione"
|
||||
END
|
||||
|
||||
STRING F_OUTPUT_PATH 255 39
|
||||
STRING F_OUTPUT_PATH 255 40
|
||||
BEGIN
|
||||
PROMPT 2 2 "Percorso files .txt da esportare "
|
||||
PROMPT 2 1 "Server: percorso files .txt "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
@ -340,14 +340,34 @@ BEGIN
|
||||
FIELD OutputPath
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 74 3
|
||||
STRING F_CONCENTRATORE_PATH 255 40
|
||||
BEGIN
|
||||
PROMPT 2 3 "@bDocumenti di carico"
|
||||
PROMPT 2 2 "Server: Percorso concentratore "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Selezionare una cartella valida!"
|
||||
FIELD ConcentratorePath
|
||||
END
|
||||
|
||||
STRING F_TRANSACTION_PATH 255 40
|
||||
BEGIN
|
||||
PROMPT 2 3 "Client: Percorso .ini transaz. "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Selezionare una cartella valida!"
|
||||
FIELD TransactionPath
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 44 3
|
||||
BEGIN
|
||||
PROMPT 2 4 "@bDocumenti di carico"
|
||||
END
|
||||
|
||||
STRING F_OU_CARDOC_NUM 4
|
||||
BEGIN
|
||||
PROMPT 3 4 "Numerazione "
|
||||
PROMPT 3 5 "Numerazione "
|
||||
USE %NUM
|
||||
INPUT CODTAB F_OU_CARDOC_NUM
|
||||
DISPLAY "Codice@8" CODTAB
|
||||
@ -359,7 +379,7 @@ END
|
||||
|
||||
STRING F_OU_CARDOC_TIP 4
|
||||
BEGIN
|
||||
PROMPT 23 4 "Tipo "
|
||||
PROMPT 23 5 "Tipo "
|
||||
USE %TIP
|
||||
INPUT CODTAB F_OU_CARDOC_TIP
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -372,7 +392,7 @@ END
|
||||
|
||||
STRING F_OU_CARDOC_STA 1
|
||||
BEGIN
|
||||
PROMPT 36 4 "Stato "
|
||||
PROMPT 36 5 "Stato "
|
||||
USE %STD
|
||||
INPUT CODTAB F_OU_CARDOC_STA
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -385,7 +405,7 @@ END
|
||||
|
||||
LISTBOX F_OU_BARCODE_TIP 10
|
||||
BEGIN
|
||||
PROMPT 2 6 "Tipo di barcode "
|
||||
PROMPT 47 5 "Tipo di barcode "
|
||||
ITEM "N|Normale"
|
||||
ITEM "8|EAN8 "
|
||||
ITEM "1|EA13 "
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <execp.h>
|
||||
#include <progind.h>
|
||||
|
||||
#include <comuni.h>
|
||||
@ -8,7 +9,7 @@
|
||||
#include "../ve/condv.h"
|
||||
|
||||
#include "halib.h"
|
||||
|
||||
#include "ha1250.h"
|
||||
#include "ha1200a.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -59,20 +60,18 @@ bool TFile2Txt_mask::on_field_event(TOperable_field& o, TField_event e, long jol
|
||||
|
||||
TFile2Txt_mask::TFile2Txt_mask() : TAutomask ("ha1200a")
|
||||
{
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
const TString& path = config.get("OutputPath");
|
||||
set(F_PATH, path);
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// TSkeleton_application
|
||||
///////////////////////////////////////
|
||||
class TFile2Txt : public TSkeleton_application
|
||||
class TFile2Txt : public THardy_transaction
|
||||
{
|
||||
TFilename _output_dir;
|
||||
|
||||
protected:
|
||||
void elabora(const TMask& mask);
|
||||
virtual void elabora(const TMask& mask);
|
||||
virtual TMask* create_mask() const;
|
||||
virtual const char* fake_trans_file() const;
|
||||
|
||||
bool genera_agenti_txt();
|
||||
bool genera_clienti_txt(const long da_codcli);
|
||||
@ -93,15 +92,14 @@ protected:
|
||||
TFilename genera_path(const TString& prefisso);
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
virtual bool create();
|
||||
|
||||
};
|
||||
|
||||
|
||||
TFilename TFile2Txt::genera_path(const TString& prefisso)
|
||||
{
|
||||
TFilename output_path;
|
||||
output_path = _output_dir;
|
||||
output_path = _output_path;
|
||||
output_path.add(prefisso);
|
||||
output_path.ext(".txt");
|
||||
return output_path;
|
||||
@ -858,6 +856,11 @@ bool TFile2Txt::genera_ripristino_txt(const TMask& mask)
|
||||
//metodo di alto livello per la gestione delle chiamate
|
||||
void TFile2Txt::elabora(const TMask& mask)
|
||||
{
|
||||
// a) stoppa il concentratore
|
||||
chiudi_concentratore();
|
||||
|
||||
//b) esegue le vere elaborazioni
|
||||
//------------------------------
|
||||
bool go_on = true;
|
||||
|
||||
if (mask.get_bool(F_AGENTI))
|
||||
@ -904,26 +907,31 @@ void TFile2Txt::elabora(const TMask& mask)
|
||||
|
||||
if (mask.get_bool(F_INIMAG) && go_on)
|
||||
go_on = genera_ripristino_txt(mask);
|
||||
|
||||
//c) lancia il concentratore in modalità di carico
|
||||
carica_concentratore();
|
||||
|
||||
//d) rilancia il concentratore in modalità di trasmissione
|
||||
trasmetti_concentratore();
|
||||
}
|
||||
|
||||
|
||||
void TFile2Txt::main_loop()
|
||||
TMask* TFile2Txt::create_mask() const
|
||||
{
|
||||
TFile2Txt_mask mask;
|
||||
_output_dir = mask.get(F_PATH);
|
||||
if (!_output_dir.exist())
|
||||
error_box("Non esiste la cartella di destinazione indicata!");
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
TMask* mask = new TFile2Txt_mask;
|
||||
mask->set(F_OUTPUT_PATH, _output_path);
|
||||
mask->set(F_CONC_PATH, _conc_path);
|
||||
mask->set(F_TRANS_PATH, _trans_path);
|
||||
return mask;
|
||||
}
|
||||
|
||||
bool TFile2Txt::create()
|
||||
|
||||
const char* TFile2Txt::fake_trans_file() const
|
||||
{
|
||||
return TSkeleton_application::create();
|
||||
return "157";
|
||||
}
|
||||
|
||||
|
||||
int ha1200(int argc, char* argv[])
|
||||
{
|
||||
TFile2Txt a;
|
||||
|
52
ha/ha1200a.h
52
ha/ha1200a.h
@ -1,26 +1,28 @@
|
||||
#define F_PATH 200
|
||||
#define F_AGENTI 201
|
||||
#define F_CLIENTI 202
|
||||
#define F_SOSPESI 203
|
||||
#define F_LISTINI 204
|
||||
#define F_CONTRATTI 205
|
||||
#define F_PROMOZIONI 206
|
||||
#define F_PRODOTTI 207
|
||||
#define F_LINEE 208
|
||||
#define F_BARCODE 209
|
||||
#define F_DECODART 210
|
||||
#define F_ATTREZZA 211
|
||||
#define F_TABPAG 212
|
||||
#define F_CARICO 213
|
||||
#define F_INIMAG 214
|
||||
#define F_OUTPUT_PATH 200
|
||||
#define F_CONC_PATH 201
|
||||
#define F_TRANS_PATH 202
|
||||
#define F_AGENTI 212
|
||||
#define F_CLIENTI 213
|
||||
#define F_SOSPESI 214
|
||||
#define F_LISTINI 215
|
||||
#define F_CONTRATTI 216
|
||||
#define F_PROMOZIONI 217
|
||||
#define F_PRODOTTI 218
|
||||
#define F_LINEE 219
|
||||
#define F_BARCODE 220
|
||||
#define F_DECODART 221
|
||||
#define F_ATTREZZA 222
|
||||
#define F_TABPAG 223
|
||||
#define F_CARICO 224
|
||||
#define F_INIMAG 225
|
||||
|
||||
#define F_DA_CODCLI 220
|
||||
#define F_DA_SOSP_CODCLI 221
|
||||
#define F_CODNUM 222
|
||||
#define F_ANNO 223
|
||||
#define F_PROVV 224
|
||||
#define F_STATO 225
|
||||
#define F_DA_CARDOC 226
|
||||
#define F_A_CARDOC 227
|
||||
#define F_ANNOES 230
|
||||
#define F_CODMAG 231
|
||||
#define F_DA_CODCLI 230
|
||||
#define F_DA_SOSP_CODCLI 231
|
||||
#define F_CODNUM 232
|
||||
#define F_ANNO 233
|
||||
#define F_PROVV 234
|
||||
#define F_STATO 235
|
||||
#define F_DA_CARDOC 236
|
||||
#define F_A_CARDOC 237
|
||||
#define F_ANNOES 240
|
||||
#define F_CODMAG 241
|
@ -1,31 +1,45 @@
|
||||
#include "ha1200a.h"
|
||||
|
||||
PAGE "Esportazione archivi in formato .txt" -1 -1 78 13
|
||||
PAGE "Esportazione archivi in formato .txt" -1 -1 78 15
|
||||
|
||||
STRING F_PATH 256 50
|
||||
STRING F_OUTPUT_PATH 256 49
|
||||
BEGIN
|
||||
PROMPT 1 1 "Cartella creazione files "
|
||||
PROMPT 1 0 "Cartella creazione files "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CONC_PATH 256 49
|
||||
BEGIN
|
||||
PROMPT 1 1 "Cartella concentratore "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_TRANS_PATH 256 49
|
||||
BEGIN
|
||||
PROMPT 1 2 "Cartella file transazione "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 11
|
||||
BEGIN
|
||||
PROMPT 1 2 "@bArchivi da trasferire"
|
||||
PROMPT 1 3 "@bArchivi da trasferire"
|
||||
END
|
||||
|
||||
BOOLEAN F_AGENTI
|
||||
BEGIN
|
||||
PROMPT 2 3 "Agenti"
|
||||
PROMPT 2 4 "Agenti"
|
||||
FIELD Agenti
|
||||
END
|
||||
|
||||
BOOLEAN F_CLIENTI
|
||||
BEGIN
|
||||
PROMPT 2 4 "Clienti"
|
||||
PROMPT 2 5 "Clienti"
|
||||
FIELD Clienti
|
||||
END
|
||||
|
||||
NUMBER F_DA_CODCLI 6
|
||||
BEGIN
|
||||
PROMPT 12 4 "Dal cli: "
|
||||
PROMPT 12 5 "Dal cli: "
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_DA_CODCLI
|
||||
@ -33,16 +47,18 @@ BEGIN
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
OUTPUT F_DA_CODCLI CODCF
|
||||
CHECKTYPE NORMAL
|
||||
FIELD Dacliente
|
||||
END
|
||||
|
||||
BOOLEAN F_SOSPESI
|
||||
BEGIN
|
||||
PROMPT 2 5 "Sospesi"
|
||||
PROMPT 2 6 "Sospesi"
|
||||
FIELD Sospesi
|
||||
END
|
||||
|
||||
NUMBER F_DA_SOSP_CODCLI 6
|
||||
BEGIN
|
||||
PROMPT 12 5 "Dal cli: "
|
||||
PROMPT 12 6 "Dal cli: "
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF F_DA_SOSP_CODCLI
|
||||
@ -50,63 +66,74 @@ BEGIN
|
||||
DISPLAY "Ragione Sociale@50" RAGSOC
|
||||
OUTPUT F_DA_SOSP_CODCLI CODCF
|
||||
CHECKTYPE NORMAL
|
||||
FIELD Dasospeso
|
||||
END
|
||||
|
||||
BOOLEAN F_LISTINI
|
||||
BEGIN
|
||||
PROMPT 2 6 "Listini"
|
||||
PROMPT 2 7 "Listini"
|
||||
FIELD Listini
|
||||
END
|
||||
|
||||
BOOLEAN F_CONTRATTI
|
||||
BEGIN
|
||||
PROMPT 2 7 "Contratti"
|
||||
PROMPT 2 8 "Contratti"
|
||||
FIELD Contratti
|
||||
END
|
||||
|
||||
BOOLEAN F_PROMOZIONI
|
||||
BEGIN
|
||||
PROMPT 2 8 "Promozioni"
|
||||
PROMPT 2 9 "Promozioni"
|
||||
FIELD Promozioni
|
||||
END
|
||||
|
||||
BOOLEAN F_DECODART
|
||||
BEGIN
|
||||
PROMPT 2 9 "Codici articolo alternativi"
|
||||
PROMPT 2 10 "Codici articolo alternativi"
|
||||
FIELD Codartalt
|
||||
END
|
||||
|
||||
BOOLEAN F_PRODOTTI
|
||||
BEGIN
|
||||
PROMPT 32 3 "Prodotti"
|
||||
PROMPT 32 4 "Prodotti"
|
||||
FIELD Prodotti
|
||||
END
|
||||
|
||||
BOOLEAN F_LINEE
|
||||
BEGIN
|
||||
PROMPT 32 4 "Linee"
|
||||
PROMPT 32 5 "Linee"
|
||||
FIELD Linee
|
||||
END
|
||||
|
||||
BOOLEAN F_BARCODE
|
||||
BEGIN
|
||||
PROMPT 32 5 "Barcode"
|
||||
PROMPT 32 6 "Barcode"
|
||||
FIELD Barcode
|
||||
END
|
||||
|
||||
BOOLEAN F_ATTREZZA
|
||||
BEGIN
|
||||
PROMPT 53 3 "Attrezzature"
|
||||
PROMPT 53 4 "Attrezzature"
|
||||
FIELD Attrezzature
|
||||
END
|
||||
|
||||
BOOLEAN F_TABPAG
|
||||
BEGIN
|
||||
PROMPT 53 4 "Condizioni pagamento"
|
||||
PROMPT 53 5 "Condizioni pagamento"
|
||||
FIELD Condpag
|
||||
END
|
||||
|
||||
BOOLEAN F_CARICO
|
||||
BEGIN
|
||||
PROMPT 53 5 "Documenti di carico"
|
||||
PROMPT 53 6 "Documenti di carico"
|
||||
MESSAGE FALSE HIDE,2@
|
||||
MESSAGE TRUE SHOW,2@
|
||||
FIELD Carico
|
||||
END
|
||||
|
||||
NUMBER F_DA_CARDOC 7
|
||||
BEGIN
|
||||
PROMPT 53 6 "Dal doc. n. "
|
||||
PROMPT 53 7 "Dal doc. n. "
|
||||
USE DOC SELECT (STATO=#F_STATO)
|
||||
INPUT PROVV "D"
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
@ -122,11 +149,12 @@ BEGIN
|
||||
OUTPUT F_DA_CARDOC NDOC
|
||||
CHECKTYPE NORMAL
|
||||
GROUP 2
|
||||
FIELD Dacardoc
|
||||
END
|
||||
|
||||
NUMBER F_A_CARDOC 7
|
||||
BEGIN
|
||||
PROMPT 53 7 "Al doc n. "
|
||||
PROMPT 53 8 "Al doc n. "
|
||||
COPY USE F_DA_CARDOC
|
||||
INPUT PROVV "D"
|
||||
INPUT ANNO F_ANNO SELECT
|
||||
@ -138,40 +166,43 @@ BEGIN
|
||||
NUM_EXPR (#F_A_CARDOC>=#F_DA_CARDOC)||(#F_A_CARDOC==0)
|
||||
WARNING "Il numero documento finale deve essere > di quello iniziale oppure lasciato vuoto"
|
||||
GROUP 2
|
||||
FIELD Acardoc
|
||||
END
|
||||
|
||||
STRING F_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 53 8 "Num. "
|
||||
PROMPT 53 9 "Num. "
|
||||
FLAGS "D"
|
||||
GROUP 2
|
||||
END
|
||||
|
||||
NUMBER F_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 63 8 "Anno "
|
||||
PROMPT 63 9 "Anno "
|
||||
FLAGS "A"
|
||||
MESSAGE K_SPACE,F_CARICO
|
||||
CHECKTYPE REQUIRED
|
||||
GROUP 2
|
||||
FIELD Anno
|
||||
END
|
||||
|
||||
STRING F_STATO 1
|
||||
BEGIN
|
||||
PROMPT 77 8 ""
|
||||
PROMPT 77 9 ""
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
BOOLEAN F_INIMAG
|
||||
BEGIN
|
||||
PROMPT 53 9 "Ripristina magazzino"
|
||||
PROMPT 53 10 "Ripristina magazzino"
|
||||
MESSAGE FALSE HIDE,3@
|
||||
MESSAGE TRUE SHOW,3@
|
||||
FIELD Ripmag
|
||||
END
|
||||
|
||||
STRING F_CODMAG 3
|
||||
BEGIN
|
||||
PROMPT 53 10 "Mag. "
|
||||
PROMPT 53 11 "Mag. "
|
||||
USE MAG SELECT CODTAB[4,5]==""
|
||||
FLAGS "U"
|
||||
INPUT CODTAB F_CODMAG
|
||||
@ -180,15 +211,17 @@ BEGIN
|
||||
OUTPUT F_CODMAG CODTAB[1,3]
|
||||
CHECKTYPE REQUIRED
|
||||
GROUP 3
|
||||
FIELD Codmag
|
||||
END
|
||||
|
||||
NUMBER F_ANNOES 4
|
||||
BEGIN
|
||||
PROMPT 64 10 "Anno "
|
||||
PROMPT 64 11 "Anno "
|
||||
FLAGS "A"
|
||||
MESSAGE K_SPACE,F_INIMAG
|
||||
CHECKTYPE REQUIRED
|
||||
GROUP 3
|
||||
FIELD Annomag
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
110
ha/ha1250.cpp
110
ha/ha1250.cpp
@ -1,6 +1,8 @@
|
||||
#include <automask.h>
|
||||
#include <config.h>
|
||||
#include <execp.h>
|
||||
#include <relation.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "ha1250.h"
|
||||
|
||||
@ -19,6 +21,68 @@ bool THardy_transaction::is_server() const
|
||||
return i_am_server;
|
||||
}
|
||||
|
||||
bool THardy_transaction::is_by_postino() const
|
||||
{
|
||||
TFilename trans = argv(2);
|
||||
return (trans.starts_with("/i") || trans.starts_with("-i"));
|
||||
}
|
||||
|
||||
void THardy_transaction::chiudi_concentratore()
|
||||
{
|
||||
TFilename bat_chiudi = _conc_path;
|
||||
bat_chiudi.add("chiudi.bat");
|
||||
TExternal_app app_chiudi(bat_chiudi);
|
||||
app_chiudi.run();
|
||||
//sara' meglio aspettare qualche secondo
|
||||
xvt_sys_sleep(3000);
|
||||
}
|
||||
|
||||
void THardy_transaction::carica_concentratore()
|
||||
{
|
||||
TFilename bat_carica = _conc_path;
|
||||
bat_carica.add("car.bat");
|
||||
TExternal_app app_carica(bat_carica);
|
||||
app_carica.run();
|
||||
//sara' meglio aspettare qualche secondo
|
||||
xvt_sys_sleep(1000);
|
||||
}
|
||||
|
||||
bool THardy_transaction::scarica_concentratore()
|
||||
{
|
||||
TFilename bat_scarica = _conc_path;
|
||||
bat_scarica.add("descar.bat");
|
||||
TExternal_app app_scarica(bat_scarica);
|
||||
app_scarica.run();
|
||||
//deve assicurarsi che il file upload.d sia completato; usa un test sulle dimensioni
|
||||
//aspetta qualche secondo per permettere al concentratore di iniziare a generare il file
|
||||
TFilename upload = _input_path;
|
||||
upload.add("upload.d");
|
||||
//se trova il file upload.d comincia a fare i test
|
||||
|
||||
long last_size = 0L;
|
||||
for (int s = 0; s < 60; s++)
|
||||
{
|
||||
xvt_sys_sleep(3000);
|
||||
long size = fsize(upload);
|
||||
if (size == last_size && size > 0)
|
||||
break;
|
||||
last_size = size;
|
||||
}
|
||||
|
||||
if (last_size == 0L)
|
||||
return cantread_box(upload);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void THardy_transaction::trasmetti_concentratore()
|
||||
{
|
||||
TFilename bat_trasm = _conc_path;
|
||||
bat_trasm.add("trasmissione.bat");
|
||||
TExternal_app app_trasm(bat_trasm);
|
||||
app_trasm.run();
|
||||
}
|
||||
|
||||
|
||||
void THardy_transaction::main_loop()
|
||||
{
|
||||
@ -27,13 +91,14 @@ void THardy_transaction::main_loop()
|
||||
//sono il server?
|
||||
bool i_am_server = is_server();
|
||||
|
||||
TFilename trans = argv(2);
|
||||
if (trans.starts_with("/i") || trans.starts_with("-i"))
|
||||
//sono lanciato dal postino?
|
||||
if (is_by_postino())
|
||||
{
|
||||
//se sono il server eseguo subito l'elaborazione
|
||||
if (i_am_server)
|
||||
{
|
||||
//legge i files da trasferire
|
||||
TFilename trans = argv(2);
|
||||
trans.ltrim(2);
|
||||
TConfig ini(trans, fake_trans_file());
|
||||
FOR_EACH_MASK_FIELD(*mask, i, f)
|
||||
@ -59,30 +124,33 @@ void THardy_transaction::main_loop()
|
||||
else
|
||||
error_box(TR("Le transazioni possono essere eseguite solo dal server!"));
|
||||
}
|
||||
|
||||
while (mask->run() == K_ENTER)
|
||||
else //sono lanciato in modo interattivo
|
||||
{
|
||||
//se è il server -> esegue le operazioni di elaborazione
|
||||
if (i_am_server)
|
||||
elabora(*mask);
|
||||
else //senno' prepara il .ini per l'elaborazione postinica
|
||||
while (mask->run() == K_ENTER)
|
||||
{
|
||||
TFilename lista_files = _trans_path;
|
||||
lista_files.add(name());
|
||||
lista_files.ext("ini");
|
||||
TConfig ini(lista_files, "Transaction");
|
||||
ini.set("Action", "RUN");
|
||||
ini.set("Mode", "AUTO");
|
||||
ini.set_paragraph(fake_trans_file());
|
||||
FOR_EACH_MASK_FIELD(*mask, i, f)
|
||||
//se è il server -> esegue le operazioni di elaborazione
|
||||
if (i_am_server)
|
||||
elabora(*mask);
|
||||
else //senno' prepara il .ini per l'elaborazione postinica
|
||||
{
|
||||
const TFieldref* field = f->field();
|
||||
if (field != NULL && f->active())
|
||||
field->write(ini, fake_trans_file(), f->get());
|
||||
TFilename lista_files = _trans_path;
|
||||
lista_files.add(name());
|
||||
lista_files.ext("ini");
|
||||
TConfig ini(lista_files, "Transaction");
|
||||
ini.set("Action", "RUN");
|
||||
ini.set("Mode", "AUTO");
|
||||
ini.set_paragraph(fake_trans_file());
|
||||
FOR_EACH_MASK_FIELD(*mask, i, f)
|
||||
{
|
||||
const TFieldref* field = f->field();
|
||||
if (field != NULL && f->active())
|
||||
field->write(ini, fake_trans_file(), f->get());
|
||||
}
|
||||
message_box(TR("Transazione di scarico inviata al server"));
|
||||
}
|
||||
message_box(TR("Transazione di scarico inviata al server"));
|
||||
}
|
||||
}
|
||||
} //if(by_postino(...
|
||||
|
||||
delete mask;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,12 @@ protected:
|
||||
virtual void elabora(const TMask& mask) pure;
|
||||
virtual TMask* create_mask() const pure;
|
||||
bool is_server() const;
|
||||
bool is_by_postino() const;
|
||||
virtual const char* fake_trans_file() const pure;
|
||||
void chiudi_concentratore();
|
||||
void carica_concentratore();
|
||||
bool scarica_concentratore();
|
||||
void trasmetti_concentratore();
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
|
250
ha/ha1300.cpp
250
ha/ha1300.cpp
@ -11,10 +11,10 @@
|
||||
#include "../mg/rmovmag.h"
|
||||
|
||||
#include "halib.h"
|
||||
#include "ha1250.h"
|
||||
#include "ha1300a.h"
|
||||
#include "ha1301a.h"
|
||||
|
||||
|
||||
//funzione di ordinamento del file di upload una volta caricato in memoria
|
||||
|
||||
static TToken_string tipi_record("SU|VC|TF|RF|SI|BR|RC");
|
||||
@ -252,11 +252,6 @@ bool TUpload2Campo_mask::on_field_event(TOperable_field& o, TField_event e, long
|
||||
|
||||
TUpload2Campo_mask::TUpload2Campo_mask() : TAutomask ("ha1300a")
|
||||
{
|
||||
TConfig config(CONFIG_DITTA, "ha");
|
||||
const TString& input_path = config.get("InputPath");
|
||||
set(F_INPUT_PATH, input_path);
|
||||
const TString& archive_path = config.get("ArchivePath");
|
||||
set(F_ARCHIVE_PATH, archive_path);
|
||||
}
|
||||
|
||||
|
||||
@ -284,12 +279,16 @@ TUpload2Campo_newcli_mask::TUpload2Campo_newcli_mask() : TAutomask ("ha1301a")
|
||||
///////////////////////////////////////
|
||||
// TSkeleton_application
|
||||
///////////////////////////////////////
|
||||
class TUpload2Campo : public TSkeleton_application
|
||||
class TUpload2Campo : public THardy_transaction
|
||||
{
|
||||
bool _can_write;
|
||||
TAssoc_array _nuovi_clienti;
|
||||
|
||||
protected:
|
||||
virtual void elabora(const TMask& mask);
|
||||
virtual TMask* create_mask() const;
|
||||
const char* fake_trans_file() const;
|
||||
|
||||
//metodi di basso livello
|
||||
const TString& check_agente(TString& codice_terminale, TLog_report& log);
|
||||
const TString& check_articolo(TString& codart, TLog_report& log);
|
||||
@ -307,11 +306,8 @@ protected:
|
||||
void elabora_SI(THardy_upload_recordset& recset, TLog_report& log);
|
||||
void elabora_RC(THardy_upload_recordset& recset, TLog_report& log);
|
||||
|
||||
void elabora(const TMask& mask);
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
virtual bool create();
|
||||
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -1321,140 +1317,152 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log
|
||||
|
||||
void TUpload2Campo::elabora(const TMask& mask)
|
||||
{
|
||||
//prende la directory di archiviazione
|
||||
const TString archive_path = mask.get(F_ARCHIVE_PATH);
|
||||
// a) stoppa il concentratore
|
||||
chiudi_concentratore();
|
||||
|
||||
//creazione del filename dei files da importare
|
||||
TFilename src_files = mask.get(F_INPUT_PATH);
|
||||
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
|
||||
//src_files.add("upload*.d");
|
||||
src_files.add("upload.d");
|
||||
TString_array src_files_list;
|
||||
const int n_files_d = list_files(src_files, src_files_list);
|
||||
// b) scarica il concentratore per generare il file upload.d
|
||||
bool carica = scarica_concentratore();
|
||||
|
||||
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
|
||||
TLog_report log("Segnalazioni su acquisizione");
|
||||
log.kill_duplicates();
|
||||
log.log(0, "");
|
||||
// c) rilancia il concentratore in modalità trasmissione
|
||||
trasmetti_concentratore();
|
||||
|
||||
//scandisce i files uno ad uno
|
||||
for (int i = 0; i < n_files_d; i++)
|
||||
// d) esegue le elaborazioni
|
||||
if (carica)
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
//file corrente in fase di elaborazione
|
||||
const TFilename curr_fname = src_files_list.row(i);
|
||||
//creazione del filename dei files da importare
|
||||
TFilename src_files = _input_path;
|
||||
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
|
||||
//src_files.add("upload*.d");
|
||||
src_files.add("upload.d");
|
||||
TString_array src_files_list;
|
||||
const int n_files_d = list_files(src_files, src_files_list);
|
||||
|
||||
THardy_upload_recordset recset(curr_fname);
|
||||
const long items = recset.items();
|
||||
//ordinamento del file in memoria secondo l'ordine stabilito nella tipi_record "SU|VC|TF|RF|SI|BR|RC";
|
||||
recset.sort(ordina_upload);
|
||||
|
||||
TString msg;
|
||||
#ifdef DBG
|
||||
msg << "D:/dati/hardy/" << "cazzone_" << curr_fname.name_only() << ".txt";
|
||||
recset.save_as(msg);
|
||||
#endif
|
||||
|
||||
//creazione progind e log
|
||||
msg.cut(0);
|
||||
msg << "Elaborazione file " << curr_fname << " in corso...";
|
||||
TProgind pi(items, msg, true, true);
|
||||
|
||||
msg.cut(0);
|
||||
msg << "File " << curr_fname.name_only();
|
||||
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
|
||||
TLog_report log("Segnalazioni su acquisizione");
|
||||
log.kill_duplicates();
|
||||
log.log(0, "");
|
||||
log.log(0, msg);
|
||||
log.log(0, "");
|
||||
//parametro di controllo; solo se resta true fino alla fine il documento viene writato
|
||||
//solo in caso di elaborazione definitiva può diventare true; vale per ogni upload*.d, in modo da archiviare..
|
||||
//..quelli buoni
|
||||
_can_write = false;
|
||||
if (mask.get_bool(F_DEFINITIVO))
|
||||
_can_write = true;
|
||||
|
||||
//codice terminalino; viene preso dal tipo record SU (è comunque presente in ogni tipo record) ed usato per l'archiviazione..
|
||||
//..del file se correttamente importato
|
||||
TString4 terminalino;
|
||||
|
||||
//giro su tutti i record del terribile recordset per l'acquisizione dei dati
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
//scandisce i files uno ad uno
|
||||
for (int i = 0; i < n_files_d; i++)
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
//file corrente in fase di elaborazione
|
||||
const TFilename curr_fname = src_files_list.row(i);
|
||||
|
||||
//acquisizione tipo record da riga corrente del file di input
|
||||
TString4 tipo_record = recset.rec_type();
|
||||
tipo_record.trim();
|
||||
THardy_upload_recordset recset(curr_fname);
|
||||
const long items = recset.items();
|
||||
//ordinamento del file in memoria secondo l'ordine stabilito nella tipi_record "SU|VC|TF|RF|SI|BR|RC";
|
||||
recset.sort(ordina_upload);
|
||||
|
||||
//Sequenza di ordinamento dei record "SU|VC|TF|RF|SI|BR|RC": NON ATTENTATEVI A CAMBIARLA O NON FUNZIONA PIU' UN CAZZO!!
|
||||
const int pos = tipi_record.get_pos(tipo_record);
|
||||
TString msg;
|
||||
#ifdef DBG
|
||||
msg << "D:/dati/hardy/" << "cazzone_" << curr_fname.name_only() << ".txt";
|
||||
recset.save_as(msg);
|
||||
#endif
|
||||
|
||||
//creazione progind e log
|
||||
msg.cut(0);
|
||||
msg << "Elaborazione file " << curr_fname << " in corso...";
|
||||
TProgind pi(items, msg, true, true);
|
||||
|
||||
msg.cut(0);
|
||||
msg << "File " << curr_fname.name_only();
|
||||
log.log(0, "");
|
||||
log.log(0, msg);
|
||||
log.log(0, "");
|
||||
//parametro di controllo; solo se resta true fino alla fine il documento viene writato
|
||||
//solo in caso di elaborazione definitiva può diventare true; vale per ogni upload*.d, in modo da archiviare..
|
||||
//..quelli buoni
|
||||
_can_write = false;
|
||||
if (mask.get_bool(F_DEFINITIVO))
|
||||
_can_write = true;
|
||||
|
||||
//codice terminalino; viene preso dal tipo record SU (è comunque presente in ogni tipo record) ed usato per l'archiviazione..
|
||||
//..del file se correttamente importato
|
||||
TString4 terminalino;
|
||||
|
||||
//giro su tutti i record del terribile recordset per l'acquisizione dei dati
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
//acquisizione tipo record da riga corrente del file di input
|
||||
TString4 tipo_record = recset.rec_type();
|
||||
tipo_record.trim();
|
||||
|
||||
//Sequenza di ordinamento dei record "SU|VC|TF|RF|SI|BR|RC": NON ATTENTATEVI A CAMBIARLA O NON FUNZIONA PIU' UN CAZZO!!
|
||||
const int pos = tipi_record.get_pos(tipo_record);
|
||||
|
||||
//trattazione dei vari tracciati record
|
||||
switch (pos)
|
||||
{
|
||||
case 0: //tipo record: SU (SetUp...ovvero agente)
|
||||
terminalino = elabora_SU(recset, log); //non serve a una cippa!
|
||||
break;
|
||||
case 1: //tipo record: VC (nuovi clienti e Variazioni Cliente)
|
||||
elabora_VC(recset, log);
|
||||
break;
|
||||
case 2: //tipo record: TF (Testata Fattura)
|
||||
elabora_TF(recset, log);
|
||||
break;
|
||||
case 3: //tipo record: RF (Riga Fattura)
|
||||
//elabora_RF(recset, log); //non serve! lo fa l'elaborazione di testata
|
||||
break;
|
||||
case 4: //tipo record: SI (incasso documenti)
|
||||
elabora_SI(recset, log);
|
||||
break;
|
||||
case 5: //tipo record: BR (righe movimenti magazzino)
|
||||
elabora_BR(recset, log);
|
||||
break;
|
||||
case 6: //tipo record: RC (Richiesta Carico)
|
||||
elabora_RC(recset, log);
|
||||
break;
|
||||
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
|
||||
//trattazione dei vari tracciati record
|
||||
switch (pos)
|
||||
{
|
||||
TString msg;
|
||||
msg << "Tipo record non riconosciuto '" << tipo_record << "' alla riga " << (recset.current_row() + 1);
|
||||
log.log(2, msg);
|
||||
}
|
||||
break;
|
||||
} //switch(pos)..
|
||||
case 0: //tipo record: SU (SetUp...ovvero agente)
|
||||
terminalino = elabora_SU(recset, log); //non serve a una cippa!
|
||||
break;
|
||||
case 1: //tipo record: VC (nuovi clienti e Variazioni Cliente)
|
||||
elabora_VC(recset, log);
|
||||
break;
|
||||
case 2: //tipo record: TF (Testata Fattura)
|
||||
elabora_TF(recset, log);
|
||||
break;
|
||||
case 3: //tipo record: RF (Riga Fattura)
|
||||
//elabora_RF(recset, log); //non serve! lo fa l'elaborazione di testata
|
||||
break;
|
||||
case 4: //tipo record: SI (incasso documenti)
|
||||
elabora_SI(recset, log);
|
||||
break;
|
||||
case 5: //tipo record: BR (righe movimenti magazzino)
|
||||
elabora_BR(recset, log);
|
||||
break;
|
||||
case 6: //tipo record: RC (Richiesta Carico)
|
||||
elabora_RC(recset, log);
|
||||
break;
|
||||
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
|
||||
{
|
||||
TString msg;
|
||||
msg << "Tipo record non riconosciuto '" << tipo_record << "' alla riga " << (recset.current_row() + 1);
|
||||
log.log(2, msg);
|
||||
}
|
||||
break;
|
||||
} //switch(pos)..
|
||||
|
||||
} //for (bool ok... (acquisizione di un file)
|
||||
log.log(0, "");
|
||||
} //for (bool ok... (acquisizione di un file)
|
||||
log.log(0, "");
|
||||
|
||||
//sequenza di archiviazione del file di upload se elaborato con successo in via definitiva
|
||||
if (_can_write)
|
||||
{
|
||||
if (archivia_file_importato(archive_path, curr_fname, terminalino, log))
|
||||
//sequenza di archiviazione del file di upload se elaborato con successo in via definitiva
|
||||
if (_can_write)
|
||||
{
|
||||
msg.cut(0);
|
||||
msg << "Archiviato file " << curr_fname.name_only();
|
||||
log.log(0, msg);
|
||||
if (archivia_file_importato(_archive_path, curr_fname, terminalino, log))
|
||||
{
|
||||
msg.cut(0);
|
||||
msg << "Archiviato file " << curr_fname.name_only();
|
||||
log.log(0, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} //for (int i = 0; i < n_files_d;... (giro su tutti i files tipo upload*.d)
|
||||
} //for (int i = 0; i < n_files_d;... (giro su tutti i files tipo upload*.d)
|
||||
|
||||
log.preview();
|
||||
log.preview();
|
||||
|
||||
} //if (carica)
|
||||
}
|
||||
|
||||
TMask* TUpload2Campo::create_mask() const
|
||||
{
|
||||
TMask* mask = new TUpload2Campo_mask;
|
||||
mask->set(F_INPUT_PATH, _input_path);
|
||||
mask->set(F_ARCHIVE_PATH, _archive_path);
|
||||
mask->set(F_CONC_PATH, _conc_path);
|
||||
mask->set(F_TRANS_PATH, _trans_path);
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
||||
void TUpload2Campo::main_loop()
|
||||
const char* TUpload2Campo::fake_trans_file() const
|
||||
{
|
||||
TUpload2Campo_mask mask;
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
elabora(mask);
|
||||
}
|
||||
}
|
||||
|
||||
bool TUpload2Campo::create()
|
||||
{
|
||||
return TSkeleton_application::create();
|
||||
return "164";
|
||||
}
|
||||
|
||||
int ha1300(int argc, char* argv[])
|
||||
|
@ -1,3 +1,5 @@
|
||||
#define F_INPUT_PATH 201
|
||||
#define F_ARCHIVE_PATH 202
|
||||
#define F_DEFINITIVO 203
|
||||
#define F_CONC_PATH 203
|
||||
#define F_TRANS_PATH 204
|
||||
#define F_DEFINITIVO 205
|
@ -1,6 +1,6 @@
|
||||
#include "ha1300a.h"
|
||||
|
||||
PAGE "Importazione dati da file upload" -1 -1 78 6
|
||||
PAGE "Importazione dati da file upload" -1 -1 78 7
|
||||
|
||||
STRING F_INPUT_PATH 256 45
|
||||
BEGIN
|
||||
@ -14,9 +14,22 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CONC_PATH 256 45
|
||||
BEGIN
|
||||
PROMPT 1 3 "Cartella concentratore "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_TRANS_PATH 256 45
|
||||
BEGIN
|
||||
PROMPT 1 4 "Cartella file transazione "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BOOLEAN F_DEFINITIVO
|
||||
BEGIN
|
||||
PROMPT 1 4 "Elaborazione definitiva (scrittura sul database)"
|
||||
PROMPT 1 6 "Elaborazione definitiva (scrittura sul database)"
|
||||
FIELD Definitiva
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
@ -164,7 +164,7 @@ void TInserimento_storico::elabora(const TMask& mask)
|
||||
//..per quanto riguarda il progressivo)
|
||||
if (err != NOERR)
|
||||
{
|
||||
codtab = get_next_att_key(codart);
|
||||
codtab = hd_get_next_att_key(codart);
|
||||
tab_att.put("CODTAB", codtab);
|
||||
tab_att.put("S0", str_s0);
|
||||
}
|
||||
|
@ -516,7 +516,7 @@ void hd_key2conto(const TString& key, int& gr, int& co, long& so)
|
||||
so = atoi(key.mid(5,3));
|
||||
}
|
||||
|
||||
const TString& get_next_att_key(const TString& codart)
|
||||
const TString& hd_get_next_att_key(const TString& codart)
|
||||
{
|
||||
if (codart.full())
|
||||
{
|
||||
@ -538,4 +538,4 @@ const TString& get_next_att_key(const TString& codart)
|
||||
|
||||
|
||||
return EMPTY_STRING;
|
||||
}
|
||||
}
|
||||
|
@ -244,4 +244,4 @@ const TDate upload_format_date6(const TString& str_data);
|
||||
long hd_key2cli(const TString& key);
|
||||
long hd_key2forn(const TString& key);
|
||||
void hd_key2conto(const TString& key, int& gr, int& co, long& so);
|
||||
const TString& get_next_att_key(const TString& codart);
|
||||
const TString& hd_get_next_att_key(const TString& codart);
|
Loading…
x
Reference in New Issue
Block a user