From bfbdd47c8ed69886c0854e478f97a44a9a86a9cb Mon Sep 17 00:00:00 2001 From: gianluca Date: Thu, 24 Aug 1995 13:51:57 +0000 Subject: [PATCH] Archivi sconti e condizioni di vendita (listini contratti campagne) git-svn-id: svn://10.65.10.50/trunk@1736 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve2.cpp | 52 ++++------- ve/ve2200.cpp | 235 +++++++++++++++++++++++++++++++++++++++++--------- ve/ve2200.h | 48 +---------- ve/ve2300.cpp | 223 +++++++++++++++++++++++++++++++++++++++-------- ve/ve2300.h | 44 +--------- ve/ve2400.cpp | 213 ++++++++++++++++++++++----------------------- ve/ve2400.uml | 35 ++++---- ve/veuml1.h | 12 +-- 8 files changed, 530 insertions(+), 332 deletions(-) diff --git a/ve/ve2.cpp b/ve/ve2.cpp index 375c20607..6e0e0b60c 100755 --- a/ve/ve2.cpp +++ b/ve/ve2.cpp @@ -1,40 +1,24 @@ -#include -#include + #include +#include -// #define MAIN - - -#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 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 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) - { - case 0: - rt = ve2100( argc, argv ); - break; - case 1: - rt = ve2200( argc, argv ); - break; - case 2: - rt = ve2300( argc, argv ); - break; - case 3: - rt = ve2400( argc, argv ); - break; - default: - error_box( usage, argv[0] ); - break; - } - return rt; + +int main( int argc, char** argv) { + int rt= -1; + const int r= (argc>1)?(atoi(&argv[1][1])):(-1); + + switch (r) { + case 0: rt = ve2100(argc, argv); break; + case 1: rt = ve2200(argc, argv); break; + case 2: rt = ve2300(argc, argv); break; + case 3: rt = ve2400(argc, argv); break; + default: error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 2 [L|C|O] | 3]", argv[0]); break; + } + return (rt); } - diff --git a/ve/ve2200.cpp b/ve/ve2200.cpp index af148257e..83f2bb910 100755 --- a/ve/ve2200.cpp +++ b/ve/ve2200.cpp @@ -1,60 +1,211 @@ + +#include +#include +#include + #include "ve2200.h" -#define LF_CONDV 52 -#define LF_RCONDV 53 -#ifndef __CHECKS_H -#include -#endif +class TCondizioni_vendita: public TRelation_application { + TMask *_msk; // maschera principale + TRelation *_rel; // relazione principale -#ifndef __RELAPP_H -#include -#endif - -#ifndef __LFFILES_H -#include -#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;} + TString16 _condven; // stringa che indica il tipo di archivio + short _tohide[10]; // vettore degli identificatori di campi che devono essere nascosti + 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: - - TConcli_application( ) { }; - virtual ~TConcli_application() { } + public: + TCondizioni_vendita() {} + virtual ~TCondizioni_vendita() {} }; -bool TConcli_application::user_create() -{ - _msk = new TMask( "VE2200" ); - _rel = new TRelation( LF_CONDV ); - // _rel.add( "%PIP" ) + + +bool TCondizioni_vendita::user_create() { + bool gotcha= FALSE; // booleano di avvenuta inizializzazione + + _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; } -bool TConcli_application::user_destroy() -{ - delete _msk; - delete _rel; - return TRUE; +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 + TString datacam(fld.get()); // legge la data di cambio nel campo corrente + if (datacam.not_empty()) { + 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 (valfinlfile(); // 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, "Gestione contratti " ); + a.run(argc, argv, "Condizioni di vendita "); return 0; } diff --git a/ve/ve2200.h b/ve/ve2200.h index e7d02520f..3be65bab4 100755 --- a/ve/ve2200.h +++ b/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 -#define F_FLART 125 -#define F_FLCAT 126 -#define F_FLLIN 127 -#define F_FLRAGG 128 +#include "ve2200x.h" -#define F_CATVEN2 129 -#define F_COD2 130 +#define F_TIPOCV 101 - -#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 diff --git a/ve/ve2300.cpp b/ve/ve2300.cpp index baec5fc75..397ca2b7c 100755 --- a/ve/ve2300.cpp +++ b/ve/ve2300.cpp @@ -1,59 +1,210 @@ + +#include + #include "ve2300.h" -#define LF_CONDV 52 -#define LF_RCONDV 53 -#ifndef __CHECKS_H -#include -#endif -#ifndef __RELAPP_H -#include -#endif +// !! verificare le disabilitazioni incrociate tra i campi e le loro relative riabilitazioni +// !! durante i cambi di chiave e dei campi con ricerche custom -#ifndef __LFFILES_H -#include -#endif +class TRighe_condizioni_vendita: public TRelation_application { + TMask *_msk; // maschera principale + TRelation *_rel; // relazione principale -class Tofferte_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 TMask *get_mask(int) { return _msk; } + virtual bool changing_mask(int) { return FALSE; } + 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: + 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( ) { }; - virtual ~Tofferte_application() { } + TRighe_condizioni_vendita() {} + virtual ~TRighe_condizioni_vendita() {} }; -bool Tofferte_application::user_create() -{ - _msk = new TMask( "VE2300" ); - _rel = new TRelation( LF_CONDV ); - // _rel.add( "%PIP" ) +TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione + return (TRighe_condizioni_vendita &)main_app(); +} + +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; } -bool Tofferte_application::user_destroy() -{ - delete _msk; - delete _rel; +bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) { + if (k==K_TAB) { + TBit_array &_todisable= app()._todisable; // vettore per la disabilitazione dei campi, ricavato dalla proprietà dell'applicazione + 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; } -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, "Gestione offerte/campagne " ); + a.run(argc, argv, "Righe condizioni vendita "); return 0; } + diff --git a/ve/ve2300.h b/ve/ve2300.h index f6514beab..aa12f07e6 100755 --- a/ve/ve2300.h +++ b/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 -#define F_FLART 125 -#define F_FLCAT 126 -#define F_FLLIN 127 -#define F_FLRAGG 128 +#include "ve2300x.h" -#define F_CATVEN2 129 -#define F_COD2 130 +#define F_TIPORCV 101 - -#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 diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index 8acf3e655..99fa30a42 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -1,29 +1,15 @@ +#include +#include +#include +#include +#include + #include "ve2400.h" -#ifndef __CHECKS_H -#include -#endif - -#ifndef __RELAPP_H -#include -#endif - -#ifndef __TABUTIL_H -#include -#endif - -#ifndef __MSKSHEET_H -#include -#endif - -#ifndef __ASSOC_H -#include -#endif - -class TAnamag_application: public TRelation_application { +class TAnagrafica_magazzino: public TRelation_application { TMask *_msk; // maschera principale TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino) 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_destroy(); - virtual TMask *get_mask(int) {return _msk;} - virtual bool changing_mask(int) {return FALSE;} - virtual TRelation *get_relation() const {return _rel;} + virtual TMask *get_mask(int) { return _msk; } + virtual bool changing_mask(int) { return FALSE; } + virtual TRelation *get_relation() const { return _rel; } virtual void init_insert_mode(TMask &); 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 public: - TAnamag_application() {} - virtual ~TAnamag_application() {} + TAnagrafica_magazzino() {} + virtual ~TAnagrafica_magazzino() {} }; -bool TAnamag_application::user_create() { +bool TAnagrafica_magazzino::user_create() { _msk= new TMask("VE2400"); _msk->set_handler(F_SHEET0, handle_sheet0); _msk->set_handler(F_SHEET1, handle_sheet1); @@ -77,7 +63,7 @@ bool TAnamag_application::user_create() { return TRUE; } -bool TAnamag_application::user_destroy() { +bool TAnagrafica_magazzino::user_destroy() { delete _linee_rec2; delete _linee_rec1; delete _linee_rec0; @@ -89,7 +75,7 @@ bool TAnamag_application::user_destroy() { return TRUE; } -int TAnamag_application::read(TMask& m) { +int TAnagrafica_magazzino::read(TMask& m) { int err= TRelation_application::read(m); if (err == NOERR) { 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; } -int TAnamag_application::write(const TMask& m) { +int TAnagrafica_magazzino::write(const TMask& m) { int err= TRelation_application::write(m); if (err == NOERR) { TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0); @@ -210,7 +196,7 @@ int TAnamag_application::write(const TMask& m) { return err; } -int TAnamag_application::rewrite(const TMask& m) { +int TAnagrafica_magazzino::rewrite(const TMask& m) { int err= TRelation_application::rewrite(m); if (err == NOERR) { TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0); @@ -274,7 +260,7 @@ int TAnamag_application::rewrite(const TMask& m) { 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); if (f.items()==0) { 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) { 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à - for (int i= 0; i0) { + TAssoc_array v; // istanzia l'hash table per il controllo di univocità + for (int i= 0; iselected() != 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! + if (f.items()>1) { + TAssoc_array v; // istanzia l'hash table per il controllo di univocità + for (int i= 0; irow(f->selected()); // prende la riga corrente dello sheet - row.add(x.stringa(), 1); // inserisce il valore precalcolato (0 se non è possibile calcolarlo); - f->force_update(f->selected()); // forza l'aggiornamento della riga corrente dello sheet + return (i==f.items()); + } else return TRUE; + } 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; iselected() != 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; } int ve2400(int argc, char* argv[]) { - TAnamag_application a; + TAnagrafica_magazzino a; a.run(argc, argv, "Anagrafica di magazzino "); return 0; diff --git a/ve/ve2400.uml b/ve/ve2400.uml index c43b5e048..0e992986c 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -1,4 +1,3 @@ - #include #include "VE2400.H" @@ -47,7 +46,7 @@ END GROUPBOX DLG_NULL 71 5 BEGIN PROMPT 0 0 "" - FLAG "R" +//FLAG "R" END STRING F_GRMERC1 3 @@ -61,7 +60,7 @@ END STRING F_GRMERC1B 2 BEGIN PROMPT 21 5 "" - FIELD LF_ANAGR->GRMERC1[4,5] + FIELD LF_ANAGR->GRMERC1[4,5] GROUP 1 FLAG "U" MESSAGE EMPTY CLEAR,2@ @@ -101,7 +100,7 @@ END STRING F_GRMERC2B 2 BEGIN PROMPT 21 6 "" - FIELD LF_ANAGR->GRMERC2[4,5] + FIELD LF_ANAGR->GRMERC2[4,5] GROUP 2 FLAG "U" MESSAGE EMPTY CLEAR,3@ @@ -142,7 +141,7 @@ END STRING F_GRMERC3B 2 BEGIN PROMPT 21 7 "" - FIELD LF_ANAGR->GRMERC3[4,5] + FIELD LF_ANAGR->GRMERC3[4,5] GROUP 3 FLAG "U" NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2)) @@ -366,25 +365,25 @@ BEGIN PROMPT 1 17 "Classe doganale " FIELD LF_ANAGR->CLASSDOG FLAG "UZ" - USE %CLD - INPUT CODTAB F_CLASSDOG - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CLASSDOG CODTAB - OUTPUT F_CLASSDOG1 S0 - CHECKTYPE NORMAL + USE %CLD + INPUT CODTAB F_CLASSDOG + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CLASSDOG CODTAB + OUTPUT F_CLASSDOG1 S0 + CHECKTYPE NORMAL END STRING F_CLASSDOG1 40 BEGIN PROMPT 36 17 "" FLAG "D" - USE %CLD KEY 2 - INPUT S0 F_CLASSDOG1 - DISPLAY "Descrizione@50" S0 - DISPLAY "Codice" CODTAB - OUTPUT F_CLASSDOG CODTAB - OUTPUT F_CLASSDOG1 S0 + USE %CLD KEY 2 + INPUT S0 F_CLASSDOG1 + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + OUTPUT F_CLASSDOG CODTAB + OUTPUT F_CLASSDOG1 S0 END ENDPAGE diff --git a/ve/veuml1.h b/ve/veuml1.h index 211f4cb70..4f4208a37 100755 --- a/ve/veuml1.h +++ b/ve/veuml1.h @@ -1,7 +1,7 @@ #ifndef __VEUML1_H #define __VEUML1_H -#ifndef __VEUML_H +#ifndef __VEUML_H #include "VEUML.H" #endif @@ -16,11 +16,11 @@ #define F_CIVCF 303 #define F_NOME_VAL 304 #define F_DESCODPAG 305 -#define F_DATASCAD1 306 -#define F_DATASCAD2 307 -#define F_DATASCAD3 308 -#define F_DATASCAD4 309 -#define F_DATASCAD5 310 +#define F_DATASCAD1 306 +#define F_DATASCAD2 307 +#define F_DATASCAD3 308 +#define F_DATASCAD4 309 +#define F_DATASCAD5 310 #define F_BANCA_APP 311 #define F_BANCA_PRE 312 #define F_INDSP 313