9784b96237
maschere. Modificata stampa. git-svn-id: svn://10.65.10.50/trunk@1971 c028cbd2-c16b-5b4b-a496-9718f37d4682
263 lines
14 KiB
C++
Executable File
263 lines
14 KiB
C++
Executable File
|
|
#include <printapp.h>
|
|
#include <mask.h>
|
|
#include <config.h>
|
|
#include <execp.h>
|
|
#include <mailbox.h>
|
|
|
|
#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
|
|
|
|
|
|
|
|
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 _listval; // booleano di abilitazione della stampa dei listini in valuta
|
|
bool _testacomp, _righecomp; // booleani di selezione della stampa completa per testata e righe;
|
|
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 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("CODLISCV"); // 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 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_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);
|
|
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
|
|
_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
|
|
TString filtro;
|
|
filtro << "(TIPO==\"" << _condven << "\")";
|
|
switch (_condven[0]) { // impostazione della chiave della testata
|
|
case 'L': // listini
|
|
if (_codlis_catven) filtro << "&&(CATVEN==\"" << mask.get(F_L_CATVEN) << "\")";
|
|
filtro << "&&(COD==\"" << mask.get(F_L_COD) << "\")";
|
|
break;
|
|
case 'C': // contratti
|
|
filtro << "&&(TIPOCF==\"" << mask.get(F_C_TIPOCF) << "\")";
|
|
filtro << "&&(CODCF==\"" << mask.get(F_C_CODCF) << "\")";
|
|
filtro << "&&(COD==\"" << mask.get(F_C_COD) << "\")";
|
|
break;
|
|
case 'O': // offerte
|
|
filtro << "&&(COD==\"" << mask.get(F_O_COD) << "\")";
|
|
break;
|
|
}
|
|
if (!(mask.get_bool(F_TUTTERIGHE))) {
|
|
filtro << "&&(TIPORIGA==\"" << mask.get(F_TIPORIGHE) << "\")";
|
|
filtro << "&&(CODRIGA>=\"" << mask.get(F_DARIGA_A) << "\")";
|
|
filtro << "&&(CODORIGA<=\"" << mask.get(F_ARIGA_A) << "\")";
|
|
}
|
|
current_cursor()->setfilter(filtro);
|
|
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
|
|
set_header(i, "@125gPag @#"); // la prima linea contiene, sicuramente, il numero di pagina
|
|
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, "Ditta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header
|
|
}
|
|
if ((get_page_number()==1) && (!_testacomp)) { // se siamo sulla prima pagina si stampa la testata
|
|
set_header(++i, "@14gCod @18gDescrizione @69gVal. dal @78gal @87gIL @90gUM @93gSC @96gSO @99gST @109gSeq"); // setta l'header del codice, della descrizione, della validità, dei booleani, ecc.
|
|
if ((_condven=="L") && _codlis_catven) set_header(i, "@11gCV"); // setta l'header della categoria di vendita
|
|
if (_condven=="C") set_header(i, "CF @4gCod.CF @102gOB"); // setta l'header di clienti/fornitori e di contratto obbligatorio
|
|
if ((_condven=="L") || (_condven=="C")) set_header(i, "@105gSuc"); // setta l'header per il codice di listino successivo
|
|
if (_gest_val) set_header(++i, "Val @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione
|
|
set_header(++i, ""); // salta una riga
|
|
}
|
|
if (!_righecomp) {
|
|
set_header(++i, "T @2gCodice 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, "UMO @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::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 (get_page_number()==1) { // se siamo sulla prima pagina deve essere stampata anche la testata
|
|
if (_testacomp) { // stampa della testata in forma completa
|
|
// ...
|
|
} else { // stampa della testata in forma abbreviata
|
|
set_row(++i, "@14g@3s @18g@50s @69g@d @78g@d @87g@1s @90g@1s @93g@1s @96g@1s @99g@1s @109g@3s", FLD(LF_CONDV, "COD"), FLD(LF_CONDV, "DESCR"), FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN"), FLD(LF_CONDV, "IMPLORDI"), FLD(LF_CONDV, "GESTUM"),
|
|
FLD(LF_CONDV, "GESTSCAGL"), FLD(LF_CONDV, "GESTSCO"), FLD(LF_CONDV, "SCONST"), FLD(LF_CONDV, "SEQRIC")); // codice, descriz., validità e booleani
|
|
if ((_condven=="L") && _codlis_catven) set_row(i, "@11g@2s", FLD(LF_CONDV, "CATVEN")); // categoria di vendita
|
|
if (_condven=="C") set_row(i, "@1s @4g@6s @102g@1s", FLD(LF_CONDV, "TIPOCF"), FLD(LF_CONDV, "CODCF"), FLD(LF_CONDV, "OBBLIG")); // cliente/fornitore e booleano
|
|
if ((_condven=="L") || (_condven=="C")) set_row(i, "@105g@3s", FLD(LF_CONDV, "CODLISSUCC")); // codice successivo
|
|
if (_gest_val) set_row(++i, "@3s @5g@15.5n @27g@d", FLD(LF_CONDV, "CODVAL"), FLD(LF_CONDV, "CAMBIO"), FLD(LF_CONDV, "DATACAM")); // cambio e valuta
|
|
set_row(++i, ""); // salta una riga
|
|
}
|
|
}
|
|
if (_righecomp) { // stampa della riga in forma completa
|
|
// ...
|
|
} else { // stampa della riga in forma abbreviata
|
|
set_row(++i, "@1s @2g@20s @27g@1s @29g@15.5n @51g@18.2n @73g25s @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, "@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;
|
|
}
|