piu' tabelle comuni ma bensi' tabelle di ditta. git-svn-id: svn://10.65.10.50/trunk@3420 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			321 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			321 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
 | 
						|
#include <printapp.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <config.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <mailbox.h>
 | 
						|
 | 
						|
#include "ve3100.h"
 | 
						|
 | 
						|
#define KILL(x) { mask->field(x).reset_key(1); mask->disable(x); }
 | 
						|
#define REVIVE(x) { mask->field(x).set_key(1); mask->enable(x); }
 | 
						|
 | 
						|
#define SCON1 135
 | 
						|
#define CVE1  201
 | 
						|
#define ZON1  202
 | 
						|
#define CPG1  203
 | 
						|
#define UMS1  204
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class TStampa_sconti: public TPrint_application {
 | 
						|
  TRelation *_rel; // relazione principale
 | 
						|
	TString16 _sconti; // tipo di archivio
 | 
						|
  TString16 _gessco; // configurazione della gestione sconti
 | 
						|
	bool _descriz; // abilitazione della stampa delle descrizioni
 | 
						|
	bool _compat; // abilita le descrizioni compatte (vengono ristampate solo al cambio dei valori)
 | 
						|
  bool _catven; // abilitazione della categoria di vendita (gesliscv)
 | 
						|
	bool _scokey_catven; // abilitazione della categoria di vendita
 | 
						|
	bool _scokey_scclienti; // abilitazione degli sconti clienti
 | 
						|
	bool _scokey_zone; // abilitazione delle zone
 | 
						|
	bool _scokey_condpag; // abilitazione delle condizioni di pagamento
 | 
						|
	TString _last_catven, _last_codart, _last_um, _last_sccliente, _last_zona, _last_condpag; // inseguitori dei campi da descrivere
 | 
						|
//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_sconti::user_create() {
 | 
						|
	bool gotcha= FALSE; // booleano di avvenuta inizializzazione
 | 
						|
	_sconti= "*"; // inizializzazione dell'indicatore del tipo di tabella
 | 
						|
	if (argc()>2) _sconti= argv(2); // se c'è, prende il tipo di tabella dalla linea di comando
 | 
						|
	else {
 | 
						|
		TMask choose("VE3100"); // istanzia la maschera di scelta del tipo di tabella
 | 
						|
		if (choose.run() == K_ENTER) _sconti= choose.get(F_TIPOSC); // prende il tipo di tabella dalla maschera
 | 
						|
	}
 | 
						|
	TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta
 | 
						|
	switch (_sconti[0]) {
 | 
						|
		case 'D': // sconti documento
 | 
						|
			_rel= new TRelation(LF_SCONTI); // crea la relazione principale
 | 
						|
			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		case 'R': // sconti di riga
 | 
						|
			_rel= new TRelation(LF_SCONTI); // crea la relazione principale
 | 
						|
			_rel->add(LF_ANAMAG, "CODART==CODART");
 | 
						|
			_rel->add("%UMS", "CODTAB==UM", 1, LF_SCONTI, UMS1);
 | 
						|
			_rel->add("CVE", "CODTAB==CODCAT", 1, LF_SCONTI, CVE1);
 | 
						|
 			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		case 'I': // sconti incondizionati
 | 
						|
			_gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti
 | 
						|
      if (_gessco=="A") {
 | 
						|
				_rel= new TRelation(LF_SCONTI); // crea la relazione principale
 | 
						|
				_rel->add("CVE", "CODTAB==CODCAT", 1, LF_SCONTI, CVE1);
 | 
						|
				_rel->add(LF_SCONTI, "TIPO==\"D\"|CODCAT==CODART[1,2]", 1, LF_SCONTI, SCON1);
 | 
						|
      	_rel->add("%ZON", "CODTAB==CODART[3,4]", 1, LF_SCONTI, ZON1);
 | 
						|
      	_rel->add("%CPG", "CODTAB==CODART[5,8]", 1, LF_SCONTI, CPG1);
 | 
						|
      	gotcha= TRUE;
 | 
						|
      } 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) {
 | 
						|
		add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa
 | 
						|
		add_file(LF_SCONTI); // notifica il file delle principale alla stampa
 | 
						|
		enable_print_menu(); // abilita il menù di stampa
 | 
						|
		enable_setprint_menu(); // abilita il menù di settaggio della stampa
 | 
						|
	}
 | 
						|
	return (gotcha);
 | 
						|
}
 | 
						|
 | 
						|
