211 lines
9.4 KiB
C++
Executable File
211 lines
9.4 KiB
C++
Executable File
|
|
#include <relapp.h>
|
|
|
|
#include "ve2300.h"
|
|
|
|
|
|
|
|
// !! verificare le disabilitazioni incrociate tra i campi e le loro relative riabilitazioni
|
|
// !! durante i cambi di chiave e dei campi con ricerche custom
|
|
|
|
class TRighe_condizioni_vendita: public TRelation_application {
|
|
TMask *_msk; // maschera principale
|
|
TRelation *_rel; // relazione principale
|
|
|
|
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 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
|
|
|
|
TRighe_condizioni_vendita() {}
|
|
virtual ~TRighe_condizioni_vendita() {}
|
|
};
|
|
|
|
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 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;
|
|
}
|
|
|
|
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;
|
|
|
|
a.run(argc, argv, "Righe condizioni vendita ");
|
|
return 0;
|
|
}
|
|
|