Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@20434 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cd5f4c250e
commit
688834891d
291
ps/ps0398100.cpp
291
ps/ps0398100.cpp
@ -3,6 +3,7 @@
|
||||
#include <config.h>
|
||||
#include <defmask.h>
|
||||
#include <dongle.h>
|
||||
#include <execp.h>
|
||||
#include <lffiles.h>
|
||||
#include <modaut.h>
|
||||
#include <progind.h>
|
||||
@ -69,21 +70,21 @@ class TTrasferimento_ordini : public TSkeleton_application
|
||||
{
|
||||
TTrasferimento_ordini_mask* _mask;
|
||||
|
||||
virtual bool check_autorization() const {return false;}
|
||||
|
||||
protected:
|
||||
virtual bool check_autorization() const {return false;}
|
||||
virtual const char * extra_modules() const {return "ve";}
|
||||
virtual bool create();
|
||||
|
||||
bool ordine_gf(TTrasferimento_ordini_recordset& recset);
|
||||
void elab_hd_ht(const TString& riga_txt, const int curr_nriga, TString& str);
|
||||
void elab_hf(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log, TString& ragsoc);
|
||||
void elab_ro(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log, TString& ho_note_generali);
|
||||
void elab_ra(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log);
|
||||
bool elabora();
|
||||
virtual void main_loop();
|
||||
|
||||
public:
|
||||
virtual void main_loop();
|
||||
bool ordine_gf(TTrasferimento_ordini_recordset& recset);
|
||||
void elab_hd_ht(const TString& riga_txt, const int curr_nriga, TString& str);
|
||||
void elab_hf(const TString& riga_txt, const int curr_nriga, TConfig& curr_ini, TLog_report& log, TString& ragsoc);
|
||||
void elab_ho(const TString& riga_txt, const int curr_nriga, TConfig& curr_ini, TLog_report& log, TString& ho_note_generali);
|
||||
void elab_ra(const TString& riga_txt, const int curr_nriga, TConfig& curr_ini, TLog_report& log);
|
||||
bool elabora_file_txt(TTrasferimento_ordini_recordset& recset, const TFilename& ini_fname, TLog_report& log);
|
||||
bool sposta_file_elaborato(const TFilename& dst_file, const TFilename& curr_fname, TLog_report& log);
|
||||
bool elabora();
|
||||
};
|
||||
|
||||
|
||||
@ -113,7 +114,8 @@ bool TTrasferimento_ordini::ordine_gf(TTrasferimento_ordini_recordset& recset)
|
||||
return is_ordine_gf;
|
||||
}
|
||||
|
||||
void TTrasferimento_ordini::elab_hf(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log, TString& ragsoc)
|
||||
void TTrasferimento_ordini::elab_hf(const TString& riga_txt, const int curr_nriga,
|
||||
TConfig& curr_ini, TLog_report& log, TString& ragsoc)
|
||||
{
|
||||
switch (curr_nriga)
|
||||
{
|
||||
@ -137,8 +139,10 @@ void TTrasferimento_ordini::elab_hf(const TString& riga_txt, TConfig& curr_ini,
|
||||
}
|
||||
else
|
||||
{
|
||||
curr_ini.set(DOC_TIPOCF, "C");
|
||||
curr_ini.set(DOC_CODCF, codcf);
|
||||
TString4 head_paragrafo;
|
||||
head_paragrafo << LF_DOC;
|
||||
curr_ini.set(DOC_TIPOCF, "C", head_paragrafo);
|
||||
curr_ini.set(DOC_CODCF, codcf, head_paragrafo);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -148,26 +152,17 @@ void TTrasferimento_ordini::elab_hf(const TString& riga_txt, TConfig& curr_ini,
|
||||
}
|
||||
|
||||
|
||||
void TTrasferimento_ordini::elab_hd_ht(const TString& riga_txt, const int curr_nriga, TString& str)
|
||||
void TTrasferimento_ordini::elab_hd_ht(const TString& riga_txt, const int curr_nriga,
|
||||
TString& str)
|
||||
{
|
||||
if (riga_txt.full())
|
||||
{
|
||||
switch (curr_nriga)
|
||||
{
|
||||
case 3:
|
||||
str << riga_txt; //indirizzo
|
||||
str.trim();
|
||||
str << "\\n";
|
||||
break;
|
||||
case 4:
|
||||
str << " " << riga_txt.mid(5, 10); //cap
|
||||
str.trim();
|
||||
str << " " << riga_txt.mid(15, 30); //città
|
||||
str.trim();
|
||||
str << " " << riga_txt.mid(45, 30); //provincia
|
||||
str.trim();
|
||||
str << " " << riga_txt.mid(75, 30); //nazione
|
||||
str.trim();
|
||||
str << riga_txt;
|
||||
str.strip_double_spaces();
|
||||
str << "\\n";
|
||||
break;
|
||||
|
||||
@ -178,7 +173,8 @@ void TTrasferimento_ordini::elab_hd_ht(const TString& riga_txt, const int curr_n
|
||||
}
|
||||
|
||||
|
||||
void TTrasferimento_ordini::elab_ro(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log, TString& ho_note_generali)
|
||||
void TTrasferimento_ordini::elab_ho(const TString& riga_txt, const int curr_nriga,
|
||||
TConfig& curr_ini, TLog_report& log, TString& ho_note_generali)
|
||||
{
|
||||
switch (curr_nriga)
|
||||
{
|
||||
@ -197,12 +193,14 @@ void TTrasferimento_ordini::elab_ro(const TString& riga_txt, TConfig& curr_ini,
|
||||
msg.format("Data documento non valida: %s", (const char*)str_data);
|
||||
log.log(2, msg);
|
||||
}
|
||||
curr_ini.set(DOC_DATADOC, datadoc);
|
||||
TString4 head_paragrafo;
|
||||
head_paragrafo << LF_DOC;
|
||||
curr_ini.set(DOC_DATADOC, datadoc, head_paragrafo);
|
||||
}
|
||||
break;
|
||||
case 4: //altre note ordine (da mettere in DOC_NOTE)
|
||||
{
|
||||
ho_note_generali = riga_txt.mid(5);
|
||||
ho_note_generali << riga_txt.mid(5);
|
||||
ho_note_generali.trim();
|
||||
}
|
||||
break;
|
||||
@ -217,7 +215,8 @@ void TTrasferimento_ordini::elab_ro(const TString& riga_txt, TConfig& curr_ini,
|
||||
}
|
||||
|
||||
|
||||
void TTrasferimento_ordini::elab_ra(const TString& riga_txt, TConfig& curr_ini, const int curr_nriga, TLog_report& log)
|
||||
void TTrasferimento_ordini::elab_ra(const TString& riga_txt, const int curr_nriga,
|
||||
TConfig& curr_ini, TLog_report& log)
|
||||
{
|
||||
TToken_string riga_ord(riga_txt.mid(5), ';');
|
||||
const TString codart = riga_ord.get();
|
||||
@ -230,6 +229,7 @@ void TTrasferimento_ordini::elab_ra(const TString& riga_txt, TConfig& curr_ini,
|
||||
row_paragrafo << LF_RIGHEDOC << ',' << curr_nriga;
|
||||
curr_ini.set_paragraph(row_paragrafo);
|
||||
|
||||
curr_ini.set(RDOC_TIPORIGA, "01");
|
||||
//l'articolo deve esistere per stare in codartmag e codart;
|
||||
//se non esiste in anagrafica -> solo in codart con segnalazione
|
||||
//la desc riga sarà la desc articolo
|
||||
@ -259,7 +259,6 @@ void TTrasferimento_ordini::elab_ra(const TString& riga_txt, TConfig& curr_ini,
|
||||
//queste le fa in ogni modo (forse rischiando)
|
||||
curr_ini.set(RDOC_CODART, codart);
|
||||
curr_ini.set(RDOC_QTA, str_qta);
|
||||
|
||||
|
||||
const real prezzo = riga_ord.get(); //per adesso non ci va?
|
||||
//e per ultime le eventuali note
|
||||
@ -271,6 +270,144 @@ void TTrasferimento_ordini::elab_ra(const TString& riga_txt, TConfig& curr_ini,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool TTrasferimento_ordini::elabora_file_txt(TTrasferimento_ordini_recordset& recset, const TFilename& ini_fname,
|
||||
TLog_report& log)
|
||||
{
|
||||
//variabili da riempire ad ogni giro
|
||||
TString4 curr_tiporiga; //tipo riga in esame (HT...RA), ovvero sezione del file
|
||||
int curr_nriga = 0; //n riga della sezione in esame
|
||||
TString ragsoc, piva;
|
||||
TString hd_spedizione; //questi stanno qui perchè valgono una volta per file .txt
|
||||
TString ht_fatturazione;
|
||||
TString ho_note_generali;
|
||||
|
||||
//creazione del file .ini di transazione
|
||||
TConfig curr_ini(ini_fname);
|
||||
|
||||
curr_ini.set_paragraph("Transaction"); //setto il paragrafo [Transaction] del file ini
|
||||
curr_ini.set("Action","INSERT");
|
||||
curr_ini.set("Mode","");
|
||||
|
||||
//set_paragraph sulle testate (file 33, doc)
|
||||
TString4 head_paragrafo;
|
||||
head_paragrafo << LF_DOC;
|
||||
curr_ini.set_paragraph(head_paragrafo);
|
||||
|
||||
TToken_string tipi_record("HF|HD|HT|HS|HO|RA");
|
||||
|
||||
//comincia il giro sulle righe del recordset
|
||||
//va al contrario perchè se le righe non hanno articoli di GF -> salta il tutto
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
//riga corrente del file di input
|
||||
const TString& riga_txt = recset.get(0L).as_string();
|
||||
|
||||
//gestione cambio riga e cambio sezione
|
||||
const TString& tr = riga_txt.left(2);
|
||||
if (tipi_record.get_pos(tr) < 0)
|
||||
{
|
||||
if (curr_tiporiga == "HO")
|
||||
{
|
||||
//righe del cazzo senza capo; in teoria possono appartenere solo al campo NOTE di HO (in teoria, ovviamente)
|
||||
TString riga_del_cazzo = riga_txt;
|
||||
riga_del_cazzo.trim();
|
||||
ho_note_generali << " " << riga_del_cazzo;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tr != curr_tiporiga)
|
||||
{
|
||||
curr_tiporiga = tr;
|
||||
curr_nriga = 1;
|
||||
}
|
||||
else
|
||||
curr_nriga ++;
|
||||
|
||||
//trattazione delle varie sezioni
|
||||
// HS (va saltata)
|
||||
if (curr_tiporiga == "HS")
|
||||
continue;
|
||||
|
||||
// HF
|
||||
if (curr_tiporiga == "HF")
|
||||
elab_hf(riga_txt, curr_nriga, curr_ini, log, ragsoc);
|
||||
|
||||
// HD
|
||||
if (curr_tiporiga == "HD")
|
||||
elab_hd_ht(riga_txt.mid(5, 100), curr_nriga, hd_spedizione); //(note spedizione)
|
||||
|
||||
// HT
|
||||
if (curr_tiporiga == "HT")
|
||||
elab_hd_ht(riga_txt.mid(5, 100), curr_nriga, ht_fatturazione); //(note fatturazione)
|
||||
|
||||
// HO
|
||||
if (curr_tiporiga == "HO")
|
||||
elab_ho(riga_txt, curr_nriga, curr_ini, log, ho_note_generali);
|
||||
|
||||
// RA
|
||||
//gestione delle righe ordine
|
||||
if (curr_tiporiga == "RA")
|
||||
elab_ra(riga_txt, curr_nriga, curr_ini, log);
|
||||
|
||||
} //for(bool ok=recset.move.frst...
|
||||
|
||||
//scrive sul campo NOTE della testata quello che sa delle note spedizione e fatturazione
|
||||
TString note;
|
||||
note << '"';
|
||||
|
||||
if (hd_spedizione.full())
|
||||
note << "Note Spedizione: " << hd_spedizione << "\\n";
|
||||
if (ht_fatturazione.full())
|
||||
note << "Note Fatturazione: " << ht_fatturazione << "\\n";
|
||||
if (ho_note_generali.full())
|
||||
note << "Note generali: " << ho_note_generali;
|
||||
|
||||
note << '"';
|
||||
curr_ini.set(DOC_NOTE, note, head_paragrafo);
|
||||
|
||||
//qui ci va il lancio di ve0 con l'ini generato
|
||||
curr_ini.set(DOC_PROVV, "D");
|
||||
curr_ini.set(DOC_CODNUM, _mask->get(F_CODNUM));
|
||||
const TDate datadoc = curr_ini.get(DOC_DATADOC);
|
||||
curr_ini.set(DOC_ANNO, datadoc.year());
|
||||
curr_ini.set(DOC_TIPODOC, _mask->get(F_TIPODOC));
|
||||
curr_ini.set(DOC_STATO, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TTrasferimento_ordini::sposta_file_elaborato(const TFilename& dst_file, const TFilename& curr_fname,
|
||||
TLog_report& log)
|
||||
{
|
||||
bool copia_riuscita = fcopy(curr_fname, dst_file);
|
||||
if (copia_riuscita)
|
||||
{
|
||||
const long src_size = fsize(curr_fname);
|
||||
const long dst_size = fsize(dst_file);
|
||||
copia_riuscita = src_size == dst_size;
|
||||
}
|
||||
if (!copia_riuscita)
|
||||
{
|
||||
TString msg;
|
||||
msg.format("Impossibile copiare il file %s !", curr_fname.name());
|
||||
log.log(2, msg);
|
||||
}
|
||||
else //se va tutto bene elimina il file dalla directory di origine
|
||||
{
|
||||
const bool src_file_removed = remove_file(curr_fname);
|
||||
if (!src_file_removed)
|
||||
{
|
||||
TString msg;
|
||||
msg.format("Impossibile eliminare il file origine %s ", curr_fname.name());
|
||||
log.log(1, msg);
|
||||
}
|
||||
}
|
||||
return copia_riuscita;
|
||||
}
|
||||
|
||||
|
||||
bool TTrasferimento_ordini::elabora()
|
||||
{
|
||||
TFilename src_files = _mask->get(F_PATH_SRC);
|
||||
@ -307,8 +444,10 @@ bool TTrasferimento_ordini::elabora()
|
||||
|
||||
//file in formato filename (è l'ordine corrente da elaborare)
|
||||
const TFilename curr_fname = src_files_list.row(i);
|
||||
|
||||
//creazione del recordset associato al file
|
||||
TTrasferimento_ordini_recordset recset(curr_fname);
|
||||
|
||||
//se il file non è di GF (si vede dal codart) viene saltato! ohp!
|
||||
if (!ordine_gf(recset))
|
||||
{
|
||||
@ -323,87 +462,29 @@ bool TTrasferimento_ordini::elabora()
|
||||
msg.format("Elaborazione file: %s", (const char*)curr_fname.name());
|
||||
log.log(0, msg);
|
||||
|
||||
//variabili da riempire ad ogni giro
|
||||
TString4 curr_tiporiga; //tipo riga in esame (HT...RA), ovvero sezione del file
|
||||
int curr_nriga = 0; //n riga della sezione in esame
|
||||
TString ragsoc, piva;
|
||||
TString hd_spedizione; //questi stanno qui perchè valgono una volta per file .txt
|
||||
TString ht_fatturazione;
|
||||
TString ho_note_generali;
|
||||
|
||||
//per ogni ordine in formato .txt genera un file.ini che andrà poi documentizzato
|
||||
//file .ini
|
||||
TFilename ini_fname = tmp;
|
||||
ini_fname.add(format("ORD%05ld.ini", i));
|
||||
TConfig curr_ini(ini_fname);
|
||||
//elaborazione del file .txt per riempireil .ini della successiva elaborazione differita
|
||||
bool elaborazione_ok = elabora_file_txt(recset, ini_fname, log);
|
||||
|
||||
curr_ini.set_paragraph("Transaction"); //setto il paragrafo [Transaction] del file ini
|
||||
|
||||
curr_ini.set("Action","INSERT");
|
||||
curr_ini.set("Mode","");
|
||||
|
||||
//set_paragraph sulle testate (file 33, doc)
|
||||
TString8 head_paragrafo;
|
||||
head_paragrafo << LF_DOC;
|
||||
curr_ini.set_paragraph(head_paragrafo);
|
||||
|
||||
//comincia il giro sulle righe del recordset
|
||||
//va al contrario perchè se le righe non hanno articoli di GF -> salta il tutto
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
//elaborazione interattiva dell'ordine dal .ini
|
||||
if (elaborazione_ok)
|
||||
{
|
||||
//riga corrente del file di input
|
||||
const TString& riga_txt = recset.get(0L).as_string();
|
||||
//gestione cambio riga e cambio sezione
|
||||
const TString& tr = riga_txt.left(2);
|
||||
if (tr != curr_tiporiga)
|
||||
{
|
||||
curr_tiporiga = tr;
|
||||
curr_nriga = 1;
|
||||
}
|
||||
else
|
||||
curr_nriga ++;
|
||||
|
||||
//trattazione delle varie sezioni
|
||||
// HF
|
||||
if (curr_tiporiga == "HF")
|
||||
elab_hf(riga_txt, curr_ini, curr_nriga, log, ragsoc);
|
||||
|
||||
// HD
|
||||
if (curr_tiporiga == "HD")
|
||||
elab_hd_ht(riga_txt.mid(5, 100), curr_nriga, hd_spedizione); //(note spedizione)
|
||||
|
||||
// HT
|
||||
if (curr_tiporiga == "HT")
|
||||
elab_hd_ht(riga_txt.mid(5, 100), curr_nriga, ht_fatturazione); //(note fatturazione)
|
||||
|
||||
// HO
|
||||
if (curr_tiporiga == "HO")
|
||||
elab_ro(riga_txt, curr_ini, curr_nriga, log, ho_note_generali);
|
||||
|
||||
// RA
|
||||
//gestione delle righe ordine
|
||||
if (curr_tiporiga == "RA")
|
||||
elab_ra(riga_txt, curr_ini, curr_nriga, log);
|
||||
|
||||
|
||||
} //for(bool ok=recset.move.frst...
|
||||
|
||||
//scrive sul campo NOTE della testata quello che sa delle note spedizione e fatturazione
|
||||
TString note;
|
||||
note << '"';
|
||||
|
||||
if (hd_spedizione.full())
|
||||
note << "Note Spedizione: " << hd_spedizione << "\\n";
|
||||
if (ht_fatturazione.full())
|
||||
note << "Note Fatturazione: " << ht_fatturazione << "\\n";
|
||||
if (ho_note_generali.full())
|
||||
note << "Note generali: " << ho_note_generali;
|
||||
|
||||
note << '"';
|
||||
curr_ini.set(DOC_NOTE, note, head_paragrafo);
|
||||
|
||||
//qui ci va il lancio di ve0 con l'ini generato
|
||||
TString commandline;
|
||||
commandline.format("ve0 -0 /i%s",(const char*)ini_fname);
|
||||
TExternal_app ve(commandline);
|
||||
ve.run();
|
||||
}
|
||||
|
||||
//qui ci va lo spostamento del file elaborato se ve0 ha funzionato correttamente
|
||||
TFilename dst_file = dst_path;
|
||||
dst_file.add(curr_fname.name());
|
||||
const bool copia_riuscita = sposta_file_elaborato(dst_file, curr_fname, log);
|
||||
|
||||
|
||||
|
||||
} //for(int i...
|
||||
|
||||
message_box(TR("Acquisizione ordini completata"));
|
||||
|
@ -1,2 +1,6 @@
|
||||
#define F_PATH_SRC 101
|
||||
#define F_PATH_DST 102
|
||||
#define F_PATH_SRC 101
|
||||
#define F_PATH_DST 102
|
||||
#define F_CODNUM 104
|
||||
#define F_DESNUM 105
|
||||
#define F_TIPODOC 106
|
||||
#define F_DESTIPODOC 107
|
||||
|
@ -1,10 +1,15 @@
|
||||
#include "ps0398100a.h"
|
||||
|
||||
PAGE "Trasferimento Ordini Web->Campo" -1 -1 78 5
|
||||
PAGE "Trasferimento Ordini Web->Campo" -1 -1 78 10
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bPath"
|
||||
END
|
||||
|
||||
STRING F_PATH_SRC 255 50
|
||||
BEGIN
|
||||
PROMPT 1 1 "Cartella origine "
|
||||
PROMPT 2 2 "Cartella origine "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
@ -13,13 +18,68 @@ END
|
||||
|
||||
STRING F_PATH_DST 255 50
|
||||
BEGIN
|
||||
PROMPT 1 2 "Cartella destinazione "
|
||||
PROMPT 2 3 "Cartella destinazione "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Selezionare una cartella valida!"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "@bParametri documenti da generare"
|
||||
END
|
||||
|
||||
STRING F_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 2 6 "Numerazione "
|
||||
HELP "Codice numerazione"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_CODNUM
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODNUM CODTAB
|
||||
OUTPUT F_DESNUM S0
|
||||
CHECKTYPE REQUIRED
|
||||
FLAG "UPA"
|
||||
WARNING "Numerazione assente"
|
||||
END
|
||||
|
||||
STRING F_DESNUM 50
|
||||
BEGIN
|
||||
PROMPT 24 6 ""
|
||||
HELP "Descrizione numerazione"
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_DESNUM
|
||||
DISPLAY "Descrizione@60" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_CODNUM
|
||||
END
|
||||
|
||||
STRING F_TIPODOC 4
|
||||
BEGIN
|
||||
PROMPT 2 7 "Tipo "
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
INPUT CODTAB F_TIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_TIPODOC CODTAB
|
||||
OUTPUT F_DESTIPODOC S0
|
||||
CHECKTYPE REQUIRED
|
||||
FLAG "UP"
|
||||
END
|
||||
|
||||
STRING F_DESTIPODOC 50
|
||||
BEGIN
|
||||
PROMPT 24 7 ""
|
||||
HELP "Descrizione tipo documento"
|
||||
USE %TIP KEY 2
|
||||
INPUT S0 F_DESTIPODOC
|
||||
DISPLAY "Descrizione@60" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_TIPODOC
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 50
|
||||
BEGIN
|
||||
|
Loading…
x
Reference in New Issue
Block a user