bool TStampa_sconti::user_destroy() {
 | 
						|
  delete _rel;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TStampa_sconti::set_print(int) {
 | 
						|
	bool gotcha= FALSE;
 | 
						|
	TConfig prassid(CONFIG_DITTA, "ve");
 | 
						|
	TMask *mask;
 | 
						|
	switch (_sconti[0]) {
 | 
						|
		case 'D': // sconti documento
 | 
						|
			mask= new TMask("ve3100d");
 | 
						|
			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		case 'R': // sconti di riga
 | 
						|
			mask= new TMask("ve3100r");
 | 
						|
			if (!_catven) {
 | 
						|
				KILL(F_R_CODCAT_DA);
 | 
						|
				KILL(F_R_CODCAT_A);
 | 
						|
			} else {
 | 
						|
				REVIVE(F_R_CODCAT_DA);
 | 
						|
				REVIVE(F_R_CODCAT_A);
 | 
						|
			}
 | 
						|
			gotcha= TRUE;
 | 
						|
			break;
 | 
						|
		case 'I': // sconti incondizionati
 | 
						|
			mask= new TMask("ve3100i");
 | 
						|
			short k_id[2][4]= { F_I_CATVEN_DA, F_I_CATVEN_A, F_I_SCCLIENTI_DA, F_I_SCCLIENTI_A, F_I_ZONE_DA, F_I_ZONE_A, F_I_CONDPAG_DA, F_I_CONDPAG_A }; // vettore dei campi da controllare
 | 
						|
			for (int i=0; i<4; i++) {
 | 
						|
				bool enab= prassid.get_bool("SCOKEY", NULL, i+1);
 | 
						|
				switch (i) {
 | 
						|
				case 0: _scokey_catven= enab; break;
 | 
						|
				case 1: _scokey_scclienti= enab; break;
 | 
						|
				case 2: _scokey_zone= enab; break;
 | 
						|
				case 3: _scokey_condpag= enab; break;
 | 
						|
				}
 | 
						|
        if (enab) { // se nel file di config. il campo è abilitato...
 | 
						|
        	REVIVE(k_id[0][i]); // ...i campi vengono abilitati anche sulla maschera
 | 
						|
        	REVIVE(k_id[1][i]);
 | 
						|
        	gotcha= TRUE;
 | 
						|
        } else {
 | 
						|
        	KILL(k_id[0][i]); // se nel file di config. i campi non sono abilitati vengono disabilitati anche sulla maschera
 | 
						|
        	KILL(k_id[1][i]);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if (!_catven) {
 | 
						|
       	KILL(k_id[0][1]); // se nel file di config. la categoria vendite è disabilitata viene ucciso il campo
 | 
						|
       	KILL(k_id[1][1]);
 | 
						|
			}				
 | 
						|
			if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
 | 
						|
			break;
 | 
						|
	}
 | 
						|
  if (gotcha && (mask->run()== K_ENTER)) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore
 | 
						|
		if (_sconti=="R") {
 | 
						|
			_descriz= mask->get_bool(F_R_DESCRIZ);
 | 
						|
			_compat= mask->get_bool(F_R_COMPAT);
 | 
						|
		} else if (_sconti=="I") {
 | 
						|
			_descriz= mask->get_bool(F_I_DESCRIZ);
 | 
						|
			_compat= mask->get_bool(F_I_COMPAT);
 | 
						|
		}
 | 
						|
		TLocalisamfile &sconti= _rel->lfile();
 | 
						|
		TRectype da(sconti.curr()); // prepara il record di inizio regione
 | 
						|
		da.zero();
 | 
						|
		da.put("TIPO", _sconti);
 | 
						|
		TRectype a(da); // prepara il record di fine regione
 | 
						|
		TString codart; // stringa per la composizione del campo CODART negli sconti incondizionati
 | 
						|
    switch (_sconti[0]) { // impostazione della chiave della testata
 | 
						|
    	case 'D': // sconti documento
 | 
						|
    		da.put("CODCAT", mask->get(F_D_CODCAT_DA));
 | 
						|
    		a.put("CODCAT", mask->get(F_D_CODCAT_A));
 | 
						|
    		break;
 | 
						|
    	case 'R': // sconti di riga
 | 
						|
    		if (_catven) {
 | 
						|
	    		da.put("CODCAT", mask->get(F_R_CODCAT_DA));
 | 
						|
	    		a.put("CODCAT", mask->get(F_R_CODCAT_A));
 | 
						|
	    	} else {
 | 
						|
	    		da.blank("CODCAT"); // i campi non gestiti vengono riempiti di blank
 | 
						|
	    		a.blank("CODCAT");
 | 
						|
	    	}
 | 
						|
    		da.put("CODART", mask->get(F_R_CODART_DA));
 | 
						|
    		a.put("CODART", mask->get(F_R_CODART_A));
 | 
						|
    		break;
 | 
						|
    	case 'I': // sconti incondizionati
 | 
						|
				if (_catven && _scokey_catven) {
 | 
						|
					da.put("CODCAT", mask->get(F_I_CATVEN_DA));
 | 
						|
					a.put("CODCAT", mask->get(F_I_CATVEN_A));
 | 
						|
				} else {
 | 
						|
					da.blank("CODCAT"); // i campi non gestiti vengono riempiti di blank
 | 
						|
					a.blank("CODCAT");
 | 
						|
				}
 | 
						|
				if (_scokey_scclienti || _scokey_zone || _scokey_condpag) {
 | 
						|
					codart.format("%2s%2s%4s", (_scokey_scclienti)?(mask->get(F_I_SCCLIENTI_DA)):(""), (_scokey_zone)?(mask->get(F_I_ZONE_DA)):(""), (_scokey_condpag)?(mask->get(F_I_CONDPAG_DA)):(""));
 | 
						|
					da.put("CODART", codart);
 | 
						|
					codart.format("%2s%2s%4s", (_scokey_scclienti)?(mask->get(F_I_SCCLIENTI_A)):(""), (_scokey_zone)?(mask->get(F_I_ZONE_A)):(""), (_scokey_condpag)?(mask->get(F_I_CONDPAG_A)):(""));
 | 
						|
					a.put("CODART", codart);
 | 
						|
				}
 | 
						|
    		break;
 | 
						|
    }
 | 
						|
    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 archivio sconti", '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
 | 
						|
D:
 | 
						|
CC DESCR                                              SCONTO
 | 
						|
.. .................................................. .........................
 | 
						|
 | 
						|
R:
 | 
						|
CC CODART               UM SCONTO
 | 
						|
.. .................... .. .........................
 | 
						|
Categoria vendite: ..................................................
 | 
						|
Articolo:          ..................................................
 | 
						|
Unità di misura:   ..................................................
 | 
						|
 | 
						|
I:
 | 
						|
CC SC ZN CPG  SCONTO
 | 
						|
.. .. .. .... .........................
 | 
						|
Categoria vendite:       ..................................................
 | 
						|
Sconto cliente:          ..................................................
 | 
						|
Zona:                    ..................................................
 | 
						|
Condizione di pagamento: ..................................................
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
void TStampa_sconti::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
 | 
						|
  }
 | 
						|
  set_header(++i,"@1gCC"); // codice di categoria
 | 
						|
  switch (_sconti[0]) {
 | 
						|
  case 'D': // sconti documento
 | 
						|
  	set_header(i, "@4gDescrizione @55gSconto"); // descrizione e sconto
 | 
						|
  	break;
 | 
						|
  case 'R': // sconti di riga
 | 
						|
  	set_header(i, "@4gCod. articolo @25gUM @28gSconto"); // codice articolo, unità di misura e sconto
 | 
						|
  	break;
 | 
						|
  case 'I': // sconti incondizionati
 | 
						|
  	set_header(i, "@4gSC @7gZn @10gCPg @15gSconto"); // sconto cliente, zona, condizione di pagamento e sconto
 | 
						|
  	break;
 | 
						|
  }
 | 
						|
  set_header(++i, ""); // aggiunge due linee vuote
 | 
						|
  set_header(++i, "");
 | 
						|
}
 | 
						|
 | 
						|
void TStampa_sconti::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_sconti::set_page(int file, int) {
 | 
						|
	if (file== LF_SCONTI) { // se il file in stampa non è il file principale non c'è nulla da fare
 | 
						|
		TLocalisamfile &sconti= _rel->lfile();
 | 
						|
		int i= 0; // indice di riga
 | 
						|
		switch (_sconti[0]) {
 | 
						|
		case 'D': // sconti documento
 | 
						|
			set_row(++i, "@1g@2s @4g@50s @55g@25s", FLD(LF_SCONTI, "CODCAT"), FLD(LF_SCONTI, "DESCR"), FLD(LF_SCONTI, "SCONTO"));
 | 
						|
			break;
 | 
						|
		case 'R': // sconti di riga
 | 
						|
			if (_descriz) {
 | 
						|
				const TString &catven= sconti.get("CODCAT"); // categoria di vendita
 | 
						|
				if (_catven && ((!_compat) || (catven != _last_catven))) {
 | 
						|
					set_row(++i, "@1gCategoria vendite: @20g@50s", FLD(-CVE1, "S0"));
 | 
						|
					_last_catven= catven;
 | 
						|
				}
 | 
						|
				const TString &codart= sconti.get("CODART"); // codice articolo
 | 
						|
				if ((!_compat) || (codart != _last_codart)) {
 | 
						|
					set_row(++i, "@1gArticolo: @20g@50s", FLD(LF_ANAMAG, "DESCR"));
 | 
						|
					_last_codart= codart;
 | 
						|
				}
 | 
						|
				const TString &um= sconti.get("UM"); // unità di misura
 | 
						|
				if ((!_compat) || (codart != _last_codart)) {
 | 
						|
					set_row(++i, "@1gUnità di misura: @20g@50s", FLD(-UMS1, "S0"));
 | 
						|
					_last_um= um;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			set_row(++i, "@1g@2s @4g@20s @25g@2s @28g@25s", FLD(LF_SCONTI, "CODCAT"), FLD(LF_SCONTI, "CODART"), FLD(LF_SCONTI, "UM"), FLD(LF_SCONTI, "SCONTO"));
 | 
						|
			break;
 | 
						|
		case 'I': // sconti incondizionati
 | 
						|
			if (_descriz) {
 | 
						|
				const TString &catven= sconti.get("CODCAT"); // categoria di vendita
 | 
						|
				if (_catven && _scokey_catven && ((!_compat) || (catven != _last_catven))) {
 | 
						|
					set_row(++i, "@1gCategoria vendite: @26g@50s", FLD(-CVE1, "S0"));
 | 
						|
					_last_catven= catven;
 | 
						|
				}
 | 
						|
				const TString &sccliente= sconti.get("CODART").sub(0,1); // sconto cliente
 | 
						|
				if (_scokey_scclienti && ((!_compat) || (sccliente != _last_sccliente))) {
 | 
						|
					set_row(++i, "@1gSconto cliente: @26g@50s", FLD(-SCON1, "DESCR"));
 | 
						|
					_last_sccliente= sccliente;
 | 
						|
				}
 | 
						|
				const TString &zona= sconti.get("CODART").sub(2,3); // zona
 | 
						|
				if (_scokey_zone && ((!_compat) || (zona != _last_zona))) {
 | 
						|
					set_row(++i, "@1gZona: @26g@50s", FLD(-ZON1, "S0"));
 | 
						|
					_last_zona= zona;
 | 
						|
				}
 | 
						|
				const TString &condpag= sconti.get("CODART").sub(4,7); // condizione di pagamento
 | 
						|
				if (_scokey_condpag && ((!_compat) || (zona != _last_zona))) {
 | 
						|
					set_row(++i, "@1gCondizioni pagamento: @26g@50s", FLD(-CPG1, "S0"));
 | 
						|
					_last_condpag= condpag;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			set_row(++i, "@1g@2s @4g@2s @7g@2s @10g@4s @15g@25s", FLD(LF_SCONTI, "CODCAT"), FLD(LF_SCONTI, "CODART", 1, 2), FLD(LF_SCONTI, "CODART", 3, 4), FLD(LF_SCONTI, "CODART", 5, 8), FLD(LF_SCONTI, "SCONTO"));
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    set_row(++i, ""); // salta una linea
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
int ve3100(int argc, char **argv) {
 | 
						|
  TStampa_sconti a;
 | 
						|
  
 | 
						|
  a.run(argc, argv, "Stampa sconti");
 | 
						|
  return 0;
 | 
						|
}
 |