2185 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			2185 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| // cg3300.cpp
 | |
| // Stampa allegati iva
 | |
| 
 | |
| #include <applicat.h>
 | |
| #include <prefix.h>
 | |
| #include <mask.h>
 | |
| #include <printapp.h>
 | |
| #include <progind.h>
 | |
| #include <sort.h>
 | |
| #include <recarray.h>
 | |
| #include <tabutil.h>
 | |
| #include <utility.h>
 | |
| #include <validate.h>                     
 | |
| 
 | |
| #include <comuni.h>
 | |
| #include <anagr.h>
 | |
| #include <anafis.h>
 | |
| #include <anagiu.h>
 | |
| #include <nditte.h>
 | |
| #include <alleg.h>
 | |
| #include <clifo.h>
 | |
| #include <mov.h>
 | |
| #include <rmoviva.h>
 | |
| #include <causali.h>
 | |
| 
 | |
| #include "cg3.h"
 | |
| #include "cg3300.h"
 | |
| 
 | |
| #include "cg3300a.h"
 | |
| #include "cg3300b.h"
 | |
| 
 | |
| #define LUNGHEZZA_FOOTER      3
 | |
| #define DISTANZA_HEADER_CORPO 5
 | |
| #define LUNGHEZZA_RECORD      128
 | |
| 
 | |
| const int CODTABLEN = 15;
 | |
| 
 | |
| const char* const SEGNO_MENO  = "-";
 | |
| const char* const BARRA_SESSO = "x";
 | |
| 
 | |
| class TStampa_allegati : public TPrintapp
 | |
| {
 | |
|   TFile_printer   * _my_file_printer;
 | |
|   int               _records [13];   //  Contatori dei vari tipi-record
 | |
|   int               _num_volume;    // numero progressivo dischetti
 | |
|   word               _num_pag;       // numero di pagine
 | |
|   int               _num_cf;        // numero di C/F
 | |
|   int               _width_modulo;  // larghezza modulo
 | |
| 
 | |
|   const char             * _buff;  // punta al risultato di retrieve()
 | |
|   SortRecord             * _RecordSort;
 | |
|   Totali                 * _t;
 | |
|   Record_B               * _recb; 
 | |
|   Array_desc_campi       * _frm;
 | |
| 
 | |
|   TSort*                 _sort;
 | |
| 
 | |
|   TDate                    _data_stampa;
 | |
|   int                      _anno_stampa;
 | |
|   stampe                   _tipo_stampa;
 | |
|   modi_stampa              _destinazione_stampa;
 | |
| 
 | |
|   bool          _tronc, _arrot, _ordina_desc, _distingui_att, 
 | |
|   _anno_prec, _stampa_tutti, _ricalcola;
 | |
| 
 | |
|   TString       _ricerca_att;
 | |
|   long          _cod_ditta_da, _cod_ditta_a;
 | |
|   char          _tipoa_richiesto;
 | |
| 
 | |
|   int           _SortRecLen;
 | |
|   int           _cur_null;
 | |
| 
 | |
| public:
 | |
| 
 | |
|   const desc_campo& campi (int i) const  { return _frm->campi(i); }
 | |
|   int          riga (int i) const     { return _frm->riga(i); }
 | |
|   const char * formato (int i) const  { return _frm->formato(i); }
 | |
| 
 | |
|   virtual bool user_create () ;                         
 | |
|   virtual bool user_destroy () ;                         
 | |
|   virtual bool set_print (int);
 | |
| 
 | |
|   bool set_impostazione();
 | |
|   bool set_ricalcola();
 | |
|   bool set_dischetti();
 | |
| 
 | |
|   void init_sort();
 | |
|   virtual bool preprocess_print (int file, int counter);
 | |
|   virtual bool preprocess_page (int file, int counter);
 | |
| 
 | |
|   virtual void preprocess_header ();
 | |
|   virtual void preprocess_footer ();
 | |
| 
 | |
|   virtual print_action postprocess_page (int,int);
 | |
|   virtual print_action postprocess_print (int,int);
 | |
| 
 | |
|   bool intesta ();
 | |
| 
 | |
|   void tronca();
 | |
|   void arrotonda();
 | |
| 
 | |
|   void stampa_su_disco();
 | |
|   void ricalcola(int anno);
 | |
|   void pulisci_alleg(int anno_dic);
 | |
| 
 | |
|   void stampa_totali(bool);
 | |
| 
 | |
|   void calcola();
 | |
| 
 | |
|   bool da_sommare(const TRectype & alleg);
 | |
|   bool buono(const TRectype & alleg);
 | |
| 
 | |
|   bool lo_devo_stampare(char tipo, long codice);
 | |
| 
 | |
|   void set_rows(int);
 | |
| 
 | |
|   void scrivi();
 | |
|   bool scrivi_volume(int);
 | |
| 
 | |
|   void scrivi_inizio_elenco_clienti();
 | |
|   void scrivi_coda_elenco_clienti();
 | |
|   void scrivi_inizio_elenco_fornitori();
 | |
|   void scrivi_coda_elenco_fornitori();
 | |
| 
 | |
|   TPrintrow * get_record_inizio_volume (int) ;
 | |
|   //  bool get_clienti (bool *, bool *) ;
 | |
|   bool get_clienti () ;
 | |
|   //  virtual TPrintrow * get_fornitori (bool *, bool *) ;
 | |
|   TPrintrow * get_fornitori () ;
 | |
|   TPrintrow * get_record_fine_volume (bool) ;
 | |
| 
 | |
|   long cerca_codice_all(char tipo, long codcf) ;
 | |
|   bool corrispettivo (const char * tipodoc);
 | |
| 
 | |
|   TStampa_allegati () {}
 | |
|   virtual ~TStampa_allegati () {}
 | |
| };
 | |
| 
 | |
| 
 | |
| // ----------------------------------------------------------------
 | |
| //
 | |
| // Utility di carattere generale
 | |
| //
 | |
| // ----------------------------------------------------------------
 | |
| 
 | |
| const char* segno (const real& val) 
 | |
| { 
 | |
|   if  (val < ZERO) 
 | |
|    return SEGNO_MENO;
 | |
|   return " ";
 | |
| }
 | |
| 
 | |
| const char* filler (int size)
 | |
| {  
 | |
|   static TString_array _fill;
 | |
|   
 | |
|   TToken_string* dep = (TToken_string*)_fill.objptr(size);
 | |
|   if (dep == NULL)
 | |
|   {
 | |
|     dep = new TToken_string(size);
 | |
|     dep->fill (' ');
 | |
|     _fill.add(dep, size);
 | |
|   }
 | |
|   return *dep;
 | |
| }
 | |
| 
 | |
| long TStampa_allegati::cerca_codice_all(char tipo, long codcf) 
 | |
