Files correlati : Ricompilazione Demo : [ ] Commento :correzioni pro compilazione nuova 2.2 git-svn-id: svn://10.65.10.50/trunk@13394 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			604 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			604 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| 
 | |
| #include <printapp.h>
 | |
| #include <mask.h>
 | |
| #include <config.h>
 | |
| 
 | |
| #include "veconf.h"
 | |
| #include "ve3200.h"
 | |
| 
 | |
| #define RCONDV_APP "ve2 -2"
 | |
| 
 | |
| #define DESTROY(x) { ((TEditable_field &)mask.field(x)).reset_key(1); mask.hide(x); }
 | |
| #define KILL(x) { ((TEditable_field &)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 _printdesagg; // Stampa anche la descrizione aggiuntiva, solo se abilitata anche la stampa completa delle righe
 | |
|   bool _printstorico; // Stampa prz storico e Data prz storico
 | |
|   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
 | |
|   bool _filter_by_grm; //Filtro per gruppo merceologico nel caso di stampa righe articoli
 | |
|   TString _codiva, _um, _descragg;
 | |
|   TString _strprezzo, _stromaggio, _strstorico; //stringhe per la stampa del prezzo dell'articolo (normale, omaggiato e storico!)
 | |
| 
 | |
| protected:
 | |
|   static bool tipo_handler(TMask_field& f, KEY k);
 | |
|   virtual bool user_create(void);
 | |
|   virtual bool user_destroy(void);
 | |
|   virtual bool set_print(int);
 | |
|   virtual void set_page(int, int);
 | |
|   virtual bool preprocess_page(int, int);
 | |
|   virtual void preprocess_header(void);
 | |
|   virtual void preprocess_footer(void);
 | |
|   TString& curr2str(const char * fname, TString& str);
 | |
| public:
 | |
|   // @cmember Disabilita la verifica del modulo in chiave
 | |
|   virtual bool check_autorization() const 
 | |
|   {return FALSE;}
 | |
| 
 | |
| };
 | |
| 
 | |
| inline TStampa_condizioni_vendita& app() {return (TStampa_condizioni_vendita&) main_app();}
 | |
| 
 | |
| // Gruppi della maschera:
 | |
| // 1 : Listini
 | |
| // 2 : Contratti
 | |
| // 3 : Offerte
 | |
| // 4 : Articoli(listini)[DA..A]
 | |
| // 5 : Gr.Merc(listini)[DA..A]
 | |
| // 6 : Raggr.Fisc(listini)[DA..A]
 | |
| // 7 : Articoli(contratti)[DA..A]
 | |
| // 8 : Gr.Merc(contratti)[DA..A]
 | |
| // 9 : Raggr.Fisc(contratti)[DA..A]
 | |
| // 10 : Articoli(offerte)[DA..A]
 | |
| // 11 : Gr.Merc(offerte)[DA..A]
 | |
| // 12 : Raggr.Fisc(offerte)[DA..A]
 | |
| 
 | |
| bool TStampa_condizioni_vendita::tipo_handler(TMask_field& f, KEY k) 
 | |
