diff --git a/ve/ve2100.cpp b/ve/ve2100.cpp index 55f02e21f..4929e1530 100755 --- a/ve/ve2100.cpp +++ b/ve/ve2100.cpp @@ -1,99 +1,99 @@ - -#include -#include - -#include "ve2100.h" - -#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } -#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); } - - - -class TTabelle_sconti: public TRelation_application { - TMask *_msk; // maschera principale - TRelation *_rel; // relazione principale - - char _sconti; // carattere che indica il tipo di tabella - bool _catven; // abilitazione della gestione della categoria di vendita - TString _gessco; // indicatore di abilitazione degli sconti incondizionati - - 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; } - -public: - TTabelle_sconti() {} - virtual ~TTabelle_sconti() {} -}; - - - -bool TTabelle_sconti::user_create() { - bool gotcha= FALSE; // booleano di avvenuta inizializzazione - short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati - int i; // indice di ciclo - - _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella - if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando - else { - TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella - if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera - } - TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta - switch (_sconti) { - case 'D': // sconti documento - _msk= new TMask("VE2100D"); // apre la maschera relativa - set_search_field(F_D_CODCAT); // setta il campo di ricerca - gotcha= TRUE; - break; - case 'R': // sconti di riga - _msk= new TMask("VE2100R"); // apre la maschera relativa - set_search_field(F_R_RICERCA); // setta il campo di ricerca - _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita - if (!_catven) KILL(F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo - gotcha= TRUE; - break; - case 'I': // sconti incondizionati - _gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti - if (_gessco=="A") { - _msk= new TMask("VE2100I"); // apre la maschera relativa - set_search_field(F_I_RICERCA); // setta il campo di ricerca - sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente - sci_k_id[1]= F_I_SCCLIENTI; - sci_k_id[2]= F_I_ZONE; - sci_k_id[3]= F_I_CONDPAG; - for (i=0; i<4; i++) { - if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato... - REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera... - gotcha= TRUE; // ...e viene settato il flag di ok - } else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera - } - _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita - if (!_catven) KILL(sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo - if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); - } else error_box("Gli sconti incondizionati non sono abilitati nella configurazione"); - break; - default: // messaggio di errore se si indica una tabella non valida - error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); - break; - } - if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) - return (gotcha); -} - -bool TTabelle_sconti::user_destroy() { - delete _rel; - delete _msk; - return TRUE; -} - - - -int ve2100(int argc, char* argv[]) { - TTabelle_sconti a; - - a.run(argc, argv, "Tabella sconti "); - return 0; -} + +#include +#include + +#include "ve2100.h" + +#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } +#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); } + + + +class TTabelle_sconti: public TRelation_application { + TMask *_msk; // maschera principale + TRelation *_rel; // relazione principale + + char _sconti; // carattere che indica il tipo di tabella + bool _catven; // abilitazione della gestione della categoria di vendita + TString _gessco; // indicatore di abilitazione degli sconti incondizionati + + 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; } + +public: + TTabelle_sconti() {} + virtual ~TTabelle_sconti() {} +}; + + + +bool TTabelle_sconti::user_create() { + bool gotcha= FALSE; // booleano di avvenuta inizializzazione + short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati + int i; // indice di ciclo + + _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella + if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando + else { + TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella + if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera + } + TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta + switch (_sconti) { + case 'D': // sconti documento + _msk= new TMask("VE2100D"); // apre la maschera relativa + set_search_field(F_D_CODCAT); // setta il campo di ricerca + gotcha= TRUE; + break; + case 'R': // sconti di riga + _msk= new TMask("VE2100R"); // apre la maschera relativa + set_search_field(F_R_RICERCA); // setta il campo di ricerca + _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita + if (!_catven) KILL(F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo + gotcha= TRUE; + break; + case 'I': // sconti incondizionati + _gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti + if (_gessco=="A") { + _msk= new TMask("VE2100I"); // apre la maschera relativa + set_search_field(F_I_RICERCA); // setta il campo di ricerca + sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente + sci_k_id[1]= F_I_SCCLIENTI; + sci_k_id[2]= F_I_ZONE; + sci_k_id[3]= F_I_CONDPAG; + for (i=0; i<4; i++) { + if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato... + REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera... + gotcha= TRUE; // ...e viene settato il flag di ok + } else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera + } + _catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita + if (!_catven) KILL(sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo + if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); + } else error_box("Gli sconti incondizionati non sono abilitati nella configurazione"); + break; + default: // messaggio di errore se si indica una tabella non valida + error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); + break; + } + if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) + return (gotcha); +} + +bool TTabelle_sconti::user_destroy() { + delete _rel; + delete _msk; + return TRUE; +} + + + +int ve2100(int argc, char* argv[]) { + TTabelle_sconti a; + + a.run(argc, argv, "Tabella sconti "); + return 0; +} diff --git a/ve/ve2100i.uml b/ve/ve2100i.uml index aaa0a1c33..2ff596041 100755 --- a/ve/ve2100i.uml +++ b/ve/ve2100i.uml @@ -1,139 +1,139 @@ -#include -#include "ve2100i.h" - -TOOLBAR "" 0 20 60 2 - #include -ENDPAGE - -PAGE "Archivio sconti incondizionati " 11 60 14 - -LISTA F_I_TIPO 1 -BEGIN - PROMPT 100 100 "" - FIELD LF_SCONTI->TIPO - FLAG "H" - ITEM "I|Sconti incondizionati" -END - -STRING F_I_RICERCA 1 -BEGIN - PROMPT 100 100 "" - FLAG "H" - USE LF_SCONTI - INPUT TIPO F_I_TIPO SELECT - INPUT CODCAT F_I_CATVEN - INPUT CODART[1,2] F_I_SCCLIENTI - INPUT CODART[3,4] F_I_ZONE - INPUT CODART[5,8] F_I_CONDPAG - DISPLAY "CV" CODCAT - DISPLAY "SC" CODART[1,2] - DISPLAY "ZN" CODART[3,4] - DISPLAY "C.P." CODART[5,8] - DISPLAY "Sconto@25" SCONTO - OUTPUT F_I_CATVEN CODCAT - OUTPUT F_I_SCCLIENTI CODART[1,2] - OUTPUT F_I_ZONE CODART[3,4] - OUTPUT F_I_CONDPAG CODART[5,8] - OUTPUT F_I_SCONTO SCONTO -END - -STRING F_I_CATVEN 2 -BEGIN - PROMPT 2 2 "Cat. vendite " - FIELD LF_SCONTI->CODCAT - FLAG "U" - KEY 1 - USE %CVE - INPUT CODTAB F_I_CATVEN - DISPLAY "Cat. vend." CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_I_CATVEN CODTAB - OUTPUT F_I_DESVEN S0 - CHECKTYPE REQUIRED -END - -STRING F_I_DESVEN 50 -BEGIN - PROMPT 24 2 "" - FLAG "D" -END - -STRING F_I_SCCLIENTI 2 -BEGIN - PROMPT 2 4 "Sconto cliente " - FIELD LF_SCONTI->CODART[1,2] - FLAG "U" - KEY 1 - USE LF_SCONTI - INPUT TIPO "D" SELECT - INPUT CODCAT F_I_SCCLIENTI - DISPLAY "Sc. Cliente" CODCAT - DISPLAY "Descrizione@50" DESCR - OUTPUT F_I_SCCLIENTI CODCAT - OUTPUT F_I_DESSCCLI DESCR - CHECKTYPE REQUIRED -END - -STRING F_I_DESSCCLI 50 -BEGIN - PROMPT 24 4 "" - FLAG "D" -END - -STRING F_I_ZONE 2 -BEGIN - PROMPT 2 6 "Zona " - FIELD LF_SCONTI->CODART[3,4] - FLAG "U" - KEY 1 - USE %ZON - INPUT CODTAB F_I_ZONE - DISPLAY "Zona" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_I_ZONE CODTAB - OUTPUT F_I_DESZONE S0 - CHECKTYPE REQUIRED -END - -STRING F_I_DESZONE 50 -BEGIN - PROMPT 24 6 "" - FLAG "D" -END - -STRING F_I_CONDPAG 4 -BEGIN - PROMPT 2 8 "Cond. pagam. " - FIELD LF_SCONTI->CODART[5,8] - FLAG "U" - KEY 1 - USE %CPG - INPUT CODTAB F_I_CONDPAG - DISPLAY "Cond. pag." CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_I_CONDPAG CODTAB - OUTPUT F_I_DESCONPAG S0 - CHECKTYPE REQUIRED -END - -STRING F_I_DESCONPAG 50 -BEGIN - PROMPT 24 8 "" - FLAG "D" -END - -GROUPBOX DLG_NULL 78 11 -BEGIN - PROMPT 0 0 "" - FLAG "R" -END - -STRING F_I_SCONTO 25 -BEGIN - PROMPT 2 12 "Sconto " - FIELD LF_SCONTI->SCONTO -END - -ENDPAGE - -ENDMASK +#include +#include "ve2100i.h" + +TOOLBAR "" 0 20 60 2 + #include +ENDPAGE + +PAGE "Archivio sconti incondizionati " 11 60 14 + +LISTA F_I_TIPO 1 +BEGIN + PROMPT 100 100 "" + FIELD LF_SCONTI->TIPO + FLAG "H" + ITEM "I|Sconti incondizionati" +END + +STRING F_I_RICERCA 1 +BEGIN + PROMPT 100 100 "" + FLAG "H" + USE LF_SCONTI + INPUT TIPO F_I_TIPO SELECT + INPUT CODCAT F_I_CATVEN + INPUT CODART[1,2] F_I_SCCLIENTI + INPUT CODART[3,4] F_I_ZONE + INPUT CODART[5,8] F_I_CONDPAG + DISPLAY "CV" CODCAT + DISPLAY "SC" CODART[1,2] + DISPLAY "ZN" CODART[3,4] + DISPLAY "C.P." CODART[5,8] + DISPLAY "Sconto@25" SCONTO + OUTPUT F_I_CATVEN CODCAT + OUTPUT F_I_SCCLIENTI CODART[1,2] + OUTPUT F_I_ZONE CODART[3,4] + OUTPUT F_I_CONDPAG CODART[5,8] + OUTPUT F_I_SCONTO SCONTO +END + +STRING F_I_CATVEN 2 +BEGIN + PROMPT 2 2 "Cat. vendite " + FIELD LF_SCONTI->CODCAT + FLAG "U" + KEY 1 + USE %CVE + INPUT CODTAB F_I_CATVEN + DISPLAY "Cat. vend." CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_I_CATVEN CODTAB + OUTPUT F_I_DESVEN S0 + CHECKTYPE REQUIRED +END + +STRING F_I_DESVEN 50 +BEGIN + PROMPT 24 2 "" + FLAG "D" +END + +STRING F_I_SCCLIENTI 2 +BEGIN + PROMPT 2 4 "Sconto cliente " + FIELD LF_SCONTI->CODART[1,2] + FLAG "U" + KEY 1 + USE LF_SCONTI + INPUT TIPO "D" SELECT + INPUT CODCAT F_I_SCCLIENTI + DISPLAY "Sc. Cliente" CODCAT + DISPLAY "Descrizione@50" DESCR + OUTPUT F_I_SCCLIENTI CODCAT + OUTPUT F_I_DESSCCLI DESCR + CHECKTYPE REQUIRED +END + +STRING F_I_DESSCCLI 50 +BEGIN + PROMPT 24 4 "" + FLAG "D" +END + +STRING F_I_ZONE 2 +BEGIN + PROMPT 2 6 "Zona " + FIELD LF_SCONTI->CODART[3,4] + FLAG "U" + KEY 1 + USE %ZON + INPUT CODTAB F_I_ZONE + DISPLAY "Zona" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_I_ZONE CODTAB + OUTPUT F_I_DESZONE S0 + CHECKTYPE REQUIRED +END + +STRING F_I_DESZONE 50 +BEGIN + PROMPT 24 6 "" + FLAG "D" +END + +STRING F_I_CONDPAG 4 +BEGIN + PROMPT 2 8 "Cond. pagam. " + FIELD LF_SCONTI->CODART[5,8] + FLAG "U" + KEY 1 + USE %CPG + INPUT CODTAB F_I_CONDPAG + DISPLAY "Cond. pag." CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_I_CONDPAG CODTAB + OUTPUT F_I_DESCONPAG S0 + CHECKTYPE REQUIRED +END + +STRING F_I_DESCONPAG 50 +BEGIN + PROMPT 24 8 "" + FLAG "D" +END + +GROUPBOX DLG_NULL 78 11 +BEGIN + PROMPT 0 0 "" + FLAG "R" +END + +STRING F_I_SCONTO 25 +BEGIN + PROMPT 2 12 "Sconto " + FIELD LF_SCONTI->SCONTO +END + +ENDPAGE + +ENDMASK diff --git a/ve/ve2300.cpp b/ve/ve2300.cpp index c34831418..28790db6e 100755 --- a/ve/ve2300.cpp +++ b/ve/ve2300.cpp @@ -1,251 +1,251 @@ - -#include -#include - -#include "ve2300.h" - -#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); } -#define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); } -#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } -#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); } - - - -class TRighe_condizioni_vendita: public TRelation_application { - TMask *_msk; // maschera principale - TRelation *_rel; // relazione principale - - TString16 _rcondven; // stringa che indica il tipo di archivio - bool _codlis_catven; // booleano di abilitazione del campo CATVEN - bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF - bool _gest_um; // variabile di abilitazione delle unità di misura - - virtual bool user_create(); - virtual bool user_destroy(); - virtual TMask *get_mask(int) { return _msk; } // punto d'aggancio tra la maschera della rel.app. e la maschera principale dell'applicazione - virtual bool changing_mask(int) { return FALSE; } // ritorna il flag di cambio maschera a seconda dei modi di funzionamento, in questa applicazione la maschera è una sola quindi il flag è FALSE - virtual bool changing_keys() const { return TRUE; } // ritorna il flag di rigenerazione della lista delle chiavi ad ogni find(), in questa applicazione le chiavi cambiano continuamente quindi il flag è TRUE - virtual TRelation *get_relation() const { return _rel; } // punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione - - static void hide_and_show_codriga(void); // 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 - -public: - 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"); - TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente - switch (_rcondven[0]) { - case 'L': // listini - DESTROY(F_R_C_TIPOCF); // settaggio dei campi da eliminare... - DESTROY(F_R_C_CODCF); - DESTROY(F_R_C_COD); - DESTROY(F_R_O_COD); - _msk->hide(F_R_C_DESCF); - _msk->hide(F_R_C_DES); - _msk->hide(F_R_O_DES); - _msk->hide(F_R_C_RICERCA); - _msk->hide(F_R_O_RICERCA); - // _msk->hide(F_R_CO_CODLOTTO); - _msk->hide(F_R_O_ARTES); - _codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN - if (!_codlis_catven) KILL(F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita - 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 - DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare... - DESTROY(F_R_L_COD); - DESTROY(F_R_O_COD); - _msk->hide(F_R_L_DESVEN); - _msk->hide(F_R_L_DES); - _msk->hide(F_R_O_DES); - _msk->hide(F_R_L_RICERCA); - _msk->hide(F_R_O_RICERCA); - _msk->hide(F_R_O_ARTES); - _codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF - if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config. - KILL(F_R_C_TIPOCF); - KILL(F_R_C_CODCF); - } - 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 - DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare... - DESTROY(F_R_C_TIPOCF); - DESTROY(F_R_C_CODCF); - DESTROY(F_R_L_COD); - DESTROY(F_R_C_COD); - _msk->hide(F_R_C_DESCF); - _msk->hide(F_R_L_DESVEN); - _msk->hide(F_R_L_DES); - _msk->hide(F_R_C_DES); - _msk->hide(F_R_L_RICERCA); - _msk->hide(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(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio - _msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga - _gest_um= TRUE; // abilita la gestione delle unità di misura (di default) - hide_and_show_codriga(); // 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 *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione - if (_msk->query_mode()) { // se la maschera è in modo query procede con i controlli... - short id_campi_1[4]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_S, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione - short id_campi_2[4]= { F_R_DESRIGA_A, F_R_DESRIGA_G, F_R_DESRIGA_S, F_R_DESRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione - char tag_campi[4]= { 'A', 'G', 'S', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione - bool &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura - TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio - char tag_campo= toupper(_msk->get(F_R_TIPORIGA)[0]); // prende il tag del campo da abilitare in TIPORIGA - for (int i=0; i<4; i++) { // ciclo sui quattro campi CODRIGA - if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene reso visibile - CREATE(id_campi_1[i]); - _msk->show(id_campi_2[i]); - } else { // i campi non corrispondenti al tag vengono resi invisibili - DESTROY(id_campi_1[i]); - _msk->hide(id_campi_2[i]); - } - } - if (_gest_um && (tag_campo=='A')) { REVIVE(F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo... - else { KILL(F_R_UM); } // ...altrimenti viene disattivato - } -} - -bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) { - if (k==K_SPACE) hide_and_show_codriga(); // 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()) { - bool &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura - TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio - TMask *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione - 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", _msk->get(F_R_L_CATVEN)); - condv.put("COD", _msk->get(F_R_L_COD)); - break; - case 'C': // riempie il resto della chiave dei contratti - condv.put("TIPOCF", _msk->get(F_R_C_TIPOCF)); - condv.put("CODCF", _msk->get(F_R_C_CODCF)); - condv.put("COD", _msk->get(F_R_C_COD)); - break; - case 'O': // riempie il resto della chiave delle offerte - condv.put("COD", _msk->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 - _gest_um= condv.get_bool("GESTUM"); // legge lo stato di abilitazione della gestione delle unità di misura - hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura" - if (!condv.get_bool("GESTSCAGL")) { - KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione" - _msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione" - } else { - REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione" - _msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione" - } - if (condv.get_bool("SCONST") || condv.get_bool("GESTSCO")) _msk->enable(F_R_SCONTO); // abilita il campo "sconto" - else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto" - if (!condv.get_bool("GESTSCO")) { - _msk->disable(F_R_QOM); // disabilita il campo "quantità art. omaggio" - _msk->disable(F_R_QBASE); // disabilita il campo "quantità base x sconto" - _msk->disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio" - _msk->disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio" - _msk->disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio" - } else { - _msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio" - _msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto" - _msk->enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio" - _msk->enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio" - _msk->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 -} - - - -int ve2300(int argc, char* argv[]) { - TRighe_condizioni_vendita a; - - a.run(argc, argv, "Righe condizioni vendita "); - return 0; -} - + +#include +#include + +#include "ve2300.h" + +#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); } +#define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); } +#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); } +#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); } + + + +class TRighe_condizioni_vendita: public TRelation_application { + TMask *_msk; // maschera principale + TRelation *_rel; // relazione principale + + TString16 _rcondven; // stringa che indica il tipo di archivio + bool _codlis_catven; // booleano di abilitazione del campo CATVEN + bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF + bool _gest_um; // variabile di abilitazione delle unità di misura + + virtual bool user_create(); + virtual bool user_destroy(); + virtual TMask *get_mask(int) { return _msk; } // punto d'aggancio tra la maschera della rel.app. e la maschera principale dell'applicazione + virtual bool changing_mask(int) { return FALSE; } // ritorna il flag di cambio maschera a seconda dei modi di funzionamento, in questa applicazione la maschera è una sola quindi il flag è FALSE + virtual bool changing_keys() const { return TRUE; } // ritorna il flag di rigenerazione della lista delle chiavi ad ogni find(), in questa applicazione le chiavi cambiano continuamente quindi il flag è TRUE + virtual TRelation *get_relation() const { return _rel; } // punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione + + static void hide_and_show_codriga(void); // 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 + +public: + 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"); + TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente + switch (_rcondven[0]) { + case 'L': // listini + DESTROY(F_R_C_TIPOCF); // settaggio dei campi da eliminare... + DESTROY(F_R_C_CODCF); + DESTROY(F_R_C_COD); + DESTROY(F_R_O_COD); + _msk->hide(F_R_C_DESCF); + _msk->hide(F_R_C_DES); + _msk->hide(F_R_O_DES); + _msk->hide(F_R_C_RICERCA); + _msk->hide(F_R_O_RICERCA); + // _msk->hide(F_R_CO_CODLOTTO); + _msk->hide(F_R_O_ARTES); + _codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN + if (!_codlis_catven) KILL(F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita + 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 + DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare... + DESTROY(F_R_L_COD); + DESTROY(F_R_O_COD); + _msk->hide(F_R_L_DESVEN); + _msk->hide(F_R_L_DES); + _msk->hide(F_R_O_DES); + _msk->hide(F_R_L_RICERCA); + _msk->hide(F_R_O_RICERCA); + _msk->hide(F_R_O_ARTES); + _codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF + if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config. + KILL(F_R_C_TIPOCF); + KILL(F_R_C_CODCF); + } + 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 + DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare... + DESTROY(F_R_C_TIPOCF); + DESTROY(F_R_C_CODCF); + DESTROY(F_R_L_COD); + DESTROY(F_R_C_COD); + _msk->hide(F_R_C_DESCF); + _msk->hide(F_R_L_DESVEN); + _msk->hide(F_R_L_DES); + _msk->hide(F_R_C_DES); + _msk->hide(F_R_L_RICERCA); + _msk->hide(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(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio + _msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga + _gest_um= TRUE; // abilita la gestione delle unità di misura (di default) + hide_and_show_codriga(); // 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 *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione + if (_msk->query_mode()) { // se la maschera è in modo query procede con i controlli... + short id_campi_1[4]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_S, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione + short id_campi_2[4]= { F_R_DESRIGA_A, F_R_DESRIGA_G, F_R_DESRIGA_S, F_R_DESRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione + char tag_campi[4]= { 'A', 'G', 'S', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione + bool &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura + TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio + char tag_campo= toupper(_msk->get(F_R_TIPORIGA)[0]); // prende il tag del campo da abilitare in TIPORIGA + for (int i=0; i<4; i++) { // ciclo sui quattro campi CODRIGA + if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene reso visibile + CREATE(id_campi_1[i]); + _msk->show(id_campi_2[i]); + } else { // i campi non corrispondenti al tag vengono resi invisibili + DESTROY(id_campi_1[i]); + _msk->hide(id_campi_2[i]); + } + } + if (_gest_um && (tag_campo=='A')) { REVIVE(F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo... + else { KILL(F_R_UM); } // ...altrimenti viene disattivato + } +} + +bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) { + if (k==K_SPACE) hide_and_show_codriga(); // 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()) { + bool &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura + TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio + TMask *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione + 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", _msk->get(F_R_L_CATVEN)); + condv.put("COD", _msk->get(F_R_L_COD)); + break; + case 'C': // riempie il resto della chiave dei contratti + condv.put("TIPOCF", _msk->get(F_R_C_TIPOCF)); + condv.put("CODCF", _msk->get(F_R_C_CODCF)); + condv.put("COD", _msk->get(F_R_C_COD)); + break; + case 'O': // riempie il resto della chiave delle offerte + condv.put("COD", _msk->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 + _gest_um= condv.get_bool("GESTUM"); // legge lo stato di abilitazione della gestione delle unità di misura + hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura" + if (!condv.get_bool("GESTSCAGL")) { + KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione" + _msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione" + } else { + REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione" + _msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione" + } + if (condv.get_bool("SCONST") || condv.get_bool("GESTSCO")) _msk->enable(F_R_SCONTO); // abilita il campo "sconto" + else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto" + if (!condv.get_bool("GESTSCO")) { + _msk->disable(F_R_QOM); // disabilita il campo "quantità art. omaggio" + _msk->disable(F_R_QBASE); // disabilita il campo "quantità base x sconto" + _msk->disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio" + _msk->disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio" + _msk->disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio" + } else { + _msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio" + _msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto" + _msk->enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio" + _msk->enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio" + _msk->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 +} + + + +int ve2300(int argc, char* argv[]) { + TRighe_condizioni_vendita a; + + a.run(argc, argv, "Righe condizioni vendita "); + return 0; +} + diff --git a/ve/ve3.cpp b/ve/ve3.cpp index 891e82967..53aae07af 100755 --- a/ve/ve3.cpp +++ b/ve/ve3.cpp @@ -1,30 +1,30 @@ - -#include -#include - -extern int ve3100(int argc, char **argv); // stampa tabelle sconti (di riga/di documento/incondizionati) -extern int ve3200(int argc, char **argv); // stampa testate listini/contratti/offerte -extern int ve3400(int argc, char **argv); // stampa 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= ve3100(argc, argv); - break; - case 1: - rt= ve3200(argc, argv); - break; - case 3: - rt= ve3400(argc, argv); - break; - default: - error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 3]", argv[0]); - break; - } - return (rt); -} + +#include +#include + +extern int ve3100(int argc, char **argv); // stampa tabelle sconti (di riga/di documento/incondizionati) +extern int ve3200(int argc, char **argv); // stampa testate listini/contratti/offerte +extern int ve3400(int argc, char **argv); // stampa 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= ve3100(argc, argv); + break; + case 1: + rt= ve3200(argc, argv); + break; + case 3: + rt= ve3400(argc, argv); + break; + default: + error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 3]", argv[0]); + break; + } + return (rt); +} diff --git a/ve/ve3200.cpp b/ve/ve3200.cpp index 7b750751a..797e38d69 100755 --- a/ve/ve3200.cpp +++ b/ve/ve3200.cpp @@ -1,374 +1,374 @@ - -#include -#include -#include -#include -#include - -#include "veconf.h" -#include "ve3200.h" - - - -#define RCONDV_APP "ve2 -2" - -#define DESTROY(x) { mask.field(x).reset_key(1); mask.hide(x); } -#define KILL(x) { mask.field(x).reset_key(1); mask.disable(x); } - -#define CVE 201 -#define VAL 202 -#define UMS1 203 -#define UMS2 204 -#define GMC1 205 -#define GMC2 206 -#define RFA 207 -#define ART1 208 -#define ART2 209 - - - -class TStampa_condizioni_vendita: public TPrint_application { - TRelation *_rel; // relazione principale - TString16 _condven; // stringa che indica il tipo di archivio - bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini - bool _codcon_codcf; // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti - bool _listval; // booleano di abilitazione della stampa dei listini in valuta - bool _testacomp, _righecomp; // booleani di selezione della stampa completa per testata e righe; - bool _testastamp; // booleano di testata completa già stampata - bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi -//int _rcondv_link_id; // id del link ipertestuale all'anagrafica di magazzino -protected: - virtual bool user_create(void); - virtual bool user_destroy(void); - virtual bool set_print(int); - virtual void set_page(int, int); - virtual void preprocess_header(void); - virtual void preprocess_footer(void); -//virtual void process_link(int, const char *); -}; - - - -bool TStampa_condizioni_vendita::user_create() { - bool gotcha= FALSE; // booleano di avvenuta inizializzazione - int indice; // indice delle variabili di configurazione per le abilitazioni - _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("ve3200"); // 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 - TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente - switch (_condven[0]) { - case 'L': // listini - indice= A_LISTINI; // setta l'indice dell'archivio listini - if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato - else { - _codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita - gotcha= TRUE; - } - break; - case 'C': // contratti - indice= A_CONTRATTI; // setta l'indice dell'archivio contratti - if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio contratti sia abilitato - else { - _codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita - gotcha= TRUE; - } - break; - case 'O': // offerte - indice= A_OFFERTE; // setta l'indice dell'archivio offerte - if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio offerte sia abilitato - else 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 - _gest_um= prassid.get_bool("GESUM", NULL, indice); // setta il booleano di abilitazione delle unità di misura - _gest_sca= prassid.get_bool("GESSCA", NULL, indice); // setta il booleano di abilitazione degli scaglioni - _gest_so= prassid.get_bool("GESSO", NULL, indice); // setta il booleano di abilitazione degli sconti/omaggi - _gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione della gestione delle valute - _rel= new TRelation(LF_RCONDV); // crea la relazione principale - _rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1); - _rel->add(LF_ANAGR, "CODART==CODARTOM", 1, LF_RCONDV, ART2); - _rel->add("%GMC", "CODTAB[1,3]==CODRIGA", 1, LF_RCONDV, GMC1); - _rel->add("%GMC", "CODTAB[4,5]==CODRIGA", 1, LF_RCONDV, GMC2); - _rel->add("%RFA", "CODTAB==CODRIGA", 1, LF_RCONDV, RFA); - _rel->add(LF_CONDV, "TIPO==TIPO|CATVEN==CATVEN|TIPOCF==TIPOCF|CODCF==CODCF|COD==COD"); - _rel->add("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE); - _rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV); - _rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL); - _rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1); - _rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2); - add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa - add_file(LF_RCONDV); // notifica il file delle righe alla stampa - enable_print_menu(); // abilita il menù di stampa - enable_setprint_menu(); // abilita il menù di settaggio della stampa - } - return (gotcha); -} - -bool TStampa_condizioni_vendita::user_destroy() { - delete _rel; // distrugge la relazione principale - return TRUE; -} - -bool TStampa_condizioni_vendita::set_print(int) { - TMask mask("ve3200x"); - mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio - switch (_condven[0]) { - case 'L': // listini - DESTROY(F_C_COD); // eliminazione campi di altri archivi - DESTROY(F_C_TIPOCF); - DESTROY(F_C_CODCF); - DESTROY(F_O_COD); - if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita - if (!_gest_val) KILL(F_L_LISTVALUTA); // disabilita condizionalmente la gestione delle valute - break; - case 'C': // contratti - DESTROY(F_L_COD); // settaggio dei campi da eliminare - DESTROY(F_L_CATVEN); - DESTROY(F_L_LISTVALUTA); - DESTROY(F_O_COD); - if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori - KILL(F_C_TIPOCF); - KILL(F_C_CODCF); - } - break; - case 'O': // offerte - DESTROY(F_L_COD); // settaggio dei campi da eliminare - DESTROY(F_L_CATVEN); - DESTROY(F_L_LISTVALUTA); - DESTROY(F_C_TIPOCF); - DESTROY(F_C_CODCF); - DESTROY(F_C_COD); - break; - } - if (mask.run()== K_ENTER) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore - _testastamp= FALSE; // azzera il flag di testa già stampata - _listval= mask.get_bool(F_L_LISTVALUTA); // legge lo stato del checkbox di abilitazione dei listini in valuta - _testacomp= mask.get_bool(F_TESTACOMP); // legge l'abilitazione della stampa completa della testata - _righecomp= mask.get_bool(F_RIGHECOMP); // legge l'abilitazione della stampa completa delle righe - TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale - TRectype da(rcondv.curr()); // prepara il record di inizio regione - da.zero(); - da.put("TIPO", _condven); - switch (_condven[0]) { // impostazione della chiave della testata - case 'L': // listini - if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN)); - else da.blank("CATVEN"); // riempie il campo di blank se non è gestito - da.blank("TIPOCF"); // i campi non gestiti vengono riempiti di blank - da.blank("CODCF"); - da.put("COD", mask.get(F_L_COD)); - break; - case 'C': // contratti - da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank - if (_codcon_codcf) { - da.put("TIPOCF", mask.get(F_C_TIPOCF)); - da.put("CODCF", mask.get(F_C_CODCF)); - } else { - da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti - da.blank("CODCF"); - } - da.put("COD", mask.get(F_C_COD)); - break; - case 'O': // offerte - da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank - da.blank("TIPOCF"); - da.blank("CODCF"); - da.put("COD", mask.get(F_O_COD)); - break; - } - TRectype a(da); // prepara il record di fine regione - if (!(mask.get_bool(F_TUTTERIGHE))) { // setta il filtro sulle righe solo se non è stato selezionato il flag di "tutte le righe" - da.put("TIPORIGA", mask.get(F_TIPORIGHE)); - da.put("CODRIGA", mask.get(F_DARIGA_A)); - a.put("TIPORIGA", mask.get(F_TIPORIGHE)); - a.put("CODRIGA", mask.get(F_ARIGA_A)); - } - current_cursor()->setregion(da, a); // setta la regione sul cursore - force_setpage(); // forza il lancio della set_page() ad ogni record del file da stampare - disable_links(); // disabilita tutti i link ipertestuali -// _rcondv_link_id= enable_link("Collegamento a righe condizioni di vendita", 'g'); // abilita il collegamento - return TRUE; - } else return FALSE; -} - -/* 1 1 1 1 - 1 2 3 4 5 6 7 8 9 0 1 2 3 -123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 -CF CODCF CV COD DESCR VALIN VALFIN IL UM SC SO ST OB SUC SEQ -. ...... .. ... .................................................. ..-..-.. ..-..-.. . . . . . . ... ... -CVA CAMBIO DATACAM -... ...............,..... ..-..-.. -*/ - -/* 1 1 1 1 - 1 2 3 4 5 6 7 8 9 0 1 2 3 -123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 -T CODRIGA UM S QLIM PREZZO SCONTO A CIVA PERCPROV -. .................... .. . ...............,..... ..................,.. ......................... . .... .....,.. -UO QOM QBASE CODARTOM PROMAGGIO CODLOT E -.. ...............,..... ...............,..... .................... ..................,.. ...... . -*/ - -void TStampa_condizioni_vendita::preprocess_header() { - reset_header(); // l'header viene resettato - int i= 1; // contatore delle linee - const long firm= get_firm(); // legge l'id della ditta corrente - TLocalisamfile ditte(LF_NDITTE); // apre il file ditte - ditte.zero(); // vuota il record - ditte.put("CODDITTA", firm); // riempie la chiave - if (ditte.read()== NOERR) { // se il record della ditta viene trovato viene settato l'header - const TString &s= ditte.get("RAGSOC"); // legge la ragione sociale della ditta - set_header(i, "@1gDitta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header - } - TLocalisamfile &condv= current_cursor()->file(LF_CONDV); - i+=2; // stampa breve della testata, occupa almeno due linee - set_header(i-1, "@14gCod @18gDescrizione @69gVal. dal @78gal @87gIL @90gUM @93gSC @96gSO @99gST @109gSeq"); // setta l'header del codice, della descrizione, della validità, dei booleani, ecc. - set_header(i, "@14g%3s @18g%s @69g%s @78g%s @87g%s @90g%s @93g%s @96g%s @99g%s @109g%s", - (const char *)(condv.sget("COD")), (const char *)(condv.sget("DESCR")), (const char *)(condv.sget("VALIN")), - (const char *)(condv.sget("VALFIN")), (const char *)(condv.sget("IMPLORDI")), (const char *)(condv.sget("GESTUM")), - (const char *)(condv.sget("GESTSCAGL")), (const char *)(condv.sget("GESTSCO")), (const char *)(condv.sget("SCONST")), - (const char *)(condv.sget("SEQRIC"))); // codice, descriz., validità e booleani - if ((_condven=="L") && _codlis_catven) { // siamo sui listini? - set_header(i-1, "@11gCV"); // setta l'header della categoria di vendita - set_header(i, "@11g%s", (const char *)(condv.sget("CATVEN"))); // categoria di vendita - } - if (_condven=="C") { // siamo sui contratti? - if (_codcon_codcf) { // è abilitato il codice cliente/fornitore? - set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori - set_header(i, "@1g%s @4g%6s", (const char *)(condv.sget("TIPOCF")), (const char *)(condv.sget("CODCF"))); // cliente/fornitore - } - set_header(i-1, "@102gOB"); // setta l'header di contratto obbligatorio - set_header(i, "@102g%s", (const char *)(condv.sget("OBBLIG"))); // booleano - } - if (_condven=="L") { // siamo su listini? - set_header(i-1, "@105gSuc"); // setta l'header per il codice di listino successivo - set_header(i, "@105g%3s", (const char *)(condv.sget("CODLISSUCC"))); // codice successivo - } - if (_gest_val) { // c'è la gestione della valuta? - i+=2; // occupa altre due linee - set_header(i-1, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione - set_header(i, "@1g%s @5g%21s @27g%s", (const char *)condv.sget("CODVAL"), (const char *)condv.sget("CAMBIO"), (const char *)condv.sget("DATACAM")); // cambio e valuta - } - set_header(++i, ""); // salta una riga - if (!_righecomp) { // impostazione dell'header delle righe se non c'è la stampa esaustiva - set_header(++i, "@1gT @3gCodice riga @27gS @29gQuantita' limite @51gPrezzo @73gSconto @99gA @101gIVA @106gProvvig."); // setta l'header della chiave, della quantità limite e del prezzo - if ((_condven=="L") || (_condven=="O")) set_header(i, "@24gUM"); // setta l'header dell'unità di misura - set_header(++i, "@1gUMO @5gQuantita' omaggio @27gQuantita' base @49gCod. art. omagg. @70gPrezzo omaggio"); // setta l'header dello sconto/omaggio - if ((_condven=="C") || (_condven=="O")) set_header(i, "@92gLotto"); // setta l'header del lotto - if (_condven=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento - } - set_header(++i, ""); // aggiunge due linee vuote - set_header(++i, ""); -} - -void TStampa_condizioni_vendita::preprocess_footer() { - reset_footer(); - int i= 1; // indice di linea - set_footer(i, ""); // salta una linea - set_footer(++i, "@125gPag @#"); // l'unica linea del footer contiene il numero di pagina -} - -void TStampa_condizioni_vendita::set_page(int file, int) { - if (file== LF_RCONDV) { // se il file in stampa non è il file principale non c'è nulla da fare - int i= 0; // indice di riga - if ((printer().getcurrentpage()==1) && _testacomp && (!_testastamp)) { // stampa della testata in forma completa - if ((_condven=="L") && _codlis_catven) set_row(++i, "Cat. di vendita: @2s @50s", FLD(LF_CONDV, "CATVEN"), FLD(-CVE, "S0")); - if ((_condven=="C") && _codcon_codcf) set_row(++i, "Cliente/fornitore: @1s @6s @50s", FLD(LF_CONDV, "TIPOCF"), FLD(LF_CONDV, "CODCF"), FLD(LF_CLIFO, "RAGSOC")); - set_row(++i, "Codice: @3s @50s", FLD(LF_CONDV, "COD"), FLD(LF_CONDV, "DESCR")); - if (_gest_val) { - set_row(++i, "Valuta: @3s @50s", FLD(LF_CONDV, "CODVAL"), FLD(-VAL, "S0")); - set_row(++i, "Cambio: @15.5n (@d)", FLD(LF_CONDV, "CAMBIO"), FLD(LF_CONDV, "DATACAM")); - } - set_row(++i, "Validità: dal @d al @d", FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN")); - set_row(++i, "Importi lordi: @f", FLD(LF_CONDV, "IMPLORDI")); - set_row(++i, "Gestione unità di misura: @f", FLD(LF_CONDV, "GESTUM")); - set_row(++i, "Gestione scaglioni: @f", FLD(LF_CONDV, "GESTSCAGL")); - set_row(++i, "Gestione sconti: @f", FLD(LF_CONDV, "GESTSCO")); - set_row(++i, "Gestione sconti standard: @f", FLD(LF_CONDV, "SCONST")); - if (_condven=="C") set_row(++i, "Contratto obbligatorio: @f", FLD(LF_CONDV, "OBBLIG")); - if (_condven=="L") set_row(++i, "Codice listino successivo: @3s", FLD(LF_CONDV, "CODLISSUCC")); - set_row(++i, "Sequenza di ricerca: @4s", FLD(LF_CONDV, "SEQRIC")); - set_row(++i, ""); - set_row(++i, ""); - _testastamp= TRUE; - } - if (_righecomp) { // stampa della riga in forma completa - TLocalisamfile &rcondv= current_cursor()->file(); - TLocalisamfile &condv= current_cursor()->file(LF_CONDV); - TString tiporiga= rcondv.get("TIPORIGA"); - switch (tiporiga[0]) { - case 'A': - set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); - set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR")); - break; - case 'G': - set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); - set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0")); - break; - case 'S': - set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); - set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0")); - break; - case 'R': - set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); - set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0")); - break; - } - if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura: @2s @50s", FLD(LF_RCONDV, "UM"), FLD(-UMS1, "S0")); - if (condv.get_bool("GESTSCAGL")) { - set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL")); - set_row(++i, "Quantità limite scaglione: @15.5n", FLD(LF_RCONDV, "QLIM")); - } - set_row(++i, "Prezzo: @18.2n", FLD(LF_RCONDV, "PREZZO")); - set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO")); - set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA")); - set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA")); - set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV")); - if (condv.get_bool("GESTSCO")) { - set_row(++i, "Quantità merce omaggio: @15.5n", FLD(LF_RCONDV, "QOM")); - set_row(++i, "Quantità base: @15.5n", FLD(LF_RCONDV, "QBASE")); - set_row(++i, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR")); - set_row(++i, "Prezzo omaggio: @18.2n", FLD(LF_RCONDV, "PROMAGGIO")); - if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura quantità omaggio: @2s @50s", FLD(LF_RCONDV, "UMOM"), FLD(-UMS2, "S0")); - } - // if ((_condven=="C") || (_condven=="O")) set_row(++i, "Codice lotto: @6s", FLD(LF_RCONDV, "CODLOTTO")); - if (_condven=="O") set_row(++i, "Articolo in esaurimento: @f", FLD(LF_RCONDV, "ARTES")); - set_row(++i, ""); // salta una riga - } else { // stampa della riga in forma abbreviata - set_row(++i, "@1g@1s @3g@20s @27g@1s @29g@15.5n @51g@18.2n @73g@25s @99g@1s @101g@4s @106g@5.2n", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"), FLD(LF_RCONDV, "NSCAGL"), FLD(LF_RCONDV, "QLIM"), FLD(LF_RCONDV, "PREZZO"), - FLD(LF_RCONDV, "SCONTO"), FLD(LF_RCONDV, "ADDIVA"), FLD(LF_RCONDV, "CODIVA"), FLD(LF_RCONDV, "PERCPROVV")); // codice, prezzo... - if ((_condven=="L") || (_condven=="O")) set_row(i, "@24g@2s", FLD(LF_RCONDV, "UM")); // unità di misura - set_row(++i, "@1g@2s @5g@15.5n @27g@15.5n @49g@20s @70g@18.2n", FLD(LF_RCONDV, "UMOM"), FLD(LF_RCONDV, "QOM"), FLD(LF_RCONDV, "QBASE"), FLD(LF_RCONDV, "CODARTOM"), FLD(LF_RCONDV, "PROMAGGIO")); // sconto/omaggio - if ((_condven=="C") || (_condven=="O")) set_row(i, "@92g@6s", FLD(LF_RCONDV, "CODLOTTO")); // lotto - if (_condven=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES")); - set_row(++i, ""); // salta una riga - } - } -} - -/* -void TStampa_condizioni_vendita::process_link(int id, const char *text) { - if (id== _rcondv_link_id) { - TString body= "1|"; // istanzia la stringa per il corpo del messaggio e gli aggiunge il numero della chiave e il separatore - body << text; // aggiunge al corpo del messaggio il codice dell'articolo per riempire la chiave - TMessage msg(RCONDV_APP, MSG_LN, (const char *)body); // crea il messaggio per l'applicazione - msg.send(); // invia il messaggio - TExternal_app ve2_2(RCONDV_APP); // crea l'applicazione esterna - ve2_2.run(); // lancia l'applicazione esterna - } -} -*/ - - -int ve3200(int argc, char **argv) { - TStampa_condizioni_vendita a; - - a.run(argc, argv, "Stampa condizioni vendita"); - return 0; -} + +#include +#include +#include +#include +#include + +#include "veconf.h" +#include "ve3200.h" + + + +#define RCONDV_APP "ve2 -2" + +#define DESTROY(x) { mask.field(x).reset_key(1); mask.hide(x); } +#define KILL(x) { mask.field(x).reset_key(1); mask.disable(x); } + +#define CVE 201 +#define VAL 202 +#define UMS1 203 +#define UMS2 204 +#define GMC1 205 +#define GMC2 206 +#define RFA 207 +#define ART1 208 +#define ART2 209 + + + +class TStampa_condizioni_vendita: public TPrint_application { + TRelation *_rel; // relazione principale + TString16 _condven; // stringa che indica il tipo di archivio + bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini + bool _codcon_codcf; // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti + bool _listval; // booleano di abilitazione della stampa dei listini in valuta + bool _testacomp, _righecomp; // booleani di selezione della stampa completa per testata e righe; + bool _testastamp; // booleano di testata completa già stampata + bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi +//int _rcondv_link_id; // id del link ipertestuale all'anagrafica di magazzino +protected: + virtual bool user_create(void); + virtual bool user_destroy(void); + virtual bool set_print(int); + virtual void set_page(int, int); + virtual void preprocess_header(void); + virtual void preprocess_footer(void); +//virtual void process_link(int, const char *); +}; + + + +bool TStampa_condizioni_vendita::user_create() { + bool gotcha= FALSE; // booleano di avvenuta inizializzazione + int indice; // indice delle variabili di configurazione per le abilitazioni + _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("ve3200"); // 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 + TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente + switch (_condven[0]) { + case 'L': // listini + indice= A_LISTINI; // setta l'indice dell'archivio listini + if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato + else { + _codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita + gotcha= TRUE; + } + break; + case 'C': // contratti + indice= A_CONTRATTI; // setta l'indice dell'archivio contratti + if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio contratti sia abilitato + else { + _codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita + gotcha= TRUE; + } + break; + case 'O': // offerte + indice= A_OFFERTE; // setta l'indice dell'archivio offerte + if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio offerte sia abilitato + else 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 + _gest_um= prassid.get_bool("GESUM", NULL, indice); // setta il booleano di abilitazione delle unità di misura + _gest_sca= prassid.get_bool("GESSCA", NULL, indice); // setta il booleano di abilitazione degli scaglioni + _gest_so= prassid.get_bool("GESSO", NULL, indice); // setta il booleano di abilitazione degli sconti/omaggi + _gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione della gestione delle valute + _rel= new TRelation(LF_RCONDV); // crea la relazione principale + _rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1); + _rel->add(LF_ANAGR, "CODART==CODARTOM", 1, LF_RCONDV, ART2); + _rel->add("%GMC", "CODTAB[1,3]==CODRIGA", 1, LF_RCONDV, GMC1); + _rel->add("%GMC", "CODTAB[4,5]==CODRIGA", 1, LF_RCONDV, GMC2); + _rel->add("%RFA", "CODTAB==CODRIGA", 1, LF_RCONDV, RFA); + _rel->add(LF_CONDV, "TIPO==TIPO|CATVEN==CATVEN|TIPOCF==TIPOCF|CODCF==CODCF|COD==COD"); + _rel->add("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE); + _rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV); + _rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL); + _rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1); + _rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2); + add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa + add_file(LF_RCONDV); // notifica il file delle righe alla stampa + enable_print_menu(); // abilita il menù di stampa + enable_setprint_menu(); // abilita il menù di settaggio della stampa + } + return (gotcha); +} + +bool TStampa_condizioni_vendita::user_destroy() { + delete _rel; // distrugge la relazione principale + return TRUE; +} + +bool TStampa_condizioni_vendita::set_print(int) { + TMask mask("ve3200x"); + mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio + switch (_condven[0]) { + case 'L': // listini + DESTROY(F_C_COD); // eliminazione campi di altri archivi + DESTROY(F_C_TIPOCF); + DESTROY(F_C_CODCF); + DESTROY(F_O_COD); + if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita + if (!_gest_val) KILL(F_L_LISTVALUTA); // disabilita condizionalmente la gestione delle valute + break; + case 'C': // contratti + DESTROY(F_L_COD); // settaggio dei campi da eliminare + DESTROY(F_L_CATVEN); + DESTROY(F_L_LISTVALUTA); + DESTROY(F_O_COD); + if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori + KILL(F_C_TIPOCF); + KILL(F_C_CODCF); + } + break; + case 'O': // offerte + DESTROY(F_L_COD); // settaggio dei campi da eliminare + DESTROY(F_L_CATVEN); + DESTROY(F_L_LISTVALUTA); + DESTROY(F_C_TIPOCF); + DESTROY(F_C_CODCF); + DESTROY(F_C_COD); + break; + } + if (mask.run()== K_ENTER) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore + _testastamp= FALSE; // azzera il flag di testa già stampata + _listval= mask.get_bool(F_L_LISTVALUTA); // legge lo stato del checkbox di abilitazione dei listini in valuta + _testacomp= mask.get_bool(F_TESTACOMP); // legge l'abilitazione della stampa completa della testata + _righecomp= mask.get_bool(F_RIGHECOMP); // legge l'abilitazione della stampa completa delle righe + TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale + TRectype da(rcondv.curr()); // prepara il record di inizio regione + da.zero(); + da.put("TIPO", _condven); + switch (_condven[0]) { // impostazione della chiave della testata + case 'L': // listini + if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN)); + else da.blank("CATVEN"); // riempie il campo di blank se non è gestito + da.blank("TIPOCF"); // i campi non gestiti vengono riempiti di blank + da.blank("CODCF"); + da.put("COD", mask.get(F_L_COD)); + break; + case 'C': // contratti + da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank + if (_codcon_codcf) { + da.put("TIPOCF", mask.get(F_C_TIPOCF)); + da.put("CODCF", mask.get(F_C_CODCF)); + } else { + da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti + da.blank("CODCF"); + } + da.put("COD", mask.get(F_C_COD)); + break; + case 'O': // offerte + da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank + da.blank("TIPOCF"); + da.blank("CODCF"); + da.put("COD", mask.get(F_O_COD)); + break; + } + TRectype a(da); // prepara il record di fine regione + if (!(mask.get_bool(F_TUTTERIGHE))) { // setta il filtro sulle righe solo se non è stato selezionato il flag di "tutte le righe" + da.put("TIPORIGA", mask.get(F_TIPORIGHE)); + da.put("CODRIGA", mask.get(F_DARIGA_A)); + a.put("TIPORIGA", mask.get(F_TIPORIGHE)); + a.put("CODRIGA", mask.get(F_ARIGA_A)); + } + current_cursor()->setregion(da, a); // setta la regione sul cursore + force_setpage(); // forza il lancio della set_page() ad ogni record del file da stampare + disable_links(); // disabilita tutti i link ipertestuali +// _rcondv_link_id= enable_link("Collegamento a righe condizioni di vendita", 'g'); // abilita il collegamento + return TRUE; + } else return FALSE; +} + +/* 1 1 1 1 + 1 2 3 4 5 6 7 8 9 0 1 2 3 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 +CF CODCF CV COD DESCR VALIN VALFIN IL UM SC SO ST OB SUC SEQ +. ...... .. ... .................................................. ..-..-.. ..-..-.. . . . . . . ... ... +CVA CAMBIO DATACAM +... ...............,..... ..-..-.. +*/ + +/* 1 1 1 1 + 1 2 3 4 5 6 7 8 9 0 1 2 3 +123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012 +T CODRIGA UM S QLIM PREZZO SCONTO A CIVA PERCPROV +. .................... .. . ...............,..... ..................,.. ......................... . .... .....,.. +UO QOM QBASE CODARTOM PROMAGGIO CODLOT E +.. ...............,..... ...............,..... .................... ..................,.. ...... . +*/ + +void TStampa_condizioni_vendita::preprocess_header() { + reset_header(); // l'header viene resettato + int i= 1; // contatore delle linee + const long firm= get_firm(); // legge l'id della ditta corrente + TLocalisamfile ditte(LF_NDITTE); // apre il file ditte + ditte.zero(); // vuota il record + ditte.put("CODDITTA", firm); // riempie la chiave + if (ditte.read()== NOERR) { // se il record della ditta viene trovato viene settato l'header + const TString &s= ditte.get("RAGSOC"); // legge la ragione sociale della ditta + set_header(i, "@1gDitta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header + } + TLocalisamfile &condv= current_cursor()->file(LF_CONDV); + i+=2; // stampa breve della testata, occupa almeno due linee + set_header(i-1, "@14gCod @18gDescrizione @69gVal. dal @78gal @87gIL @90gUM @93gSC @96gSO @99gST @109gSeq"); // setta l'header del codice, della descrizione, della validità, dei booleani, ecc. + set_header(i, "@14g%3s @18g%s @69g%s @78g%s @87g%s @90g%s @93g%s @96g%s @99g%s @109g%s", + (const char *)(condv.sget("COD")), (const char *)(condv.sget("DESCR")), (const char *)(condv.sget("VALIN")), + (const char *)(condv.sget("VALFIN")), (const char *)(condv.sget("IMPLORDI")), (const char *)(condv.sget("GESTUM")), + (const char *)(condv.sget("GESTSCAGL")), (const char *)(condv.sget("GESTSCO")), (const char *)(condv.sget("SCONST")), + (const char *)(condv.sget("SEQRIC"))); // codice, descriz., validità e booleani + if ((_condven=="L") && _codlis_catven) { // siamo sui listini? + set_header(i-1, "@11gCV"); // setta l'header della categoria di vendita + set_header(i, "@11g%s", (const char *)(condv.sget("CATVEN"))); // categoria di vendita + } + if (_condven=="C") { // siamo sui contratti? + if (_codcon_codcf) { // è abilitato il codice cliente/fornitore? + set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori + set_header(i, "@1g%s @4g%6s", (const char *)(condv.sget("TIPOCF")), (const char *)(condv.sget("CODCF"))); // cliente/fornitore + } + set_header(i-1, "@102gOB"); // setta l'header di contratto obbligatorio + set_header(i, "@102g%s", (const char *)(condv.sget("OBBLIG"))); // booleano + } + if (_condven=="L") { // siamo su listini? + set_header(i-1, "@105gSuc"); // setta l'header per il codice di listino successivo + set_header(i, "@105g%3s", (const char *)(condv.sget("CODLISSUCC"))); // codice successivo + } + if (_gest_val) { // c'è la gestione della valuta? + i+=2; // occupa altre due linee + set_header(i-1, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione + set_header(i, "@1g%s @5g%21s @27g%s", (const char *)condv.sget("CODVAL"), (const char *)condv.sget("CAMBIO"), (const char *)condv.sget("DATACAM")); // cambio e valuta + } + set_header(++i, ""); // salta una riga + if (!_righecomp) { // impostazione dell'header delle righe se non c'è la stampa esaustiva + set_header(++i, "@1gT @3gCodice riga @27gS @29gQuantita' limite @51gPrezzo @73gSconto @99gA @101gIVA @106gProvvig."); // setta l'header della chiave, della quantità limite e del prezzo + if ((_condven=="L") || (_condven=="O")) set_header(i, "@24gUM"); // setta l'header dell'unità di misura + set_header(++i, "@1gUMO @5gQuantita' omaggio @27gQuantita' base @49gCod. art. omagg. @70gPrezzo omaggio"); // setta l'header dello sconto/omaggio + if ((_condven=="C") || (_condven=="O")) set_header(i, "@92gLotto"); // setta l'header del lotto + if (_condven=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento + } + set_header(++i, ""); // aggiunge due linee vuote + set_header(++i, ""); +} + +void TStampa_condizioni_vendita::preprocess_footer() { + reset_footer(); + int i= 1; // indice di linea + set_footer(i, ""); // salta una linea + set_footer(++i, "@125gPag @#"); // l'unica linea del footer contiene il numero di pagina +} + +void TStampa_condizioni_vendita::set_page(int file, int) { + if (file== LF_RCONDV) { // se il file in stampa non è il file principale non c'è nulla da fare + int i= 0; // indice di riga + if ((printer().getcurrentpage()==1) && _testacomp && (!_testastamp)) { // stampa della testata in forma completa + if ((_condven=="L") && _codlis_catven) set_row(++i, "Cat. di vendita: @2s @50s", FLD(LF_CONDV, "CATVEN"), FLD(-CVE, "S0")); + if ((_condven=="C") && _codcon_codcf) set_row(++i, "Cliente/fornitore: @1s @6s @50s", FLD(LF_CONDV, "TIPOCF"), FLD(LF_CONDV, "CODCF"), FLD(LF_CLIFO, "RAGSOC")); + set_row(++i, "Codice: @3s @50s", FLD(LF_CONDV, "COD"), FLD(LF_CONDV, "DESCR")); + if (_gest_val) { + set_row(++i, "Valuta: @3s @50s", FLD(LF_CONDV, "CODVAL"), FLD(-VAL, "S0")); + set_row(++i, "Cambio: @15.5n (@d)", FLD(LF_CONDV, "CAMBIO"), FLD(LF_CONDV, "DATACAM")); + } + set_row(++i, "Validità: dal @d al @d", FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN")); + set_row(++i, "Importi lordi: @f", FLD(LF_CONDV, "IMPLORDI")); + set_row(++i, "Gestione unità di misura: @f", FLD(LF_CONDV, "GESTUM")); + set_row(++i, "Gestione scaglioni: @f", FLD(LF_CONDV, "GESTSCAGL")); + set_row(++i, "Gestione sconti: @f", FLD(LF_CONDV, "GESTSCO")); + set_row(++i, "Gestione sconti standard: @f", FLD(LF_CONDV, "SCONST")); + if (_condven=="C") set_row(++i, "Contratto obbligatorio: @f", FLD(LF_CONDV, "OBBLIG")); + if (_condven=="L") set_row(++i, "Codice listino successivo: @3s", FLD(LF_CONDV, "CODLISSUCC")); + set_row(++i, "Sequenza di ricerca: @4s", FLD(LF_CONDV, "SEQRIC")); + set_row(++i, ""); + set_row(++i, ""); + _testastamp= TRUE; + } + if (_righecomp) { // stampa della riga in forma completa + TLocalisamfile &rcondv= current_cursor()->file(); + TLocalisamfile &condv= current_cursor()->file(LF_CONDV); + TString tiporiga= rcondv.get("TIPORIGA"); + switch (tiporiga[0]) { + case 'A': + set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); + set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR")); + break; + case 'G': + set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); + set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0")); + break; + case 'S': + set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); + set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0")); + break; + case 'R': + set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); + set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0")); + break; + } + if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura: @2s @50s", FLD(LF_RCONDV, "UM"), FLD(-UMS1, "S0")); + if (condv.get_bool("GESTSCAGL")) { + set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL")); + set_row(++i, "Quantità limite scaglione: @15.5n", FLD(LF_RCONDV, "QLIM")); + } + set_row(++i, "Prezzo: @18.2n", FLD(LF_RCONDV, "PREZZO")); + set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO")); + set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA")); + set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA")); + set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV")); + if (condv.get_bool("GESTSCO")) { + set_row(++i, "Quantità merce omaggio: @15.5n", FLD(LF_RCONDV, "QOM")); + set_row(++i, "Quantità base: @15.5n", FLD(LF_RCONDV, "QBASE")); + set_row(++i, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR")); + set_row(++i, "Prezzo omaggio: @18.2n", FLD(LF_RCONDV, "PROMAGGIO")); + if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura quantità omaggio: @2s @50s", FLD(LF_RCONDV, "UMOM"), FLD(-UMS2, "S0")); + } + // if ((_condven=="C") || (_condven=="O")) set_row(++i, "Codice lotto: @6s", FLD(LF_RCONDV, "CODLOTTO")); + if (_condven=="O") set_row(++i, "Articolo in esaurimento: @f", FLD(LF_RCONDV, "ARTES")); + set_row(++i, ""); // salta una riga + } else { // stampa della riga in forma abbreviata + set_row(++i, "@1g@1s @3g@20s @27g@1s @29g@15.5n @51g@18.2n @73g@25s @99g@1s @101g@4s @106g@5.2n", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"), FLD(LF_RCONDV, "NSCAGL"), FLD(LF_RCONDV, "QLIM"), FLD(LF_RCONDV, "PREZZO"), + FLD(LF_RCONDV, "SCONTO"), FLD(LF_RCONDV, "ADDIVA"), FLD(LF_RCONDV, "CODIVA"), FLD(LF_RCONDV, "PERCPROVV")); // codice, prezzo... + if ((_condven=="L") || (_condven=="O")) set_row(i, "@24g@2s", FLD(LF_RCONDV, "UM")); // unità di misura + set_row(++i, "@1g@2s @5g@15.5n @27g@15.5n @49g@20s @70g@18.2n", FLD(LF_RCONDV, "UMOM"), FLD(LF_RCONDV, "QOM"), FLD(LF_RCONDV, "QBASE"), FLD(LF_RCONDV, "CODARTOM"), FLD(LF_RCONDV, "PROMAGGIO")); // sconto/omaggio + if ((_condven=="C") || (_condven=="O")) set_row(i, "@92g@6s", FLD(LF_RCONDV, "CODLOTTO")); // lotto + if (_condven=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES")); + set_row(++i, ""); // salta una riga + } + } +} + +/* +void TStampa_condizioni_vendita::process_link(int id, const char *text) { + if (id== _rcondv_link_id) { + TString body= "1|"; // istanzia la stringa per il corpo del messaggio e gli aggiunge il numero della chiave e il separatore + body << text; // aggiunge al corpo del messaggio il codice dell'articolo per riempire la chiave + TMessage msg(RCONDV_APP, MSG_LN, (const char *)body); // crea il messaggio per l'applicazione + msg.send(); // invia il messaggio + TExternal_app ve2_2(RCONDV_APP); // crea l'applicazione esterna + ve2_2.run(); // lancia l'applicazione esterna + } +} +*/ + + +int ve3200(int argc, char **argv) { + TStampa_condizioni_vendita a; + + a.run(argc, argv, "Stampa condizioni vendita"); + return 0; +}