Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento :programma dei pennari di prassiroma da riportare sulla 3.2 git-svn-id: svn://10.65.10.50/trunk@16873 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2dc94a7218
commit
722b3f59d0
16
ps/ps1104.cpp
Executable file
16
ps/ps1104.cpp
Executable file
@ -0,0 +1,16 @@
|
||||
#include <xvt.h>
|
||||
|
||||
#include "ps1104.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
int n = argc > 1 ? atoi(argv[1]+1) : 0;
|
||||
switch(n)
|
||||
{
|
||||
case 0: ps1104100(argc, argv); break; //Importazione articoli dei pennari TENDER
|
||||
default:
|
||||
ps1104100(argc, argv); break; //Importazione articoli dei pennari TENDER
|
||||
}
|
||||
exit(0);
|
||||
return 0;
|
||||
}
|
1
ps/ps1104.h
Executable file
1
ps/ps1104.h
Executable file
@ -0,0 +1 @@
|
||||
int ps1104100(int argc, char* argv[]);
|
237
ps/ps1104100.cpp
Executable file
237
ps/ps1104100.cpp
Executable file
@ -0,0 +1,237 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <progind.h>
|
||||
#include <utility.h>
|
||||
#include <relation.h>
|
||||
#include <textset.h>
|
||||
|
||||
#include "../mg/anamag.h"
|
||||
#include "../mg/umart.h"
|
||||
|
||||
#include "ps1104.h"
|
||||
#include "ps1104100a.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAutomask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TImporta_penne_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TImporta_penne_mask();
|
||||
};
|
||||
|
||||
TImporta_penne_mask::TImporta_penne_mask() :TAutomask ("ps1104100a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TImporta_penne_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
|
||||
{
|
||||
switch (f.dlg())
|
||||
{
|
||||
//giochetto per avere la lista dei files validi nella directory di trasferimento!
|
||||
case F_NAME:
|
||||
if (e == fe_button)
|
||||
{
|
||||
TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"),
|
||||
"File@32");
|
||||
TFilename path = get(F_PATH);
|
||||
path.add("*.csv"); //files delle testate
|
||||
list_files(path, as.rows_array());
|
||||
TFilename name;
|
||||
FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
|
||||
{
|
||||
name = *row;
|
||||
*row = name.name();
|
||||
}
|
||||
if (as.run() == K_ENTER)
|
||||
{
|
||||
f.set(as.row(as.selected()));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////
|
||||
//// CLASSI DERIVATE PER IMPORTAZIONE DATI ////
|
||||
///////////////////////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// Recordset specifici per i dati da trasferire
|
||||
/////////////////////////////////////////////////////////////
|
||||
class TImporta_penne_recordset : public TCSV_recordset
|
||||
{
|
||||
protected:
|
||||
virtual TRecnotype new_rec(const char* buf = NULL);
|
||||
|
||||
public:
|
||||
TImporta_penne_recordset(const char * fileName);
|
||||
};
|
||||
|
||||
TRecnotype TImporta_penne_recordset::new_rec(const char* buf)
|
||||
{
|
||||
TToken_string str(256,'\t'); //nuovo record tab separator
|
||||
|
||||
if(buf && *buf)
|
||||
{
|
||||
bool apici = false;
|
||||
|
||||
for (const char* c = buf; *c ; c++)
|
||||
{
|
||||
if (*c == '"')
|
||||
{
|
||||
apici = !apici;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*c == ';') //tipo di separatore dei campiche si trova nel record di origine
|
||||
{
|
||||
if (!apici)
|
||||
str << str.separator();
|
||||
else
|
||||
str << *c;
|
||||
}
|
||||
else
|
||||
str << *c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const TRecnotype n = TText_recordset::new_rec(str);
|
||||
|
||||
if (n >= 0)
|
||||
row(n).separator(str.separator());
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
TImporta_penne_recordset::TImporta_penne_recordset(const char * fileName)
|
||||
: TCSV_recordset("CSV(;)") //separatore con ";"
|
||||
{
|
||||
load_file(fileName);
|
||||
}
|
||||
|
||||
///////////////////////////////////////
|
||||
// TSkeleton_application
|
||||
///////////////////////////////////////
|
||||
class TImporta_penne : public TSkeleton_application
|
||||
{
|
||||
virtual bool check_autorization() const { return false; }
|
||||
virtual const char * extra_modules() const { return "ve"; }
|
||||
|
||||
TImporta_penne_mask* _msk;
|
||||
|
||||
protected:
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
bool transfer(const TFilename& file);
|
||||
|
||||
TImporta_penne() {};
|
||||
};
|
||||
|
||||
bool TImporta_penne::transfer(const TFilename& file)
|
||||
{
|
||||
TImporta_penne_recordset s(file);
|
||||
|
||||
TProgind pi(s.items(),"Importazione articoli in corso ...",true,true);
|
||||
|
||||
for (bool ok = s.move_first(); ok; ok = s.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
|
||||
//prende i dati dal record di input del file csv
|
||||
//codart ci deve essere e va maiuscolizzato
|
||||
TString80 codart = s.get(0).as_string();
|
||||
if (codart.empty())
|
||||
continue;
|
||||
codart.upper();
|
||||
//descrizione
|
||||
const TString80 descr = s.get(1).as_string();
|
||||
//prezzo (inizialmente come stringa x poter fare le replace)
|
||||
TString80 str_prezzo = s.get(2).as_string();
|
||||
str_prezzo.replace(',','.');
|
||||
const real prezzo = str_prezzo;
|
||||
//unita' di misura dalla maschera
|
||||
const TString4 um = _msk->get(F_UMS);
|
||||
|
||||
//aggiorna i files ANAMAG e UMART
|
||||
//ANAMAG
|
||||
TLocalisamfile anamag(LF_ANAMAG);
|
||||
TRectype rec_anamag = anamag.curr();
|
||||
rec_anamag.put(ANAMAG_CODART, codart);
|
||||
rec_anamag.put(ANAMAG_DESCR, descr);
|
||||
//tenta la rewrite nel caso l'articolo esista gia'
|
||||
int err = anamag.rewrite(rec_anamag);
|
||||
//se non esiste fa la write di brutto
|
||||
if (err != NOERR)
|
||||
err = anamag.write(rec_anamag);
|
||||
|
||||
//UMART
|
||||
//procede solo se la scrittura su anamag e' riuscita, in modo da evitare scritture incomplete
|
||||
if (err == NOERR)
|
||||
{
|
||||
TLocalisamfile umart(LF_UMART);
|
||||
TRectype rec_umart = umart.curr();
|
||||
rec_umart.put(UMART_CODART, codart);
|
||||
rec_umart.put(UMART_NRIGA, 1);
|
||||
rec_umart.put(UMART_UM, um);
|
||||
rec_umart.put(UMART_PREZZO, prezzo);
|
||||
|
||||
if (umart.rewrite(rec_umart) != NOERR)
|
||||
umart.write(rec_umart);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TImporta_penne::create()
|
||||
{
|
||||
_msk = new TImporta_penne_mask();
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TImporta_penne::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
void TImporta_penne::main_loop()
|
||||
{
|
||||
KEY tasto;
|
||||
tasto = _msk->run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
//genero il nome del file da caricare
|
||||
TFilename name = _msk->get(F_PATH);
|
||||
name.add(_msk->get(F_NAME));
|
||||
if (transfer(name))
|
||||
{
|
||||
message_box(TR("Importazione articoli completata"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TImporta_penne& app() { return (TImporta_penne&) main_app(); }
|
||||
|
||||
|
||||
int ps1104100 (int argc, char* argv[])
|
||||
{
|
||||
TImporta_penne main_app;
|
||||
main_app.run(argc, argv, TR("Importazione articoli TENDER"));
|
||||
return true;
|
||||
}
|
6
ps/ps1104100a.h
Executable file
6
ps/ps1104100a.h
Executable file
@ -0,0 +1,6 @@
|
||||
#define F_CODITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_PATH 103
|
||||
#define F_NAME 104
|
||||
#define F_UMS 105
|
||||
#define F_DESUMS 106
|
119
ps/ps1104100a.uml
Executable file
119
ps/ps1104100a.uml
Executable file
@ -0,0 +1,119 @@
|
||||
#include "ps1104100a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_ELABORA 10 2
|
||||
BEGIN
|
||||
PICTURE BMP_ELABORA
|
||||
MESSAGE EXIT,K_ENTER
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
STRING DLG_PROFILE 50
|
||||
BEGIN
|
||||
PROMPT 9 -12 "Profilo "
|
||||
PSELECT
|
||||
FLAGS "H"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Importazione articoli TENDER" 0 0 0 -3
|
||||
|
||||
GROUPBOX DLG_NULL 80 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bDitta corrente"
|
||||
END
|
||||
|
||||
NUMBER F_CODITTA 5
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice "
|
||||
FLAGS "FD"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 22 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 5
|
||||
BEGIN
|
||||
PROMPT 1 4 "@bParametri importazione"
|
||||
END
|
||||
|
||||
STRING F_PATH 255 60
|
||||
BEGIN
|
||||
PROMPT 2 5 "Cartella "
|
||||
FLAGS "M"
|
||||
DSELECT
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_NAME 60
|
||||
BEGIN
|
||||
PROMPT 2 6 "File (*.csv) "
|
||||
FLAGS "B"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_UMS 2
|
||||
BEGIN
|
||||
PROMPT 2 7 "Unita' di misura "
|
||||
USE %UMS
|
||||
INPUT CODTAB F_UMS
|
||||
DISPLAY "Codice " CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_UMS CODTAB
|
||||
OUTPUT F_DESUMS S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_DESUMS 50
|
||||
BEGIN
|
||||
PROMPT 25 7 ""
|
||||
USE %UMS KEY 2
|
||||
INPUT S0 F_DESUMS
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice " CODTAB
|
||||
COPY OUTPUT F_UMS
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 2 9 "@bIstruzioni"
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 2 10 "Nel campo Cartella inserire il percorso completo della cartella che contiene il file da importare."
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 2 11 "Nel campo File inserire il nome del file di tipo .csv da importare. Il nome NON deve contenere spazi."
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 2 12 "Nel campo Unità di misura inserire il codice di U.M. che sarà applicato a tutti gli articoli importati."
|
||||
END
|
||||
|
||||
TEXT -1
|
||||
BEGIN
|
||||
PROMPT 2 13 "All'avvio il programma ripropone l'ultimo file importato, la relativa cartella e la U.M. utilizzata."
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user