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