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:
luca 2008-07-15 15:12:21 +00:00
parent 2dc94a7218
commit 722b3f59d0
5 changed files with 379 additions and 0 deletions

16
ps/ps1104.cpp Executable file
View 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
View File

@ -0,0 +1 @@
int ps1104100(int argc, char* argv[]);

237
ps/ps1104100.cpp Executable file
View 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
View 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
View 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