Listini contratti e campagne
git-svn-id: svn://10.65.10.50/trunk@1758 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
a131e59f80
commit
15833a6b29
479
ve/ve2200.cpp
479
ve/ve2200.cpp
@ -1,211 +1,268 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "ve2200.h"
|
||||
|
||||
|
||||
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
TString16 _condven; // stringa che indica il tipo di archivio
|
||||
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
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:
|
||||
TCondizioni_vendita() {}
|
||||
virtual ~TCondizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
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.set(F_C_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(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 corrente
|
||||
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
|
||||
_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.set(F_L_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(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.set(F_L_COD);
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_C_OBBLIG);
|
||||
_tohide.set(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 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;
|
||||
}
|
||||
|
||||
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 (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) {
|
||||
if (_tohide[i]) {
|
||||
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
|
||||
_msk->hide(i); // rende invisibile il campo
|
||||
}
|
||||
}
|
||||
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
|
||||
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
|
||||
_msk->disable(F_L_CATVEN); // ...e disabilitato
|
||||
}
|
||||
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
|
||||
}
|
||||
|
||||
int ve2200(int argc, char* argv[]) {
|
||||
TCondizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Condizioni di vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
#include <tabutil.h>
|
||||
#include <mailbox.h>
|
||||
#include <execp.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "ve2200.h"
|
||||
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe
|
||||
|
||||
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
|
||||
|
||||
|
||||
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
TString16 _condven; // stringa che indica il tipo di archivio
|
||||
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
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_mask(TMask &, KEY); // handler custom della maschera (per il tasto di aggancio alle righe)
|
||||
static bool handle_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
|
||||
static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
|
||||
static bool handle_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo)
|
||||
static bool handle_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:
|
||||
TCondizioni_vendita() {}
|
||||
virtual ~TCondizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TCondizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
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.set(F_C_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(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 corrente
|
||||
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
|
||||
_msk->set_handler(F_L_CODLISSUCC, handle_codlissucc); // setta l'handler per il campo di codice successivo
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'C': // contratti
|
||||
// settaggio dei campi da eliminare
|
||||
_tohide.set(F_L_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(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.set(F_L_COD);
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_C_OBBLIG);
|
||||
_tohide.set(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(handle_mask); // imposta l'handler generale della maschera
|
||||
_msk->set_handler(F_DATACAM, handle_datacam); // imposta l'handler per il campo della data del cambio
|
||||
_msk->set_handler(F_VALFIN, handle_valfin); // imposta l'handler per il campo di fine validità
|
||||
_msk->set_handler(F_SEQRIC, handle_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 TCondizioni_vendita::handle_mask(TMask &m, KEY k) {
|
||||
if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
|
||||
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
|
||||
bool &_catven_on= app()._catven_on; // prende il booleano di attivazione del campo CATVEN
|
||||
TString appname(RCONDVEN_APP); // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare
|
||||
TString body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
|
||||
switch (_condven[0]) {
|
||||
case 'L': // listini
|
||||
body << F_R_L_RICERCA; // appende l'id del campo di ricerca
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_L_CATVEN << "="; // appende il filtro sulla categoria di vendita...
|
||||
if (_catven_on) body << m.get(F_L_CATVEN); // ...
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
case 'C': // contratti
|
||||
body << F_R_C_RICERCA; // appende l'id del campo di ricerca
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF); // appende il filtro sul campo tipo cliente/fornitore
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF); // appende il filtro sul campo codice cliente/fornitore
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
case 'O': // offerte
|
||||
body << F_R_O_RICERCA; // appende l'id del campo di ricerca
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
|
||||
body << "|"; // appende il separatore
|
||||
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
}
|
||||
appname << _condven; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
|
||||
TMessage msg(cmd2name(appname), MSG_FS, (const char *)body); // istanzia il messaggio per l'applicazione
|
||||
msg.send(); // invia il messaggio all'applicazione
|
||||
TExternal_app ve2_3(appname); // istanzia l'applicazione esterna...
|
||||
ve2_3.run(); // ...la lancia e rimane in attesa del suo termine
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_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;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_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::handle_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::handle_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 (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) {
|
||||
if (_tohide[i]) {
|
||||
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
|
||||
_msk->hide(i); // rende invisibile il campo
|
||||
}
|
||||
}
|
||||
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
|
||||
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
|
||||
_msk->disable(F_L_CATVEN); // ...e disabilitato
|
||||
}
|
||||
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
|
||||
}
|
||||
|
||||
int ve2200(int argc, char* argv[]) {
|
||||
TCondizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Condizioni di vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
26
ve/ve2200.uml
Executable file
26
ve/ve2200.uml
Executable file
@ -0,0 +1,26 @@
|
||||
#include "ve2200.h"
|
||||
|
||||
PAGE "Condizioni di vendita " -1 -1 40 10
|
||||
|
||||
RADIOBUTTON F_TIPOCV 36
|
||||
BEGIN
|
||||
PROMPT 1 2 "Tipo di archivio "
|
||||
ITEM "L|Listini"
|
||||
ITEM "C|Contratti"
|
||||
ITEM "O|Offerte"
|
||||
END
|
||||
|
||||
BUTTON DLG_SELECT 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 "Selezione"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
33
ve/ve2200x.h
Executable file
33
ve/ve2200x.h
Executable file
@ -0,0 +1,33 @@
|
||||
|
||||
// campi comuni a tutti gli archivi
|
||||
#define F_TIPO 111
|
||||
#define F_COD 112
|
||||
#define F_DESCR 113
|
||||
#define F_CODVAL 114
|
||||
#define F_CAMBIO 115
|
||||
#define F_DATACAM 116
|
||||
#define F_VALIN 117
|
||||
#define F_VALFIN 118
|
||||
#define F_IMPLORDI 119
|
||||
#define F_GESTUM 120
|
||||
#define F_GESTSCAGL 121
|
||||
#define F_GESTSCO 122
|
||||
#define F_SCONST 123
|
||||
#define F_SEQRIC 124
|
||||
|
||||
// campi riservati ai listini
|
||||
#define F_L_CATVEN 131
|
||||
#define F_L_COD 132
|
||||
#define F_L_CODLISSUCC 133
|
||||
|
||||
// campi riservati ai contratti
|
||||
#define F_C_TIPOCF 141
|
||||
#define F_C_CODCF 142
|
||||
#define F_C_COD 143
|
||||
#define F_C_OBBLIG 144
|
||||
|
||||
// campi riservati alle offerte
|
||||
#define F_O_COD 151
|
||||
|
||||
// pulsante di lancio dell'edit delle righe
|
||||
#define BTN_RIGHE 161
|
241
ve/ve2200x.uml
Executable file
241
ve/ve2200x.uml
Executable file
@ -0,0 +1,241 @@
|
||||
#include <lffiles.h>
|
||||
#include "ve2200x.h"
|
||||
|
||||
TOOLBAR "" 0 20 60 2
|
||||
#include <toolbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Archivio condizioni di vendita " 0 0 70 20
|
||||
|
||||
STRING F_TIPO 1
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
FIELD LF_CONDV->TIPO
|
||||
FLAG "DU"
|
||||
KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato ai listini
|
||||
STRING F_L_CATVEN 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Cat. vendita "
|
||||
FIELD LF_CONDV->CATVEN
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE %CVE
|
||||
INPUT CODTAB F_L_CATVEN
|
||||
DISPLAY "Cat." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_L_CATVEN CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato ai contratti
|
||||
LIST F_C_TIPOCF 7
|
||||
BEGIN
|
||||
PROMPT 2 2 "Tipo "
|
||||
FIELD LF_CONDV->TIPOCF
|
||||
KEY 1
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornit."
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato ai contratti
|
||||
STRING F_C_CODCF 6
|
||||
BEGIN
|
||||
PROMPT 22 2 "Codice "
|
||||
FIELD LF_CONDV->CODCF
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_C_TIPOCF
|
||||
INPUT CODCF F_C_CODCF
|
||||
DISPLAY "C/F" TIPOCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_C_TIPOCF TIPOCF
|
||||
OUTPUT F_C_CODCF CODCF
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato ai listini
|
||||
STRING F_L_COD 3
|
||||
BEGIN
|
||||
PROMPT 2 4 "Codice listino "
|
||||
FIELD LF_CONDV->COD
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO SELECT
|
||||
INPUT CATVEN F_L_CATVEN
|
||||
INPUT COD F_L_COD
|
||||
DISPLAY "C.V." CATVEN
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_TIPO TIPO
|
||||
OUTPUT F_L_CATVEN CATVEN
|
||||
OUTPUT F_L_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato ai contratti
|
||||
NUMBER F_C_COD 3
|
||||
BEGIN
|
||||
PROMPT 2 4 "Numero contratto "
|
||||
FIELD LF_CONDV->COD
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO SELECT
|
||||
INPUT TIPOCF F_C_TIPOCF
|
||||
INPUT CODCF F_C_CODCF
|
||||
INPUT COD F_C_COD
|
||||
DISPLAY "C/F" TIPOCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Numero" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_TIPO TIPO
|
||||
OUTPUT F_C_TIPOCF TIPOCF
|
||||
OUTPUT F_C_CODCF CODCF
|
||||
OUTPUT F_C_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
// campo riservato alle offerte
|
||||
STRING F_O_COD 3
|
||||
BEGIN
|
||||
PROMPT 2 3 "Codice offerta "
|
||||
FIELD LF_CONDV->COD
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO SELECT
|
||||
INPUT COD F_O_COD
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_TIPO TIPO
|
||||
OUTPUT F_O_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 65 7
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
//FLAG "R"
|
||||
END
|
||||
|
||||
// bottone di lancio dell'applicazione delle righe
|
||||
BUTTON BTN_RIGHE 63 1
|
||||
BEGIN
|
||||
PROMPT 0 -1 "Editing delle righe di questa testata"
|
||||
MESSAGE K_F5
|
||||
END
|
||||
|
||||
STRING F_DESCR 50
|
||||
BEGIN
|
||||
PROMPT 2 7 "Descrizione "
|
||||
FIELD LF_CONDV->DESCR
|
||||
END
|
||||
|
||||
STRING F_CODVAL 5
|
||||
BEGIN
|
||||
PROMPT 2 9 "Valuta "
|
||||
FIELD LF_CONDV->CODVAL
|
||||
FLAG "U"
|
||||
USE %VAL
|
||||
INPUT CODTAB F_CODVAL
|
||||
DISPLAY "Valuta" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODVAL CODTAB
|
||||
MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM
|
||||
MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,F_DATACAM
|
||||
END
|
||||
|
||||
NUMBER F_CAMBIO 15 5
|
||||
BEGIN
|
||||
PROMPT 21 9 "Cambio "
|
||||
FIELD LF_CONDV->CAMBIO
|
||||
END
|
||||
|
||||
DATA F_DATACAM
|
||||
BEGIN
|
||||
PROMPT 49 9 "Data "
|
||||
FIELD LF_CONDV->DATACAM
|
||||
END
|
||||
|
||||
DATA F_VALIN
|
||||
BEGIN
|
||||
PROMPT 2 11 "Inizio validit… "
|
||||
FIELD LF_CONDV->VALIN
|
||||
END
|
||||
|
||||
DATA F_VALFIN
|
||||
BEGIN
|
||||
PROMPT 40 11 "Fine validit… "
|
||||
FIELD LF_CONDV->VALFIN
|
||||
END
|
||||
|
||||
BOOLEAN F_IMPLORDI
|
||||
BEGIN
|
||||
PROMPT 2 13 "Importi lordi"
|
||||
FIELD LF_CONDV->IMPLORDI
|
||||
END
|
||||
|
||||
BOOLEAN F_GESTUM
|
||||
BEGIN
|
||||
PROMPT 34 13 "Gestione unit… di misura"
|
||||
FIELD LF_CONDV->GESTUM
|
||||
END
|
||||
|
||||
BOOLEAN F_GESTSCAGL
|
||||
BEGIN
|
||||
PROMPT 2 14 "Gestione scaglioni"
|
||||
FIELD LF_CONDV->GESTSCAGL
|
||||
END
|
||||
|
||||
BOOLEAN F_GESTSCO
|
||||
BEGIN
|
||||
PROMPT 34 14 "Gestione sconti"
|
||||
FIELD LF_CONDV->GESTSCO
|
||||
END
|
||||
|
||||
BOOLEAN F_SCONST
|
||||
BEGIN
|
||||
PROMPT 2 15 "Gestione sconti standard"
|
||||
FIELD LF_CONDV->SCONST
|
||||
END
|
||||
|
||||
// campo riservato ai contratti
|
||||
BOOLEAN F_C_OBBLIG
|
||||
BEGIN
|
||||
PROMPT 34 15 "Contratto obbligatorio"
|
||||
FIELD LF_CONDV->OBBLIG
|
||||
END
|
||||
|
||||
STRING F_SEQRIC 3
|
||||
BEGIN
|
||||
PROMPT 2 17 "Sequenza ricerca "
|
||||
FIELD LF_CONDV->SEQRIC
|
||||
FLAG "U"
|
||||
END
|
||||
|
||||
// campo riservato ai listini
|
||||
STRING F_L_CODLISSUCC 3
|
||||
BEGIN
|
||||
PROMPT 33 17 "Codice listino succ. "
|
||||
FIELD LF_CONDV->CODLISSUCC
|
||||
FLAG "U"
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO SELECT
|
||||
INPUT CATVEN F_L_CATVEN SELECT
|
||||
INPUT COD F_L_CODLISSUCC
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_L_CODLISSUCC COD
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
504
ve/ve2300.cpp
504
ve/ve2300.cpp
@ -1,251 +1,253 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
|
||||
#include "ve2300.h"
|
||||
|
||||
|
||||
|
||||
class TRighe_condizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
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 void hide_and_show_codriga(TMask &); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
_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);
|
||||
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
||||
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
|
||||
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)
|
||||
_msk->set_handler(F_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
|
||||
hide_and_show_codriga(*_msk); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) {
|
||||
short id_campi[3]= { F_CODRIGA_A, F_CODRIGA_G, F_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
|
||||
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
|
||||
char tag_campo= m.get(F_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare
|
||||
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio
|
||||
TBit_array &_tohide= app()._tohide; // prende il riferimento all'array di campi da eliminare
|
||||
for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA
|
||||
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene...
|
||||
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking...
|
||||
m.show(id_campi[i]); // ...mostrato...
|
||||
_tohide.reset(id_campi[i]); // ...e rimosso dal vettore di eliminazione...
|
||||
} else { // ...mentre gli altri vengono...
|
||||
m.efield(id_campi[i]).check_type(CHECK_NONE); // ...disabilitati dal checking...
|
||||
m.hide(id_campi[i]); // ...nascosti...
|
||||
_tohide.set(id_campi[i]); // ...e aggiunti al vettore di eliminazione
|
||||
}
|
||||
}
|
||||
if (_rcondven != "C") { // se non stiamo lavorando sui contratti...
|
||||
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli...
|
||||
m.efield(F_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking...
|
||||
m.enable(F_LO_UM); // ...e abilitata...
|
||||
} else { // ...altrimenti, se è stata selezionata una riga non di articoli...
|
||||
m.efield(F_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking...
|
||||
m.disable(F_LO_UM); // ...e disabilitata
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) hide_and_show_codriga(fld.mask()); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
if ((k==K_TAB) && fld.get().not_empty()) {
|
||||
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
|
||||
if (!condv.get_bool("GESTUM")) {
|
||||
m.efield(F_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura"
|
||||
m.disable(F_LO_UM); // disabilita il campo "unità di misura"
|
||||
} else {
|
||||
m.efield(F_LO_UM).check_type(CHECK_REQUIRED); // abilita il checking sul campo "unità di misura"
|
||||
m.enable(F_LO_UM); // abilita il campo "unità di misura"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCAGL")) {
|
||||
m.efield(F_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione"
|
||||
m.disable(F_NSCAGL); // disabilita il campo "quantità limite scaglione"
|
||||
m.disable(F_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
} else {
|
||||
m.efield(F_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione"
|
||||
m.enable(F_NSCAGL); // abilita il campo "quantità limite scaglione"
|
||||
m.enable(F_QLIM); // abilita 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"
|
||||
} else {
|
||||
m.enable(F_SCONTO); // abilita il campo "sconto"
|
||||
m.enable(F_QOM); // abilita il campo "quantità art. omaggio"
|
||||
m.enable(F_QBASE); // abilita il campo "quantità base x sconto"
|
||||
m.enable(F_CODARTOM); // abilita il campo "codice articolo omaggio"
|
||||
m.enable(F_PROMAGGIO); // abilita il campo "prezzo omaggio"
|
||||
m.enable(F_UMOM); // abilita 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
|
||||
}
|
||||
}
|
||||
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
|
||||
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
|
||||
_msk->disable(F_L_CATVEN); // ...e disabilitato
|
||||
}
|
||||
_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;
|
||||
}
|
||||
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
|
||||
#include "ve2300.h"
|
||||
|
||||
|
||||
|
||||
class TRighe_condizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
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 void hide_and_show_codriga(TMask &); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
_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_R_C_TIPOCF); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_R_C_CODCF);
|
||||
_tohide.set(F_R_C_COD);
|
||||
_tohide.set(F_R_O_COD);
|
||||
_tohide.set(F_R_C_RICERCA);
|
||||
_tohide.set(F_R_O_RICERCA);
|
||||
_tohide.set(F_R_CO_CODLOTTO);
|
||||
_tohide.set(F_R_O_ARTES);
|
||||
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
||||
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
|
||||
set_search_field(F_R_L_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'C': // contratti
|
||||
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_R_L_COD);
|
||||
_tohide.set(F_R_O_COD);
|
||||
_tohide.set(F_R_LO_UM);
|
||||
_tohide.set(F_R_L_RICERCA);
|
||||
_tohide.set(F_R_O_RICERCA);
|
||||
_tohide.set(F_R_O_ARTES);
|
||||
set_search_field(F_R_C_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_R_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'O': // offerte
|
||||
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_R_C_TIPOCF);
|
||||
_tohide.set(F_R_C_CODCF);
|
||||
_tohide.set(F_R_L_COD);
|
||||
_tohide.set(F_R_C_COD);
|
||||
_tohide.set(F_R_L_RICERCA);
|
||||
_tohide.set(F_R_C_RICERCA);
|
||||
set_search_field(F_R_O_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_R_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)
|
||||
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
|
||||
hide_and_show_codriga(*_msk); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) {
|
||||
short id_campi[3]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
|
||||
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
|
||||
char tag_campo= m.get(F_R_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare
|
||||
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio
|
||||
TBit_array &_tohide= app()._tohide; // prende il riferimento all'array di campi da eliminare
|
||||
for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA
|
||||
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene...
|
||||
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking...
|
||||
m.show(id_campi[i]); // ...mostrato...
|
||||
_tohide.reset(id_campi[i]); // ...e rimosso dal vettore di eliminazione...
|
||||
} else { // ...mentre gli altri vengono...
|
||||
m.efield(id_campi[i]).check_type(CHECK_NONE); // ...disabilitati dal checking...
|
||||
m.hide(id_campi[i]); // ...nascosti...
|
||||
_tohide.set(id_campi[i]); // ...e aggiunti al vettore di eliminazione
|
||||
}
|
||||
}
|
||||
if (_rcondven != "C") { // se non stiamo lavorando sui contratti...
|
||||
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli...
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking...
|
||||
m.enable(F_R_LO_UM); // ...e abilitata...
|
||||
} else { // ...altrimenti, se è stata selezionata una riga non di articoli...
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking...
|
||||
m.disable(F_R_LO_UM); // ...e disabilitata
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) hide_and_show_codriga(fld.mask()); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
if ((k==K_TAB) && fld.get().not_empty()) {
|
||||
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_R_L_CATVEN));
|
||||
condv.put("COD", m.get(F_R_L_COD));
|
||||
break;
|
||||
case 'C': // riempie il resto della chiave dei contratti
|
||||
condv.put("TIPOCF", m.get(F_R_C_TIPOCF));
|
||||
condv.put("CODCF", m.get(F_R_C_CODCF));
|
||||
condv.put("COD", m.get(F_R_C_COD));
|
||||
break;
|
||||
case 'O': // riempie il resto della chiave delle offerte
|
||||
condv.put("COD", m.get(F_R_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
|
||||
if (!condv.get_bool("GESTUM")) {
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura"
|
||||
m.disable(F_R_LO_UM); // disabilita il campo "unità di misura"
|
||||
} else {
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // abilita il checking sul campo "unità di misura"
|
||||
m.enable(F_R_LO_UM); // abilita il campo "unità di misura"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCAGL")) {
|
||||
m.efield(F_R_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione"
|
||||
m.disable(F_R_NSCAGL); // disabilita il campo "quantità limite scaglione"
|
||||
m.disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
} else {
|
||||
m.efield(F_R_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione"
|
||||
m.enable(F_R_NSCAGL); // abilita il campo "quantità limite scaglione"
|
||||
m.enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCO")) {
|
||||
m.disable(F_R_SCONTO); // disabilita il campo "sconto"
|
||||
m.disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
|
||||
m.disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
|
||||
m.disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||
m.disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||
m.disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
|
||||
} else {
|
||||
m.enable(F_R_SCONTO); // abilita il campo "sconto"
|
||||
m.enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
|
||||
m.enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
|
||||
m.enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
|
||||
m.enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
|
||||
m.enable(F_R_UMOM); // abilita 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
|
||||
}
|
||||
}
|
||||
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
|
||||
_msk->efield(F_R_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
|
||||
_msk->disable(F_R_L_CATVEN); // ...e disabilitato
|
||||
}
|
||||
_msk->set(F_R_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;
|
||||
}
|
||||
|
||||
|
26
ve/ve2300.uml
Executable file
26
ve/ve2300.uml
Executable file
@ -0,0 +1,26 @@
|
||||
#include "ve2300.h"
|
||||
|
||||
PAGE "Righre condizioni di vendita " -1 -1 40 10
|
||||
|
||||
RADIOBUTTON F_TIPORCV 36
|
||||
BEGIN
|
||||
PROMPT 1 2 "Tipo di archivio "
|
||||
ITEM "L|Listini"
|
||||
ITEM "C|Contratti"
|
||||
ITEM "O|Offerte"
|
||||
END
|
||||
|
||||
BUTTON DLG_SELECT 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 "Selezione"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
37
ve/ve2300x.h
Executable file
37
ve/ve2300x.h
Executable file
@ -0,0 +1,37 @@
|
||||
|
||||
// campi comuni a tutti gli archivi
|
||||
#define F_R_TIPO 111
|
||||
#define F_R_TIPORIGA 112
|
||||
#define F_R_CODRIGA_A 113
|
||||
#define F_R_CODRIGA_G 114
|
||||
#define F_R_CODRIGA_R 115
|
||||
#define F_R_NSCAGL 116
|
||||
#define F_R_QLIM 117
|
||||
#define F_R_PREZZO 118
|
||||
#define F_R_SCONTO 119
|
||||
#define F_R_ADDIVA 120
|
||||
#define F_R_CODIVA 121
|
||||
#define F_R_PERCPROVV 122
|
||||
#define F_R_QOM 123
|
||||
#define F_R_QBASE 124
|
||||
#define F_R_CODARTOM 125
|
||||
#define F_R_PROMAGGIO 126
|
||||
#define F_R_UMOM 127
|
||||
|
||||
// campi riservati ai listini
|
||||
#define F_R_L_CATVEN 131
|
||||
#define F_R_L_COD 132
|
||||
#define F_R_LO_UM 133 // comune anche alle offerte
|
||||
#define F_R_L_RICERCA 134
|
||||
|
||||
// campi riservati ai contratti
|
||||
#define F_R_C_TIPOCF 141
|
||||
#define F_R_C_CODCF 142
|
||||
#define F_R_C_COD 143
|
||||
#define F_R_C_RICERCA 144
|
||||
#define F_R_CO_CODLOTTO 145 // comune anche alle offerte
|
||||
|
||||
// campi riservati alle offerte
|
||||
#define F_R_O_COD 151
|
||||
#define F_R_O_RICERCA 152
|
||||
#define F_R_O_ARTES 153
|
376
ve/ve2300x.uml
Executable file
376
ve/ve2300x.uml
Executable file
@ -0,0 +1,376 @@
|
||||
#include <lffiles.h>
|
||||
#include "ve2300x.h"
|
||||
|
||||
TOOLBAR "" 0 20 60 2
|
||||
#include <toolbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Archivio righe condiz. di vendita " 0 0 70 20
|
||||
|
||||
STRING F_R_TIPO 1
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
FIELD LF_RCONDV->TIPO
|
||||
FLAG "DU"
|
||||
KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_L_CATVEN 2 // campo riservato ai listini
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cat. vendita "
|
||||
FIELD LF_RCONDV->CATVEN
|
||||
FLAG "UP"
|
||||
KEY 1
|
||||
USE %CVE
|
||||
INPUT CODTAB F_R_L_CATVEN
|
||||
DISPLAY "Cat." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_R_L_CATVEN CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST F_R_C_TIPOCF 7 // campo riservato ai contratti
|
||||
BEGIN
|
||||
PROMPT 2 1 "Tipo "
|
||||
FIELD LF_RCONDV->TIPOCF
|
||||
FLAG "P"
|
||||
KEY 1
|
||||
ITEM "C|Cliente"
|
||||
ITEM "F|Fornit."
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_C_CODCF 6 // campo riservato ai contratti
|
||||
BEGIN
|
||||
PROMPT 22 1 "Codice "
|
||||
FIELD LF_RCONDV->CODCF
|
||||
FLAG "UP"
|
||||
KEY 1
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF F_R_C_TIPOCF
|
||||
INPUT CODCF F_R_C_CODCF
|
||||
DISPLAY "C/F" TIPOCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione sociale@50" RAGSOC
|
||||
OUTPUT F_R_C_TIPOCF TIPOCF
|
||||
OUTPUT F_R_C_CODCF CODCF
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_L_COD 3 // campo riservato ai listini
|
||||
BEGIN
|
||||
PROMPT 2 3 "Codice listino "
|
||||
FIELD LF_RCONDV->COD
|
||||
FLAG "UP"
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT CATVEN F_R_L_CATVEN
|
||||
INPUT COD F_R_L_COD
|
||||
DISPLAY "C.V." CATVEN
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_R_TIPO TIPO
|
||||
OUTPUT F_R_L_CATVEN CATVEN
|
||||
OUTPUT F_R_L_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER F_R_C_COD 3 // campo riservato ai contratti
|
||||
BEGIN
|
||||
PROMPT 2 3 "Numero contratto "
|
||||
FIELD LF_RCONDV->COD
|
||||
FLAG "P"
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT TIPOCF F_R_C_TIPOCF
|
||||
INPUT CODCF F_R_C_CODCF
|
||||
INPUT COD F_R_C_COD
|
||||
DISPLAY "C/F" TIPOCF
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Numero" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_R_TIPO TIPO
|
||||
OUTPUT F_R_C_TIPOCF TIPOCF
|
||||
OUTPUT F_R_C_CODCF CODCF
|
||||
OUTPUT F_R_C_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_O_COD 3 // campo riservato alle offerte
|
||||
BEGIN
|
||||
PROMPT 2 2 "Codice offerta "
|
||||
FIELD LF_RCONDV->COD
|
||||
FLAG "UP"
|
||||
KEY 1
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT COD F_R_O_COD
|
||||
DISPLAY "Codice" COD
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_R_TIPO TIPO
|
||||
OUTPUT F_R_O_COD COD
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST F_R_TIPORIGA 8
|
||||
BEGIN
|
||||
PROMPT 2 5 "Riga "
|
||||
FIELD LF_RCONDV->TIPORIGA
|
||||
FLAG "P"
|
||||
KEY 1
|
||||
ITEM "A|Articolo" // MESSAGE ENABLE,F_CODRIGA_A|SHOW,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R
|
||||
ITEM "G|Gr. merc." // MESSAGE ENABLE,F_CODRIGA_G|SHOW,F_CODRIGA_G|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R
|
||||
ITEM "R|Rag. fis." // MESSAGE ENABLE,F_CODRIGA_R|SHOW,F_CODRIGA_R|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G
|
||||
END
|
||||
|
||||
STRING F_R_CODRIGA_A 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
KEY 1
|
||||
USE LF_ANAGR
|
||||
INPUT CODART F_R_CODRIGA_A
|
||||
DISPLAY "Articolo@20" CODART
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_R_CODRIGA_A CODART
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_CODRIGA_G 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
KEY 1
|
||||
USE %GMC
|
||||
INPUT CODTAB F_R_CODRIGA_G
|
||||
DISPLAY "Gr. merc." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_R_CODRIGA_G CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
MESSAGE COPY,F_CODRIGA_A
|
||||
END
|
||||
|
||||
STRING F_R_CODRIGA_R 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
KEY 1
|
||||
USE %RFA
|
||||
INPUT CODTAB F_R_CODRIGA_R
|
||||
DISPLAY "Ragg. fisc." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_R_CODRIGA_R CODTAB
|
||||
CHECKTYPE REQUIRED
|
||||
MESSAGE COPY,F_CODRIGA_A
|
||||
END
|
||||
|
||||
STRING F_R_NSCAGL 1
|
||||
BEGIN
|
||||
PROMPT 2 7 "N.ro scaglione "
|
||||
FIELD LF_RCONDV->NSCAGL
|
||||
KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_LO_UM 2 // campo riservato a listini e offerte
|
||||
BEGIN
|
||||
PROMPT 21 7 "U.M. "
|
||||
FIELD LF_RCONDV->UM
|
||||
KEY 1
|
||||
USE LF_UMART KEY 2
|
||||
JOIN %UMS INTO CODTAB=UM
|
||||
INPUT CODART F_R_CODRIGA_A SELECT
|
||||
INPUT UM F_R_LO_UM
|
||||
DISPLAY "U.M." UM
|
||||
DISPLAY "Desccrizione@50" %UMS->S0
|
||||
OUTPUT F_R_LO_UM UM
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_R_L_RICERCA 1 // campo di aggancio per la ricerca sui listini, nascosto
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
FLAG "D"
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT CATVEN F_R_L_CATVEN SELECT
|
||||
INPUT COD F_R_L_COD SELECT
|
||||
INPUT TIPORIGA F_R_TIPORIGA
|
||||
INPUT CODRIGA F_R_CODRIGA_A
|
||||
INPUT UM F_R_LO_UM
|
||||
INPUT NSCAGL F_R_NSCAGL
|
||||
DISPLAY "Tipo" TIPORIGA
|
||||
DISPLAY "Codice@20" CODRIGA
|
||||
DISPLAY "U.M." UM
|
||||
DISPLAY "N.S." NSCAGL
|
||||
OUTPUT F_R_TIPORIGA TIPORIGA
|
||||
OUTPUT F_R_CODRIGA_A CODRIGA
|
||||
OUTPUT F_R_CODRIGA_G CODRIGA
|
||||
OUTPUT F_R_CODRIGA_R CODRIGA
|
||||
OUTPUT F_R_LO_UM UM
|
||||
OUTPUT F_R_NSCAGL NSCAGL
|
||||
END
|
||||
|
||||
STRING F_R_C_RICERCA 1 // campo di aggancio per la ricerca sui contratti, nascosto
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
FLAG "D"
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT TIPOCF F_R_C_TIPOCF SELECT
|
||||
INPUT CODCF F_R_C_CODCF SELECT
|
||||
INPUT COD F_R_C_COD SELECT
|
||||
INPUT TIPORIGA F_R_TIPORIGA
|
||||
INPUT CODRIGA F_R_CODRIGA_A
|
||||
INPUT NSCAGL F_R_NSCAGL
|
||||
DISPLAY "Tipo" TIPORIGA
|
||||
DISPLAY "Codice@20" CODRIGA
|
||||
DISPLAY "N.S." NSCAGL
|
||||
OUTPUT F_R_TIPORIGA TIPORIGA
|
||||
OUTPUT F_R_CODRIGA_A CODRIGA
|
||||
OUTPUT F_R_CODRIGA_G CODRIGA
|
||||
OUTPUT F_R_CODRIGA_R CODRIGA
|
||||
OUTPUT F_R_NSCAGL NSCAGL
|
||||
END
|
||||
|
||||
STRING F_R_O_RICERCA 1 // campo di aggancio per la ricerca sulle offerte, nascosto
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
FLAG "D"
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT COD F_R_O_COD SELECT
|
||||
INPUT TIPORIGA F_R_TIPORIGA
|
||||
INPUT CODRIGA F_R_CODRIGA_A
|
||||
INPUT UM F_R_LO_UM
|
||||
INPUT NSCAGL F_R_NSCAGL
|
||||
DISPLAY "Tipo" TIPORIGA
|
||||
DISPLAY "Codice@20" CODRIGA
|
||||
DISPLAY "U.M." UM
|
||||
DISPLAY "N.S." NSCAGL
|
||||
OUTPUT F_R_TIPORIGA TIPORIGA
|
||||
OUTPUT F_R_CODRIGA_A CODRIGA
|
||||
OUTPUT F_R_CODRIGA_G CODRIGA
|
||||
OUTPUT F_R_CODRIGA_R CODRIGA
|
||||
OUTPUT F_R_LO_UM UM
|
||||
OUTPUT F_R_NSCAGL NSCAGL
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 70 9 // fine della chiave
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
//FLAG "R"
|
||||
END
|
||||
|
||||
NUMBER F_R_QLIM 15 5
|
||||
BEGIN
|
||||
PROMPT 2 9 "Q.ta' limite scagl. "
|
||||
FIELD LF_RCONDV->QLIM
|
||||
END
|
||||
|
||||
NUMBER F_R_PREZZO 18 2
|
||||
BEGIN
|
||||
PROMPT 2 10 "Prezzo "
|
||||
FIELD LF_RCONDV->PREZZO
|
||||
END
|
||||
|
||||
STRING F_R_SCONTO 25
|
||||
BEGIN
|
||||
PROMPT 35 10 "Sconto "
|
||||
FIELD LF_RCONDV->SCONTO
|
||||
FLAG "U"
|
||||
END
|
||||
|
||||
BOOLEAN F_R_ADDIVA
|
||||
BEGIN
|
||||
PROMPT 2 11 "Addebito IVA"
|
||||
FIELD LF_RCONDV->ADDIVA
|
||||
MESSAGE TRUE ENABLE,F_CODIVA
|
||||
MESSAGE FALSE DISABLE,F_CODIVA
|
||||
END
|
||||
|
||||
STRING F_R_CODIVA 4
|
||||
BEGIN
|
||||
PROMPT 31 11 "Codice IVA "
|
||||
FIELD LF_RCONDV->CODIVA
|
||||
FLAG "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB F_R_CODIVA
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_R_CODIVA CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_R_PERCPROVV 5 2
|
||||
BEGIN
|
||||
PROMPT 2 12 "Provvigione % "
|
||||
FIELD LF_RCONDV->PERCPROVV
|
||||
NUM_EXPR (#F_PERCPROVV>=0)&&(#F_PERCPROVV<=100)
|
||||
WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100"
|
||||
END
|
||||
|
||||
NUMBER F_R_QOM 15 5
|
||||
BEGIN
|
||||
PROMPT 2 13 "Q.ta' sconto/omaggio "
|
||||
FIELD LF_RCONDV->QOM
|
||||
END
|
||||
|
||||
STRING F_R_UMOM 2
|
||||
BEGIN
|
||||
PROMPT 47 13 "U.M. q.ta' omaggio "
|
||||
FIELD LF_RCONDV->UMOM
|
||||
FLAG "U"
|
||||
USE LF_UMART KEY 2
|
||||
JOIN %UMS INTO CODTAB=UM
|
||||
INPUT CODART F_R_CODARTOM SELECT
|
||||
INPUT UM F_R_UMOM
|
||||
DISPLAY "U.M." UM
|
||||
DISPLAY "Desccrizione@50" %UMS->S0
|
||||
OUTPUT F_R_UMOM UM
|
||||
END
|
||||
|
||||
NUMBER F_R_QBASE 15 5
|
||||
BEGIN
|
||||
PROMPT 2 14 "Q.ta' base sconto "
|
||||
FIELD LF_RCONDV->QBASE
|
||||
END
|
||||
|
||||
STRING F_R_CODARTOM 20
|
||||
BEGIN
|
||||
PROMPT 2 15 "Codice art. omaggio "
|
||||
FIELD LF_RCONDV->CODARTOM
|
||||
FLAG "U"
|
||||
USE LF_ANAGR
|
||||
INPUT CODART F_R_CODARTOM
|
||||
DISPLAY "Articolo@20" CODART
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT F_R_CODARTOM CODART
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
NUMBER F_R_PROMAGGIO 18 2
|
||||
BEGIN
|
||||
PROMPT 2 16 "Prezzo omaggio "
|
||||
FIELD LF_RCONDV->PROMAGGIO
|
||||
END
|
||||
|
||||
STRINF F_R_CO_CODLOTTO 6
|
||||
BEGIN
|
||||
PROMPT 2 17 "Codice lotto "
|
||||
FIELD LF_RCONDV->CODLOTTO
|
||||
FLAG "U"
|
||||
END
|
||||
|
||||
BOOLEAN F_R_O_ARTES
|
||||
BEGIN
|
||||
PROMPT 47 17 "Art. in esaurimento"
|
||||
FIELD LF_RCONDV->ARTES
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user