704 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			704 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| ///////////////////////////////////////////////////////////
 | |
| // Quadro 770/A
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| #include "77stqab.h" 
 | |
| 
 | |
| TDipendente::TDipendente(const TCursor& cur)
 | |
| {                   
 | |
|   _pos = ((TCursor&)cur).pos();
 | |
|   
 | |
|   const TRectype& rec = cur.curr();
 | |
|   const TRectype& dip = cur.curr(LF_DIPEND);
 | |
| 
 | |
|   _codice_ditta      = rec.get_long("CODDITTA");
 | |
|   _ragsoc            = dip.get("COGNOME"); _ragsoc << ' ' << dip.get("NOME");
 | |
|   _codice_deceduto   = dip.get_long("CODDIPDEC");
 | |
|   _codice_dipendente = rec.get_long("CODDIP");
 | |
|   
 | |
|   if (rec.num() == LF_QUAA)
 | |
|   {
 | |
|     _fine_rapporto        = rec.get("DATAFR");
 | |
|     _lavoro_precedente    = rec.get("CFDLPREC").not_empty();
 | |
|     _causa                = toupper(rec.get_char("CAUSA"));
 | |
|     _rettifica_conguaglio = toupper(rec.get_char("RETCON"));
 | |
|     _numero_progressivo   = rec.get_int("NPROG");
 | |
|   }  
 | |
|   else
 | |
|   {
 | |
|     _fine_rapporto        = rec.get("DATAFIN");
 | |
|     _lavoro_precedente    = FALSE;
 | |
|     _causa                = ' ';
 | |
|     _rettifica_conguaglio = ' ';
 | |
|     _numero_progressivo   = rec.get_int("NPROG");
 | |
|   } 
 | |
|   
 | |
|   if (_rettifica_conguaglio == 'B' || !_fine_rapporto.ok())
 | |
|     _fine_rapporto = eotime;
 | |
| }
 | |
| 
 | |
| int TDipendente::compare(const TSortable& s) const
 | |
| {
 | |
|   const TDipendente& rec = (const TDipendente&)s;
 | |
|   
 | |
|   if (_codice_ditta != rec._codice_ditta)
 | |
|     return _codice_ditta > rec._codice_ditta ? +1 : -1;
 | |
| 
 | |
|   const int diff = _ragsoc.compare(rec._ragsoc, -1, TRUE);
 | |
|   if (diff != 0)
 | |
|     return diff;
 | |
|     
 | |
|   if (_codice_dipendente != rec._codice_dipendente)  
 | |
|     return _codice_dipendente > rec._codice_dipendente ? +1 : -1;
 | |
|     
 | |
|   if (_fine_rapporto != rec._fine_rapporto)                      
 | |
|     return _fine_rapporto > rec._fine_rapporto ? +1 : -1;
 | |
|     
 | |
|   if (_lavoro_precedente != rec._lavoro_precedente)  
 | |
|     return _lavoro_precedente ? +1 : -1;
 | |
|     
 | |
|   if (_causa != rec._causa)  
 | |
|     return _causa > rec._causa ? +1 : -1;
 | |
|     
 | |
|   if (_rettifica_conguaglio != rec._rettifica_conguaglio)  
 | |
|     return _rettifica_conguaglio > rec._rettifica_conguaglio ? +1 : -1;
 | |
|                                                                        
 | |
|   return _numero_progressivo - rec._numero_progressivo;                                                                     
 | |
| }
 | |
| 
 | |
| int TDipendenti::find(long cod) const
 | |
| {
 | |
|   for (int i = _data.last(); i >= 0; i--)
 | |
|     if (dip(i).codice() == cod)
 | |
|       break;
 | |
|   return i;    
 | |
| }
 | |
| 
 | |
| int TDipendenti::fill(TCursor& cur)
 | |
| {
 | |
|   for (cur = 0; cur.ok(); ++cur)
 | |
|   {
 | |
|     TDipendente* n = new TDipendente(cur);
 | |
|     if (n->pos() >= 0)
 | |
|       _data.add(n);
 | |
|     else
 | |
|       delete n;  
 | |
|   } 
 | |
|   const int i = _data.items();
 | |
|   if (i > 0)
 | |
|   {
 | |
|     _data.sort();
 | |
|     for (int d = i-1; d >= 0; d--)
 | |
|     {
 | |
|       const long coddec = dip(d).codice_deceduto();
 | |
|       if (coddec > 0)                     // E' un erede!
 | |
|       {
 | |
|         int posdec = find(coddec);
 | |
|         if (posdec >= 0 && posdec != d-1) // Il deceduto esiste
 | |
|         {
 | |
|           TDipendente* dipen = (TDipendente*)_data.remove(d, TRUE);
 | |
|           if (d < posdec)                 // Se l'erede precede il defunto ...
 | |
|             posdec--;                     // ... il defunto avanza di un posto!
 | |
|           dipen->reset_deceduto();        // Non e' piu' un erede
 | |
|           _data.insert(dipen, posdec+1);  // Attaccalo dietro al deceduto
 | |
|         }  
 | |
|       }
 | |
|     }
 | |
|   }  
 | |
|   return i;
 | |
| }
 | |