| {
 | |
|   if (k==K_SPACE)
 | |
|   {
 | |
|     TMask& m = f.mask();
 | |
|     const char s = f.get()[0];
 | |
|     const char arc = app()._condven[0];
 | |
|     int base = 3;
 | |
|     int other1,other2;
 | |
|     
 | |
|     if (arc=='C')   base = 6;
 | |
|     else if (arc=='O') base = 9;
 | |
|     
 | |
|     if (s == 'A') { base+=1; other1=base+1; other2=base+2;} // articoli
 | |
|     else if (s == 'G') {base+=2; other1=base+1; other2=base-1;} // gr. merc
 | |
|     else {base += 3; other1=base-1; other2=base-2;}// raggr. fiscale
 | |
|     m.reset(-base);
 | |
|     m.show(-base);
 | |
|     m.hide(-other1);
 | |
|     m.hide(-other2);
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampa_condizioni_vendita::user_create() {
 | |
|   bool gotcha= FALSE; // booleano di avvenuta inizializzazione
 | |
|   int indice = 0; // 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 è abilitato"); // 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 è abilitato"); // 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 è abilitato"); // 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_ANAMAG, "CODART==CODRIGA", 1, LF_RCONDV, ART1);
 | |
|     _rel->add(LF_ANAMAG, "CODART==CODARTOM", 1, LF_RCONDV, ART2);
 | |
|     _rel->add(LF_UMART, "CODART==CODART", 1, LF_ANAMAG);
 | |
|     _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
 | |
|     set_magic_currency(TRUE);
 | |
|   }
 | |
|   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
 | |
|   mask.set_handler(F_TIPORIGHE,tipo_handler);
 | |
|   switch (_condven[0]) {
 | |
|     case 'L': // listini
 | |
|       mask.show(-1);// nasconde i campi dei listini
 | |
|       mask.hide(-5);// nasconde i campi del gr. merc
 | |
|       mask.hide(-6);// nasconde i campi del raggr. fisc.
 | |
|       mask.hide(-2);// nasconde i campi dei contratti
 | |
|       mask.hide(-3);// nasconde i campi delle offerte
 | |
|       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
 | |
|       mask.show(-2);// mostra i campi dei contratti
 | |
|       mask.hide(-8);// nasconde i campi del gr. merc
 | |
|       mask.hide(-9); // nasconde i campi del raggr. fisc.
 | |
|       mask.hide(-1);// nasconde i campi dei listini
 | |
|       mask.hide(-3);// nasconde i campi delle offerte
 | |
|       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);
 | |
|         mask.set(F_C_TIPOCF, "");
 | |
|         mask.set(F_C_CODCF, 0L);
 | |
|       }
 | |
|       break;
 | |
|     case 'O': // offerte
 | |
|       mask.show(-3); // nasconde i campi delle offerte
 | |
|       mask.hide(-11);// nasconde i campi del gr. merc
 | |
|       mask.hide(-12);// nasconde i campi del raggr. fisc.
 | |
|       mask.hide(-1);// nasconde i campi dei listini
 | |
|       mask.hide(-2);// nasconde i campi dei contratti
 | |
|       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
 | |
|     _printdesagg = mask.get_bool(F_PRINTDESAGG); //legge l'abilitazione della stampa della descrizione aggiuntiva
 | |
|     _printstorico = mask.get_bool(F_PRINTSTORICO); //legge l'abilitazione della stampa del prz storico e della relativa data
 | |
|     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.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;    
 | |
|     }
 | |
| 
 | |
|     TString filter;
 | |
|     TRectype a(da); // prepara il record di fine regione
 | |
|     _filter_by_grm = mask.get_bool(F_GRM_FILT);
 | |
| 
 | |
|     if (!_filter_by_grm)
 | |
|     {
 | |
|       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));
 | |
|     }
 | |
|     else // Elenco righe per articoli ma filtrate sul gruppo merceologico
 | |
|     {
 | |
|       da.put("TIPORIGA", "A");a.put("TIPORIGA", "A");
 | |
|       if (mask.get(F_DFLT_G_C).not_empty())
 | |
|       {
 | |
|         filter << "(" << LF_ANAMAG << "->GRMERC>=\"" << mask.get(F_DFLT_G_C);
 | |
|         filter << "\")";
 | |
|       }
 | |
|       if (mask.get(F_DFLT_G_C).not_empty())
 | |
|       {
 | |
|         if (filter.not_empty())
 | |
|           filter << "&&";
 | |
|         filter << "(" << LF_ANAMAG << "->GRMERC<=\"" << mask.get(F_AFLT_G_C);
 | |
|         filter << "\")";
 | |
|       }
 | |
|     }
 | |
|     current_cursor()->setfilter(filter, _filter_by_grm);
 | |
|     
 | |
|     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
 | |
|                                                                                       DATAPREZZOSTORICO     PREZZOSTORICO
 | |
| .. ...............,..... ...............,..... .................... ..................,...................................
 | |
| */
 | |
| 
 | |
| bool TStampa_condizioni_vendita::preprocess_page(int i, int c)
 | |