| {
 | |
|   TString16 key; 
 | |
| 	
 | |
| 	key.format("%c|%ld", tipo, codcf);
 | |
| 
 | |
|   const TRectype & clifo = cache().get(LF_CLIFO, key);
 | |
| 
 | |
|   if (!clifo.empty()) 
 | |
| 	  return clifo.get_long (CLI_CODALLEG);
 | |
| 
 | |
|   return 0L;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::corrispettivo (const char * tipodoc)
 | |
| {
 | |
|   TString natura_doc;
 | |
|   bool    corrisp;
 | |
| 
 | |
|   const TRectype & tpd = cache().get("%TPD", tipodoc);
 | |
| 
 | |
|   natura_doc = tpd.get("I0");
 | |
|   corrisp    = tpd.get_bool ("B0");
 | |
|   
 | |
|   return corrisp && (natura_doc == "1" || natura_doc == "9");
 | |
| }
 | |
| 
 | |
| // --------------------------------------------------------------------
 | |
| //
 | |
| // Inizio codice
 | |
| //
 | |
| // --------------------------------------------------------------------
 | |
| 
 | |
| void TStampa_allegati::init_sort()
 | |
| {
 | |
|   _sort         = new TSort (_SortRecLen);
 | |
| 
 | |
|   if (_distingui_att)
 | |
|     _sort->addsortkey ((char *) &(_RecordSort->Strutt()->codatt_dic) 
 | |
|                        - (char *) (_RecordSort->Strutt()), 5);
 | |
| 
 | |
|   if (_ordina_desc)
 | |
|   {
 | |
|     _sort->addsortkey ( (char *) &(_RecordSort->Strutt()->ragsoc_dett) - 
 | |
|                        (char *)  (_RecordSort->Strutt()), 50);
 | |
|     _sort->addsortkey ( (char *) &(_RecordSort->Strutt()->codcf_dett) - 
 | |
|                        (char *)  (_RecordSort->Strutt()), sizeof (long) );
 | |
|   }
 | |
|   else
 | |
|     _sort->addsortkey ( (char *) &(_RecordSort->Strutt()->codcf_dett) - 
 | |
|                        (char *) (_RecordSort->Strutt()), sizeof (long) );
 | |
|   _sort->init();
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::user_create()
 | |
| {
 | |
|   open_files(LF_TABCOM, LF_NDITTE, LF_ALLEG, LF_CLIFO, 0);
 | |
| 
 | |
|   _RecordSort   = new SortRecord;
 | |
|   _SortRecLen   = _RecordSort->RecSize();
 | |
|   _recb         = new Record_B;
 | |
|   _frm          = new Array_desc_campi;
 | |
|   _t            = new Totali;
 | |
| 
 | |
|   _cur_null     = add_cursor (NULL);
 | |
|   init_sort();
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::user_destroy() 
 | |
| {
 | |
|   //  delete _sort;  // Adesso e' nella postprocess_print()
 | |
|   delete _RecordSort;
 | |
|   delete _recb;
 | |
|   delete _frm;
 | |
|   delete _t;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::set_ricalcola()
 | |
| {
 | |
|   ricalcola(0);
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::set_dischetti()
 | |
| {
 | |
|   TMask msk("cg3300c") ;
 | |
|   KEY   tasto;
 | |
| 
 | |
|   tasto = msk.run();
 | |
| 
 | |
|   if (tasto == K_ENTER) 
 | |
|   {
 | |
|     _data_stampa     = (const char *)msk.get (F_DATA_STAMPA);
 | |
|     _anno_stampa     = msk.get_int(F_ANNO_STAMPA);
 | |
|     _tipo_stampa     = (stampe) atoi(msk.get (F_TIPO_STAMPA2));
 | |
| 
 | |
|     _distingui_att = (bool) (msk.get (F_ATTIVITA) == "X");
 | |
|     _ordina_desc   = (bool) (msk.get (F_ORDINA_DESC) == "X");
 | |
|     _ricalcola     = (bool) (msk.get (F_RICALCOLA) == "X");
 | |
| 
 | |
|     _cod_ditta_da  = msk.get_long(F_DA_DITTA);
 | |
|     _cod_ditta_a   = msk.get_long(F_A_DITTA);
 | |
| 
 | |
|     _ricerca_att   = msk.get (F_RICERCA_ATT);
 | |
| 
 | |
|     switch (_tipo_stampa)
 | |
|     {
 | |
|     case clienti:
 | |
|       _tipoa_richiesto = 'C';
 | |
|       _width_modulo = 132;
 | |
|       break; 
 | |
|     case fornitori:
 | |
|       _tipoa_richiesto = 'F';
 | |
|       _width_modulo = 132;
 | |
|       break; 
 | |
|     default:
 | |
|       break; 
 | |
|     }
 | |
| 
 | |
|     //    if (_destinazione_stampa == dischetto)
 | |
| 
 | |
|     // Adesso la scelta 3, che prima era "Modulo101", si chiama "Entrambi"
 | |
|     // (vedi cg3300a.uml)
 | |
|     if (_tipo_stampa == modulo101) _tipo_stampa = entrambi;
 | |
| 
 | |
|     _my_file_printer = new TFile_printer ("IVAECF", "IVAE", 128, 1, 1);
 | |
| 
 | |
|     stampa_su_disco();
 | |
|   }
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::set_impostazione()
 | |
| {
 | |
|   TMask msk("cg3300a") ;
 | |
|   KEY   tasto;
 | |
|   TString descr_modulo;
 | |
| 
 | |
|   tasto = msk.run();
 | |
| 
 | |
|   if (tasto == K_ENTER) 
 | |
|   {
 | |
|     _data_stampa     = (const char *)msk.get (F_DATA_STAMPA);
 | |
|     _anno_stampa     = msk.get_int(F_ANNO_STAMPA);
 | |
|     _destinazione_stampa = (modi_stampa)atoi(msk.get (F_MODO_STAMPA));
 | |
| 
 | |
|     _tipo_stampa     = (stampe)atoi(msk.get (F_TIPO_STAMPA));
 | |
| 
 | |
|     _anno_prec     = (bool) (msk.get (F_ANNO_PREC) == "X");
 | |
|     _distingui_att = (bool) (msk.get (F_ATTIVITA) == "X");
 | |
|     _tronc         = (bool) (msk.get (F_TRONC) != "X");
 | |
|     _arrot         = (bool) (msk.get (F_ARROT) != "X");
 | |
|     _ordina_desc   = (bool) (msk.get (F_ORDINA_DESC) == "X");
 | |
|     _ricalcola     = (bool) (msk.get (F_RICALCOLA) == "X");
 | |
| 
 | |
|     _cod_ditta_da  = msk.get_long(F_DA_DITTA);
 | |
|     _cod_ditta_a   = msk.get_long(F_A_DITTA);
 | |
| 
 | |
|     _ricerca_att   = msk.get (F_RICERCA_ATT);
 | |
| 
 | |
|     _stampa_tutti = (bool) (msk.get (F_STAMPA_TUTTI) == "X");
 | |
| 
 | |
|     switch (_tipo_stampa)
 | |
|     {
 | |
|     case clienti:
 | |
|       _tipoa_richiesto = 'C';
 | |
|       descr_modulo = "clifo"; 
 | |
|       _width_modulo = 132;
 | |
|       break; 
 | |
|     case fornitori:
 | |
|       _tipoa_richiesto = 'F';
 | |
|       descr_modulo = "clifo"; 
 | |
|       _width_modulo = 132;
 | |
|       break; 
 | |
|     case modulo101:
 | |
|       _tipoa_richiesto = 'C';
 | |
|       descr_modulo = "modulo101"; 
 | |
|       _width_modulo = 80;
 | |
|       break; 
 | |
|     case modulo102:
 | |
|       _tipoa_richiesto = 'F';
 | |
|       descr_modulo = "modulo101"; 
 | |
|       _width_modulo = 80;
 | |
|       break; 
 | |
|     default:
 | |
|       break; 
 | |
|     }
 | |
|     // leggo descrizione modulo
 | |
|     _frm->leggi_modulo ("cg3300.frm", descr_modulo);
 | |
| 
 | |
|     init_sort();
 | |
|     _RecordSort->azzera_struttura();
 | |
|     calcola();
 | |
| 
 | |
|     return TRUE;    
 | |
|   }
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::set_print(int scelta)
 | |
| {
 | |
|   switch (scelta)
 | |
|   {
 | |
|   case 1:
 | |
|     return set_impostazione();
 | |
|     break;
 | |
|   case 2:
 | |
|     return set_ricalcola();
 | |
|     break;
 | |
|   case 3:
 | |
|     return set_dischetti();
 | |
|     break;
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::pulisci_alleg (int anno_dic)
 | |
| {
 | |
|   TString str; str.format("%s=%d", ALL_ANNO, anno_dic);                   
 | |
|   TRelation rel(LF_ALLEG);
 | |
|   TCursor cur(&rel, str);
 | |
|   TRectype& curr = cur.curr();
 | |
| 
 | |
|   const long items = cur.items();         
 | |
|   cur.freeze();
 | |
|   
 | |
|   str.format("Pulizia allegati %d in corso...", anno_dic);
 | |
|   TProgind prn (items, str, FALSE, TRUE);
 | |
|   for (cur = 0l; cur.pos() < items; ++cur)
 | |
|   {
 | |
|     prn.addstatus(1);
 | |
|     
 | |
|     
 | |
|     const bool immesso = curr.get_bool (ALL_IMMESSO);
 | |
| 
 | |
|     if (immesso)
 | |
| 			continue;
 | |
|  
 | |
|     curr.zero(ALL_IMPESC);
 | |
|     curr.zero(ALL_IVAESC);
 | |
|     curr.zero(ALL_NIESC);
 | |
|     curr.zero(ALL_E8ESC);
 | |
| 
 | |
|     curr.zero(ALL_IMPESP);
 | |
|     curr.zero(ALL_IVAESP);
 | |
|     curr.zero(ALL_NIESP);
 | |
|     curr.zero(ALL_E8ESP);
 | |
| 
 | |
|     curr.zero(ALL_NDOCESC);
 | |
|     curr.zero(ALL_NDOCESP);
 | |
| 
 | |
|     curr.zero(ALL_NALLESP);
 | |
|     curr.zero(ALL_PROG101102);
 | |
|     
 | |
|     cur.file().rewrite(); 
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::ricalcola(int anno_dic)
 | |
| {
 | |
|   //  TProgind prn;
 | |
|   KEY         tasto;
 | |
|   char        tipo;
 | |
|   long        codcf;
 | |
|   int         ndoc = 0;
 | |
|   bool        vendite;
 | |
|   real        imponibile;
 | |
|   real        imposta;
 | |
|   real        ni, imp, iva, e8, nall, prog101102;
 | |
|   TString16   tipodoc;
 | |
|   TString16   campo_codice_iva;
 | |
|   TDate       datareg, datadoc;
 | |
|   TString16   CAMPO_NALL, CAMPO_IMP, CAMPO_IVA, CAMPO_E8, CAMPO_NI, CAMPO_DOC;
 | |
|   bool        flag_b;
 | |
|   bool        flag_incrementa = FALSE;
 | |
|   int         ndocesc;
 | |
|   
 | |
|   TLocalisamfile all(LF_ALLEG);
 | |
|   all.setkey(2);  // Ricerca per anno-tipo-codice
 | |
| 
 | |
|   if (anno_dic <= 0)
 | |
|   {
 | |
|     TMask m ("cg3300b");
 | |
|     tasto=m.run();
 | |
|     if (tasto == K_ENTER)
 | |
|       anno_dic = m.get_int(F_ANNO_RICALCOLA);
 | |
|     else
 | |
|       return; 
 | |
|   }
 | |
| 
 | |
|   TRelation rel (LF_MOV);  
 | |
|   rel.add (LF_RMOVIVA, "NUMREG=NUMREG"); 
 | |
|   rel.add ("REG", "CODTAB=DATAREG[7,12]+REG"); 
 | |
|   rel.add (LF_CAUSALI, "CODCAUS=CODCAUS"); 
 | |
|   rel.add ("%IVA", "CODTAB=CODIVA",1,LF_RMOVIVA, 883); 
 | |
|   
 | |
|   TCursor cur(&rel, format("ANNOES=%04d", anno_dic));
 | |
| 
 | |
|   pulisci_alleg(anno_dic);
 | |
| 
 | |
|   const long items = cur.items();
 | |
|   cur.freeze();
 | |
|   TString str; str.format(TR("Ricalcolo anno %d..."), anno_dic);
 | |
|   TProgind pi(items, str, FALSE, TRUE);
 | |
| 
 | |
|   const TRectype& mov_curr  = cur.curr(LF_MOV);
 | |
|   TRectype& all_curr  = all.curr();
 | |
|   const TRectype& reg = cur.file("REG").curr();
 | |
|   const TRectype& cau = cur.curr(LF_CAUSALI);
 | |
|   const TRectype& iva_rec = cur.file("%IVA").curr();
 | |
|   for (cur = 0L; cur.pos() < items; ++cur )
 | |
|   {
 | |
|     pi.addstatus(1);
 | |
|   
 | |
|     const int tiporeg = reg.get_int("I0");
 | |
|     if ((tiporeg != 2) && (tiporeg != 1))
 | |
|       continue;
 | |
| 
 | |
|     if (tiporeg == 1)
 | |
|     {
 | |
|       bool sosp = reg.get_bool ("B0");
 | |
|       if (sosp) continue;
 | |
|       vendite = TRUE;
 | |
|     }
 | |
|     else
 | |
|       vendite = FALSE;
 | |
|     
 | |
|     tipodoc = cau.get (CAU_TIPODOC);
 | |
|     if (corrispettivo (tipodoc))
 | |
|       continue;
 | |
| 
 | |
|     if (vendite)
 | |
|     {
 | |
|       campo_codice_iva = "S7";
 | |
|       flag_b           = iva_rec.get_bool("B0");
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       campo_codice_iva = "S8";
 | |
|       flag_b           = iva_rec.get_bool("B1");
 | |
|     }
 | |
| 
 | |
|     tipo  = mov_curr.get_char(MOV_TIPO);
 | |
|     codcf = mov_curr.get_long (MOV_CODCF);
 | |
|     if (codcf <= 0L)
 | |
|       continue;
 | |
| 
 | |
|     const long nuovo_codcf = cerca_codice_all (tipo, codcf);
 | |
|     if (nuovo_codcf != 0)
 | |
|       codcf = nuovo_codcf;
 | |
| 
 | |
|     all_curr.put (ALL_ANNO, anno_dic);
 | |
|     all_curr.put (ALL_TIPOCF, tipo);
 | |
|     all_curr.put (ALL_CODCF, codcf);
 | |
|     all_curr.put (ALL_CODATT, reg.get("S8"));
 | |
| 
 | |
|     datareg = mov_curr.get_date (MOV_DATAREG);
 | |
|     datadoc = mov_curr.get_date (MOV_DATADOC);
 | |
| 
 | |
|     if (datareg.year() == datadoc.year())
 | |
|     {
 | |
|       CAMPO_IMP  = ALL_IMPESC;
 | |
|       CAMPO_IVA  = ALL_IVAESC;
 | |
|       CAMPO_NI   = ALL_NIESC;
 | |
|       CAMPO_E8   = ALL_E8ESC;
 | |
|       CAMPO_NALL = ALL_NALLESC;
 | |
|       CAMPO_DOC  = ALL_NDOCESC;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       CAMPO_IMP  = ALL_IMPESP;
 | |
|       CAMPO_IVA  = ALL_IVAESP;
 | |
|       CAMPO_NI   = ALL_NIESP;
 | |
|       CAMPO_E8   = ALL_E8ESP;
 | |
|       CAMPO_NALL = ALL_NALLESP;
 | |
|       CAMPO_DOC  = ALL_NDOCESP;
 | |
|     }
 | |
| 
 | |
|     flag_incrementa = FALSE;
 | |
|     ndoc = 0;
 | |
| 
 | |
|     const TRectype& rmi = cur.curr(LF_RMOVIVA);
 | |
| 		bool all_to_save = FALSE;
 | |
|     while (cur.next_match (LF_RMOVIVA))
 | |
|     {
 | |
|       int err = all.read();
 | |
| 
 | |
|       if (err == NOERR)    // aggiungo un record se non presente
 | |
| 			{
 | |
| 	      if (all_curr.get_bool (ALL_IMMESSO))
 | |
| 					continue;        // scarta i record immessi
 | |
| 			}
 | |
| 			else
 | |
|       {          
 | |
|         all_curr.zero();
 | |
|         all_curr.put (ALL_ANNO, anno_dic);
 | |
|         all_curr.put (ALL_TIPOCF, tipo);
 | |
|         all_curr.put (ALL_CODCF, codcf);
 | |
| 		    all_curr.put (ALL_CODATT, reg.get("S8"));
 | |
|         err = all.write();
 | |
|       }
 | |
| 
 | |
| 			all_to_save = TRUE;
 | |
|       imponibile = rmi.get_real (RMI_IMPONIBILE);
 | |
|       imposta    = rmi.get_real (RMI_IMPOSTA);
 | |
| 
 | |
|       const int codice_iva = iva_rec.get_int(campo_codice_iva);
 | |
|       if ((codice_iva == 1) || (codice_iva == 2) || (codice_iva == 3)) 
 | |
|         flag_incrementa = TRUE;
 | |
| 
 | |
|       if (codice_iva == 1)
 | |
|       {
 | |
|         imp = all.get_real(CAMPO_IMP);
 | |
|         iva = all.get_real(CAMPO_IVA);
 | |
|         
 | |
|         imp += imponibile;
 | |
|         iva += imposta;
 | |
| 
 | |
|         all.put (CAMPO_IMP, imp);
 | |
|         all.put (CAMPO_IVA, iva);
 | |
|       }
 | |
|       else
 | |
|         if (codice_iva == 2)
 | |
|         {
 | |
|           ni = all.get_real(CAMPO_NI);
 | |
|           ni += imponibile;
 | |
|           all.put (CAMPO_NI, ni);
 | |
|         }
 | |
|         else
 | |
|           if (codice_iva == 3)
 | |
|           {
 | |
|             e8 = all.get_real(CAMPO_E8);
 | |
|             e8 += imponibile;
 | |
|             all.put (CAMPO_E8, e8);
 | |
|           }
 | |
|           else
 | |
|           {
 | |
|             nall = all.get_real (CAMPO_NALL);
 | |
|             nall += imponibile;
 | |
|             all.put(CAMPO_NALL, nall);
 | |
|           }
 | |
|       
 | |
|       if (flag_b) 
 | |
|       {
 | |
|         prog101102 = all.get_real (ALL_PROG101102);
 | |
|         prog101102 += imponibile;
 | |
|       }
 | |
| 
 | |
|       if (flag_incrementa)
 | |
|       {
 | |
|         ndoc++;
 | |
|         ndocesc = all.get_int (CAMPO_DOC);
 | |
|         ndocesc += ndoc;
 | |
|         all.put(CAMPO_DOC, ndocesc);
 | |
|       }
 | |
|     }        // while next_match()
 | |
| 
 | |
|     if (all_to_save)
 | |
| 			all.rewrite();
 | |
|   }          // for cur=0; ++cur
 | |
|   cur.freeze(FALSE);
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::lo_devo_stampare(char tipo, long codcf) 
 | |
| {
 | |
|   TString16 key ;
 | |
| 	
 | |
| 	key.format("%c|%ld", tipo, codcf);
 | |
| 
 | |
| 	const TRectype & clifo = cache().get(LF_CLIFO, key);
 | |
| 
 | |
|   if (!clifo.empty())
 | |
|   {
 | |
|     const int codice_all = clifo.get_int(CLI_ALLEG);
 | |
|     if ((codice_all == 0) || (codice_all == 3) || (codice_all == 4) )
 | |
|       return TRUE;
 | |
|     else 
 | |
|       return FALSE;
 | |
|   }
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool TStampa_allegati::da_sommare(const TRectype & alleg)
 | |
| {
 | |
|   TString tipocf2;
 | |
|   long    codcf2;
 | |
|   int anno2;
 | |
|   TString codatt_dett;
 | |
|   TString comodo;
 | |
|   tipocf2      = alleg.get (ALL_TIPOCF);
 | |
|   codcf2       = alleg.get_long (ALL_CODCF);
 | |
|   anno2        = alleg.get_int(ALL_ANNO);
 | |
|   codatt_dett  = alleg.get (ALL_CODATT);
 | |
| 
 | |
|   if (_RecordSort->codcf_dett() == -1) 
 | |
|   {
 | |
|     _RecordSort->compila(alleg);
 | |
|     return TRUE;     // vuol dire che e' il primo => va messo nella struttura
 | |
|   }
 | |
|   
 | |
|   comodo = _RecordSort->Strutt()->tipopers_dett;
 | |
|   
 | |
|   // Se l'anno e' compilato prendo solo i record di quell'anno altrimenti
 | |
|   // se e' lasciato in bianco li considero tutti
 | |
| 
 | |
|   if (_anno_stampa > 0)
 | |
|     if (_anno_stampa != anno2)
 | |
|       return FALSE;
 | |
| 
 | |
|   if ((comodo == tipocf2) && (_RecordSort->Strutt()->codcf_dett == codcf2))
 | |
|   {
 | |
|     if (_distingui_att)
 | |
|       if (codatt_dett != _RecordSort->Strutt()->codatt_dic)
 | |
|         return FALSE;
 | |
|   }
 | |
|   else
 | |
|     return FALSE;
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| //
 | |
| // Ritorna vero se il record corrente di alleg 
 | |
| // contiene dati che vanno bene per la stampa
 | |
| //
 | |
| // QUI COMPILO IL RECORD B PER I FORNITORI
 | |
| //
 | |
| bool TStampa_allegati::buono(const TRectype & alleg)
 | |
| {
 | |
|   if (!alleg.empty()) 
 | |
| 	{
 | |
| 	  char tipo  = alleg.get_char(ALL_TIPOCF);
 | |
| 		long codcf = alleg.get_long(ALL_CODCF);
 | |
| 
 | |
|   //
 | |
|   // Se stampo i clienti scarto chi non ha codcf = "C"
 | |
|   // 
 | |
| 		if (_tipoa_richiesto != tipo)
 | |
| 			return FALSE;
 | |
| 
 | |
|   // --------------------------------------------------------------------
 | |
|   //                          GESTIONE RECORD B
 | |
|   // --------------------------------------------------------------------
 | |
| 		if ((_tipo_stampa == fornitori) || (_tipo_stampa == modulo102))
 | |
| 		{
 | |
| 			if (tipo == 'B')
 | |
| 			{
 | |
| 				_recb->compila(alleg);
 | |
| 				return FALSE;
 | |
| 			}
 | |
| 		}
 | |
|   
 | |
| 		if (_ricerca_att != "")
 | |
| 		{
 | |
| 			//    strcpy (_RecordSort->Strutt()->codatt_dett, _alleg->curr().get (ALL_CODATT));
 | |
| 			const TString& dep = alleg.get (ALL_CODATT);
 | |
| 			if (_ricerca_att != dep)
 | |
| 				return FALSE;
 | |
| 		}
 | |
|   
 | |
| 		if (_anno_stampa > 0)
 | |
| 		{ 
 | |
| 			const int anno = alleg.get_int(ALL_ANNO);
 | |
| 			if (anno != _anno_stampa)
 | |
| 				return FALSE;
 | |
| 		}
 | |
| 
 | |
| 		// se la stampa e' di controllo e voglio tutti i clienti mov. stampo tutti
 | |
| 		if ((_destinazione_stampa == controllo) && _stampa_tutti)
 | |
| 			return TRUE;
 | |
| 
 | |
| 		if (!lo_devo_stampare(tipo, codcf))
 | |
| 			return FALSE;
 | |
| 	}
 | |
| 
 | |
|   return TRUE; 
 | |
| }
 | |
| 
 | |
| 
 | |
| // ----------------------------------------------------------------
 | |
| // CALCOLA
 | |
| //
 | |
| // Richiamata dalla preprocess_print()
 | |
| //
 | |
| // Scorre _nditte
 | |
| // Fa le somme su _alleg per ogni ditta
 | |
| //
 | |
| // ----------------------------------------------------------------
 | |
| void TStampa_allegati::calcola ()
 | |
| {
 | |
|   static bool fatto_clienti   = FALSE;
 | |
|   static bool fatto_fornitori = FALSE;
 | |
| 
 | |
|   const long ditta_da = _cod_ditta_da <= 0 ? 1 : _cod_ditta_da;
 | |
|   const long ditta_a  = _cod_ditta_a <= 0 ? 99999L : _cod_ditta_a;
 | |
| 
 | |
|   _num_cf = 0;  // contatore C/F
 | |
| 
 | |
|   TRelation relditte(LF_NDITTE);
 | |
| 	TRectype from(relditte.curr());
 | |
| 	TRectype to(relditte.curr());
 | |
| 
 | |
| 	from.put(NDT_CODDITTA, ditta_da);
 | |
| 	to.put(NDT_CODDITTA, ditta_a);
 | |
| 	
 | |
| 	TCursor ditte(&relditte, "", 1, &from, &to);
 | |
| 	const long items = ditte.items();
 | |
| 	const TRectype & ditta = ditte.curr();
 | |
|   
 | |
| 	ditte.freeze();
 | |
|   for (ditte = 0L; ditte.pos() < items; ++ditte) 
 | |
|   {
 | |
|     const long nuova_ditta = ditta.get_long(NDT_CODDITTA);
 | |
| 
 | |
|     if (prefix().exist(nuova_ditta))    // TBC *** fv mi sembrava ci volesse 
 | |
| 		{
 | |
| 	    set_firm(nuova_ditta);
 | |
|     
 | |
| 		  if (_ricalcola) 
 | |
| 			  ricalcola(_anno_stampa);
 | |
|       
 | |
| 			// Legge i dati anagrafici del dichiarante 
 | |
| 			_RecordSort->fill_dati_anag_dic(ditta);
 | |
|     
 | |
| 			// ---------------------------------------------------------------------
 | |
| 			// ELABORAZIONE ALLEGATI
 | |
| 			// ---------------------------------------------------------------------
 | |
| 			TRelation relalleg(LF_ALLEG);
 | |
| 			TRectype from(relalleg.curr());
 | |
| 
 | |
| 			from.put (ALL_ANNO, _anno_stampa);
 | |
| 			from.put (ALL_TIPOCF, _tipoa_richiesto);
 | |
| 			if (_ricerca_att != "") 
 | |
| 				from.put(ALL_CODATT, _ricerca_att);
 | |
| 			TCursor alleg(&relalleg, "", _distingui_att ? 1 : 2, &from, &from);
 | |
| 			const long items = alleg.items();
 | |
| 			const TRectype & recalleg = alleg.curr();
 | |
| 
 | |
| 			alleg.freeze();
 | |
| 			
 | |
| 			TProgind prnd(items, TR("Elaborazione allegati in corso..."), FALSE, TRUE); 
 | |
| 
 | |
| 			for (alleg = 0L; alleg.pos() < items; ++alleg)
 | |
| 			{
 | |
| 				prnd.addstatus(1);
 | |
| 
 | |
| 				if (buono(recalleg))
 | |
| 				{
 | |
| 					if (da_sommare (recalleg))
 | |
| 						_RecordSort->somma(recalleg, _tipo_stampa);   // somma nella struttura
 | |
| 					else         
 | |
| 					{
 | |
| 						if (!_RecordSort->importo().is_zero()) 
 | |
| 						{
 | |
| 							_sort->sort (_RecordSort->Strutt_str());
 | |
| 							_num_cf += 1;     // incremento contatore numero di C/F
 | |
| 						}
 | |
| 						_t->incrementa_totali(_RecordSort->Strutt(), _tipo_stampa);
 | |
| 						_RecordSort->compila(recalleg);
 | |
| 					}  
 | |
| 				}   // if buono()
 | |
| 			}
 | |
| 		}
 | |
|   }    // for su nditte
 | |
| 
 | |
|   //
 | |
|   // Riazzero nuova_ditta dopo il for altrimenti non riesco a fare due stampe
 | |
|   // prima di una ditta e poi di un'altra (si posiziona sulla successiva 
 | |
|   // in nditte)
 | |
|   //
 | |
| 
 | |
|   //
 | |
|   // Se la stampa e' su disco non chiamo subito endsort() perche'
 | |
|   // potrei richiamare calcola() per mettere nel sort l'elenco fornitori
 | |
|   //
 | |
|   if (_destinazione_stampa == dischetto)
 | |
|   {
 | |
|     if (_tipoa_richiesto == 'C')
 | |
|       fatto_clienti = TRUE;
 | |
|     
 | |
|     if (_tipoa_richiesto == 'F')
 | |
|       fatto_fornitori = TRUE;
 | |
| 
 | |
|     switch (_tipo_stampa)
 | |
|     {
 | |
|     case entrambi:
 | |
|       if ((fatto_clienti) && (fatto_fornitori))
 | |
|         _sort->endsort();
 | |
|       break;
 | |
|     case clienti:
 | |
|       if (fatto_clienti)
 | |
|         _sort->endsort();
 | |
|       break;
 | |
|     case fornitori: 
 | |
|       if (fatto_fornitori)
 | |
|         _sort->endsort();
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
|     
 | |
|   }
 | |
|   else   // stampa NON su disco
 | |
|     _sort->endsort();
 | |
| 
 | |
|   //
 | |
|   // CALCOLO IL NUMERO DI PAGINE CHE STAMPO FACENDO:
 | |
|   //
 | |
|   // NUMERO DI C/F  /  NUMERO DI RIGHE PER MODULO (letto dal .frm)
 | |
|   //
 | |
| 
 | |
|   int righe_mod = _frm->righe_modulo();
 | |
| 
 | |
|   if ((_num_cf != 0) && (righe_mod != 0))
 | |
|     _num_pag = (_num_cf / righe_mod) + 1;
 | |
|   
 | |
| }
 | |
| 
 | |
| print_action TStampa_allegati::postprocess_print(int file, int counter)
 | |
| {
 | |
|   delete _sort;   // E' proprio necessario ???
 | |
|   return NEXT_PAGE;
 | |
| }
 | |
| 
 | |
| print_action TStampa_allegati::postprocess_page(int file, int counter)
 | |
| {
 | |
|   int pagina_corrente = printer().getcurrentpage();
 | |
| 
 | |
|   switch (_tipo_stampa)
 | |
|   {
 | |
|   case clienti:
 | |
|   case fornitori:
 | |
|     if ( (_buff = _sort->retrieve()) != NULL)
 | |
|     {
 | |
|       return REPEAT_PAGE;  
 | |
|     }
 | |
|     break;
 | |
| 
 | |
|   default:
 | |
|     break;
 | |
| 
 | |
|   }
 | |
| 
 | |
|   printer().formfeed();
 | |
|   //
 | |
|   // Se sono in una pagina dispari devo fare 2 formfeed
 | |
|   //
 | |
|   if (ODD(pagina_corrente)) printer().formfeed(); 
 | |
| 
 | |
|   return NEXT_PAGE;
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::preprocess_print (int file, int counter)
 | |
| {
 | |
|   printer().footerlen (LUNGHEZZA_FOOTER);
 | |
|   reset_print();
 | |
| 
 | |
|   //  init_sort();
 | |
|   //  _RecordSort->azzera_struttura();
 | |
|   //  set_auto_ff (TRUE);
 | |
| 
 | |
|   select_cursor (_cur_null);  
 | |
| 
 | |
|   //
 | |
|   // Crea e inizializza il sort.
 | |
|   // Scorre _nditte
 | |
|   // Fa le somme su _alleg per ogni ditta
 | |
|   //
 | |
| 
 | |
|   //    calcola();
 | |
| 
 | |
| 
 | |
|   // Leggo il primo record dal sort.
 | |
|   // Le successive letture avvengono nella postprocess_page()
 | |
|   //
 | |
|   if ((_buff = _sort->retrieve()) == NULL)
 | |
|     return FALSE;
 | |
| 
 | |
|   return TRUE;
 | |
| 
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::arrotonda()
 | |
| {
 | |
|   struct alleg_sort *_rec = (struct alleg_sort *) _buff;
 | |
|   
 | |
|   const int arr = TCurrency::get_firm_dec() == 0 ? -3 : 0;
 | |
|   
 | |
|   _rec->impesc.round(arr); 
 | |
|   _rec->ivaesc.round(arr);
 | |
|   _rec->niesc.round(arr);
 | |
|   _rec->e8esc.round(arr);
 | |
| 
 | |
|   _rec->tot_rigac.round(arr);
 | |
|   
 | |
|   _rec->impesp.round(arr);
 | |
|   _rec->ivaesp.round(arr);
 | |
|   _rec->niesp.round(arr);
 | |
|   _rec->e8esp.round(arr);
 | |
|   
 | |
|   _rec->tot_rigap.round(arr);
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::tronca()
 | |
| {
 | |
|   real dep;
 | |
| 
 | |
|   alleg_sort *_rec = (alleg_sort *) _buff;
 | |
|   
 | |
|   dep = _rec->impesc / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->impesc = dep; 
 | |
|   
 | |
|   dep = _rec->ivaesc / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->ivaesc = dep; 
 | |
|   
 | |
|   dep = _rec->niesc / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->niesc = dep; 
 | |
|   
 | |
|   dep = _rec->e8esc / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->e8esc = dep; 
 | |
|   
 | |
|   dep = _rec->tot_rigac / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->tot_rigac = dep; 
 | |
|   
 | |
|   dep = _rec->impesp / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->impesp = dep; 
 | |
|   
 | |
|   dep = _rec->ivaesp / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->ivaesp = dep; 
 | |
|   
 | |
|   dep = _rec->niesp / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->niesp = dep; 
 | |
|   
 | |
|   dep = _rec->e8esp / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->e8esp = dep; 
 | |
|   
 | |
|   dep = _rec->tot_rigap / 1000.00;
 | |
|   dep.trunc();
 | |
|   dep = dep * 1000.00;
 | |
|   _rec->tot_rigap = dep; 
 | |
|   
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::set_rows(int counter)
 | |
| {
 | |
|   TString cog, nom; 
 | |
|   TString tipo;
 | |
| 
 | |
|   struct alleg_sort *_rec = (struct alleg_sort *) _buff;
 | |
| 
 | |
|   tipo = _rec->tipopers_dett;
 | |
|   if (tipo == "F") 
 | |
|   {
 | |
|     cog = _rec->cognome_dett;
 | |
|     nom = _rec->nome_dett;
 | |
|   }
 | |
| 
 | |
|   if (_arrot)
 | |
|     arrotonda();
 | |
| 
 | |
|   if (_tronc)
 | |
|     tronca();
 | |
| 
 | |
|   // -------------------------------------------------------------------------
 | |
|   // RIGA DETTAGLIO 
 | |
|   // -------------------------------------------------------------------------
 | |
|   set_row ( riga(COG_DETT), formato(COG_DETT), _rec->cognome_dett);
 | |
|   set_row ( riga(NOM_DETT), formato(NOM_DETT), _rec->nome_dett);
 | |
|   set_row ( riga(VIA_DETT), formato(VIA_DETT), _rec->via_dett);
 | |
|   set_row ( riga(COM_DETT), formato(COM_DETT), _rec->comune_dett);
 | |
|   set_row ( riga(PRO_DETT), formato(PRO_DETT), _rec->prov_dett);
 | |
| 
 | |
|   // numero progressivo 
 | |
|   set_row (riga(PROG_DETT), formato(PROG_DETT), counter);
 | |
| 
 | |
|   if (tipo == "F")
 | |
|     set_row (riga(CASELLA_PAIVA), formato(CASELLA_PAIVA), "x" );
 | |
| 
 | |
|   set_row (riga(PAIVA_DETT), formato(PAIVA_DETT), _rec->paiva_dett);
 | |
| 
 | |
|   set_row (riga(ESC_DETT), formato(ESC_DETT), &_rec->ndocesc);
 | |
| 
 | |
|   if (_rec->impesc < 0)
 | |
|     set_row (riga(SEGNO_IMPESC), formato(SEGNO_IMPESC), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(IMPESC_DETT), formato(IMPESC_DETT), &_rec->impesc);
 | |
| 
 | |
|   if (_rec->ivaesc < 0)
 | |
|     set_row (riga(SEGNO_IVAESC), formato(SEGNO_IVAESC), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(IVAESC_DETT), formato(IVAESC_DETT), &_rec->ivaesc);
 | |
| 
 | |
|   if (_rec->niesc < 0)
 | |
|     set_row (riga(SEGNO_NIESC), formato(SEGNO_NIESC), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(NIESC_DETT), formato(NIESC_DETT), &_rec->niesc);
 | |
| 
 | |
|   if (_rec->e8esc < 0)
 | |
|     set_row (riga(SEGNO_E8ESC), formato(SEGNO_E8ESC), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(E8ESC_DETT), formato(E8ESC_DETT), &_rec->e8esc);
 | |
| 
 | |
|   if (_rec->tot_rigac < 0)
 | |
|     set_row (riga(SEGNO_TOTC), formato(SEGNO_TOTC), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(TOTC_DETT), formato(TOTC_DETT), &_rec->tot_rigac);
 | |
| 
 | |
|   set_row (riga(ESP_DETT), formato(ESP_DETT), &_rec->ndocesp);
 | |
| 
 | |
|   if (_rec->impesp < 0)
 | |
|     set_row (riga(SEGNO_IMPESP), formato(SEGNO_IMPESP), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(IMPESP_DETT), formato(IMPESP_DETT), &_rec->impesp);
 | |
| 
 | |
|   if (_rec->ivaesp < 0)
 | |
|     set_row (riga(SEGNO_IVAESP), formato(SEGNO_IVAESP), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(IVAESP_DETT), formato(IVAESP_DETT), &_rec->ivaesp);
 | |
| 
 | |
|   if (_rec->niesp < 0)
 | |
|     set_row (riga(SEGNO_NIESP), formato(SEGNO_NIESP), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(NIESP_DETT), formato(NIESP_DETT), &_rec->niesp);
 | |
| 
 | |
|   if (_rec->e8esp < 0)
 | |
|     set_row (riga(SEGNO_E8ESP), formato(SEGNO_E8ESP), SEGNO_MENO);
 | |
| 
 | |
|   set_row ( riga(E8ESP_DETT), formato(E8ESP_DETT), &_rec->e8esp);
 | |
| 
 | |
|   if (_rec->tot_rigap < 0)
 | |
|     set_row (riga(SEGNO_TOTP), formato(SEGNO_TOTP), SEGNO_MENO);
 | |
| 
 | |
|   set_row (riga(TOTP_DETT), formato(TOTP_DETT), &_rec->tot_rigap);
 | |
| 
 | |
|   int p = _frm->passo();
 | |
| 
 | |
|   for (int i=0; i<p; i++)
 | |
|     set_row ( (riga(TOTP_DETT)+i), "%s", "\0");
 | |
| 
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::preprocess_page(int file,int counter)
 | |
| {
 | |
|   static long codditta_curr;
 | |
|   static TString16 codatt_curr("     ");  // Sono 5 spazi
 | |
|   struct alleg_sort * buff = (struct alleg_sort *) _buff;
 | |
|   int pagina_corrente = printer().getcurrentpage();
 | |
| 
 | |
|   // Stampo intestazione se cambia la ditta...
 | |
|   if (pagina_corrente > 1)
 | |
|   {
 | |
|     if ( buff->codditta_dic != codditta_curr )
 | |
|     {
 | |
|       codditta_curr = buff->codditta_dic;
 | |
|       printer().formfeed();
 | |
|       if (ODD(pagina_corrente)) printer().formfeed();
 | |
|       _t->azzera_totali();
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       // .. e se cambia l'attivita'
 | |
|       if (_distingui_att)
 | |
|         if (codatt_curr != buff->codatt_dic)
 | |
|         {
 | |
|           codatt_curr = buff->codatt_dic;
 | |
|           printer().formfeed();
 | |
|           if (ODD(pagina_corrente)) printer().formfeed();
 | |
|         }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   set_rows(counter);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::preprocess_header()
 | |
| {
 | |
|   word pagina_corrente;
 | |
| 
 | |
|   //  printer().footerlen (LUNGHEZZA_FOOTER);
 | |
|   pagina_corrente = printer().getcurrentpage();
 | |
|   
 | |
|   if (ODD (pagina_corrente))
 | |
|     intesta();
 | |
|   else
 | |
|     reset_header();
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::preprocess_footer()
 | |
| {
 | |
|   word pagina_corrente;
 | |
|   bool ultima=FALSE;
 | |
| 
 | |
|   pagina_corrente = printer().getcurrentpage();
 | |
| 
 | |
|   // Per sapere se deve stampare il record B
 | |
|   if (pagina_corrente >= _num_pag)
 | |
|     ultima = TRUE;
 | |
| 
 | |
|   if (pagina_corrente == 1)
 | |
|     _t->azzera_totali();
 | |
| 
 | |
|   if (EVEN (pagina_corrente))
 | |
|     stampa_totali(ultima);
 | |
| }
 | |
| 
 | |
| 
 | |
| void TStampa_allegati::stampa_totali(bool ultima)
 | |
| {
 | |
|   real    tot, tot_impes, tot_ivaes, tot_nies, tot_e8es;
 | |
|   int     tot_es;
 | |
| 
 | |
|   if ((_tipo_stampa == fornitori) || (_tipo_stampa == modulo102))
 | |
|     _recb->somma();
 | |
|   else
 | |
|     _recb->azzera();
 | |
|   
 | |
|   tot         = _t->RipTotTotRiga() + _t->TotTotRigac() + _t->TotTotRigap() 
 | |
|     + _recb->tot_real();
 | |
|   tot_es      = _t->RipTotEs() + _t->TotEsc() + _t->TotEsp() 
 | |
|     + _recb->esc_int();
 | |
|   tot_impes   = _t->RipTotImpes() + _t->TotImpesc() + _t->TotImpesp() 
 | |
|     + _recb->impesc_real();
 | |
|   tot_ivaes   = _t->RipTotIvaes() + _t->TotIvaesc() + _t->TotIvaesp()
 | |
|     + _recb->ivaesc_real();
 | |
|   tot_nies    = _t->RipTotNies()  + _t->TotNiesc() + _t->TotNiesp() ;
 | |
|   tot_e8es    = _t->RipTotE8es()  + _t->TotE8esc() + _t->TotE8esp() ;
 | |
| 
 | |
|   // ------------------------------------------------------------
 | |
|   // Record B (dati relativi alle importazioni
 | |
|   // ------------------------------------------------------------
 | |
| 
 | |
|   if (_tipo_stampa == fornitori)
 | |
|     if (ultima)
 | |
|     {
 | |
|       set_footer (riga(RECB_ESC), formato(RECB_ESC), _recb->esc_int() );
 | |
|       set_footer (riga(RECB_IMPESC), formato(RECB_IMPESC), _recb->impesc_str() );
 | |
|       set_footer (riga(RECB_IVAESC), formato(RECB_IVAESC), _recb->ivaesc_str() );
 | |
| 
 | |
|       if (_recb->tot_real() < 0)
 | |
|         set_footer (riga(RECB_SEGNO_TOT), formato(RECB_SEGNO_TOT), SEGNO_MENO);
 | |
|       
 | |
|       set_footer (riga(RECB_TOT), formato(RECB_TOT), _recb->tot_str() );
 | |
|     }
 | |
|   
 | |
|   // ------------------------------------------------------------
 | |
|   // Riporti dalla pagina precedente
 | |
|   // ------------------------------------------------------------
 | |
| 
 | |
|   set_footer (riga(RIP_ESC), formato(RIP_ESC), _t->RipTotEs());
 | |
| 
 | |
|   set_footer (riga(RIP_SEGNO_IMPESP), formato(RIP_SEGNO_IMPESP), segno(_t->RipTotImpes()));
 | |
|   set_footer (riga(RIP_IMPESP), formato(RIP_IMPESP), _t->RipTotImpes().string(12,0));
 | |
| 
 | |
|   set_footer (riga(RIP_SEGNO_IVAESP), formato(RIP_SEGNO_IVAESP), segno(_t->RipTotIvaes()));
 | |
|   set_footer (riga(RIP_IVAESP), formato(RIP_IVAESP), _t->RipTotIvaes().string(12,0));
 | |
| 
 | |
|   set_footer (riga(RIP_SEGNO_NIESP), formato(RIP_SEGNO_NIESP), segno(_t->RipTotNies()));
 | |
|   set_footer (riga(RIP_NIESP), formato(RIP_NIESP), _t->RipTotNies().string(12,0));
 | |
| 
 | |
|   set_footer (riga(RIP_SEGNO_E8ESP), formato(RIP_SEGNO_E8ESP),
 | |
|               segno(_t->RipTotE8es()));
 | |
|   set_footer (riga(RIP_E8ESP), formato(RIP_E8ESP),
 | |
|               _t->RipTotE8es().string(12,0));
 | |
| 
 | |
|   // ------------------------------------------------------------
 | |
|   // Totali
 | |
|   // ------------------------------------------------------------
 | |
| 
 | |
|   set_footer (riga(TOT_ESC), formato(TOT_ESC), tot_es);
 | |
| 
 | |
|   set_footer (riga(TOT_SEGNO_IMPESP), formato(TOT_SEGNO_IMPESP), 
 | |
|               segno(tot_impes));
 | |
|   set_footer (riga(TOT_IMPESP), formato(TOT_IMPESP), tot_impes.string(12,0));
 | |
| 
 | |
|   set_footer (riga(TOT_SEGNO_IVAESP), formato(TOT_SEGNO_IVAESP), 
 | |
|               segno(tot_ivaes));
 | |
|   set_footer (riga(TOT_IVAESP), formato(TOT_IVAESP), tot_ivaes.string(12,0));
 | |
| 
 | |
|   set_footer (riga(TOT_SEGNO_NIESP), formato(TOT_SEGNO_NIESP), 
 | |
|               segno(tot_nies));
 | |
|   set_footer (riga(TOT_NIESP), formato(TOT_NIESP), tot_nies.string(12,0));
 | |
| 
 | |
|   set_footer (riga(TOT_SEGNO_E8ESP), formato(TOT_SEGNO_E8ESP), 
 | |
|               segno(tot_e8es));
 | |
|   set_footer (riga(TOT_E8ESP), formato(TOT_E8ESP), tot_e8es.string(12,0));
 | |
| }
 | |
| 
 | |
| // --------------------------------------------------------------------
 | |
| // INTESTA 
 | |
| // --------------------------------------------------------------------
 | |
| bool TStampa_allegati::intesta()
 | |
| {
 | |
|   TString tipoa;
 | |
|   struct alleg_sort * buff = (struct alleg_sort *) _buff;
 | |
|   //  struct dati_dic * buff = _dati_dic;
 | |
|   word num_pagina;
 | |
| 
 | |
|   num_pagina = printer().getcurrentpage();
 | |
| 
 | |
|   //  my_formfeed();
 | |
|   //  reset_header();
 | |
| 
 | |
|   set_header (riga(PAIVA_DIC), formato(PAIVA_DIC), buff->paiva_dic); 
 | |
|   set_header (riga(PAG_NUM), formato(PAG_NUM), num_pagina); 
 | |
|   set_header (riga(NUM_PAG_TOT), formato(NUM_PAG_TOT), _num_pag); // qui verificare
 | |
|   set_header (riga(NUM_REC), formato(NUM_REC), (const char*)_num_cf);
 | |
| 
 | |
|   tipoa << buff->tipopers_dic;
 | |
|   if (tipoa == "F")
 | |
|   {
 | |
|     set_header (riga(COGNOME_DIC), formato(COGNOME_DIC), buff->cognome_dic);
 | |
| 
 | |
|     set_header (riga(NOME_DIC), formato(NOME_DIC), buff->nome_dic);
 | |
| 
 | |
|     TString gg_na, mm_na, aa_na;
 | |
| 
 | |
|     gg_na << buff->datana_dic.day();
 | |
|     mm_na << buff->datana_dic.month();
 | |
|     aa_na << buff->datana_dic.year ();
 | |
|     aa_na = aa_na.mid(2);
 | |
| 
 | |
|     set_header (riga(GG_NA), formato(GG_NA), (const char *)gg_na);
 | |
|     set_header (riga(MM_NA), formato(MM_NA), (const char *)mm_na);
 | |
|     set_header (riga(AA_NA), formato(AA_NA), (const char *)aa_na);
 | |
| 
 | |
|     if (buff->sesso_dic[0] == 'M')
 | |
|       set_header (riga(MASCHIO), formato(MASCHIO), BARRA_SESSO);
 | |
|     else
 | |
|       set_header (riga(FEMMINA), formato(FEMMINA), BARRA_SESSO);
 | |
|     
 | |
|     set_header (riga(COMUNE_NA), formato(COMUNE_NA), 
 | |
|                 (const char *)buff->comunena_dic);
 | |
| 
 | |
|     set_header (riga(PROV_NA), formato(PROV_NA), (const char *)buff->provna_dic);
 | |
| 
 | |
|     set_header (riga(IND_FIS), formato(IND_FIS), (const char *)buff->viafis_dic);
 | |
|     
 | |
|     set_header (riga(COMUNE_FIS), formato(COMUNE_FIS), 
 | |
|                 (const char *)buff->comunefis_dic);
 | |
| 
 | |
|     set_header (riga(PROV_FIS), formato(PROV_FIS), 
 | |
|                 (const char *)buff->provfis_dic);
 | |
| 
 | |
|     set_header (riga(PAIVA_FIS), formato(PAIVA_FIS), 
 | |
|                 (const char *)buff->paiva_dic);
 | |
| 
 | |
|     set_header (riga(ATT_FIS), formato(ATT_FIS), 
 | |
|                 (const char *)buff->attivita_dic);
 | |
| 
 | |
|     set_header (riga(CODATT_FIS), formato(CODATT_FIS), 
 | |
|                 (const char *)buff->codatt_dic);
 | |
|   }
 | |
|   else
 | |
|     //
 | |
|     // Persona giuridica
 | |
|     //
 | |
|   {
 | |
|     set_header (riga(RAGSOC_DIC), formato(RAGSOC_DIC), 
 | |
|                 (const char*)buff->ragsoc_dic);
 | |
| 
 | |
|     set_header (riga(NAT_GIU), formato(NAT_GIU), buff->natgiu_dic);
 | |
| 
 | |
|     set_header (riga(IND_FIS), formato(IND_FIS),
 | |
|                 (const char*)buff->viafis_dic);
 | |
| 
 | |
|     set_header (riga(COMUNE_FIS), formato(COMUNE_FIS),  
 | |
|                 (const char*)buff->comunefis_dic);
 | |
| 
 | |
|     set_header (riga(PROV_FIS), formato(PROV_FIS),  
 | |
|                 (const char*)buff->provfis_dic);
 | |
| 
 | |
|     set_header (riga(PAIVA_GIU), formato(PAIVA_GIU),  
 | |
|                 (const char*)buff->paiva_dic);
 | |
| 
 | |
|     set_header (riga(ATT_GIU), formato(ATT_GIU),  
 | |
|                 (const char*)buff->attivita_dic);
 | |
| 
 | |
|     set_header (riga(CODATT_GIU), formato(CODATT_GIU),  
 | |
|                 (const char*)buff->codatt_dic);
 | |
| 
 | |
|   }
 | |
| 
 | |
|   for (int i = 0; i < DISTANZA_HEADER_CORPO; i++)
 | |
|     set_header ( (riga(NUM_REC)+i), "%s"," ");
 | |
| 
 | |
|   return TRUE;     
 | |
| }
 | |
| 
 | |
| // ----------------------------------------------------------------------
 | |
| //
 | |
| // STAMPA SU DISCO
 | |
| //
 | |
| // ----------------------------------------------------------------------
 | |
| 
 | |
| void TStampa_allegati::stampa_su_disco()
 | |
| {
 | |
|   TPrinter old = printer();
 | |
|   
 | |
|   if (_tipo_stampa == clienti)
 | |
|   {
 | |
|     _tipoa_richiesto = 'C';
 | |
|     calcola();
 | |
|   }
 | |
| 
 | |
|   if (_tipo_stampa == fornitori)
 | |
|   {
 | |
|     _tipoa_richiesto = 'F';
 | |
|     calcola();
 | |
|   }
 | |
| 
 | |
|   if (_tipo_stampa == entrambi)
 | |
|   {
 | |
|     _tipoa_richiesto = 'C';
 | |
|     calcola();
 | |
|     _tipoa_richiesto = 'F';
 | |
|     calcola();
 | |
|   }
 | |
| 
 | |
|   //  TApplication::set_printer (_my_file_printer);
 | |
|   _my_file_printer->set();
 | |
| 
 | |
|   scrivi();
 | |
| 
 | |
|   _my_file_printer->genera_dischetti();
 | |
|   //  TApplication::set_printer (&old);
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::scrivi()
 | |
| {
 | |
|   bool finito = FALSE;
 | |
| 
 | |
|   while (!finito)
 | |
|   {
 | |
|     finito=scrivi_volume(_my_file_printer->num_volumi());
 | |
|     _my_file_printer->inc_volume();
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool TStampa_allegati::scrivi_volume(int volume)
 | |
| {
 | |
|   bool finito = FALSE;
 | |
|   TPrintrow * riga;
 | |
|   TFilename dep ("");
 | |
|   bool res = FALSE;
 | |
|   bool inizio_elenco_clienti = TRUE; 
 | |
| //  bool inizio_elenco_fornitori = TRUE; 
 | |
|   bool finito_clienti   = FALSE;
 | |
|   bool finito_fornitori = FALSE;
 | |
|   //  static bool fclienti = TRUE;
 | |
|   //  static bool ffornitori = FALSE;
 | |
| 
 | |
|   dep.temp("TMP$$");
 | |
|   _my_file_printer->add_file(dep);
 | |
|   //  _tmp_files.add(dep.temp("TMP$$"));
 | |
| 
 | |
|   _my_file_printer->set_printerfile (dep);
 | |
| 
 | |
|   riga = get_record_inizio_volume(volume);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   for (int i = 0; i < _my_file_printer->num_rec_volume(); i++)
 | |
|   {
 | |
|     switch (_tipo_stampa)
 | |
|     {
 | |
|     case clienti:
 | |
|       if (!finito_clienti) 
 | |
|       {
 | |
|         if (inizio_elenco_clienti) {
 | |
|           scrivi_inizio_elenco_clienti();
 | |
|           inizio_elenco_clienti = FALSE; 
 | |
|         }
 | |
|         //          res = get_clienti(&fclienti, &ffornitori);
 | |
|         res = get_clienti();
 | |
|         
 | |
|         if (res == FALSE) {
 | |
|           scrivi_coda_elenco_clienti();
 | |
|           finito_clienti = TRUE; 
 | |
|         }
 | |
|       }
 | |
|       break;
 | |
| 
 | |
|     default:
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     /*******************
 | |
|       if ((_tipo_stampa == entrambi) || (_tipo_stampa == clienti)) 
 | |
|       {
 | |
|       if (!finito_clienti) 
 | |
|       {
 | |
|       if (inizio_elenco_clienti) {
 | |
|       scrivi_inizio_elenco_clienti();
 | |
|       inizio_elenco_clienti = FALSE; }
 | |
| 
 | |
|       res = get_clienti(&fclienti, &ffornitori);
 | |
| 
 | |
|       if (res == FALSE) {
 | |
|       scrivi_coda_elenco_clienti();
 | |
|       finito_clienti = TRUE; }
 | |
|       }
 | |
|       }
 | |
|       else 
 | |
|       {
 | |
|       if ((_tipo_stampa == entrambi) || (_tipo_stampa == fornitori))
 | |
|       {
 | |
|       if (!finito_fornitori) 
 | |
|       {
 | |
|       if (inizio_elenco_fornitori) {
 | |
|       scrivi_inizio_elenco_fornitori();
 | |
|       inizio_elenco_fornitori = FALSE; }
 | |
|       
 | |
|       //          riga = get_fornitori(&fclienti, &ffornitori);
 | |
|       riga = get_fornitori();
 | |
| 
 | |
|       if (riga == NULL) {
 | |
|       scrivi_coda_elenco_fornitori();
 | |
|       finito_fornitori = TRUE; }
 | |
|       else
 | |
|       _my_file_printer->print(*riga);
 | |
|       }
 | |
|       }
 | |
|       }    // else
 | |
|       *******************/
 | |
| 
 | |
|   }      // for
 | |
| 
 | |
|   finito = finito_clienti && finito_fornitori;
 | |
| 
 | |
|   riga = get_record_fine_volume(finito);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   return (finito); 
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::scrivi_coda_elenco_clienti()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   char   segno[8];
 | |
|   
 | |
|   record.fill (' '); 
 | |
| 
 | |
|   if (_t->TotImpesc() < 0)
 | |
|     segno[0] = '-';
 | |
|   else
 | |
|     segno[0] = ' ';
 | |
| 
 | |
|   if (_t->TotImpesp() < 0)
 | |
|     segno[1] = '-';
 | |
|   else
 | |
|     segno[1] = ' ';
 | |
| 
 | |
|   if (_t->TotIvaesc() < 0)
 | |
|     segno[2] = '-';
 | |
|   else
 | |
|     segno[2] = ' ';
 | |
| 
 | |
|   if (_t->TotIvaesp() < 0)
 | |
|     segno[3] = '-';
 | |
|   else
 | |
|     segno[3] = ' ';
 | |
| 
 | |
|   if (_t->TotNiesc() < 0)
 | |
|     segno[4] = '-';
 | |
|   else
 | |
|     segno[4] = ' ';
 | |
| 
 | |
|   if (_t->TotNiesp() < 0)
 | |
|     segno[5] = '-';
 | |
|   else
 | |
|     segno[5] = ' ';
 | |
| 
 | |
|   if (_t->TotTotRigac() < 0)
 | |
|     segno[6] = '-';
 | |
|   else
 | |
|     segno[6] = ' ';
 | |
| 
 | |
|   if (_t->TotTotRigap() < 0)
 | |
|     segno[7] = '-';
 | |
|   else
 | |
|     segno[7] = ' ';
 | |
| 
 | |
|   record.format ("%2s%06d%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%24s",
 | |
|                  "05",
 | |
|                  _records[3],
 | |
|                  (const char *)_t->TotImpesc().string("@@@@@@@@@@@"),
 | |
|                  segno[0],
 | |
|                  (const char *)_t->TotImpesp().string("@@@@@@@@@@@"),
 | |
|                  segno[1],
 | |
|                  (const char *)_t->TotIvaesc().string("@@@@@@@@@@@"),
 | |
|                  segno[2],
 | |
|                  (const char *)_t->TotIvaesp().string("@@@@@@@@@@@"),
 | |
|                  segno[3],
 | |
|                  (const char *)_t->TotNiesc().string("@@@@@@@@@@@"),
 | |
|                  segno[4],
 | |
|                  (const char *)_t->TotNiesp().string("@@@@@@@@@@@"),
 | |
|                  segno[5],
 | |
|                  (const char *)_t->TotTotRigac().string("@@@@@@@@@@@"),
 | |
|                  segno[6],
 | |
|                  (const char *)_t->TotTotRigap().string("@@@@@@@@@@@"),
 | |
|                  segno[7],
 | |
|                  filler(24)
 | |
|                  );
 | |
| 
 | |
|   _records[5]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::scrivi_inizio_elenco_clienti()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   TString8 aa; aa.format("%02d", _anno_stampa%100);
 | |
|   TString tipopers;
 | |
|   TString datana; 
 | |
|   int     cod_nat_giu=0;
 | |
|   
 | |
|   record.fill (' '); 
 | |
|   tipopers = _RecordSort->Strutt()->tipopers_dic;
 | |
| 
 | |
|   datana = format ("%6s", _RecordSort->Strutt()->datana_dic.day(),
 | |
|                    _RecordSort->Strutt()->datana_dic.month(),
 | |
|                    _RecordSort->Strutt()->datana_dic.year() );
 | |
| 
 | |
|   if (tipopers == "F")
 | |
|     cod_nat_giu = 0;
 | |
| 
 | |
|   if (tipopers == "F")
 | |
|     record.format ("%2s%2d%11s%3s%2d%35s%24s%6s%1s%25s%2s", 
 | |
|                    "01", (const char *)aa, 
 | |
|                    (const char *)_RecordSort->Strutt()->paiva_dic, (const char *)filler(3), 
 | |
|                    cod_nat_giu, 
 | |
|                    (const char *)_RecordSort->Strutt()->cognome_dic, 
 | |
|                    (const char *)_RecordSort->Strutt()->nome_dic, 
 | |
|                    (const char *)_RecordSort->Strutt()->sesso_dic, 
 | |
|                    (const char *)datana, 
 | |
|                    (const char *)_RecordSort->Strutt()->comunena_dic,
 | |
|                    (const char *)_RecordSort->Strutt()->provna_dic);
 | |
| 
 | |
|   else
 | |
|     record.format ("%2s%2d%11s%3s%2d%60s%34s%13s", 
 | |
|                    "01", (const char *)aa, 
 | |
|                    _RecordSort->Strutt()->paiva_dic, filler(3), cod_nat_giu, 
 | |
|                    _RecordSort->Strutt()->ragsoc_dic,
 | |
|                    filler (34),
 | |
|                    filler (13) );
 | |
| 
 | |
|   _records[1]++;   
 | |
| 
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   record.format ("%2s%24s%34s%2s%65s", 
 | |
|                  "02", (const char *)_RecordSort->Strutt()->comunefis_dic, 
 | |
|                  (const char *)_RecordSort->Strutt()->viafis_dic, 
 | |
|                  (const char *)_RecordSort->Strutt()->provfis_dic,
 | |
|                  filler (65) );
 | |
| 
 | |
|   _records[2]++;   
 | |
| 
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::scrivi_inizio_elenco_fornitori ()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   TString8 aa; aa.format("%02d", _anno_stampa%100);
 | |
|   TString tipopers;
 | |
|   TString datana; 
 | |
|   int     cod_nat_giu=0;
 | |
|   
 | |
|   record.fill (' '); 
 | |
|   tipopers = _RecordSort->Strutt()->tipopers_dic;
 | |
| 
 | |
|   datana = format ("%6s", _RecordSort->Strutt()->datana_dic.day(),
 | |
|                    _RecordSort->Strutt()->datana_dic.month(),
 | |
|                    _RecordSort->Strutt()->datana_dic.year() );
 | |
| 
 | |
|   if (tipopers == "F")
 | |
|     cod_nat_giu = 0;
 | |
| 
 | |
|   if (tipopers == "F")
 | |
|     record.format ("%2s%2d%11s%3s%2d%35s%24s%6s%1s%25s%2s", 
 | |
|                    "01", (const char *)aa, 
 | |
|                    (const char *)_RecordSort->Strutt()->paiva_dic, (const char *)filler(3), 
 | |
|                    cod_nat_giu, 
 | |
|                    (const char *)_RecordSort->Strutt()->cognome_dic, 
 | |
|                    (const char *)_RecordSort->Strutt()->nome_dic, 
 | |
|                    (const char *)_RecordSort->Strutt()->sesso_dic, 
 | |
|                    (const char *)datana, 
 | |
|                    (const char *)_RecordSort->Strutt()->comunena_dic,
 | |
|                    (const char *)_RecordSort->Strutt()->provna_dic);
 | |
| 
 | |
|   else
 | |
|     record.format ("%2s%2d%11s%3s%2d%60s%34s%13s", 
 | |
|                    "01", (const char *)aa, 
 | |
|                    _RecordSort->Strutt()->paiva_dic, filler(3), cod_nat_giu, 
 | |
|                    _RecordSort->Strutt()->ragsoc_dic,
 | |
|                    filler (34),
 | |
|                    filler (13) );
 | |
| 
 | |
|   _records[6]++;   
 | |
| 
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   record.format ("%2s%24s%34s%2s%65s", 
 | |
|                  "02", (const char *)_RecordSort->Strutt()->comunefis_dic, 
 | |
|                  (const char *)_RecordSort->Strutt()->viafis_dic, 
 | |
|                  (const char *)_RecordSort->Strutt()->provfis_dic,
 | |
|                  filler (65) );
 | |
| 
 | |
|   _records[7]++;   
 | |
| 
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
| }
 | |
| 
 | |
| //TPrintrow * TStampa_allegati::get_fornitori (bool* clienti, bool *fornitori)
 | |
| TPrintrow * TStampa_allegati::get_fornitori ()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   TString tipoa;
 | |
|   TString rag;
 | |
|   TString stato, paiva;
 | |
|   char    flag_paiva;
 | |
|   char    flag_tipo_fornitore;
 | |
|   static int progr = 0;
 | |
|   char   segno[10];
 | |
|   
 | |
|   record.fill (' '); 
 | |
| 
 | |
|   _buff = _sort->retrieve();
 | |
| 
 | |
|   if (_buff == NULL) 
 | |
|   {
 | |
|     //    *clienti = TRUE;
 | |
|     //    *fornitori = FALSE;
 | |
|     return FALSE;
 | |
|   }
 | |
| 
 | |
|   arrotonda();
 | |
|   tronca();
 | |
| 
 | |
|   struct alleg_sort *_rec = (struct alleg_sort*) _buff;
 | |
| 
 | |
|   tipoa = _rec->tipopers_dett;
 | |
| 
 | |
|   if (tipoa != "F") return FALSE;
 | |
| 
 | |
|   //
 | |
|   // METTEERE CONTROLLO VALIDITA PAIVA!!!! QUI !!!!
 | |
|   //
 | |
|   paiva = _rec->paiva_dett;
 | |
|   stato = _rec->statopaiva_dett;
 | |
| 
 | |
|   if (pi_check (stato, paiva))
 | |
|     flag_paiva = '0';
 | |
|   else
 | |
|     flag_paiva = '1';
 | |
| 
 | |
|   rag = _rec->ragsoc_dett;
 | |
| 
 | |
|   if (rag.not_empty())  // persona giuridica
 | |
|   {
 | |
|     flag_tipo_fornitore = '1';
 | |
|     record.format ("%2s%06d%60s%34s%24s%2s",
 | |
|                    "08",
 | |
|                    ++progr,
 | |
|                    (const char *)_rec->ragsoc_dett,
 | |
|                    (const char *)_rec->via_dett,
 | |
|                    (const char *)_rec->comune_dett,
 | |
|                    (const char *)_rec->prov_dett);
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     flag_tipo_fornitore = '0';
 | |
|     record.format ("%2s%06d%35s%25s%34s%24s%2s",
 | |
|                    "08",
 | |
|                    ++progr,
 | |
|                    (const char *)_rec->cognome_dett,
 | |
|                    (const char *)_rec->nome_dett,
 | |
|                    (const char *)_rec->via_dett,
 | |
|                    (const char *)_rec->comune_dett,
 | |
|                    (const char *)_rec->prov_dett);
 | |
|   }
 | |
| 
 | |
|   _records[8]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   if (_rec->impesc < 0)
 | |
|     segno[0] = '-';
 | |
|   else
 | |
|     segno[0] = ' ';
 | |
| 
 | |
|   if (_rec->impesp < 0)
 | |
|     segno[1] = '-';
 | |
|   else
 | |
|     segno[1] = ' ';
 | |
| 
 | |
|   if (_rec->ivaesc < 0)
 | |
|     segno[2] = '-';
 | |
|   else
 | |
|     segno[2] = ' ';
 | |
| 
 | |
|   if (_rec->ivaesp < 0)
 | |
|     segno[3] = '-';
 | |
|   else
 | |
|     segno[3] = ' ';
 | |
| 
 | |
|   if (_rec->niesc < 0)
 | |
|     segno[4] = '-';
 | |
|   else
 | |
|     segno[4] = ' ';
 | |
| 
 | |
|   if (_rec->niesp < 0)
 | |
|     segno[5] = '-';
 | |
|   else
 | |
|     segno[5] = ' ';
 | |
| 
 | |
|   if (_rec->e8esc < 0)
 | |
|     segno[6] = '-';
 | |
|   else
 | |
|     segno[6] = ' ';
 | |
| 
 | |
|   if (_rec->e8esp < 0)
 | |
|     segno[7] = '-';
 | |
|   else
 | |
|     segno[7] = ' ';
 | |
| 
 | |
|   if (_rec->tot_rigac < 0)
 | |
|     segno[8] = '-';
 | |
|   else
 | |
|     segno[8] = ' ';
 | |
| 
 | |
|   if (_rec->tot_rigap < 0)
 | |
|     segno[9] = '-';
 | |
|   else
 | |
|     segno[9] = ' ';
 | |
| 
 | |
|   record.format ("%2s%11s%1c%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%17s",
 | |
|                  "09",
 | |
|                  (const char *)_rec->paiva_dett,
 | |
|                  flag_paiva,
 | |
|                  flag_tipo_fornitore,
 | |
|                  (const char *)_rec->impesc.string("@@@@@@@@@@@"),
 | |
|                  segno[0],
 | |
|                  (const char *)_rec->impesp.string("@@@@@@@@@@@"),
 | |
|                  segno[1],
 | |
|                  (const char *)_rec->ivaesc.string("@@@@@@@@@@@"),
 | |
|                  segno[2],
 | |
|                  (const char *)_rec->ivaesp.string("@@@@@@@@@@@"),
 | |
|                  segno[3],
 | |
|                  (const char *)_rec->niesc.string("@@@@@@@@@@@"),
 | |
|                  segno[4],
 | |
|                  (const char *)_rec->niesp.string("@@@@@@@@@@@"),
 | |
|                  segno[5],
 | |
|                  (const char *)_rec->e8esc.string("@@@@@@@@@@@"),
 | |
|                  segno[6],
 | |
|                  (const char *)_rec->e8esp.string("@@@@@@@@@@@"),
 | |
|                  segno[7],
 | |
|                  filler(17)
 | |
|                  );
 | |
| 
 | |
|   _records[9]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   record.format ("%2s%11s%1c%11s%1c%5d%5d92s",
 | |
|                  "10",
 | |
|                  (const char *)_rec->tot_rigac.string("@@@@@@@@@@@"),
 | |
|                  segno[6],
 | |
|                  (const char *)_rec->tot_rigap.string("@@@@@@@@@@@"),
 | |
|                  segno[7],
 | |
|                  _rec->ndocesc,
 | |
|                  _rec->ndocesp,
 | |
|                  filler(92)
 | |
|                  );
 | |
| 
 | |
|   _records[10]++;
 | |
|   riga->put(record);
 | |
| 
 | |
|   return (riga);
 | |
| }
 | |
| 
 | |
| void TStampa_allegati::scrivi_coda_elenco_fornitori()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   char   segno[10] = "         ";
 | |
|   
 | |
|   record.fill (' '); 
 | |
| 
 | |
|   if (_t->TotImpesc() < 0)
 | |
|     segno[0] = '-';
 | |
|   else
 | |
|     segno[0] = ' ';
 | |
| 
 | |
|   if (_t->TotImpesp() < 0)
 | |
|     segno[1] = '-';
 | |
|   else
 | |
|     segno[1] = ' ';
 | |
| 
 | |
|   if (_t->TotIvaesc() < 0)
 | |
|     segno[2] = '-';
 | |
|   else
 | |
|     segno[2] = ' ';
 | |
| 
 | |
|   if (_t->TotIvaesp() < 0)
 | |
|     segno[3] = '-';
 | |
|   else
 | |
|     segno[3] = ' ';
 | |
| 
 | |
|   if (_t->TotNiesc() < 0)
 | |
|     segno[4] = '-';
 | |
|   else
 | |
|     segno[4] = ' ';
 | |
| 
 | |
|   if (_t->TotNiesp() < 0)
 | |
|     segno[5] = '-';
 | |
|   else
 | |
|     segno[5] = ' ';
 | |
| 
 | |
|   if (_t->TotE8esc() < 0)
 | |
|     segno[6] = '-';
 | |
|   else
 | |
|     segno[6] = ' ';
 | |
| 
 | |
|   if (_t->TotE8esp() < 0)
 | |
|     segno[7] = '-';
 | |
|   else
 | |
|     segno[7] = ' ';
 | |
| 
 | |
|   if (_t->TotTotRigac() < 0)
 | |
|     segno[8] = '-';
 | |
|   else
 | |
|     segno[8] = ' ';
 | |
| 
 | |
|   if (_t->TotTotRigap() < 0)
 | |
|     segno[9] = '-';
 | |
|   else
 | |
|     segno[9] = ' ';
 | |
| 
 | |
|   record.format ("%2s%06d%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%24s",
 | |
|                  "11",
 | |
|                  _records[3],
 | |
|                  _t->TotImpesc().string("@@@@@@@@@@@"),
 | |
|                  segno[0],
 | |
|                  _t->TotImpesp().string("@@@@@@@@@@@"),
 | |
|                  segno[1],
 | |
|                  _t->TotIvaesc().string("@@@@@@@@@@@"),
 | |
|                  segno[2],
 | |
|                  _t->TotIvaesp().string("@@@@@@@@@@@"),
 | |
|                  segno[3],
 | |
|                  _t->TotNiesc().string("@@@@@@@@@@@"),
 | |
|                  segno[4],
 | |
|                  _t->TotNiesp().string("@@@@@@@@@@@"),
 | |
|                  segno[5],
 | |
|                  _t->TotE8esc().string("@@@@@@@@@@@"),
 | |
|                  segno[6],
 | |
|                  _t->TotE8esp().string("@@@@@@@@@@@"),
 | |
|                  segno[7],
 | |
|                  _t->TotTotRigac().string("@@@@@@@@@@@"),
 | |
|                  segno[8],
 | |
|                  _t->TotTotRigap().string("@@@@@@@@@@@"),
 | |
|                  segno[9]
 | |
|                  );
 | |
| 
 | |
|   _records[11]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   record.format ("%2s%11s%11s%11s%5d%88s", 
 | |
|                  "12",
 | |
|                  _recb->impesc_str(),
 | |
|                  _recb->ivaesc_str(),
 | |
|                  _recb->tot_str(),
 | |
|                  _recb->esc_int(),
 | |
|                  filler(88)
 | |
|                  );
 | |
| 
 | |
|   _records[12]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| }
 | |
| 
 | |
| // bool TStampa_allegati::get_clienti (bool * clienti, bool * fornitori)
 | |
| bool TStampa_allegati::get_clienti ()
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   TString tipoa;
 | |
|   TString rag;
 | |
|   TString paiva, stato;
 | |
|   char    flag_paiva;
 | |
|   char    flag_tipo_cliente;
 | |
|   static int progr = 0;
 | |
|   char   segno[8];
 | |
|   
 | |
|   record.fill (' '); 
 | |
| 
 | |
|   _buff = _sort->retrieve();
 | |
| 
 | |
|   if (_buff == NULL) 
 | |
|   {
 | |
|     //    *clienti = FALSE;
 | |
|     //   *fornitori = TRUE;
 | |
|     return FALSE;
 | |
|   }
 | |
| 
 | |
|   arrotonda();
 | |
|   tronca();
 | |
| 
 | |
|   struct alleg_sort *_rec = (struct alleg_sort*) _buff;
 | |
| 
 | |
|   tipoa = _rec->tipopers_dett;
 | |
| 
 | |
|   if (tipoa != "C") return FALSE;
 | |
| 
 | |
|   //
 | |
|   // METTEERE CONTROLLO VALIDITA PAIVA!!!! QUI !!!!
 | |
|   //
 | |
|   paiva = _rec->paiva_dett;
 | |
|   stato = _rec->statopaiva_dett;
 | |
| 
 | |
|   if (pi_check (stato, paiva))
 | |
|     flag_paiva = '0';
 | |
|   else
 | |
|     flag_paiva = '1';
 | |
| 
 | |
|   rag = _rec->ragsoc_dett;
 | |
| 
 | |
|   if (rag.not_empty())  // persona giuridica
 | |
|   {
 | |
|     flag_tipo_cliente = '1';
 | |
|     record.format ("%2s%06d%60s%34s%24s%2s",
 | |
|                    "03",
 | |
|                    ++progr,
 | |
|                    (const char *)_rec->ragsoc_dett,
 | |
|                    (const char *)_rec->via_dett,
 | |
|                    (const char *)_rec->comune_dett,
 | |
|                    (const char *)_rec->prov_dett);
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     flag_tipo_cliente = '0';
 | |
|     record.format ("%2s%06d%35s%25s%34s%24s%2s",
 | |
|                    "03",
 | |
|                    ++progr,
 | |
|                    (const char *)_rec->cognome_dett,
 | |
|                    (const char *)_rec->nome_dett,
 | |
|                    (const char *)_rec->via_dett,
 | |
|                    (const char *)_rec->comune_dett,
 | |
|                    (const char *)_rec->prov_dett);
 | |
|   }
 | |
| 
 | |
|   _records[3]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   if (_rec->impesc < 0)
 | |
|     segno[0] = '-';
 | |
|   else
 | |
|     segno[0] = ' ';
 | |
| 
 | |
|   if (_rec->impesp < 0)
 | |
|     segno[1] = '-';
 | |
|   else
 | |
|     segno[1] = ' ';
 | |
| 
 | |
|   if (_rec->ivaesc < 0)
 | |
|     segno[2] = '-';
 | |
|   else
 | |
|     segno[2] = ' ';
 | |
| 
 | |
|   if (_rec->ivaesp < 0)
 | |
|     segno[3] = '-';
 | |
|   else
 | |
|     segno[3] = ' ';
 | |
| 
 | |
|   if (_rec->niesc < 0)
 | |
|     segno[4] = '-';
 | |
|   else
 | |
|     segno[4] = ' ';
 | |
| 
 | |
|   if (_rec->niesp < 0)
 | |
|     segno[5] = '-';
 | |
|   else
 | |
|     segno[5] = ' ';
 | |
| 
 | |
|   if (_rec->tot_rigac < 0)
 | |
|     segno[6] = '-';
 | |
|   else
 | |
|     segno[6] = ' ';
 | |
| 
 | |
|   if (_rec->tot_rigap < 0)
 | |
|     segno[7] = '-';
 | |
|   else
 | |
|     segno[7] = ' ';
 | |
| 
 | |
|   record.format ("%2s%11s%1c%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%11s%1c%17s",
 | |
|                  "04",
 | |
|                  (const char *)_rec->paiva_dett,
 | |
|                  flag_paiva,
 | |
|                  flag_tipo_cliente,
 | |
|                  (const char *)_rec->impesc.string("@@@@@@@@@@@"),
 | |
|                  segno[0],
 | |
|                  (const char *)_rec->impesp.string("@@@@@@@@@@@"),
 | |
|                  segno[1],
 | |
|                  (const char *)_rec->ivaesc.string("@@@@@@@@@@@"),
 | |
|                  segno[2],
 | |
|                  (const char *)_rec->ivaesp.string("@@@@@@@@@@@"),
 | |
|                  segno[3],
 | |
|                  (const char *)_rec->niesc.string("@@@@@@@@@@@"),
 | |
|                  segno[4],
 | |
|                  (const char *)_rec->niesp.string("@@@@@@@@@@@"),
 | |
|                  segno[5],
 | |
|                  (const char *)_rec->tot_rigac.string("@@@@@@@@@@@"),
 | |
|                  segno[6],
 | |
|                  (const char *)_rec->tot_rigap.string("@@@@@@@@@@@"),
 | |
|                  segno[7],
 | |
|                  filler(17)
 | |
|                  );
 | |
| 
 | |
|   _records[4]++;
 | |
|   riga->put(record);
 | |
|   _my_file_printer->print(*riga);
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| TPrintrow * TStampa_allegati::get_record_inizio_volume (int volume_progr)
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   TString16 aa; aa.format("%02d", _anno_stampa%100);
 | |
| 
 | |
|   record.format ("%2s%02d%1s%2s%121s", "00", volume_progr, "2",
 | |
|                  (const char *) aa, filler(121));
 | |
| 
 | |
|   riga->put(record);
 | |
|   return riga; 
 | |
| }
 | |
| 
 | |
| TPrintrow * TStampa_allegati::get_record_fine_volume (bool finito)
 | |
| {
 | |
|   TPrintrow * riga = new TPrintrow(); 
 | |
|   TString record (LUNGHEZZA_RECORD);
 | |
|   char    fine_volume;
 | |
| 
 | |
|   if (finito)
 | |
|     fine_volume = 'F';
 | |
|   else
 | |
|     fine_volume = 'S';
 | |
| 
 | |
|   record.format ("%2s%1c%06ul%06ul%06ul%06ul%06ul%06ul%06ul%06ul%06ul%06ul%06ul%06ul%49s",
 | |
|                  "13",
 | |
|                  fine_volume,
 | |
|                  _records[1],
 | |
|                  _records[2],
 | |
|                  _records[3],
 | |
|                  _records[4],
 | |
|                  _records[5],
 | |
|                  _records[6],
 | |
|                  _records[7],
 | |
|                  _records[8],
 | |
|                  _records[9],
 | |
|                  _records[10],
 | |
|                  _records[11],
 | |
|                  _records[12],
 | |
|                  filler(49)
 | |
|                  );
 | |
| 
 | |
|   riga->put(record);
 | |
|   return riga;
 | |
| }
 | |
| 
 | |
| int cg3300(int argc, char* argv[])
 | |
| {
 | |
|   TStampa_allegati a;
 | |
|   a.run(argc, argv, TR("Stampa Allegati"));
 | |
|   return 0;
 | |
| }
 | |
| 
 |