375 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			375 lines
		
	
	
		
			20 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
 | 
						|
#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;
 | 
						|
}
 |