Patch level : no patch
Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunto il modulo discoteca Laziale git-svn-id: svn://10.65.10.50/trunk@10527 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
6e0d5b4275
commit
ffe5e5c386
177
dl/cat2dl.ini
Executable file
177
dl/cat2dl.ini
Executable file
@ -0,0 +1,177 @@
|
|||||||
|
[PARAMS]
|
||||||
|
LISTINGR = LI1
|
||||||
|
LISTVEND = LI2
|
||||||
|
OFFEINGR = OF1
|
||||||
|
OFFEVEND = OF2
|
||||||
|
|
||||||
|
[MAIN]
|
||||||
|
DECSEP =
|
||||||
|
FIELDSEP =
|
||||||
|
RECORDSEP =
|
||||||
|
RECORDSIZE = 0
|
||||||
|
SKIPLINES = 0
|
||||||
|
TYPEFIELD = -1
|
||||||
|
TYPELEN = -1
|
||||||
|
TYPEPOS = -1
|
||||||
|
|
||||||
|
[TYPE DATA]
|
||||||
|
ALIGN =
|
||||||
|
DATA = D
|
||||||
|
DECIMAL = 0
|
||||||
|
FILLER =
|
||||||
|
LENGTH = 8
|
||||||
|
PICTURE =
|
||||||
|
|
||||||
|
[TYPE ORA]
|
||||||
|
ALIGN =
|
||||||
|
DATA = D
|
||||||
|
DECIMAL = 0
|
||||||
|
FILLER =
|
||||||
|
LENGTH = 6
|
||||||
|
PICTURE =
|
||||||
|
|
||||||
|
[TYPE EURO]
|
||||||
|
ALIGN = R
|
||||||
|
DATA =
|
||||||
|
DECIMAL = 2
|
||||||
|
FILLER =
|
||||||
|
LENGTH = 9
|
||||||
|
PICTURE =
|
||||||
|
|
||||||
|
[TYPE STRINGA]
|
||||||
|
ALIGN = L
|
||||||
|
DATA = S
|
||||||
|
DECIMAL = 0
|
||||||
|
FILLER = ' '
|
||||||
|
LENGTH = 0
|
||||||
|
PICTURE =
|
||||||
|
|
||||||
|
[TYPE PERC]
|
||||||
|
ALIGN = R
|
||||||
|
DATA =
|
||||||
|
DECIMAL = 2
|
||||||
|
FILLER =
|
||||||
|
LENGTH = 4
|
||||||
|
PICTURE =
|
||||||
|
|
||||||
|
[RECORD]
|
||||||
|
NAME(0) = CTDTAG
|
||||||
|
TYPE(0) = DATA
|
||||||
|
FIELD(0) = 47->USER7
|
||||||
|
POSITION(0) = 0
|
||||||
|
LENGTH(0) = 8
|
||||||
|
|
||||||
|
NAME(1) = CTTIAG
|
||||||
|
TYPE(1) = ORA
|
||||||
|
FIELD(1) = 47->USER8
|
||||||
|
POSITION(1) = 8
|
||||||
|
LENGTH(1) = 6
|
||||||
|
|
||||||
|
NAME(2) = CTCDAR
|
||||||
|
TYPE(2) = STRINGA
|
||||||
|
FIELD(2) = 47->CODART
|
||||||
|
POSITION(2) = 14
|
||||||
|
LENGTH(2) = 15
|
||||||
|
|
||||||
|
NAME(3) = CTTITO
|
||||||
|
TYPE(3) = STRINGA
|
||||||
|
FIELD(3) = 47->USER1
|
||||||
|
POSITION(3) = 29
|
||||||
|
LENGTH(3) = 40
|
||||||
|
|
||||||
|
NAME(4) = CTARTI
|
||||||
|
TYPE(4) = STRINGA
|
||||||
|
FIELD(4) = 47->USER2
|
||||||
|
POSITION(4) = 69
|
||||||
|
LENGTH(4) = 20
|
||||||
|
|
||||||
|
NAME(5) = CTCOMP
|
||||||
|
TYPE(5) = STRINGA
|
||||||
|
FIELD(5) = 47->USER3
|
||||||
|
POSITION(5) = 89
|
||||||
|
LENGTH(5) = 20
|
||||||
|
|
||||||
|
NAME(6) = CTETIC
|
||||||
|
TYPE(6) = STRINGA
|
||||||
|
FIELD(6) = 47->USER4
|
||||||
|
POSITION(6) = 109
|
||||||
|
LENGTH(6) = 20
|
||||||
|
|
||||||
|
NAME(7) = CTTPSU
|
||||||
|
TYPE(7) = STRINGA
|
||||||
|
POSITION(7) = 129
|
||||||
|
LENGTH(7) = 2
|
||||||
|
|
||||||
|
NAME(8) = CTGENE
|
||||||
|
TYPE(8) = STRINGA
|
||||||
|
FIELD(8) = 47->GRMERC
|
||||||
|
POSITION(8) = 131
|
||||||
|
LENGTH(8) = 2
|
||||||
|
|
||||||
|
NAME(9) = CTDTEM
|
||||||
|
TYPE(9) = DATA
|
||||||
|
FIELD(9) = 47->USER5
|
||||||
|
POSITION(9) = 133
|
||||||
|
LENGTH(9) = 8
|
||||||
|
|
||||||
|
NAME(10) = CTDTFC
|
||||||
|
TYPE(10) = DATA
|
||||||
|
FIELD(10) = 47->USER6
|
||||||
|
POSITION(10) = 141
|
||||||
|
LENGTH(10) = 8
|
||||||
|
|
||||||
|
NAME(11) = CTPRIE //listino ingrosso prezzo
|
||||||
|
TYPE(11) = EURO
|
||||||
|
POSITION(11) = 158
|
||||||
|
LENGTH(11) = 9
|
||||||
|
|
||||||
|
NAME(12) = CTDIPI //offerta ingrosso dataini
|
||||||
|
TYPE(12) = DATA
|
||||||
|
POSITION(12) = 167
|
||||||
|
LENGTH(12) = 8
|
||||||
|
|
||||||
|
NAME(13) = CTDFPI //offerta ingrosso datafin
|
||||||
|
TYPE(13) = DATA
|
||||||
|
POSITION(13) = 175
|
||||||
|
LENGTH(13) = 8
|
||||||
|
|
||||||
|
NAME(14) = CTCAPE //offerta ingrosso prezzo
|
||||||
|
TYPE(14) = EURO
|
||||||
|
POSITION(14) = 192
|
||||||
|
LENGTH(14) = 9
|
||||||
|
|
||||||
|
NAME(15) = CTPRVU //listino pubblico prezzo
|
||||||
|
TYPE(15) = EURO
|
||||||
|
POSITION(15) = 210
|
||||||
|
LENGTH(15) = 9
|
||||||
|
|
||||||
|
NAME(16) = CTDIVE //campagna vendita dataini
|
||||||
|
TYPE(16) = DATA
|
||||||
|
POSITION(16) = 219
|
||||||
|
LENGTH(16) = 8
|
||||||
|
|
||||||
|
NAME(17) = CTDFVE //campagna vendita datafin
|
||||||
|
TYPE(17) = DATA
|
||||||
|
POSITION(17) = 227
|
||||||
|
LENGTH(17) = 8
|
||||||
|
|
||||||
|
NAME(18) = CTCAVU //campagna vendita prezzo
|
||||||
|
TYPE(18) = EURO
|
||||||
|
POSITION(18) = 244
|
||||||
|
LENGTH(18) = 9
|
||||||
|
|
||||||
|
NAME(19) = CTIVAV
|
||||||
|
TYPE(19) = STRINGA
|
||||||
|
FIELD(19) = 47->CODIVA
|
||||||
|
POSITION(19) = 253
|
||||||
|
LENGTH(19) = 2
|
||||||
|
|
||||||
|
NAME(20) = CTCDBR
|
||||||
|
TYPE(20) = STRINGA
|
||||||
|
POSITION(20) = 261
|
||||||
|
LENGTH(20) = 12
|
||||||
|
|
||||||
|
NAME(21) = CTLIVD
|
||||||
|
TYPE(21) = STRINGA
|
||||||
|
POSITION(21) = 273
|
||||||
|
LENGTH(21) = 1
|
37
dl/dl0.cpp
Executable file
37
dl/dl0.cpp
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#include <xvt.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <checks.h>
|
||||||
|
|
||||||
|
#include "dl0.h"
|
||||||
|
|
||||||
|
#define usage "Error - usage : %s -{7}"
|
||||||
|
|
||||||
|
int main(int argc,char** argv)
|
||||||
|
|
||||||
|
{
|
||||||
|
int rt = -1 ;
|
||||||
|
const int r = (argc > 1) ? atoi(&argv[1][1]) : -1;
|
||||||
|
|
||||||
|
switch (r)
|
||||||
|
{
|
||||||
|
/* case 0:
|
||||||
|
rt = dl0100(argc,argv) ; break;
|
||||||
|
case 1:
|
||||||
|
rt = dl0200(argc,argv) ; break;
|
||||||
|
case 2:
|
||||||
|
rt = dl0300(argc,argv) ; break;
|
||||||
|
case 3:
|
||||||
|
rt = dl0400(argc,argv) ; break;
|
||||||
|
case 4:
|
||||||
|
rt = dl0500(argc,argv) ; break;
|
||||||
|
case 5:
|
||||||
|
rt = dl0600(argc,argv) ; break;
|
||||||
|
case 6:
|
||||||
|
rt = dl0700(argc,argv) ; break; */
|
||||||
|
case 7:
|
||||||
|
rt = dl0800(argc,argv) ; break;
|
||||||
|
default:
|
||||||
|
error_box(usage, argv[0]) ; break;
|
||||||
|
}
|
||||||
|
return rt;
|
||||||
|
}
|
14
dl/dl0.h
Executable file
14
dl/dl0.h
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef __DL0_H
|
||||||
|
#define __DL0_H
|
||||||
|
|
||||||
|
/*int dl0100(int argc, char* argv[]);
|
||||||
|
int dl0200(int argc, char* argv[]);
|
||||||
|
int dl0300(int argc, char* argv[]);
|
||||||
|
int dl0400(int argc, char* argv[]);
|
||||||
|
int dl0500(int argc, char* argv[]);
|
||||||
|
int dl0600(int argc, char* argv[]);
|
||||||
|
int dl0700(int argc, char* argv[]);*/
|
||||||
|
int dl0800(int argc, char* argv[]);
|
||||||
|
|
||||||
|
#endif // __DL0_H
|
||||||
|
|
7
dl/dl0.url
Executable file
7
dl/dl0.url
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#define APPNAME campo
|
||||||
|
#define QAPPNAME "campo"
|
||||||
|
#define QFIRMNAME "A.G.A. Informatica Srl"
|
||||||
|
#include <default.url>
|
||||||
|
|
||||||
|
#include <mainmenu.url>
|
||||||
|
|
89
dl/dl0500.cpp
Executable file
89
dl/dl0500.cpp
Executable file
@ -0,0 +1,89 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <filetext.h>
|
||||||
|
#include <form.h>
|
||||||
|
#include <mask.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <tabutil.h>
|
||||||
|
#include <printer.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <recarray.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include "..\mg\umart.h"
|
||||||
|
#include "..\mg\anamag.h"
|
||||||
|
#include "..\ve\condv.h"
|
||||||
|
#include "..\ve\rcondv.h"
|
||||||
|
#include "dl0.h"
|
||||||
|
#include "dl0500a.h"
|
||||||
|
|
||||||
|
class TRicerca: public TSkeleton_application
|
||||||
|
{
|
||||||
|
TMask* _msk;
|
||||||
|
TRicerca_file* _trasfile;
|
||||||
|
TString _listingr, _listvend, _offeingr, _offevend;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool create(void);
|
||||||
|
virtual void main_loop();
|
||||||
|
virtual bool destroy(void);
|
||||||
|
static bool annulla_handler(TMask_field& f, KEY k);
|
||||||
|
|
||||||
|
public:
|
||||||
|
const TMask& msk() const { return *_msk; }
|
||||||
|
TRicerca() {}
|
||||||
|
virtual ~TRicerca() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// restituisce un riferimento all' applicazione
|
||||||
|
inline TRicerca& app() { return (TRicerca&) main_app();}
|
||||||
|
|
||||||
|
// creazione dell'applicazione
|
||||||
|
bool TRicerca::create()
|
||||||
|
{
|
||||||
|
open_files(LF_ANAMAG, LF_UMART, LF_CONDV, LF_RCONDV, 0);
|
||||||
|
_msk = new TMask("dl0500a");
|
||||||
|
_msk->set(F_FILENAME,DLFILENAME);
|
||||||
|
_trasfile = NULL;
|
||||||
|
return TSkeleton_application::create();
|
||||||
|
}
|
||||||
|
|
||||||
|
// distruzione dell'applicazione
|
||||||
|
bool TRicerca::destroy()
|
||||||
|
{
|
||||||
|
delete _msk;
|
||||||
|
return TSkeleton_application::destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
// carica la maschera
|
||||||
|
void TRicerca::main_loop()
|
||||||
|
{
|
||||||
|
// Preimposta gli eventuali valori specificati sulla riga di comando
|
||||||
|
//error_box("Attenzione: manca la configurazione del trasferimento!");
|
||||||
|
KEY key = K_ENTER;
|
||||||
|
while (key != K_QUIT)
|
||||||
|
{
|
||||||
|
key = _msk->run();
|
||||||
|
if (key == K_ENTER)
|
||||||
|
transfer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// handler per gestire la conferma dell'annullamento dei dati inseriti
|
||||||
|
// nella maschera
|
||||||
|
bool TRicerca::annulla_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
TMask &m = f.mask();
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
if (yesno_box("Vuoi veramente annullare i dati inseriti"))
|
||||||
|
m.reset();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dl0500(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TRicerca a ;
|
||||||
|
a.run(argc, argv, "Ricerca avanzata");
|
||||||
|
return 0;
|
||||||
|
}
|
16
dl/dl0500a.h
Executable file
16
dl/dl0500a.h
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
// ricerca avanzata
|
||||||
|
// definizione campi per maschera di selezione dl0500a
|
||||||
|
|
||||||
|
#define F_BARCODE 101
|
||||||
|
#define F_TIPOSUPPORTO 102
|
||||||
|
#define F_TITOLO 103
|
||||||
|
#define F_ARTISTA 104
|
||||||
|
#define F_COMPOSITORE 105
|
||||||
|
#define F_ETICHETTA 106
|
||||||
|
#define F_GENEREMUSICALE 107
|
||||||
|
#define F_DATAE_INI 108
|
||||||
|
#define F_DATAE_FIN 109
|
||||||
|
#define F_DATAV_INI 110
|
||||||
|
#define F_DATAV_FIN 111
|
||||||
|
#define F_D_TIPOSUPPORTO 112
|
||||||
|
|
75
dl/dl0500a.uml
Executable file
75
dl/dl0500a.uml
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
#include "dl0500a.h"
|
||||||
|
|
||||||
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
|
BUTTON DLG_OK 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -12 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_QUIT 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -22 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Ricerca avanzata" -1 -1 78 20
|
||||||
|
|
||||||
|
STRING F_BARCODE 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "Barcode "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_TIPOSUPPORTO 10
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 "Tipo supporto "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_TITOLO 40
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 3 "Titolo "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_ARTISTA 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 4 "Artista "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_COMPOSITORE 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 5 "Compositore "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_ETICHETTA 20
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 6 "Etichetta "
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_GENEREMUSICALE
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 7 "Genere musicale "
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAE_INI
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 8 "Data emissione: da "
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAE_FIN
|
||||||
|
BEGIN
|
||||||
|
PROMPT 35 8 "a "
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAV_INI
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 9 "Data variazione da "
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAV_FIN
|
||||||
|
BEGIN
|
||||||
|
PROMPT 35 9 "a "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
ENDMASK
|
431
dl/dl0800.cpp
Executable file
431
dl/dl0800.cpp
Executable file
@ -0,0 +1,431 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <filetext.h>
|
||||||
|
#include <form.h>
|
||||||
|
#include <mask.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <tabutil.h>
|
||||||
|
#include <printer.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <recarray.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include "..\mg\umart.h"
|
||||||
|
#include "..\mg\anamag.h"
|
||||||
|
#include "..\ve\condv.h"
|
||||||
|
#include "..\ve\rcondv.h"
|
||||||
|
#include "dl0.h"
|
||||||
|
#include "dl0800a.h"
|
||||||
|
|
||||||
|
#define DLFILENAME "XCATT00F"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
// Classe TCat2dl_file customizzata dalla TFile_text //
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TCat2dl_file: public TFile_text
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual int autosave(TRelation& rel, const TRecord_text& rec);
|
||||||
|
virtual bool pre_writerel(TRelation& rel,const TRecord_text& rec);
|
||||||
|
void write_supporto(const TRecord_text& rec);
|
||||||
|
void write_listini(const TRecord_text& rec);
|
||||||
|
void write_offerte(const TRecord_text& rec);
|
||||||
|
TCat2dl_file(const TString& file_name, const TString& config_name);
|
||||||
|
virtual ~TCat2dl_file() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
TCat2dl_file::TCat2dl_file(const TString& file_name, const TString& config_name)
|
||||||
|
: TFile_text(file_name, config_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int TCat2dl_file::autosave(TRelation& rel, const TRecord_text& rec)
|
||||||
|
{
|
||||||
|
const TString& type = rec.type(); //prendo il tracciato record del tipo del record_text
|
||||||
|
TTracciato_record& tr = *t_rec(type);
|
||||||
|
|
||||||
|
TArray& a_tc = tr.tracciati_campo();
|
||||||
|
const int items = a_tc.items();
|
||||||
|
TString valore;
|
||||||
|
for (int i = 0; i < items; i++)
|
||||||
|
{
|
||||||
|
const TTracciato_campo& tc = tr.get(i);
|
||||||
|
TFieldref field(tc.field());
|
||||||
|
if (field.name().not_empty())
|
||||||
|
{
|
||||||
|
if (field.file()==0)
|
||||||
|
field.set_file(rel.lfile().num());
|
||||||
|
valore = rec.row(i);
|
||||||
|
// formatta il campo del file di testo secondo le specifiche del campo su file isam
|
||||||
|
preformat_field(field,valore,rel,tr.type());
|
||||||
|
const TRectype& rel_rec = rel.curr(field.file());
|
||||||
|
TFieldtypes tipo_campo = rel_rec.type(field.name());
|
||||||
|
bool vuoto = valore.blank();
|
||||||
|
|
||||||
|
switch(tipo_campo) //in base al tipo di campo formatta i valori seguendo le specifiche del tracciato
|
||||||
|
{
|
||||||
|
case _datefld: //tipo data...
|
||||||
|
{
|
||||||
|
if (real::is_null(valore))
|
||||||
|
{
|
||||||
|
valore.cut(0);
|
||||||
|
vuoto = TRUE;
|
||||||
|
}
|
||||||
|
TDate data(valore);
|
||||||
|
format_date(data, fpicture(tc), valore);//formatta la data secondo le specifiche del tracciato
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case _realfld: //tipi numerici
|
||||||
|
case _intfld:
|
||||||
|
case _longfld:
|
||||||
|
{
|
||||||
|
const real numero(valore);
|
||||||
|
vuoto = numero.is_zero();
|
||||||
|
|
||||||
|
valore = numero.string(fpicture(tc));//formatta il numero secondo le specifiche del tracciato
|
||||||
|
|
||||||
|
int length = flength(tc,rel_rec);
|
||||||
|
if (falign(tc) == 'L')
|
||||||
|
valore.left_just(length, ffiller(tc));
|
||||||
|
else
|
||||||
|
valore.right_just(length, ffiller(tc));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
valore = format_field(tc, rel.lfile().num(), valore);//formatta il campo secondo le specifiche del record
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!vuoto && rel.exist(field.file()))
|
||||||
|
field.write(valore, rel);//faccio una write sulla relazione del fieldref
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int err = NOERR;
|
||||||
|
if (pre_writerel(rel,rec))
|
||||||
|
{
|
||||||
|
err= rel.write();
|
||||||
|
if (err == _isdupkey || err ==_isreinsert)
|
||||||
|
err = rel.rewrite();
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCat2dl_file::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
||||||
|
{
|
||||||
|
// 1) sistema i tipi di supporto
|
||||||
|
write_supporto(rec);
|
||||||
|
// 2) legge e scrive i dati dei listini: se il listino non esiste lo crea
|
||||||
|
write_listini(rec);
|
||||||
|
// 3) legge e scrive i dati delle offerte: se l'offerta non esiste la crea
|
||||||
|
write_offerte(rec);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//scrive il supporto dell'articolo nel campo UM del file umart (unita' di misura)
|
||||||
|
void TCat2dl_file::write_supporto(const TRecord_text& rec)
|
||||||
|
{
|
||||||
|
const TString& codart = rec.get(2);
|
||||||
|
const TString& um = rec.get(7);
|
||||||
|
|
||||||
|
if (!um.blank()) //il casino lo fa solo se ha un codice supporto non nullo
|
||||||
|
{
|
||||||
|
TLocalisamfile umart(LF_UMART); //prende il file delle unita' di misura...
|
||||||
|
umart.put(UMART_CODART, codart);
|
||||||
|
umart.put(UMART_UM, um);
|
||||||
|
umart.setkey(2); //..con chiave 2...
|
||||||
|
|
||||||
|
int err = umart.read(); //..e lo legge
|
||||||
|
|
||||||
|
if (err != NOERR) //Se non trova l'unita' di misura tra quelle gia' presenti...
|
||||||
|
{
|
||||||
|
umart.setkey(1);
|
||||||
|
umart.put(UMART_CODART, codart);
|
||||||
|
umart.put(UMART_NRIGA, 999);
|
||||||
|
err = umart.read(_isgreat);
|
||||||
|
err = umart.prev();
|
||||||
|
|
||||||
|
int nriga = 1;
|
||||||
|
if (err == NOERR && umart.get(UMART_CODART) == codart)
|
||||||
|
nriga = umart.get_int(UMART_NRIGA) + 1;
|
||||||
|
|
||||||
|
umart.zero(); //..la aggiunge come ultima unita' di misura.
|
||||||
|
umart.put(UMART_CODART, codart);
|
||||||
|
umart.put(UMART_NRIGA, nriga);
|
||||||
|
umart.put(UMART_UM, um);
|
||||||
|
umart.put(UMART_FC, 1);
|
||||||
|
|
||||||
|
umart.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//scrive i valori dei listini (prezzi e date)
|
||||||
|
void TCat2dl_file::write_listini(const TRecord_text& rec)
|
||||||
|
{
|
||||||
|
real prz_ingr = rec.get(11); //legge il prezzo listino ingrosso
|
||||||
|
prz_ingr /=100;
|
||||||
|
if (prz_ingr != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
|
||||||
|
{
|
||||||
|
TLocalisamfile condv(LF_CONDV);
|
||||||
|
condv.put(CONDV_TIPO, 'L');
|
||||||
|
TConfig config("cat2dl.ini","PARAMS");
|
||||||
|
TString4 listingr = config.get("LISTINGR");
|
||||||
|
condv.put(CONDV_COD, listingr);
|
||||||
|
int err = condv.read();
|
||||||
|
if (err != NOERR) //se il listino indicato nell'ini non esiste..
|
||||||
|
{
|
||||||
|
condv.zero(); //..se lo crea!
|
||||||
|
condv.put(CONDV_TIPO, 'L');
|
||||||
|
condv.put(CONDV_COD, listingr);
|
||||||
|
condv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che il listino esiste andiamo in rcondv
|
||||||
|
rcondv.put(RCONDV_TIPO, 'L');
|
||||||
|
rcondv.put(RCONDV_COD, listingr);
|
||||||
|
rcondv.put(RCONDV_TIPORIGA, 'A'); //uguale anche x le righe listino (come sopra)
|
||||||
|
rcondv.put(RCONDV_CODRIGA, rec.get(2));
|
||||||
|
rcondv.put(RCONDV_PREZZO, prz_ingr);
|
||||||
|
rcondv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
real prz_vend = rec.get(15); //legge il prezzo listino vendite e fa lo stesso procedimento del caso precedente
|
||||||
|
prz_vend /=100;
|
||||||
|
if (prz_vend != ZERO)
|
||||||
|
{
|
||||||
|
TLocalisamfile condv(LF_CONDV);
|
||||||
|
condv.put(CONDV_TIPO, 'L');
|
||||||
|
TConfig config("cat2dl.ini","PARAMS");
|
||||||
|
TString4 listvend = config.get("LISTVEND");
|
||||||
|
condv.put(CONDV_COD, listvend);
|
||||||
|
int err = condv.read();
|
||||||
|
if (err != NOERR)
|
||||||
|
{
|
||||||
|
condv.zero();
|
||||||
|
condv.put(CONDV_TIPO, 'L');
|
||||||
|
condv.put(CONDV_COD, listvend);
|
||||||
|
condv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
TLocalisamfile rcondv(LF_RCONDV);
|
||||||
|
rcondv.put(RCONDV_TIPO, 'L');
|
||||||
|
rcondv.put(RCONDV_COD, listvend);
|
||||||
|
rcondv.put(RCONDV_TIPORIGA, 'A');
|
||||||
|
rcondv.put(RCONDV_CODRIGA, rec.get(2));
|
||||||
|
rcondv.put(RCONDV_PREZZO, prz_vend);
|
||||||
|
rcondv.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//scrive i valori delle offerte (prezzi e date)
|
||||||
|
void TCat2dl_file::write_offerte(const TRecord_text& rec)
|
||||||
|
{
|
||||||
|
real prz_ingr = rec.get(14); //legge il prezzo offerta ingrosso
|
||||||
|
prz_ingr /=100;
|
||||||
|
if (prz_ingr != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
|
||||||
|
{
|
||||||
|
TLocalisamfile condv(LF_CONDV);
|
||||||
|
condv.put(CONDV_TIPO, 'O');
|
||||||
|
TConfig config("cat2dl.ini","PARAMS");
|
||||||
|
TString4 offeingr = config.get("OFFEINGR");
|
||||||
|
condv.put(CONDV_COD, offeingr);
|
||||||
|
int err = condv.read();
|
||||||
|
if (err != NOERR) //se l'offerta indicata nell'ini non esiste..
|
||||||
|
{
|
||||||
|
condv.zero(); //..se la crea!
|
||||||
|
condv.put(CONDV_TIPO, 'O');
|
||||||
|
condv.put(CONDV_COD, offeingr);
|
||||||
|
TDate dataini = rec.get(12);
|
||||||
|
TDate datafine = rec.get(13);
|
||||||
|
condv.put(CONDV_VALIN, dataini);
|
||||||
|
condv.put(CONDV_VALFIN, datafine);
|
||||||
|
condv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che l'offerta esiste andiamo in rcondv
|
||||||
|
rcondv.put(RCONDV_TIPO, 'O');
|
||||||
|
rcondv.put(RCONDV_COD, offeingr);
|
||||||
|
rcondv.put(RCONDV_TIPORIGA, 'A');
|
||||||
|
rcondv.put(RCONDV_CODRIGA, rec.get(2));
|
||||||
|
rcondv.put(RCONDV_PREZZO, prz_ingr);
|
||||||
|
rcondv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
real prz_vend = rec.get(18); //legge il prezzo offerta ingrosso
|
||||||
|
prz_vend /=100;
|
||||||
|
if (prz_vend != ZERO) //tutto il casino lo fa solo se il prezzo non e' nullo
|
||||||
|
{
|
||||||
|
TLocalisamfile condv(LF_CONDV);
|
||||||
|
condv.put(CONDV_TIPO, 'O');
|
||||||
|
TConfig config("cat2dl.ini","PARAMS");
|
||||||
|
TString4 offevend = config.get("OFFEVEND");
|
||||||
|
condv.put(CONDV_COD, offevend);
|
||||||
|
int err = condv.read();
|
||||||
|
if (err != NOERR) //se l'offerta indicata nell'ini non esiste..
|
||||||
|
{
|
||||||
|
condv.zero(); //..se la crea!
|
||||||
|
condv.put(CONDV_TIPO, 'O');
|
||||||
|
condv.put(CONDV_COD, offevend);
|
||||||
|
TDate dataini = rec.get(16);
|
||||||
|
TDate datafine = rec.get(17);
|
||||||
|
condv.put(CONDV_VALIN, dataini);
|
||||||
|
condv.put(CONDV_VALFIN, datafine);
|
||||||
|
condv.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
TLocalisamfile rcondv(LF_RCONDV); //adesso che sa che l'offerta esiste andiamo in rcondv
|
||||||
|
rcondv.put(RCONDV_TIPO, 'O');
|
||||||
|
rcondv.put(RCONDV_COD, offevend);
|
||||||
|
rcondv.put(RCONDV_TIPORIGA, 'A');
|
||||||
|
rcondv.put(RCONDV_CODRIGA, rec.get(2));
|
||||||
|
rcondv.put(RCONDV_PREZZO, prz_vend);
|
||||||
|
rcondv.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
// Classe TCat2dl: applicazione principale //
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TCat2dl: public TSkeleton_application
|
||||||
|
{
|
||||||
|
TMask* _msk;
|
||||||
|
TCat2dl_file* _trasfile;
|
||||||
|
TString _listingr, _listvend, _offeingr, _offevend;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool create(void);
|
||||||
|
virtual void main_loop();
|
||||||
|
virtual bool destroy(void);
|
||||||
|
void transfer(void);
|
||||||
|
void inizializza_file(void);
|
||||||
|
static bool annulla_handler(TMask_field& f, KEY k);
|
||||||
|
|
||||||
|
public:
|
||||||
|
const TMask& msk() const { return *_msk; }
|
||||||
|
TCat2dl() {}
|
||||||
|
virtual ~TCat2dl() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
// restituisce un riferimento all' applicazione
|
||||||
|
inline TCat2dl& app() { return (TCat2dl&) main_app();}
|
||||||
|
|
||||||
|
// creazione dell'applicazione
|
||||||
|
bool TCat2dl::create()
|
||||||
|
{
|
||||||
|
open_files(LF_ANAMAG, LF_UMART, LF_CONDV, LF_RCONDV, 0);
|
||||||
|
_msk = new TMask("dl0800a");
|
||||||
|
_msk->set(F_FILENAME,DLFILENAME);
|
||||||
|
_trasfile = NULL;
|
||||||
|
TConfig config("cat2dl.ini","PARAMS");
|
||||||
|
_listingr = config.get("LISTINGR");
|
||||||
|
_listvend = config.get("LISTVEND");
|
||||||
|
_offeingr = config.get("OFFEINGR");
|
||||||
|
_offevend = config.get("OFFEVEND");
|
||||||
|
|
||||||
|
return TSkeleton_application::create();
|
||||||
|
}
|
||||||
|
|
||||||
|
// distruzione dell'applicazione
|
||||||
|
bool TCat2dl::destroy()
|
||||||
|
{
|
||||||
|
delete _msk;
|
||||||
|
return TSkeleton_application::destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
// carica la maschera
|
||||||
|
void TCat2dl::main_loop()
|
||||||
|
{
|
||||||
|
// Preimposta gli eventuali valori specificati sulla riga di comando
|
||||||
|
//error_box("Attenzione: manca la configurazione del trasferimento!");
|
||||||
|
KEY key = K_ENTER;
|
||||||
|
while (key != K_QUIT)
|
||||||
|
{
|
||||||
|
key = _msk->run();
|
||||||
|
if (key == K_ENTER)
|
||||||
|
transfer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// trasferimento dati da file su archivi
|
||||||
|
void TCat2dl::transfer()
|
||||||
|
{
|
||||||
|
TFilename catdlini = "cat2dl.ini";
|
||||||
|
|
||||||
|
_trasfile = new TCat2dl_file(_msk->get(F_FILENAME), catdlini);
|
||||||
|
inizializza_file();
|
||||||
|
const long dimension = fsize(_msk->get(F_FILENAME));
|
||||||
|
TProgind pi(dimension,"Acquisizione in corso...");
|
||||||
|
|
||||||
|
TRelation rel(LF_ANAMAG);
|
||||||
|
TRectype& record = rel.curr(); //record corrente della relazione
|
||||||
|
|
||||||
|
TString str; // Stringa jolly di lavoro
|
||||||
|
TRecord_text curr;
|
||||||
|
while (_trasfile->read(curr) == NOERR)
|
||||||
|
{
|
||||||
|
pi.setstatus(_trasfile->read_file()->tellg());
|
||||||
|
|
||||||
|
// read del file dell'ANAMAG
|
||||||
|
str = curr.get(2); //legge il codart
|
||||||
|
rel.curr().put(ANAMAG_CODART, str);
|
||||||
|
int err = rel.read();
|
||||||
|
|
||||||
|
if (err != NOERR)
|
||||||
|
{
|
||||||
|
rel.curr().zero();
|
||||||
|
rel.curr().put(ANAMAG_CODART, str);
|
||||||
|
}
|
||||||
|
_trasfile->autosave(rel, curr); //esegue l'effettivo passaggio dati basandosi sulla formattazione del file .ini
|
||||||
|
|
||||||
|
}
|
||||||
|
_trasfile->close();
|
||||||
|
message_box("Operazione terminata");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//inizializza il file di testo su cui emettere i dati
|
||||||
|
void TCat2dl::inizializza_file()
|
||||||
|
{
|
||||||
|
TFilename filect = _msk->get(F_FILENAME); //aggiungere lettura automatica nomi file
|
||||||
|
_trasfile->open(filect,'r');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// handler per gestire la conferma dell'annullamento dei dati inseriti
|
||||||
|
// nella maschera
|
||||||
|
bool TCat2dl::annulla_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
TMask &m = f.mask();
|
||||||
|
if (k == K_SPACE)
|
||||||
|
{
|
||||||
|
if (yesno_box("Vuoi veramente annullare i dati inseriti"))
|
||||||
|
m.reset();
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// gestione dei messaggi estesi nei campi
|
||||||
|
void TCat2dl_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||||
|
{
|
||||||
|
const TString code(s.get(0));
|
||||||
|
TString valore;
|
||||||
|
if (code == "_UPPERCASE")
|
||||||
|
{
|
||||||
|
valore.upper();
|
||||||
|
}
|
||||||
|
else NFCHECK("Macro non definita: %s", (const char *)code);
|
||||||
|
str = valore;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dl0800(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TCat2dl a ;
|
||||||
|
a.run(argc, argv, "Importazione catalogo");
|
||||||
|
return 0;
|
||||||
|
}
|
4
dl/dl0800a.h
Executable file
4
dl/dl0800a.h
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
// importazione catalogo
|
||||||
|
// definizione campi per maschera di selezione
|
||||||
|
|
||||||
|
#define F_FILENAME 102 // nome del file da cui scaricare i dati
|
35
dl/dl0800a.uml
Executable file
35
dl/dl0800a.uml
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#include "dl0800a.h"
|
||||||
|
|
||||||
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
|
BUTTON DLG_OK 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -12 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_QUIT 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -22 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Importazione catalogo" -1 -1 78 20
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 77 9
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Selezioni per l'importazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FILENAME 52
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 "Nome file "
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
VALIDATE FILENAME_FUNC
|
||||||
|
FLAGS "A"
|
||||||
|
HELP "Nome del file da cui caricare i dati"
|
||||||
|
WARNING "E' necessario specificare un nome di file"
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user