| {
 | |
|   if (i == LF_RCONDV)
 | |
|   {
 | |
|     TLocalisamfile &rcondv= current_cursor()->file();
 | |
|     TLocalisamfile &anamag= current_cursor()->file(-ART1);
 | |
|     _codiva = rcondv.get("CODIVA");
 | |
|     _um     = rcondv.get("UM");
 | |
|     if (_printdesagg)
 | |
|     {
 | |
|       _descragg = anamag.get("DESCRAGG");
 | |
|       _descragg.replace('\n', ' ');
 | |
|       _descragg.strip_double_spaces();
 | |
|     }
 | |
|     if (_codiva.empty())
 | |
|       _codiva = anamag.get("CODIVA");
 | |
|     if (_um.empty())
 | |
|       _um   = current_cursor()->file(LF_UMART).get("UM"); // Prima unità di misura per sto articolo
 | |
|   }
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| 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
 | |
|   const bool is_listino = _condven=="L";
 | |
|   const bool is_contratto = _condven=="C";
 | |
|   TString rw(132); rw.fill('-');
 | |
|   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@100gData @<", 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++,(const char*)rw);
 | |
|   // setta l'header del codice, della descrizione, della validità, dei booleani, ecc.
 | |
|   set_header(i, "@14gCod @18gDescrizione @69gVal. dal @80gal @91gIL @94gUM @97gSC @100gSO @103gST @116gSeq");
 | |
|   if (is_listino)
 | |
|   {
 | |
|     // siamo sui listini?
 | |
|     if (_codlis_catven)
 | |
|       set_header(i, "@11gCV"); // setta l'header della categoria di vendita
 | |
|     set_header(i,"@109gSucc.");
 | |
|   }
 | |
|   if (is_contratto)
 | |
|   { // siamo sui contratti?
 | |
|     if (_codcon_codcf)
 | |
|      // è abilitato il codice cliente/fornitore?
 | |
|       set_header(i, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori
 | |
|     set_header(i, "@106gOB"); // setta l'header di contratto obbligatorio
 | |
|   }  
 | |
|   if (_gest_val)
 | |
|    // se c'è la gestione della valuta occupa altre due linee
 | |
|     set_header(++i, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione
 | |
|   if (!_righecomp)
 | |
|   {
 | |
|     // impostazione dell'header delle righe in forma abbreviata
 | |
|     set_header(++i, "@1gT @3gCodice riga @27gDescrizione @77gS @79gQuantita' limite @109gPrezzo@117gPz per Conf"); // 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
 | |
|     i++;
 | |
|     if (_filter_by_grm)
 | |
|       set_header(i,"@3gGr.Merc.");
 | |
|     set_header(i, "@27gSconto @53gA @55gIVA @60gProvvig. @109gUlt. Aum."); // setta l'header della chiave, della quantità limite e del prezzo
 | |
|     if ((_condven=="C") || (_condven=="O")) 
 | |
|       set_header(i, "@69gLotto"); // setta l'header del lotto
 | |
|     set_header(++i, "@1gUMO @5gQuantita' omaggio @27gQuantita' base @49gCod. art. omagg. @70gPrezzo omaggio"); // setta l'header dello sconto/omaggio
 | |
|     if (_condven=="O") 
 | |
|       set_header(i, "@73gEsaur."); // setta l'header dell'articolo in esaurimento
 | |
|     if (_condven=="C" && _printstorico)  //header della riga prezii e date storici
 | |
|       set_header(++i, "@79gData prezzo storico @101gPrezzo storico");
 | |
|   }
 | |
|   set_header(++i,(const char*)rw);
 | |
|   set_header(++i, "@14g%3s", (const char *) condv.get("COD"));
 | |
|   set_header(i, "@18g%s", (const char *) condv.get("DESCR"));
 | |
|   set_header(i, "@69g%s", (const char *) condv.get("VALIN"));
 | |
|   set_header(i, "@80g%s", (const char *) condv.get("VALFIN"));
 | |
|   set_header(i, "@91g%s", (const char *) condv.get("IMPLORDI"));
 | |
|   set_header(i, "@94g%s", (const char *) condv.get("GESTUM"));
 | |
|   set_header(i, "@97g%s", (const char *) condv.get("GESTSCAGL"));
 | |
|   set_header(i, "@100g%s", (const char *) condv.get("GESTSCO"));
 | |
|   set_header(i, "@103g%s", (const char *) condv.get("SCONST"));
 | |
|   set_header(i, "@116g%s",(const char *) condv.get("SEQRIC"));
 | |
|   if (is_listino)
 | |
|   {
 | |
|     if (_codlis_catven)
 | |
|     // siamo sui listini?
 | |
|       set_header(i, "@11g%s", (const char *)(condv.get("CATVEN"))); // categoria di vendita
 | |
|     set_header(i, "@109g%3s", (const char *)(condv.get("CODLISSUCC"))); // codice successivo
 | |
|   }
 | |
|   if (is_contratto)
 | |
|   { // siamo sui contratti?
 | |
|     if (_codcon_codcf)
 | |
|     { // è abilitato il codice cliente/fornitore?
 | |
|       set_header(i, "@1g%s", (const char *)condv.get("TIPOCF")); // cliente/fornitore
 | |
|       set_header(i, "@4g%6s", (const char *)condv.get("CODCF")); // cliente/fornitore
 | |
|     }
 | |
|     set_header(i, "@106g%s", (const char *)(condv.get("OBBLIG"))); // booleano
 | |
|   }
 | |
|   
 | |
|   if (_gest_val)
 | |
|   { // c'è la gestione della valuta?
 | |
|     set_header(++i, "@1g%3s", (const char *)condv.get("CODVAL")); // cambio e valuta
 | |
|     set_header(i, "@5g%21s", (const char *)condv.get("CAMBIO")); // cambio e valuta
 | |
|     set_header(i, "@27g%s", (const char *)condv.get("DATACAM")); // cambio e valuta
 | |
|   }
 | |
|   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
 | |
| }
 | |
| 
 | |
| TString& TStampa_condizioni_vendita::curr2str(const char * fname, TString& str)
 | |
| {
 | |
|    const TRectype& condv = current_cursor()->curr(LF_CONDV);
 | |
|    const TRectype& rcondv = current_cursor()->curr(LF_RCONDV);
 | |
|    const TString8 codval = condv.get("CODVAL");
 | |
|    TPrice prezzo(rcondv.get_real(fname), codval);
 | |
|    if (! _listval)     //se non viene selezionato "listino in valuta" -> il prezzo viene espresso nella valuta della ditta
 | |
|      prezzo.change_to_firm_val();
 | |
|    
 | |
|    str = prezzo.string(TRUE);
 | |
|    str.right_just(14);
 | |
|    return str;
 | |
| }
 | |
| 
 | |
| 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"));
 | |
|           if (_printdesagg)
 | |
|             set_row(++i, "Descrizione aggiuntiva: #-100t", &_descragg);
 | |
|           if (_filter_by_grm)
 | |
|             set_row(++i, "Gruppo merceologico: @s", FLD(-ART1, "GRMERC",0,3));
 | |
|           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 @5s", 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: #t", &_um);
 | |
|       if (condv.get_bool("GESTSCAGL")) {
 | |
|         set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL"));
 | |
|         set_row(++i, "Quantità limite scaglione: @pn", FLD(LF_RCONDV, "QLIM","#########,@@@@@"));
 | |
|       }  
 | |
|                                                   
 | |
|       curr2str("PREZZO", _strprezzo);
 | |
|       
 | |
|       set_row(++i, "Prezzo: #t", &_strprezzo);
 | |
|       if (_printstorico && tiporiga[0] == 'A')
 | |
|       {
 | |
|         curr2str("PRZSTO", _strstorico);
 | |
|         set_row(++i, "Prezzo storico: #t", &_strstorico);
 | |
|       }
 | |
|       set_row(++i, "Pz per conf.: @pn", FLD(-ART1, "PPCONF","###.###.###,@@"));
 | |
|       set_row(++i, "Data ultimo aumento: @d", FLD(LF_RCONDV, "DATAULTAUM"));
 | |
|       if (_printstorico && tiporiga[0] == 'A')
 | |
|         set_row(++i, "Data prezzo storico: @d", FLD(LF_RCONDV, "DATAPRZSTO"));
 | |
|       set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO"));
 | |
|       set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA"));
 | |
|       set_row(++i, "Codice IVA: #4t", &_codiva);
 | |
|       set_row(++i, "Percentuale di provvigione: @pn", FLD(LF_RCONDV, "PERCPROVV","###,@@"));
 | |
|       if (condv.get_bool("GESTSCO")) {
 | |
|         curr2str("PROMAGGIO", _stromaggio);
 | |
|         set_row(++i, "Quantità merce omaggio: @pn", FLD(LF_RCONDV, "QOM","##########,@@@@@"));
 | |
|         set_row(++i, "Quantità base: @pn", FLD(LF_RCONDV, "QBASE","##########,@@@@@"));
 | |
|         set_row(++i, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR"));
 | |
|         set_row(++i, "Prezzo omaggio: #t", &_stromaggio);
 | |
|         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
 | |
|       TLocalisamfile &rcondv= current_cursor()->file();
 | |
|       TLocalisamfile &condv= current_cursor()->file(LF_CONDV);
 | |
|       TString8 tiporiga= rcondv.get("TIPORIGA");
 | |
|       
 | |
|       curr2str("PREZZO",_strprezzo);
 | |
|       
 | |
|       set_row(++i, "@1g@1s @3g@20s @77g@1s @79g@pn @101g#t@117g@pn", 
 | |
|             FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"),
 | |
|             FLD(LF_RCONDV, "NSCAGL"), FLD(LF_RCONDV, "QLIM","##########,@@@@@"), 
 | |
|             &_strprezzo, FLD(-ART1,"PPCONF"));
 | |
|       switch (tiporiga[0]) 
 | |
|       {
 | |
|         case 'A':
 | |
|           set_row(i, "@27g@50s", FLD(-ART1, "DESCR")); //
 | |
|           break;
 | |
|         case 'G':
 | |
|           set_row(i, "@27g@50s", FLD(-GMC1, "S0")); //
 | |
|           break;
 | |
|         case 'S':
 | |
|           set_row(i, "@27g@50s", FLD(-GMC2, "S0")); //
 | |
|           break;
 | |
|         case 'R':
 | |
|           set_row(i, "@27g@50s", FLD(-RFA, "S0")); //
 | |
|           break;
 | |
|       }
 | |
| 
 | |
|       set_row(i, "@24g#t",  &_um); // unità di misura
 | |
| 
 | |
|       if (tiporiga[0] == 'A' && _printdesagg)
 | |
|       {
 | |
|         set_row(++i, "@27g#-82t@109g@10s", &_descragg, FLD(LF_RCONDV, "DATAULTAUM"));
 | |
|       }
 | |
| 
 | |
|       // seconda riga: info accessorie
 | |
|       i++;
 | |
|       if (_filter_by_grm)
 | |
|         set_row(i,"@3g@3s", FLD(-ART1,"GRMERC",0,3));
 | |
|       set_row(i, "@27g@25s @53g@1s @55g#4t @60g@5.2n",
 | |
|             FLD(LF_RCONDV, "SCONTO"), FLD(LF_RCONDV, "ADDIVA"),
 | |
|             &_codiva, FLD(LF_RCONDV, "PERCPROVV","###,@@")); // codice, prezzo...
 | |
|       if ((_condven=="C") || (_condven=="O"))
 | |
|         set_row(i, "@69g@6s", FLD(LF_RCONDV, "CODLOTTO")); // lotto
 | |
|       if (_condven=="O")
 | |
|         set_row(i, "@73g@1s", FLD(LF_RCONDV, "ARTES"));
 | |
|       // terza riga (opzionale)
 | |
|       if (condv.get_bool("GESTSCO"))
 | |
|       { 
 | |
|         curr2str("PROMAGGIO", _stromaggio);
 | |
|         set_row(++i, "@1g@2s @5g@pn @27g@pn @49g@20s @70g#t",
 | |
|               FLD(LF_RCONDV, "UMOM"), FLD(LF_RCONDV, "QOM","##########,@@@@@"), 
 | |
|               FLD(LF_RCONDV, "QBASE","##########,@@@@@"), FLD(LF_RCONDV, "CODARTOM"), 
 | |
|               &_stromaggio); // sconto/omaggio
 | |
|       }
 | |
|       // quarta riga: storico (solo per contratti,opzionale)
 | |
|       if (_printstorico)
 | |
|       {
 | |
|         curr2str("PRZSTO", _strstorico);
 | |
|         set_row(++i, "@79g@10s @101g#t", FLD(LF_RCONDV, "DATAPRZSTO"), &_strstorico);
 | |
|       }
 | |
| 
 | |
|       set_row(++i, ""); // salta una riga
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| int ve3200(int argc, char **argv) {
 | |
|   TStampa_condizioni_vendita a;
 | |
|   
 | |
|   a.run(argc, argv, "Stampa condizioni vendita");
 | |
|   return 0;
 | |
| }
 |