Archivi sconti e condizioni di vendita (listini contratti campagne)
git-svn-id: svn://10.65.10.50/trunk@1736 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
176e05ce6c
commit
bfbdd47c8e
52
ve/ve2.cpp
52
ve/ve2.cpp
@ -1,40 +1,24 @@
|
|||||||
#include <xvt.h>
|
|
||||||
#include <strings.h>
|
|
||||||
#include <checks.h>
|
#include <checks.h>
|
||||||
|
#include <xvt.h>
|
||||||
|
|
||||||
// #define MAIN
|
extern int ve2100(int argc, char* argv[]); // tabelle sconti (di riga/di documento/incondizionati)
|
||||||
|
extern int ve2200(int argc, char* argv[]); // testate listini/contratti/offerte
|
||||||
|
extern int ve2300(int argc, char* argv[]); // righe listini/contratti/offerte
|
||||||
#define usage "Errore - Utilizzo: %s -{0|1|2|3}"
|
|
||||||
|
|
||||||
extern int ve2100(int argc, char* argv[]); // listini
|
|
||||||
extern int ve2200(int argc, char* argv[]); // contratti
|
|
||||||
extern int ve2300(int argc, char* argv[]); // offerte-campagne
|
|
||||||
extern int ve2400(int argc, char* argv[]); // anagrafica di magazzino
|
extern int ve2400(int argc, char* argv[]); // anagrafica di magazzino
|
||||||
|
|
||||||
int main( int argc, char** argv)
|
|
||||||
{
|
|
||||||
int rt = -1;
|
|
||||||
const int r = (argc > 1) ? atoi( &argv[1][1] ) : -1;
|
|
||||||
|
|
||||||
switch (r)
|
|
||||||
{
|
int main( int argc, char** argv) {
|
||||||
case 0:
|
int rt= -1;
|
||||||
rt = ve2100( argc, argv );
|
const int r= (argc>1)?(atoi(&argv[1][1])):(-1);
|
||||||
break;
|
|
||||||
case 1:
|
switch (r) {
|
||||||
rt = ve2200( argc, argv );
|
case 0: rt = ve2100(argc, argv); break;
|
||||||
break;
|
case 1: rt = ve2200(argc, argv); break;
|
||||||
case 2:
|
case 2: rt = ve2300(argc, argv); break;
|
||||||
rt = ve2300( argc, argv );
|
case 3: rt = ve2400(argc, argv); break;
|
||||||
break;
|
default: error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 2 [L|C|O] | 3]", argv[0]); break;
|
||||||
case 3:
|
}
|
||||||
rt = ve2400( argc, argv );
|
return (rt);
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error_box( usage, argv[0] );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return rt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
235
ve/ve2200.cpp
235
ve/ve2200.cpp
@ -1,60 +1,211 @@
|
|||||||
|
|
||||||
|
#include <relapp.h>
|
||||||
|
#include <config.h>
|
||||||
|
#include <tabutil.h>
|
||||||
|
|
||||||
#include "ve2200.h"
|
#include "ve2200.h"
|
||||||
|
|
||||||
#define LF_CONDV 52
|
|
||||||
#define LF_RCONDV 53
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __CHECKS_H
|
class TCondizioni_vendita: public TRelation_application {
|
||||||
#include <checks.h>
|
TMask *_msk; // maschera principale
|
||||||
#endif
|
TRelation *_rel; // relazione principale
|
||||||
|
|
||||||
#ifndef __RELAPP_H
|
TString16 _condven; // stringa che indica il tipo di archivio
|
||||||
#include <relapp.h>
|
short _tohide[10]; // vettore degli identificatori di campi che devono essere nascosti
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __LFFILES_H
|
|
||||||
#include <lffiles.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class TConcli_application : public TRelation_application
|
|
||||||
{
|
|
||||||
TMask* _msk;
|
|
||||||
TRelation* _rel;
|
|
||||||
|
|
||||||
virtual bool user_create();
|
|
||||||
virtual bool user_destroy();
|
|
||||||
virtual TMask* get_mask(int mode) { return _msk;}
|
|
||||||
virtual bool changing_mask(int mode) { return FALSE;}
|
|
||||||
virtual TRelation* get_relation() const { return _rel;}
|
|
||||||
|
|
||||||
|
virtual bool user_create();
|
||||||
|
virtual bool user_destroy();
|
||||||
|
virtual TMask *get_mask(int) { return _msk; }
|
||||||
|
virtual bool changing_mask(int) { return FALSE; }
|
||||||
|
virtual TRelation *get_relation() const { return _rel; }
|
||||||
|
|
||||||
|
static bool handler_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
|
||||||
|
static bool handler_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
|
||||||
|
static bool handler_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo)
|
||||||
|
static bool handler_seqric(TMask_field &, KEY); // handler del campo SEQRIC (sequenza di ricerca)
|
||||||
|
|
||||||
|
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
|
||||||
|
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
|
||||||
|
|
||||||
|
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
TCondizioni_vendita() {}
|
||||||
TConcli_application( ) { };
|
virtual ~TCondizioni_vendita() {}
|
||||||
virtual ~TConcli_application() { }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool TConcli_application::user_create()
|
|
||||||
{
|
|
||||||
_msk = new TMask( "VE2200" );
|
bool TCondizioni_vendita::user_create() {
|
||||||
_rel = new TRelation( LF_CONDV );
|
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||||
// _rel.add( "%PIP" )
|
|
||||||
|
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||||
|
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
|
||||||
|
else {
|
||||||
|
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
|
||||||
|
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
|
||||||
|
}
|
||||||
|
_condven.upper(); // rende la stringa upper-case
|
||||||
|
_msk= new TMask("VE2200X");
|
||||||
|
switch (_condven[0]) {
|
||||||
|
case 'L': { // listini
|
||||||
|
// settaggio dei campi da eliminare
|
||||||
|
_tohide[0]= 5;
|
||||||
|
_tohide[1]= F_C_COD;
|
||||||
|
_tohide[2]= F_O_COD;
|
||||||
|
_tohide[3]= F_C_TIPOCF;
|
||||||
|
_tohide[4]= F_C_CODCF;
|
||||||
|
_tohide[5]= F_C_OBBLIG;
|
||||||
|
set_search_field(F_L_COD); // impostazione del campo di ricerca
|
||||||
|
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta
|
||||||
|
if (toupper(prassid.get("CATVEN_ON")[0])!='T') _msk->disable(F_L_CATVEN); // disabilita il campo CATVEN se non è abilitato nella config.
|
||||||
|
_msk->set_handler(F_L_CODLISSUCC, handler_codlissucc); // setta l'handler per il campo di codice successivo
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'C': { // contratti
|
||||||
|
// settaggio dei campi da eliminare
|
||||||
|
_tohide[0]= 4;
|
||||||
|
_tohide[1]= F_L_COD;
|
||||||
|
_tohide[2]= F_O_COD;
|
||||||
|
_tohide[3]= F_L_CATVEN;
|
||||||
|
_tohide[4]= F_L_CODLISSUCC;
|
||||||
|
set_search_field(F_C_COD); // impostazione del campo di ricerca
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'O': { // offerte
|
||||||
|
// settaggio dei campi da eliminare
|
||||||
|
_tohide[0]= 7;
|
||||||
|
_tohide[1]= F_L_COD;
|
||||||
|
_tohide[2]= F_C_COD;
|
||||||
|
_tohide[3]= F_L_CATVEN;
|
||||||
|
_tohide[4]= F_C_TIPOCF;
|
||||||
|
_tohide[5]= F_C_CODCF;
|
||||||
|
_tohide[6]= F_C_OBBLIG;
|
||||||
|
_tohide[7]= F_L_CODLISSUCC;
|
||||||
|
set_search_field(F_O_COD); // impostazione del campo di ricerca
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: { // messaggio di errore se si indica un archivio non valido
|
||||||
|
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||||
|
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
|
||||||
|
_msk->set_handler(F_DATACAM, handler_datacam); // imposta l'handler per il campo della data del cambio
|
||||||
|
_msk->set_handler(F_VALFIN, handler_valfin); // imposta l'handler per il campo di fine validità
|
||||||
|
_msk->set_handler(F_SEQRIC, handler_seqric); // imposta l'handler per il campo di sequenza di ricerca
|
||||||
|
}
|
||||||
|
return (gotcha);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCondizioni_vendita::user_destroy() {
|
||||||
|
delete _rel;
|
||||||
|
delete _msk;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TConcli_application::user_destroy()
|
bool TCondizioni_vendita::handler_datacam(TMask_field &fld, KEY k) {
|
||||||
{
|
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
|
||||||
delete _msk;
|
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
|
||||||
delete _rel;
|
if (datacam.not_empty()) {
|
||||||
return TRUE;
|
TMask &m= fld.mask(); // prende la maschera principale
|
||||||
|
TString codval(m.get(F_CODVAL)); // prende il codice della valuta
|
||||||
|
if (codval.not_empty()) {
|
||||||
|
TTable cam("CAM"); // apre la tabella cambi
|
||||||
|
cam.put("CODTAB", codval << datacam); // riempie la chiave
|
||||||
|
if (cam.read() == NOERR) m.set(F_CAMBIO, cam.get("R10")); // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ve2200(int argc, char* argv[])
|
bool TCondizioni_vendita::handler_valfin(TMask_field &fld, KEY k) {
|
||||||
{
|
if (k==K_TAB) {
|
||||||
|
if (fld.get().not_empty()) {
|
||||||
|
TMask &m= fld.mask(); // prende la maschera principale
|
||||||
|
if (m.get(F_VALIN).not_empty()) {
|
||||||
|
TDate valfin(fld.get()); // prende la data di fine validità
|
||||||
|
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
|
||||||
|
if (valfin<valin) {
|
||||||
|
error_box("La data di inizio validità deve essere minore della data di fine");
|
||||||
|
return FALSE;
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCondizioni_vendita::handler_codlissucc(TMask_field &fld, KEY k) {
|
||||||
|
if (k==K_TAB) {
|
||||||
|
TString codlissucc(fld.get()); // prende il codice listino successivo dal campo corrente
|
||||||
|
if (codlissucc.not_empty()) {
|
||||||
|
TMask &m= fld.mask(); // prende la maschera principale
|
||||||
|
TString cod(m.get(F_L_COD)); // prende il codice listino corrente dalla maschera
|
||||||
|
if (codlissucc == cod) {
|
||||||
|
error_box("Il codice del listino successivo deve essere diverso dal codice del listino corrente");
|
||||||
|
return FALSE;
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TCondizioni_vendita::handler_seqric(TMask_field &fld, KEY k) {
|
||||||
|
if (k==K_TAB) {
|
||||||
|
TString &seqric= fld.get(); // prende la stringa contenenta la sequenza di ricerca dal campo corrente
|
||||||
|
if (seqric.not_empty()) {
|
||||||
|
bool gotcha= TRUE; // flag di validità della sequenza
|
||||||
|
for (int i=0; i<seqric.len(); i++) {
|
||||||
|
char c= toupper(seqric[i]); // prende la lettera corrente della sequenza
|
||||||
|
if ((c!='A') && (c!='G') && (c!='R')) gotcha= FALSE; // se la lettera non rientra tra quelle possibili abbassa il flag di validità
|
||||||
|
for (int j= i+1; j<seqric.len(); j++) if (c== toupper(seqric[j])) gotcha= FALSE; // se la lettera compare anche più avanti nella sequenza abbassa il flag di validitià
|
||||||
|
if (!gotcha) break; // se il flag di validità è basso esce anticipatamente
|
||||||
|
}
|
||||||
|
if (!gotcha) error_box("La sequenza di ricerca deve essere una combinazine di 'A' (Articoli), 'G' (Gruppi merceologici) e 'R' (Raggruppamenti fiscali), in cui ogni lettera compare al massimo una volta");
|
||||||
|
return (gotcha);
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TCondizioni_vendita::write(const TMask &m) {
|
||||||
|
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||||
|
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||||
|
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||||
|
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||||
|
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||||
|
}
|
||||||
|
_rel->write(); // invoca la scrittura della relazione
|
||||||
|
return (_rel->status()); // ritorna lo stato della relazione
|
||||||
|
}
|
||||||
|
|
||||||
|
int TCondizioni_vendita::rewrite(const TMask &m) {
|
||||||
|
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||||
|
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||||
|
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||||
|
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||||
|
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||||
|
}
|
||||||
|
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||||
|
return (_rel->status()); // ritorna lo stato della relazione
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCondizioni_vendita::init_query_mode(TMask &m) {
|
||||||
|
for (int i=1; i<=_tohide[0]; i++) {
|
||||||
|
if (_msk->field(_tohide[i]).is_edit()) _msk->efield(_tohide[i]).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
|
||||||
|
_msk->disable(_tohide[i]); // disabilita il campo
|
||||||
|
_msk->hide(_tohide[i]); // rende invisibile il campo
|
||||||
|
}
|
||||||
|
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
|
||||||
|
}
|
||||||
|
|
||||||
|
int ve2200(int argc, char* argv[]) {
|
||||||
|
TCondizioni_vendita a;
|
||||||
|
|
||||||
TConcli_application a;
|
a.run(argc, argv, "Condizioni di vendita ");
|
||||||
|
|
||||||
a.run(argc, argv, "Gestione contratti " );
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
48
ve/ve2200.h
48
ve/ve2200.h
@ -1,49 +1,5 @@
|
|||||||
#define F_TIPO 101
|
|
||||||
#define F_TIPOCF 104
|
|
||||||
#define F_CODCF 105
|
|
||||||
#define F_CODCF1 106
|
|
||||||
#define F_CODDIV1 107
|
|
||||||
#define F_COD 108
|
|
||||||
#define F_COD1 109
|
|
||||||
#define F_DESCR 110
|
|
||||||
#define F_CODVAL 111
|
|
||||||
#define F_CODVAL1 112
|
|
||||||
#define F_CAMBIO 113
|
|
||||||
#define F_DATACAM 114
|
|
||||||
#define F_VALIN 115
|
|
||||||
#define F_VALFIN 116
|
|
||||||
#define F_IMPLORDI 117
|
|
||||||
#define F_GESTUM 118
|
|
||||||
#define F_GESTSCAGL 119
|
|
||||||
#define F_GESTSCO 120
|
|
||||||
#define F_SCONST 121
|
|
||||||
#define F_OBBLIG 122
|
|
||||||
|
|
||||||
#define F_SEQRIC 124
|
#include "ve2200x.h"
|
||||||
#define F_FLART 125
|
|
||||||
#define F_FLCAT 126
|
|
||||||
#define F_FLLIN 127
|
|
||||||
#define F_FLRAGG 128
|
|
||||||
|
|
||||||
#define F_CATVEN2 129
|
#define F_TIPOCV 101
|
||||||
#define F_COD2 130
|
|
||||||
|
|
||||||
|
|
||||||
#define F_SHEET2 302
|
|
||||||
|
|
||||||
#define FS_QLIM 101
|
|
||||||
#define FS_PREZZO 102
|
|
||||||
#define FS_SCONTO 103
|
|
||||||
#define FS_ADDIVA 104
|
|
||||||
#define FS_CODIVA 105
|
|
||||||
#define FS_PRECPROVV 106
|
|
||||||
#define FS_QOM 107
|
|
||||||
#define FS_QBASE 108
|
|
||||||
#define FS_CODARTOM 109
|
|
||||||
#define FS_PROMAGGIO 110
|
|
||||||
#define FS_UMOM 111
|
|
||||||
#define FS_CODLOTTO 112
|
|
||||||
|
|
||||||
#define FS_CODIVA1 114
|
|
||||||
#define FS_CODARTOM1 115
|
|
||||||
#define FS_CODLOTTO1 116
|
|
||||||
|
223
ve/ve2300.cpp
223
ve/ve2300.cpp
@ -1,59 +1,210 @@
|
|||||||
|
|
||||||
|
#include <relapp.h>
|
||||||
|
|
||||||
#include "ve2300.h"
|
#include "ve2300.h"
|
||||||
|
|
||||||
#define LF_CONDV 52
|
|
||||||
#define LF_RCONDV 53
|
|
||||||
|
|
||||||
#ifndef __CHECKS_H
|
|
||||||
#include <checks.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __RELAPP_H
|
// !! verificare le disabilitazioni incrociate tra i campi e le loro relative riabilitazioni
|
||||||
#include <relapp.h>
|
// !! durante i cambi di chiave e dei campi con ricerche custom
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __LFFILES_H
|
class TRighe_condizioni_vendita: public TRelation_application {
|
||||||
#include <lffiles.h>
|
TMask *_msk; // maschera principale
|
||||||
#endif
|
TRelation *_rel; // relazione principale
|
||||||
|
|
||||||
class Tofferte_application : public TRelation_application
|
|
||||||
{
|
|
||||||
TMask* _msk;
|
|
||||||
TRelation* _rel;
|
|
||||||
|
|
||||||
virtual bool user_create();
|
virtual bool user_create();
|
||||||
virtual bool user_destroy();
|
virtual bool user_destroy();
|
||||||
virtual TMask* get_mask(int mode) { return _msk;}
|
virtual TMask *get_mask(int) { return _msk; }
|
||||||
virtual bool changing_mask(int mode) { return FALSE;}
|
virtual bool changing_mask(int) { return FALSE; }
|
||||||
virtual TRelation* get_relation() const { return _rel;}
|
virtual TRelation *get_relation() const { return _rel; }
|
||||||
|
|
||||||
|
|
||||||
|
static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
|
||||||
|
static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
|
||||||
|
|
||||||
|
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
|
||||||
|
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
|
||||||
|
|
||||||
|
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
TString16 _rcondven; // stringa che indica il tipo di archivio
|
||||||
|
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
|
||||||
|
TBit_array _todisable; // vettore degli identificatori di campi che devono essere disabilitati
|
||||||
|
|
||||||
Tofferte_application( ) { };
|
TRighe_condizioni_vendita() {}
|
||||||
virtual ~Tofferte_application() { }
|
virtual ~TRighe_condizioni_vendita() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool Tofferte_application::user_create()
|
TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||||
{
|
return (TRighe_condizioni_vendita &)main_app();
|
||||||
_msk = new TMask( "VE2300" );
|
}
|
||||||
_rel = new TRelation( LF_CONDV );
|
|
||||||
// _rel.add( "%PIP" )
|
bool TRighe_condizioni_vendita::user_create() {
|
||||||
|
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||||
|
|
||||||
|
warning_box("Questa applicazione non è ancora stata definitivamente debuggata"); // !! rimuovere la warning box a fine debugging
|
||||||
|
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||||
|
if (argc()>2) { // se c'è, prende il tipo di archivio dalla linea di comando
|
||||||
|
TString temp(argv(2));
|
||||||
|
_rcondven= temp.left(1); // prende solo il primo carattere
|
||||||
|
} else {
|
||||||
|
TMask choose("VE2300"); // istanzia la maschera di scelta del tipo di archivio
|
||||||
|
if (choose.run() == K_ENTER) _rcondven= choose.get(F_TIPORCV); // prende il tipo di archivio dalla maschera
|
||||||
|
}
|
||||||
|
_rcondven.upper(); // rende la stringa upper-case
|
||||||
|
_msk= new TMask("VE2300X");
|
||||||
|
_tohide.reset(); // resetta il vettore dei campi da eliminare
|
||||||
|
switch (_rcondven[0]) {
|
||||||
|
case 'L': // listini
|
||||||
|
_tohide.set(F_C_TIPOCF); // settaggio dei campi da eliminare...
|
||||||
|
_tohide.set(F_C_CODCF);
|
||||||
|
_tohide.set(F_C_COD);
|
||||||
|
_tohide.set(F_O_COD);
|
||||||
|
_tohide.set(F_C_RICERCA);
|
||||||
|
_tohide.set(F_O_RICERCA);
|
||||||
|
_tohide.set(F_CO_CODLOTTO);
|
||||||
|
_tohide.set(F_O_ARTES);
|
||||||
|
set_search_field(F_L_RICERCA); // impostazione del campo di ricerca
|
||||||
|
_msk->set_handler(F_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
case 'C': // contratti
|
||||||
|
_tohide.set(F_L_CATVEN); // settaggio dei campi da eliminare...
|
||||||
|
_tohide.set(F_L_COD);
|
||||||
|
_tohide.set(F_O_COD);
|
||||||
|
_tohide.set(F_LO_UM);
|
||||||
|
_tohide.set(F_L_RICERCA);
|
||||||
|
_tohide.set(F_O_RICERCA);
|
||||||
|
_tohide.set(F_O_ARTES);
|
||||||
|
set_search_field(F_C_RICERCA); // impostazione del campo di ricerca
|
||||||
|
_msk->set_handler(F_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
case 'O': // offerte
|
||||||
|
_tohide.set(F_L_CATVEN); // settaggio dei campi da eliminare...
|
||||||
|
_tohide.set(F_C_TIPOCF);
|
||||||
|
_tohide.set(F_C_CODCF);
|
||||||
|
_tohide.set(F_L_COD);
|
||||||
|
_tohide.set(F_C_COD);
|
||||||
|
_tohide.set(F_L_RICERCA);
|
||||||
|
_tohide.set(F_C_RICERCA);
|
||||||
|
set_search_field(F_O_RICERCA); // impostazione del campo di ricerca
|
||||||
|
_msk->set_handler(F_O_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||||
|
gotcha= TRUE;
|
||||||
|
break;
|
||||||
|
default: // messaggio di errore se si indica un archivio non valido
|
||||||
|
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||||
|
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
|
||||||
|
_todisable.reset(); // inizializza il vettore dei campi da disabilitare
|
||||||
|
_msk->set_handler(F_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
|
||||||
|
}
|
||||||
|
return (gotcha);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TRighe_condizioni_vendita::user_destroy() {
|
||||||
|
delete _rel;
|
||||||
|
delete _msk;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Tofferte_application::user_destroy()
|
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
|
||||||
{
|
if (k==K_TAB) {
|
||||||
delete _msk;
|
TBit_array &_todisable= app()._todisable; // vettore per la disabilitazione dei campi, ricavato dalla proprietà dell'applicazione
|
||||||
delete _rel;
|
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
|
||||||
|
if ((fld.get() != "A") && (_rcondven != "C")) _todisable.set(F_LO_UM); // se il tipo riga è "Articolo" e non siamo sui contratti, l'unità di misura deve essere disabilitata
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ve2300(int argc, char* argv[])
|
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||||
{
|
if (k==K_TAB) {
|
||||||
|
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
|
||||||
|
TMask &m= fld.mask(); // prende la maschera principale
|
||||||
|
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
|
||||||
|
condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
|
||||||
|
switch (_rcondven[0]) {
|
||||||
|
case 'L': // riempie il resto della chiave dei listini
|
||||||
|
condv.put("CATVEN", m.get(F_L_CATVEN));
|
||||||
|
condv.put("COD", m.get(F_L_COD));
|
||||||
|
break;
|
||||||
|
case 'C': // riempie il resto della chiave dei contratti
|
||||||
|
condv.put("TIPOCF", m.get(F_C_TIPOCF));
|
||||||
|
condv.put("CODCF", m.get(F_C_CODCF));
|
||||||
|
condv.put("COD", m.get(F_C_COD));
|
||||||
|
break;
|
||||||
|
case 'O': // riempie il resto della chiave delle offerte
|
||||||
|
condv.put("COD", m.get(F_O_COD));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
|
||||||
|
TBit_array &_todisable= app()._todisable; // vettore per la disabilitazione dei campi, ricavato dalla proprietà dell'applicazione
|
||||||
|
_todisable.reset(); // resetta il vettore dei campi da disabilitare
|
||||||
|
if (!condv.get_bool("GESTUM")) _todisable.set(F_LO_UM); // mette nel vettore di dabilitazione il campo "unità di misura" della maschera (campo chiave)
|
||||||
|
if (!condv.get_bool("GESTSCAGL")) {
|
||||||
|
_todisable.set(F_NSCAGL); // mette nel vettore di dabilitazione il campo "n.ro scaglione" della maschera (campo chiave)
|
||||||
|
m.disable(F_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||||
|
}
|
||||||
|
if (!condv.get_bool("GESTSCO")) {
|
||||||
|
m.disable(F_SCONTO); // disabilita il campo "sconto"
|
||||||
|
m.disable(F_QOM); // disabilita il campo "quantità art. omaggio"
|
||||||
|
m.disable(F_QBASE); // disabilita il campo "quantità base x sconto"
|
||||||
|
m.disable(F_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||||
|
m.disable(F_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||||
|
m.disable(F_UMOM); // disabilita il campo "unità di misura art. omaggio"
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
error_box("Non esiste una testata corrispondente alla chiave specificata");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TRighe_condizioni_vendita::write(const TMask &m) {
|
||||||
|
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||||
|
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||||
|
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||||
|
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||||
|
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||||
|
}
|
||||||
|
_rel->write(); // invoca la scrittura della relazione
|
||||||
|
return (_rel->status()); // ritorna lo stato della relazione
|
||||||
|
}
|
||||||
|
|
||||||
|
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
|
||||||
|
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||||
|
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||||
|
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||||
|
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||||
|
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||||
|
}
|
||||||
|
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||||
|
return (_rel->status()); // ritorna lo stato della relazione
|
||||||
|
}
|
||||||
|
|
||||||
|
void TRighe_condizioni_vendita::init_query_mode(TMask &m) {
|
||||||
|
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) { // ciclo sul vettore dei campi da eliminare
|
||||||
|
if (_tohide[i]) {
|
||||||
|
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
|
||||||
|
_msk->hide(i); // rende invisibile il campo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i= (short)_todisable.first_one(); i<=(short)_todisable.last_one(); i++) { // ciclo sul vettore dei campi da disabilitare
|
||||||
|
if (_todisable[i]) {
|
||||||
|
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
|
||||||
|
_msk->disable(i); // disabilita il campo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_msk->set(F_TIPO, _rcondven); // settaggio del campo di tipo archivio
|
||||||
|
}
|
||||||
|
|
||||||
|
int ve2300(int argc, char* argv[]) {
|
||||||
|
TRighe_condizioni_vendita a;
|
||||||
|
|
||||||
Tofferte_application a;
|
a.run(argc, argv, "Righe condizioni vendita ");
|
||||||
|
|
||||||
a.run(argc, argv, "Gestione offerte/campagne " );
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
ve/ve2300.h
44
ve/ve2300.h
@ -1,45 +1,5 @@
|
|||||||
#define F_TIPO 101
|
|
||||||
#define F_COD 108
|
|
||||||
#define F_COD1 109
|
|
||||||
#define F_DESCR 110
|
|
||||||
#define F_CODVAL 111
|
|
||||||
#define F_CODVAL1 112
|
|
||||||
#define F_CAMBIO 113
|
|
||||||
#define F_DATACAM 114
|
|
||||||
#define F_VALIN 115
|
|
||||||
#define F_VALFIN 116
|
|
||||||
#define F_IMPLORDI 117
|
|
||||||
#define F_GESTUM 118
|
|
||||||
#define F_GESTSCAGL 119
|
|
||||||
#define F_GESTSCO 120
|
|
||||||
#define F_SCONST 121
|
|
||||||
|
|
||||||
#define F_SEQRIC 124
|
#include "ve2300x.h"
|
||||||
#define F_FLART 125
|
|
||||||
#define F_FLCAT 126
|
|
||||||
#define F_FLLIN 127
|
|
||||||
#define F_FLRAGG 128
|
|
||||||
|
|
||||||
#define F_CATVEN2 129
|
#define F_TIPORCV 101
|
||||||
#define F_COD2 130
|
|
||||||
|
|
||||||
|
|
||||||
#define F_SHEET3 303
|
|
||||||
|
|
||||||
#define FS_QLIM 101
|
|
||||||
#define FS_PREZZO 102
|
|
||||||
#define FS_SCONTO 103
|
|
||||||
#define FS_ADDIVA 104
|
|
||||||
#define FS_CODIVA 105
|
|
||||||
#define FS_PRECPROVV 106
|
|
||||||
#define FS_QOM 107
|
|
||||||
#define FS_QBASE 108
|
|
||||||
#define FS_CODARTOM 109
|
|
||||||
#define FS_PROMAGGIO 110
|
|
||||||
#define FS_UMOM 111
|
|
||||||
#define FS_CODLOTTO 112
|
|
||||||
#define FS_ARTES 113
|
|
||||||
|
|
||||||
#define FS_CODIVA1 114
|
|
||||||
#define FS_CODARTOM1 115
|
|
||||||
#define FS_CODLOTTO1 116
|
|
||||||
|
213
ve/ve2400.cpp
213
ve/ve2400.cpp
@ -1,29 +1,15 @@
|
|||||||
|
|
||||||
|
#include <relapp.h>
|
||||||
|
#include <tabutil.h>
|
||||||
|
#include <msksheet.h>
|
||||||
|
#include <assoc.h>
|
||||||
|
#include <checks.h>
|
||||||
|
|
||||||
#include "ve2400.h"
|
#include "ve2400.h"
|
||||||
|
|
||||||
#ifndef __CHECKS_H
|
|
||||||
#include <checks.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __RELAPP_H
|
|
||||||
#include <relapp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __TABUTIL_H
|
|
||||||
#include <tabutil.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __MSKSHEET_H
|
|
||||||
#include <msksheet.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ASSOC_H
|
|
||||||
#include <assoc.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
class TAnagrafica_magazzino: public TRelation_application {
|
||||||
class TAnamag_application: public TRelation_application {
|
|
||||||
TMask *_msk; // maschera principale
|
TMask *_msk; // maschera principale
|
||||||
TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino)
|
TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino)
|
||||||
TLocalisamfile *_umart; // file di accesso alle unità di misura
|
TLocalisamfile *_umart; // file di accesso alle unità di misura
|
||||||
@ -35,9 +21,9 @@ class TAnamag_application: public TRelation_application {
|
|||||||
|
|
||||||
virtual bool user_create();
|
virtual bool user_create();
|
||||||
virtual bool user_destroy();
|
virtual bool user_destroy();
|
||||||
virtual TMask *get_mask(int) {return _msk;}
|
virtual TMask *get_mask(int) { return _msk; }
|
||||||
virtual bool changing_mask(int) {return FALSE;}
|
virtual bool changing_mask(int) { return FALSE; }
|
||||||
virtual TRelation *get_relation() const {return _rel;}
|
virtual TRelation *get_relation() const { return _rel; }
|
||||||
virtual void init_insert_mode(TMask &);
|
virtual void init_insert_mode(TMask &);
|
||||||
|
|
||||||
virtual int read(TMask& m);
|
virtual int read(TMask& m);
|
||||||
@ -50,13 +36,13 @@ class TAnamag_application: public TRelation_application {
|
|||||||
static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura
|
static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TAnamag_application() {}
|
TAnagrafica_magazzino() {}
|
||||||
virtual ~TAnamag_application() {}
|
virtual ~TAnagrafica_magazzino() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool TAnamag_application::user_create() {
|
bool TAnagrafica_magazzino::user_create() {
|
||||||
_msk= new TMask("VE2400");
|
_msk= new TMask("VE2400");
|
||||||
_msk->set_handler(F_SHEET0, handle_sheet0);
|
_msk->set_handler(F_SHEET0, handle_sheet0);
|
||||||
_msk->set_handler(F_SHEET1, handle_sheet1);
|
_msk->set_handler(F_SHEET1, handle_sheet1);
|
||||||
@ -77,7 +63,7 @@ bool TAnamag_application::user_create() {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAnamag_application::user_destroy() {
|
bool TAnagrafica_magazzino::user_destroy() {
|
||||||
delete _linee_rec2;
|
delete _linee_rec2;
|
||||||
delete _linee_rec1;
|
delete _linee_rec1;
|
||||||
delete _linee_rec0;
|
delete _linee_rec0;
|
||||||
@ -89,7 +75,7 @@ bool TAnamag_application::user_destroy() {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnamag_application::read(TMask& m) {
|
int TAnagrafica_magazzino::read(TMask& m) {
|
||||||
int err= TRelation_application::read(m);
|
int err= TRelation_application::read(m);
|
||||||
if (err == NOERR) {
|
if (err == NOERR) {
|
||||||
TRectype rum(_umart->curr()); // prende il record corrente dal file delle unità di misura
|
TRectype rum(_umart->curr()); // prende il record corrente dal file delle unità di misura
|
||||||
@ -146,7 +132,7 @@ int TAnamag_application::read(TMask& m) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnamag_application::write(const TMask& m) {
|
int TAnagrafica_magazzino::write(const TMask& m) {
|
||||||
int err= TRelation_application::write(m);
|
int err= TRelation_application::write(m);
|
||||||
if (err == NOERR) {
|
if (err == NOERR) {
|
||||||
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
||||||
@ -210,7 +196,7 @@ int TAnamag_application::write(const TMask& m) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnamag_application::rewrite(const TMask& m) {
|
int TAnagrafica_magazzino::rewrite(const TMask& m) {
|
||||||
int err= TRelation_application::rewrite(m);
|
int err= TRelation_application::rewrite(m);
|
||||||
if (err == NOERR) {
|
if (err == NOERR) {
|
||||||
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
||||||
@ -274,7 +260,7 @@ int TAnamag_application::rewrite(const TMask& m) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnamag_application::init_insert_mode(TMask &m) {
|
void TAnagrafica_magazzino::init_insert_mode(TMask &m) {
|
||||||
TSheet_field &f= (TSheet_field &)m.field(F_SHEET0);
|
TSheet_field &f= (TSheet_field &)m.field(F_SHEET0);
|
||||||
if (f.items()==0) {
|
if (f.items()==0) {
|
||||||
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet
|
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet
|
||||||
@ -285,98 +271,109 @@ void TAnamag_application::init_insert_mode(TMask &m) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAnamag_application::handle_sheet0(TMask_field &fld, KEY k) {
|
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k) {
|
||||||
if (k==K_ENTER) {
|
if (k==K_ENTER) {
|
||||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
if (f.items()>0) {
|
||||||
for (int i= 0; i<f.items(); i++) {
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
for (int i= 0; i<f.items(); i++) {
|
||||||
error_box("Le unità di misura devono essere diverse tra loro");
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||||
break;
|
error_box("Le unità di misura devono essere diverse tra loro");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
real x(f.cell(i,1));
|
||||||
|
if (x.is_zero()) { // controlla che il fattore di conversione (secondo elemento) non sia 0
|
||||||
|
error_box("I fattori di conversione delle unità di misura non possono valere 0");
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
return (i==f.items());
|
||||||
return (i==f.items());
|
} else return TRUE;
|
||||||
} else return TRUE;
|
} else return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAnamag_application::handle_sheet1(TMask_field &fld, KEY k) {
|
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k) {
|
||||||
if (k==K_ENTER) {
|
if (k==K_ENTER) {
|
||||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
if (f.items()>1) {
|
||||||
for (int i= 0; i<f.items(); i++) {
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
for (int i= 0; i<f.items(); i++) {
|
||||||
error_box("I codici di lingua devono essere diversi tra loro");
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||||
break;
|
error_box("I codici di lingua devono essere diversi tra loro");
|
||||||
}
|
break;
|
||||||
}
|
|
||||||
return (i==f.items());
|
|
||||||
} else return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAnamag_application::handle_sheet2(TMask_field &fld, KEY k) {
|
|
||||||
if (k==K_ENTER) {
|
|
||||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
|
||||||
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
|
||||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
|
||||||
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
|
|
||||||
for (int i= 0; i<f.items(); i++) {
|
|
||||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
|
||||||
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (i==f.items());
|
|
||||||
} else return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAnamag_application::handle_sheet0_um(TMask_field &fld, KEY k) {
|
|
||||||
if (k==K_TAB) {
|
|
||||||
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
|
|
||||||
TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
|
|
||||||
CHECK(f != NULL, "Il puntatore allo sheet è nullo");
|
|
||||||
TString16 me(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
|
|
||||||
if ((f->selected() != 0) && me.not_empty()) {
|
|
||||||
|
|
||||||
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
|
|
||||||
//
|
|
||||||
// SHEET:
|
|
||||||
// -----
|
|
||||||
// riga u.m. f.c.
|
|
||||||
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
|
|
||||||
// ... ... ...
|
|
||||||
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
|
|
||||||
//
|
|
||||||
// se (your==my) allora X=(your_fc/my_fc) ...chiaro, no!? :-)
|
|
||||||
|
|
||||||
TTable t("%UM");
|
|
||||||
real x(0.0); // fattore di conversione dell'unità di misura corrente
|
|
||||||
const TString16 you(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
|
|
||||||
t.zero();
|
|
||||||
t.put("CODTAB", me);
|
|
||||||
if (t.read() == NOERR) {
|
|
||||||
TString16 my(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
|
|
||||||
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
|
||||||
t.zero();
|
|
||||||
t.put("CODTAB", you);
|
|
||||||
if (t.read() == NOERR) {
|
|
||||||
TString16 your(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
|
|
||||||
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
|
||||||
if (your==my) {
|
|
||||||
x= your_fc/my_fc;
|
|
||||||
message_box("me:%s, my:%s, my_fc:%s, you:%s your:%s, your_fc:%s, x:%s", (const char *)me, (const char *)my, my_fc.stringa(), (const char *)you, (const char *)your, your_fc.stringa(), x.stringa());
|
|
||||||
} // NON FUNZIONA UN CAZZO!
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TToken_string &row= f->row(f->selected()); // prende la riga corrente dello sheet
|
return (i==f.items());
|
||||||
row.add(x.stringa(), 1); // inserisce il valore precalcolato (0 se non è possibile calcolarlo);
|
} else return TRUE;
|
||||||
f->force_update(f->selected()); // forza l'aggiornamento della riga corrente dello sheet
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TAnagrafica_magazzino::handle_sheet2(TMask_field &fld, KEY k) {
|
||||||
|
if (k==K_ENTER) {
|
||||||
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||||
|
if (f.items()>0) {
|
||||||
|
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
||||||
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||||
|
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
|
||||||
|
for (int i= 0; i<f.items(); i++) {
|
||||||
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||||
|
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (i==f.items());
|
||||||
|
} else return TRUE;
|
||||||
|
} else return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k) {
|
||||||
|
if (k==K_TAB) {
|
||||||
|
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
|
||||||
|
TString16 me(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
|
||||||
|
if (me.not_empty()) { // se il codice dell'unità di misura è vuoto non viene fatto alcun calcolo
|
||||||
|
TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
|
||||||
|
CHECK(f != NULL, "Il puntatore allo sheet è nullo");
|
||||||
|
if (f->selected() != 0) {
|
||||||
|
|
||||||
|
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
|
||||||
|
//
|
||||||
|
// SHEET:
|
||||||
|
// -----
|
||||||
|
// riga u.m. f.c.
|
||||||
|
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
|
||||||
|
// ... ... ...
|
||||||
|
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
|
||||||
|
//
|
||||||
|
// se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-)
|
||||||
|
|
||||||
|
TTable t("%UMS");
|
||||||
|
real x(0.0); // fattore di conversione dell'unità di misura corrente
|
||||||
|
const TString16 you(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
|
||||||
|
t.zero();
|
||||||
|
t.put("CODTAB", me);
|
||||||
|
if (t.read() == NOERR) {
|
||||||
|
TString16 my(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
|
||||||
|
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||||
|
t.zero();
|
||||||
|
t.put("CODTAB", you);
|
||||||
|
if (t.read() == NOERR) {
|
||||||
|
TString16 your(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
|
||||||
|
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||||
|
if (your==my) {
|
||||||
|
x= my_fc/your_fc; // calcola il rapporto tra i fattori di conversione
|
||||||
|
x.round(5); // arrotonda il risultato a 5 decimali
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.set(FS_FCUM, x.stringa()); // il risultato viene scritto nel campo del fattore di conversione
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ve2400(int argc, char* argv[]) {
|
int ve2400(int argc, char* argv[]) {
|
||||||
TAnamag_application a;
|
TAnagrafica_magazzino a;
|
||||||
|
|
||||||
a.run(argc, argv, "Anagrafica di magazzino ");
|
a.run(argc, argv, "Anagrafica di magazzino ");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#include <lffiles.h>
|
#include <lffiles.h>
|
||||||
#include "VE2400.H"
|
#include "VE2400.H"
|
||||||
|
|
||||||
@ -47,7 +46,7 @@ END
|
|||||||
GROUPBOX DLG_NULL 71 5
|
GROUPBOX DLG_NULL 71 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 0 ""
|
PROMPT 0 0 ""
|
||||||
FLAG "R"
|
//FLAG "R"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_GRMERC1 3
|
STRING F_GRMERC1 3
|
||||||
@ -61,7 +60,7 @@ END
|
|||||||
STRING F_GRMERC1B 2
|
STRING F_GRMERC1B 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 21 5 ""
|
PROMPT 21 5 ""
|
||||||
FIELD LF_ANAGR->GRMERC1[4,5]
|
FIELD LF_ANAGR->GRMERC1[4,5]
|
||||||
GROUP 1
|
GROUP 1
|
||||||
FLAG "U"
|
FLAG "U"
|
||||||
MESSAGE EMPTY CLEAR,2@
|
MESSAGE EMPTY CLEAR,2@
|
||||||
@ -101,7 +100,7 @@ END
|
|||||||
STRING F_GRMERC2B 2
|
STRING F_GRMERC2B 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 21 6 ""
|
PROMPT 21 6 ""
|
||||||
FIELD LF_ANAGR->GRMERC2[4,5]
|
FIELD LF_ANAGR->GRMERC2[4,5]
|
||||||
GROUP 2
|
GROUP 2
|
||||||
FLAG "U"
|
FLAG "U"
|
||||||
MESSAGE EMPTY CLEAR,3@
|
MESSAGE EMPTY CLEAR,3@
|
||||||
@ -142,7 +141,7 @@ END
|
|||||||
STRING F_GRMERC3B 2
|
STRING F_GRMERC3B 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 21 7 ""
|
PROMPT 21 7 ""
|
||||||
FIELD LF_ANAGR->GRMERC3[4,5]
|
FIELD LF_ANAGR->GRMERC3[4,5]
|
||||||
GROUP 3
|
GROUP 3
|
||||||
FLAG "U"
|
FLAG "U"
|
||||||
NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2))
|
NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2))
|
||||||
@ -366,25 +365,25 @@ BEGIN
|
|||||||
PROMPT 1 17 "Classe doganale "
|
PROMPT 1 17 "Classe doganale "
|
||||||
FIELD LF_ANAGR->CLASSDOG
|
FIELD LF_ANAGR->CLASSDOG
|
||||||
FLAG "UZ"
|
FLAG "UZ"
|
||||||
USE %CLD
|
USE %CLD
|
||||||
INPUT CODTAB F_CLASSDOG
|
INPUT CODTAB F_CLASSDOG
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT F_CLASSDOG CODTAB
|
OUTPUT F_CLASSDOG CODTAB
|
||||||
OUTPUT F_CLASSDOG1 S0
|
OUTPUT F_CLASSDOG1 S0
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CLASSDOG1 40
|
STRING F_CLASSDOG1 40
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 36 17 ""
|
PROMPT 36 17 ""
|
||||||
FLAG "D"
|
FLAG "D"
|
||||||
USE %CLD KEY 2
|
USE %CLD KEY 2
|
||||||
INPUT S0 F_CLASSDOG1
|
INPUT S0 F_CLASSDOG1
|
||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
DISPLAY "Codice" CODTAB
|
DISPLAY "Codice" CODTAB
|
||||||
OUTPUT F_CLASSDOG CODTAB
|
OUTPUT F_CLASSDOG CODTAB
|
||||||
OUTPUT F_CLASSDOG1 S0
|
OUTPUT F_CLASSDOG1 S0
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
12
ve/veuml1.h
12
ve/veuml1.h
@ -1,7 +1,7 @@
|
|||||||
#ifndef __VEUML1_H
|
#ifndef __VEUML1_H
|
||||||
#define __VEUML1_H
|
#define __VEUML1_H
|
||||||
|
|
||||||
#ifndef __VEUML_H
|
#ifndef __VEUML_H
|
||||||
#include "VEUML.H"
|
#include "VEUML.H"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -16,11 +16,11 @@
|
|||||||
#define F_CIVCF 303
|
#define F_CIVCF 303
|
||||||
#define F_NOME_VAL 304
|
#define F_NOME_VAL 304
|
||||||
#define F_DESCODPAG 305
|
#define F_DESCODPAG 305
|
||||||
#define F_DATASCAD1 306
|
#define F_DATASCAD1 306
|
||||||
#define F_DATASCAD2 307
|
#define F_DATASCAD2 307
|
||||||
#define F_DATASCAD3 308
|
#define F_DATASCAD3 308
|
||||||
#define F_DATASCAD4 309
|
#define F_DATASCAD4 309
|
||||||
#define F_DATASCAD5 310
|
#define F_DATASCAD5 310
|
||||||
#define F_BANCA_APP 311
|
#define F_BANCA_APP 311
|
||||||
#define F_BANCA_PRE 312
|
#define F_BANCA_PRE 312
|
||||||
#define F_INDSP 313
|
#define F_INDSP 313
|
||||||
|
Loading…
x
Reference in New Issue
Block a user