From 9fb26268918741eb3ed72c9cee75fc74976d7033 Mon Sep 17 00:00:00 2001 From: luca Date: Tue, 7 Jun 2011 10:04:39 +0000 Subject: [PATCH] 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 --- ha/ha0100.cpp | 2 +- ha/ha0200a.h | 12 ++- ha/ha0200a.uml | 38 ++++++-- ha/ha1200.cpp | 50 +++++----- ha/ha1200a.h | 52 +++++----- ha/ha1200a.uml | 87 +++++++++++------ ha/ha1250.cpp | 110 +++++++++++++++++----- ha/ha1250.h | 5 + ha/ha1300.cpp | 250 +++++++++++++++++++++++++------------------------ ha/ha1300a.h | 4 +- ha/ha1300a.uml | 17 +++- ha/ha3800.cpp | 2 +- ha/halib.cpp | 4 +- ha/halib.h | 2 +- 14 files changed, 398 insertions(+), 237 deletions(-) diff --git a/ha/ha0100.cpp b/ha/ha0100.cpp index 8b26b6562..dd90debf4 100755 --- a/ha/ha0100.cpp +++ b/ha/ha0100.cpp @@ -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); diff --git a/ha/ha0200a.h b/ha/ha0200a.h index fbe15bd27..0234deb77 100755 --- a/ha/ha0200a.h +++ b/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 diff --git a/ha/ha0200a.uml b/ha/ha0200a.uml index ab1200b42..79bde5535 100755 --- a/ha/ha0200a.uml +++ b/ha/ha0200a.uml @@ -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 " diff --git a/ha/ha1200.cpp b/ha/ha1200.cpp index b8a31320b..fa54e73ba 100755 --- a/ha/ha1200.cpp +++ b/ha/ha1200.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -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; diff --git a/ha/ha1200a.h b/ha/ha1200a.h index 735412350..afeb1cb9f 100755 --- a/ha/ha1200a.h +++ b/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 \ No newline at end of file +#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 \ No newline at end of file diff --git a/ha/ha1200a.uml b/ha/ha1200a.uml index c6249fc74..f1aa0c1ee 100755 --- a/ha/ha1200a.uml +++ b/ha/ha1200a.uml @@ -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 diff --git a/ha/ha1250.cpp b/ha/ha1250.cpp index 2485e8522..255280488 100755 --- a/ha/ha1250.cpp +++ b/ha/ha1250.cpp @@ -1,6 +1,8 @@ #include #include +#include #include +#include #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; } diff --git a/ha/ha1250.h b/ha/ha1250.h index 2c0fb2d2b..09c0b4149 100755 --- a/ha/ha1250.h +++ b/ha/ha1250.h @@ -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(); diff --git a/ha/ha1300.cpp b/ha/ha1300.cpp index 252a61356..fa98523c6 100755 --- a/ha/ha1300.cpp +++ b/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[]) diff --git a/ha/ha1300a.h b/ha/ha1300a.h index d16a377ea..9354b2c54 100755 --- a/ha/ha1300a.h +++ b/ha/ha1300a.h @@ -1,3 +1,5 @@ #define F_INPUT_PATH 201 #define F_ARCHIVE_PATH 202 -#define F_DEFINITIVO 203 \ No newline at end of file +#define F_CONC_PATH 203 +#define F_TRANS_PATH 204 +#define F_DEFINITIVO 205 \ No newline at end of file diff --git a/ha/ha1300a.uml b/ha/ha1300a.uml index 516a16ab1..05959b833 100755 --- a/ha/ha1300a.uml +++ b/ha/ha1300a.uml @@ -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 diff --git a/ha/ha3800.cpp b/ha/ha3800.cpp index 5d1e05024..70fe6a009 100755 --- a/ha/ha3800.cpp +++ b/ha/ha3800.cpp @@ -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); } diff --git a/ha/halib.cpp b/ha/halib.cpp index d88e07725..e2fdf09a6 100755 --- a/ha/halib.cpp +++ b/ha/halib.cpp @@ -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; -} \ No newline at end of file +} diff --git a/ha/halib.h b/ha/halib.h index 0444bcb75..5cfce3a81 100755 --- a/ha/halib.h +++ b/ha/halib.h @@ -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); \ No newline at end of file