| 
 | |
| void TQuadroA::azzera_totali() 
 | |
| { 
 | |
|   TPrint_section& totali = section('F', last_page);
 | |
|   totali.reset();                                   // Azzera le righe
 | |
|   
 | |
|   for (int i = totali.fields()-1; i >= 0; i--)
 | |
|     totali.field(i).set("");                        // Azzera i campi
 | |
| }
 | |
| 
 | |
| void TQuadroA::preprocess_corpo(const TRectype& rec)
 | |
| {
 | |
|   if (rec.num() == LF_QUAA)
 | |
|   {
 | |
|     const bool lav_prec = rec.get("CFDLPREC").not_empty();
 | |
|     const char rett_con = toupper(rec.get_char("RETCON"));
 | |
| 
 | |
|     const bool add = !lav_prec && rett_con != 'B';
 | |
|     enable_message_add(add);
 | |
|     
 | |
|     // Nasconde i dati anagrafici quando rett_con = B
 | |
|     TPrint_section& body = section('B', odd_page);
 | |
|     for (int i = 2; i <= 12; i++)
 | |
|     {
 | |
|       TForm_item& f = body.find_field(i);
 | |
|       f.enable(rett_con != 'B');
 | |
|     }
 | |
|         
 | |
|     // Stampa solo le date di fine rapporto del 95
 | |
|     TForm_item& datafr = body.find_field(16);
 | |
|     const TDate dfr = rec.get("DATAFR");
 | |
|     datafr.enable(dfr.year() == 1995);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TQuadroA::stampa_corpo(TPrinter& pr)
 | |
| {
 | |
|   TPrint_section& body = section('B', odd_page);
 | |
|   const int body_righe = body.height();  
 | |
|   body.reset();
 | |
|   body.update();       
 | |
| 
 | |
|   for (int i = 0; i < body_righe; i++)
 | |
|   {
 | |
|     pr.print(body.row(i));
 | |
|     _RigaCorr++;
 | |
|   }
 | |
| 
 | |
|   if (usa_progind())
 | |
|     progind()->addstatus(1);
 | |
| }
 | |
| 
 | |
| 
 | |
| int TQuadroA::calcola_firma()
 | |
| {
 | |
|   TPrint_section& totali = section('F', last_page);
 | |
|   TForm_item& signature = totali.find_field(2);
 | |
|   const int y = signature.y()-1;
 | |
|   
 | |
|   TString cognome = signature.get();
 | |
|   if (cognome.len() > 30 && cognome[29] == ' ')
 | |
|   {
 | |
|     TString nome = cognome.mid(30, -1);
 | |
|     cognome.cut(30); cognome.trim();
 | |
|     cognome << ' ' << nome;
 | |
|     signature.set(cognome);
 | |
|   }   
 | |
|   totali.row(y).reset();
 | |
|   totali.row(y).put(cognome, signature.x()-1);
 | |
|   
 | |
|   return y;
 | |
| }
 | |
| 
 | |
| void TQuadroA::stampa_totali(TPrinter& pr) 
 | |
| { 
 | |
|   TPrint_section& totali = section('F', last_page);
 | |
|   totali.update();
 | |
| 
 | |
|   const int lasty = calcola_firma();
 | |
|   
 | |
|   for (int i = 0; i <= lasty; i++)
 | |
|   {
 | |
|     pr.print(totali.row(i));
 | |
|     _RigaCorr++;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TQuadroA::stampa_firma(TPrinter& pr) 
 | |
| { 
 | |
|   TPrint_section& totali = section('F', last_page);
 | |
|   totali.update();
 | |
|   
 | |
|   const int lasty = calcola_firma();
 | |
|   
 | |
|   TPrintrow empty;
 | |
|   
 | |
|   for (int i = 0; i <= lasty; i++)
 | |
|   { 
 | |
|     if (i < lasty)
 | |
|       pr.print(empty);
 | |
|     else  
 | |
|       pr.print(totali.row(i));
 | |
|     _RigaCorr++;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TQuadroA::next_page(TPrinter& pr)
 | |
| {                       
 | |
|   fill_page(pr, -1);   // formfeed "adattato"  
 | |
|   inc_curr_page();
 | |
| }
 | |
| 
 | |
| int TQuadroA::elementi_pagina(PaginaQuadro p) const
 | |
| { 
 | |
|   const int n[4] = { 1, 3, 3, 2 };
 | |
|   return n[p - PRIMA];
 | |
| }
 | |
| 
 | |
| int TQuadroA::prima_riga(PaginaQuadro p) const
 | |
| {
 | |
| //  return p == PRIMA ? 45 : 5;  
 | |
|   return p == PRIMA ? 45 : 6; 
 | |
| }
 | |
| 
 | |
| int TQuadroA::riga_totali(PaginaQuadro p) const
 | |
| {                                 
 | |
|   const int h = ((TQuadroA*)this)->section('B', odd_page).height();
 | |
|   return prima_riga(p) + elementi_pagina(p) * h;
 | |
| } 
 | |
| 
 | |
| bool TQuadroA::init(long codditta)
 | |
| {                            
 | |
|   azzera_totali();
 | |
|   return InitPrint(codditta);
 | |
| }
 | |
| 
 | |
| bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis)
 | |
| {  
 | |
|   TCursor& cur = *cursor();
 | |
|   TPrinter& pr = printer();
 | |
|     
 | |
|   if (!init(codditta))
 | |
|     return FALSE;
 | |
|     
 | |
| //  pr.formlen(QA_FORMLEN);             
 | |
|   
 | |
|   int elementi = 0;    // Numero di elementi stampati in questa pagina
 | |
|   bool stampato_ultimo = FALSE;
 | |
|   bool stampati_totali = FALSE;
 | |
|   long persone = 0;
 | |
|   int pos = 0;
 | |
|   TDipendenti indice;
 | |
|   if (quadro() == "A" || quadro() == "B")
 | |
|   {                 
 | |
|     persone = indice.fill(cur);
 | |
|     if (persone > 0)
 | |
|     {                     
 | |
|       if (usa_progind()) 
 | |
|         progind()->addstatus(cur.items()-persone);  // Segna come elaborati tutti gli ignorati
 | |
|       
 | |
|       cur = indice[0].pos();
 | |
|     }  
 | |
|     else
 | |
|       return FALSE;  
 | |
|   }         
 | |
|   else
 | |
|   {   
 | |
|     persone = cur.items();
 | |
|     cur = 0;
 | |
|   }  
 | |
|   while (!stampati_totali)
 | |
|   {   
 | |
|     bool stampero_ultimo = (stampato_ultimo == FALSE);
 | |
|     if (stampero_ultimo)
 | |
|     {
 | |
|       if (indice.items() > 0)                          // Usa indice alternativo
 | |
|         stampero_ultimo = (pos == persone-1);
 | |
|       else                                             // Usa indice del cursore
 | |
|         stampero_ultimo = (cur.pos() == persone-1);
 | |
|     }                        
 | |
| 
 | |
|     if (!stampato_ultimo) 
 | |
|       preprocess_corpo(cur.curr());
 | |
|     
 | |
|     switch(_PaginaCorrente)
 | |
|     {                     
 | |
|     case PRIMA: 
 | |
|       pr.formlen(dic_form_len());
 | |
| 
 | |
|       if (_modulaser) 
 | |
|         ClearFlagModulaser();
 | |
|       
 | |
|       if (elementi == 0)
 | |
|       {
 | |
|         stampa_testata(pr);
 | |
|         if (PaginaPosizionamento())
 | |
|           jump_to_line(pr, prima_riga(PRIMA));
 | |
|         else                                   
 | |
|           jump_to_line(pr, prima_riga(PRIMA)+HEADER_PRIMA_NOPOS);        
 | |
|       }
 | |
|       
 | |
|       if (!stampato_ultimo)
 | |
|       {
 | |
|         stampa_corpo(pr);       
 | |
|         stampato_ultimo = stampero_ultimo;
 | |
|       }
 | |
|       
 | |
|       elementi++;
 | |
|       if (elementi >= elementi_pagina(PRIMA))
 | |
|       {
 | |
|         next_page(pr);
 | |
|         _PaginaPosizionamento=FALSE;
 | |
|         elementi = 0;
 | |
|       }  
 | |
|       break;             
 | |
|     case SECONDA:
 | |
|     case TERZA:              
 | |
|       if (!stampato_ultimo)
 | |
|       {
 | |
|         if (elementi == 0)
 | |
|           jump_to_line(pr, prima_riga(_PaginaCorrente));      
 | |
|         stampa_corpo(pr);       
 | |
|         stampato_ultimo = stampero_ultimo;
 | |
|       }
 | |
|       elementi++;
 | |
|       if (elementi >= elementi_pagina(_PaginaCorrente))
 | |
|       {
 | |
|         pr.formlen(dic_form_len());    
 | |
|         next_page(pr);
 | |
|         elementi = 0;
 | |
|       }  
 | |
|       break;
 | |
|     case QUARTA:
 | |
|       if (!stampato_ultimo)
 | |
|       {
 | |
|         if (elementi == 0)
 | |
|           jump_to_line(pr, prima_riga(QUARTA));      
 | |
|         stampa_corpo(pr);       
 | |
|         stampato_ultimo = stampero_ultimo;
 | |
|       }
 | |
|       
 | |
|       elementi++;
 | |
|  
 | |
|       if (elementi >= elementi_pagina(QUARTA))
 | |
|       {                 
 | |
|         jump_to_line(pr, riga_totali(QUARTA));
 | |
|         if (stampato_ultimo)
 | |
|         {
 | |
|           stampa_totali(pr);         // Stampa totali e firma
 | |
|           stampati_totali = TRUE;
 | |
|         }  
 | |
|         else
 | |
|           stampa_firma(pr);          // Stampa solo la firma senza i totali
 | |
| 
 | |
|         // Usato per stampare la VK_ENDDOC in fill_page()
 | |
|         _EndPrintDitta = TRUE;    
 | |
|         pr.formlen(dic_form_len());              
 | |
|         next_page(pr);
 | |
|         elementi = 0;
 | |
|       }
 | |
|       break;
 | |
|     default:
 | |
|       CHECK(0, "Invalid Quadro A page");
 | |
|       break;
 | |
|     }
 | |
|     
 | |
|     if (!stampato_ultimo)
 | |
|     {
 | |
|       if (indice.items() > 0)
 | |
|         cur = indice[++pos].pos();
 | |
|       else
 | |
|         ++cur;
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   close_print();
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroA::user_create()
 | |
| {
 | |
|   _form = new TQuadroA("77QA", quadro());
 | |
| 
 | |
|   TString sortkey(80);
 | |
|   sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP", LF_DIPEND, LF_DIPEND);
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroA::user_destroy()
 | |
| {         
 | |
|   if (_cur)
 | |
|     delete _cur;       
 | |
|   
 | |
|   if (_form)
 | |
|     delete _form;
 | |
| 
 | |
|   return TRUE;
 | |
| }          
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| // Quadro A1
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int TQuadroA1::elementi_pagina(PaginaQuadro p) const
 | |
| {
 | |
|   const int n[4] = { 3, 6, 6, 5 };
 | |
|   return n[p-PRIMA];
 | |
| }
 | |
| 
 | |
| int TQuadroA1::prima_riga(PaginaQuadro p) const
 | |
| {                                
 | |
|   return p == PRIMA ? 32 : 5; 
 | |
| //  return p == PRIMA ? 32 : 4; 
 | |
| }
 | |
| 
 | |
| long TQuadroA1::filtra(const long codditta)
 | |
| {
 | |
|   TString filtr(32); 
 | |
|   filtr.format("(CODDITTA=%ld)&&(ANNORIF=1995)", codditta);
 | |
| 
 | |
|   cursor()->setfilter(filtr, TRUE);   
 | |
|   const long items = cursor()->items();
 | |
| 
 | |
|   return items;
 | |
| }      
 | |
| 
 | |
| void TQuadroA1::preprocess_corpo(const TRectype& rec)
 | |
| {
 | |
|   if (rec.num() == LF_QUAA1)
 | |
|   {
 | |
|     // Stampa solo le date di ricezione del 95
 | |
|     const TDate dr = rec.get("DATARIC26");
 | |
|     TForm_item& dataric = find_field('B', odd_page, 26);  
 | |
|     dataric.enable(dr.year() == 1995);
 | |
|   }
 | |
| }  
 | |
| 
 | |
| bool TStampaQuadroA1::user_create()
 | |
| {
 | |
|   _form = new TQuadroA1("77QA1", quadro());
 | |
|                                                                 
 | |
|   TString sortkey(80);
 | |
|   sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|MESERIF|NPROG", LF_DIPEND, LF_DIPEND);
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| // Quadro A2
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int TQuadroA2::elementi_pagina(PaginaQuadro p) const
 | |
| {
 | |
|   const int n[4] = { 3, 6, 6, 5 };
 | |
|   return n[p-PRIMA];
 | |
| }
 | |
| 
 | |
| int TQuadroA2::prima_riga(PaginaQuadro p) const
 | |
| {
 | |
| //  return p == PRIMA ? 32 : 4;  
 | |
|   return p == PRIMA ? 32 : 5;   
 | |
| }
 | |
| 
 | |
| void TQuadroA2::preprocess_corpo(const TRectype& rec)
 | |
| {                     
 | |
|   if (rec.num() == LF_QUAA2)
 | |
|   {
 | |
|     const char ret_con = toupper(rec.get_char("RETCON"));
 | |
|     const bool add = ret_con != 'B';
 | |
|     enable_message_add(add);
 | |
|     
 | |
|     // Nasconde i dati anagrafici quando rett_con = B
 | |
|     TPrint_section& body = section('B', odd_page);
 | |
|     for (int i = 2; i <= 7; i++)
 | |
|     {
 | |
|       TForm_item& f = body.find_field(i);
 | |
|       f.enable(add);
 | |
|     }
 | |
|   }  
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroA2::user_create()
 | |
| {
 | |
|   _form = new TQuadroA2("77QA2", quadro());
 | |
|                                                                 
 | |
|   TString sortkey(80);
 | |
|   sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|RETCON|NPROG", LF_DIPEND, LF_DIPEND);
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| // Quadro A3
 | |
| /////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int TQuadroA3::elementi_pagina(PaginaQuadro p) const
 | |
| {
 | |
|   const int n[4] = { 6, 10, 10, 9 };
 | |
|   return n[p-PRIMA];
 | |
| }
 | |
| 
 | |
| int TQuadroA3::prima_riga(PaginaQuadro p) const
 | |
| {
 | |
| //  return p == PRIMA ? 32 : 4;  
 | |
|   return p == PRIMA ? 32 : 5;   
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroA3::user_create()
 | |
| {
 | |
|   _form = new TQuadroA3("77QA3", quadro());
 | |
|                                                                 
 | |
|   TString sortkey(80);
 | |
|   sortkey.format("CODDITTA|NPROG|%d->COGNOME|%d->NOME|CODDIP", LF_DIPEND, LF_DIPEND);
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| /////////////////////////////////////////////////////////////////
 | |
| //         QUADRO B
 | |
| /////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int TQuadroB::elementi_pagina(PaginaQuadro p) const
 | |
| {
 | |
|   const int n[4] = { 3, 5, 5, 3 };
 | |
|   return n[p-PRIMA];
 | |
| }
 | |
| 
 | |
| int TQuadroB::prima_riga(PaginaQuadro p) const
 | |
| {
 | |
| //  return p == PRIMA ? 32 : 6;  
 | |
|   return p == PRIMA ? 32 : 7;   
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroB::user_create()
 | |
| {
 | |
|   _form = new TQuadroB("77QB", quadro());
 | |
|                                                                 
 | |
|   TString sortkey(80);
 | |
|   sortkey.format("CODDITTA|%d->COGNOME|%d->NOME|CODDIP|DATAINI|NPROG", LF_DIPEND, LF_DIPEND);
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| //////////////////////////////////////////////////////////////
 | |
| //                QUADRO H
 | |
| //////////////////////////////////////////////////////////////
 | |
| 
 | |
| long TQuadroH::filtra(const long codditta)
 | |
| {
 | |
|   TString filtr(32); 
 | |
|   filtr.format("(CODDITTA=%ld)&&(H1ANNO=1995)", codditta);
 | |
| 
 | |
|   cursor()->setfilter(filtr, TRUE);   
 | |
|   const long items = cursor()->items();
 | |
| 
 | |
|   return items;
 | |
| }      
 | |
| 
 | |
| 
 | |
| void TQuadroH::inc_curr_page()
 | |
| {                      
 | |
|   if (_PaginaCorrente == PRIMA)
 | |
|     _PaginaCorrente = SECONDA;
 | |
|   else
 | |
|     _PaginaCorrente = PRIMA;
 | |
| }
 | |
| 
 | |
| int TQuadroH::elementi_pagina(PaginaQuadro p) const
 | |
| {
 | |
|   return p == PRIMA ? 21 : 27;
 | |
| }
 | |
| 
 | |
| int TQuadroH::prima_riga(PaginaQuadro p) const
 | |
| {
 | |
| //  return p == PRIMA ? 24 : 9;  
 | |
|   return p == PRIMA ? 23 : 9;   
 | |
| }
 | |
| 
 | |
| bool TQuadroH::print(const long codditta, const long NumFis, const long NumNoFis)
 | |
| { 
 | |
|   TCursor& cur = *cursor();
 | |
|   TPrinter& pr = printer();
 | |
|     
 | |
|   if (!InitPrint(codditta))
 | |
|     return FALSE;
 | |
|     
 | |
| //  pr.formlen(QH_FORMLEN);             
 | |
|   
 | |
|   int elementi = 0;    // Numero di elementi stampati in questa pagina
 | |
|   bool stampato_ultimo = FALSE;
 | |
|   bool stampati_totali = FALSE;
 | |
|   
 | |
|   cur = 0;
 | |
|     
 | |
|   while (!stampati_totali)
 | |
|   {   
 | |
|     bool stampero_ultimo = stampato_ultimo == FALSE;
 | |
|     if (stampero_ultimo)
 | |
|         stampero_ultimo &= cur.pos() == cur.items()-1;
 | |
|     
 | |
|     switch(_PaginaCorrente)
 | |
|     {                     
 | |
|     case PRIMA: 
 | |
|       pr.formlen(dic_form_len());
 | |
|       
 | |
|       if (_modulaser) 
 | |
|         ClearFlagModulaser();
 | |
|       
 | |
|       if (elementi == 0)
 | |
|       {
 | |
|         stampa_testata(pr);
 | |
|         if (PaginaPosizionamento())
 | |
|           jump_to_line(pr, prima_riga(PRIMA));
 | |
|         else                                   
 | |
|           jump_to_line(pr, prima_riga(PRIMA)+HEADER_PRIMA_NOPOS);        
 | |
|       }
 | |
|       
 | |
|       if (!stampato_ultimo)
 | |
|       {
 | |
|         stampa_corpo(pr);       
 | |
|         stampato_ultimo = stampero_ultimo;
 | |
|       }
 | |
| 
 | |
|       _EndPrintDitta=stampato_ultimo;
 | |
|             
 | |
|       elementi++;
 | |
|       if (elementi >= elementi_pagina(PRIMA))
 | |
|       {
 | |
|         next_page(pr);
 | |
|         _PaginaPosizionamento=FALSE;
 | |
|         elementi = 0;
 | |
|       }  
 | |
|       break;             
 | |
|     case SECONDA:                
 | |
|       pr.formlen(dic_form_len());    
 | |
|       if (!stampato_ultimo)
 | |
|       {
 | |
|         if (elementi == 0)
 | |
|           jump_to_line(pr, prima_riga(SECONDA));      
 | |
|   
 | |
|         stampa_corpo(pr);       
 | |
|         stampato_ultimo = stampero_ultimo;
 | |
|       }
 | |
|       _EndPrintDitta=stampato_ultimo;
 | |
|             
 | |
|       elementi++;
 | |
|  
 | |
|       if (elementi >= elementi_pagina(SECONDA))
 | |
|       {                 
 | |
|         if (stampato_ultimo)
 | |
|         {
 | |
|           jump_to_line(pr, riga_totali(SECONDA));
 | |
|           stampa_totali(pr);
 | |
|           stampati_totali = TRUE;
 | |
|         }  
 | |
|         else
 | |
|           stampa_firma(pr);
 | |
| 
 | |
|         next_page(pr);
 | |
|         elementi = 0;
 | |
|       }
 | |
|       break;
 | |
|     default:
 | |
|       CHECK(0, "Invalid Quadro H page");
 | |
|       break;
 | |
|     }
 | |
|     
 | |
|     if (!stampato_ultimo)
 | |
|         ++cur;
 | |
|   }
 | |
|   
 | |
|   close_print();
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TStampaQuadroH::user_create()
 | |
| {
 | |
|   _form = new TQuadroH("77QH", quadro());
 | |
|                                                                 
 | |
|   TString sortkey(80);
 | |
| //  sortkey.format("CODDITTA|H1ANNO|H1ENTE"); 
 | |
|   sortkey.format("CODDITTA|H1ENTE");    // Considera solo in 1995
 | |
|   _cur = new TSorted_cursor(_form->TForm::relation(), sortkey);
 | |
|   
 | |
|   return TRUE;
 | |
| }
 |