From 997973b64539922bf28499f6613525520f3acf03 Mon Sep 17 00:00:00 2001
From: ale <ale@c028cbd2-c16b-5b4b-a496-9718f37d4682>
Date: Fri, 18 Oct 1996 13:24:49 +0000
Subject: [PATCH] - Sistemato il seguente errore: quando la distinta del quadro
 G occupa piu' di un modulo bisogna stampare prima 2 pagine bianche del quadro
 G.

git-svn-id: svn://10.65.10.50/trunk@3798 c028cbd2-c16b-5b4b-a496-9718f37d4682
---
 m770/77qgd.frm |  90 ++++++++++++++++++
 m770/77stq.cpp | 241 +++++++++++--------------------------------------
 2 files changed, 142 insertions(+), 189 deletions(-)

diff --git a/m770/77qgd.frm b/m770/77qgd.frm
index e982aa381..9c0b28354 100755
--- a/m770/77qgd.frm
+++ b/m770/77qgd.frm
@@ -50,6 +50,96 @@ END
 
 END
 
+SECTION HEADER LAST 18
+
+STRINGA 1
+BEGIN
+  KEY "CODICE FISCALE"
+  PROMPT 4 11  ""
+  FIELD 106@->COFI
+END
+
+STRINGA 2
+BEGIN
+  KEY "RAGIONE SOCIALE"
+  PROMPT 39 11  ""
+  FIELD 106@->RAGSOC
+END
+
+STRINGA 3
+BEGIN
+  KEY "COGNOME"
+  PROMPT 39 11 ""
+  FIELD 106@->RAGSOC[1,30]
+  GROUP 1   
+  FLAGS "H"
+END
+
+STRINGA 4
+BEGIN
+  KEY "NOME"
+  PROMPT 17 13 ""
+  FIELD 106@->RAGSOC[31,50]
+  GROUP 1  
+  FLAGS "H"
+END
+
+STRINGA 5
+BEGIN
+  KEY "COMUNE DI RES."
+  PROMPT 17 13 ""
+  FIELD 413@->DENCOM
+END
+
+STRINGA 6
+BEGIN
+  KEY "PROV DI RES."
+  PROMPT 58 13 ""
+  FIELD 413@->PROVCOM
+END
+
+STRINGA 7
+BEGIN
+  KEY "VIA di RES."
+  PROMPT 65 13  ""   
+  FIELD 106@->INDRF 
+  FIELD 106@->INDRES
+  GROUP 4  
+END
+
+STRINGA 8
+BEGIN
+  KEY "NUM. CIVICO di RES."
+  PROMPT 101 13 "" 
+  FIELD 106@->CIVRF
+  FIELD 106@->CIVRES
+  GROUP 4  
+END
+
+STRINGA 9
+BEGIN
+  KEY "CAP"
+  PROMPT 122 13 "" 
+  FIELD 106@->CAPRF
+  FIELD 106@->CAPRES
+  GROUP 4
+END
+
+STRINGA 13
+BEGIN
+  KEY "CODICE FISCALE DICHIARANTE"
+  PROMPT 118 16  ""
+END
+
+STRINGA 14
+BEGIN
+  KEY "NUM. FOGLIO"
+  PROMPT 120 17  ""  
+  FLAGS "H"
+END
+
+END
+
 SECTION BODY ODD 8
 
 STRINGA 1
diff --git a/m770/77stq.cpp b/m770/77stq.cpp
index 9bdb67e0e..727f9d275 100755
--- a/m770/77stq.cpp
+++ b/m770/77stq.cpp
@@ -1065,8 +1065,8 @@ bool TQuadroG::print(const long codditta, const long NumFis, const long NumNoFis
 
   _PaginaCorrente = PRIMA;      
   
-  if (!InitPrint(codditta))
-    return FALSE;
+/*  if (! */InitPrint(codditta); /*)*/
+//    return FALSE;
 
   for (int pagina=1; pagina <= QG_PAGINE; pagina++, next_page(pr))
   {
@@ -1117,6 +1117,9 @@ class TDistintaG : public TQuadroG
     int calcola_firma();
   public:                 
     virtual bool  print(const long codditta, const long NumFis, const long NumNoFis);
+
+    void stampa_testata_quadroG(TPrinter& pr);
+    
     TDistintaG(const char* form, const char* quadro) : TQuadroG(form,quadro) {}
     virtual ~TDistintaG() {} 
 };      
@@ -1161,7 +1164,7 @@ void TDistintaG::stampa_totali(TPrinter& pr, bool tot)
     {
       TPrint_section& totali = section('F', even_page);
       totali.update();
-      const int lasty = calcola_firma();      
+      const int lasty = calcola_firma() - 1;      
       for (int i = 0; i < totali.items(); i++)
       {      
         TPrintrow& row = totali.row(i);
@@ -1215,6 +1218,45 @@ void TDistintaG::set_body(TPrinter& pr, const char tipo)
     progind()->addstatus(1);
 }
 
+void TDistintaG::stampa_testata_quadroG(TPrinter& pr)
+{
+  TPrint_section& head = section('H', last_page);
+  const word r = head.height()-1;
+  TPrintrow& head_row = head.row(r-1);                    
+
+// Setta il cod.fis. del dichiarante se necessario
+  if (tipo_ditta() == estinto)
+  {
+    TForm_item& cfd = head.find_field(H_COFI_DIC);
+    cfd.set(_cofi_dic);
+  }  
+// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son
+// senza le righe del posizionamento...)
+  int righedasaltare=HEADER_PRIMA_NOPOS;
+  head.update();  
+  for (word j = 0; j <= r; j++)
+  {
+    if (j==0)
+    {        
+      if (_modulaser)
+      {
+        TPrintrow& r = head.row(j);
+        if (!_GiaMessoStartDoc)
+          put_modulaser(r, STARTDOC);     
+        put_modulaser(r, STARTDITTA);
+        put_modulaser(r, STARTPAGE, 1);
+        pr.print(r);
+        _RigaCorr++;
+        r.reset();
+        righedasaltare--;
+      }
+      if (!PaginaPosizionamento())
+        fill_page(pr, righedasaltare);
+    }             
+    pr.print(head.row(j));
+    _RigaCorr++;
+  }
+}
 
 bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoFis)
 {                             
@@ -1387,6 +1429,12 @@ bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoF
           stampa_totali(pr,FALSE);
           
         _EndPrintDitta = _finite_fis && _finite_nofis;  
+        if (!_EndPrintDitta)           
+        {                             // Se la distinta occupa piu' di un modulo devo fare in modo
+          next_page(pr);              // che vengano stampate la testata del quadro G piu' le prime
+          stampa_testata_quadroG(pr); // due pagine vuote prima di continuare a stampare la distinta
+          next_page(pr);
+        }
       }
     }  // for pagina..
   } // while !EndPrintDitta
@@ -1398,194 +1446,8 @@ bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoF
   }  
   
   return TRUE;
-
-/*
-  VECCHIA PRINT DELLA DISTINTA
-  TCursor* cur = cursor();
-  
-  bool StabilitaInesistenzaNoFis = FALSE;
-  bool StabilitaInesistenzaFis = FALSE;  
-  long CtrFis   = NumFis;
-  long CtrNoFis = NumNoFis;
-  long PtrFis = -1L, PtrNoFis=-1L;
-  TPrinter& pr = printer();
-      
-  _CtrFisStampati = _CtrNoFisStampati = 0;
-  _finite_fis = _finite_nofis = FALSE;
-  _GiaStampatiFis = _GiaStampatiNoFis = FALSE;
-  _EndPrintDitta = FALSE;  // Vero se stampato l'ultimo record
-  bool LastRecord = FALSE; // Vero se letto l'ultimo record
-  _PaginaCorrente = PRIMA;      
-  
-  _codditta = codditta;  
-  _RigaCorr = 0;  
-
-  const long items = filtra(codditta);    
-
-  while (!_EndPrintDitta)
-  {
-    for (int pagina=1; pagina <= QGD_PAGINE; pagina++, next_page(pr))
-    {
-      pr.formlen(QGD_FORMLEN);             
-      
-      if (_PaginaCorrente == PRIMA)
-      {                      
-          _EndPrintDitta=(_finite_fis && _finite_nofis);
-          
-          if (_EndPrintDitta )
-            break;
-            
-          if (_finite_fis || StabilitaInesistenzaFis)
-            break;
-
-        if (_modulaser) ClearFlagModulaser();
-
-        for (int righe=0; righe < QGD_RIGHE_PRIMA; righe++)
-        {
-// Stampa intestazione, solo sul primo foglio.
-          if (!righe)    
-          {
-            (*cur) = PtrFis >= 0L ? PtrFis : 0L;
-            stampa_testata(pr);
-          }
-        
-// La prima volta si deve posizionare sul primo record di p.f.
-          if (PtrFis<0L && !StabilitaInesistenzaFis)
-          {
-            bool Trovato = FALSE;
-
-            while (!Trovato)
-            {
-              const long ditta = cur->curr().get_long(QGD_CODDITTA);
-              if (ditta != codditta)
-                break;
-              const char tipo = cur->curr().get(QGD_TIPOA)[0];
-              if (tipo != 'G')
-              {
-                PtrFis  = cur->pos();
-                Trovato = TRUE;
-                break;
-              } 
-              else
-                ++(*cur);            
-            }                                        
-            StabilitaInesistenzaFis = !Trovato;
-          }
-
-          if (StabilitaInesistenzaFis)
-          {
-             _finite_fis=TRUE;
-            break;            
-          }
-         
-          (*cur) = PtrFis;
-          const char tipo = cur->curr().get(QGD_TIPOA)[0];
-      
-          if (tipo != 'F')      
-            break;
-          else
-          {
-            CtrFis--;
-            if (CtrFis == 0L) _finite_fis = TRUE;
-            set_body(pr, 'F');
-// La stampa e' finita se ho STAMPATO l'ultimo record
-            LastRecord     = cur->pos() >= items-1;
-            _EndPrintDitta = LastRecord;
-            if (!LastRecord)
-            {
-              ++(*cur);
-              PtrFis     = cur->pos();
-              LastRecord = cur->pos() >= items-1;
-            }
-          }
-        }   // for righe..
-        PtrFis = cur->pos();
-      }
-
-      if (_PaginaCorrente == SECONDA)
-      {
-// Reset del flag di pagina con posiz.      
-        if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE;
-        for (int righe=0; righe < QGD_RIGHE_SECONDA; righe++)
-        {
-          if (!righe)
-            _CtrNoFisStampati = 0;
-
-// All'inizio salta le righe in alto
-          if (!righe)
-            fill_page(pr, HEADER_SECONDA_GD);
-
-          if (_finite_nofis || StabilitaInesistenzaNoFis)
-            break;
-
-// La prima volta si deve posizionare sul primo record di p.g.
-          if (PtrNoFis<0L && !StabilitaInesistenzaNoFis)
-          {
-            bool Trovato = FALSE;
-            bool eof = FALSE;
-            (*cur) = PtrFis-1 > 0L ? PtrFis-1 : 0L;  // parti dall'inizio
-            while (!Trovato && !eof)
-            {
-              eof = cur->pos() >= items-1;                    
-              const char tipo = cur->curr().get(QGD_TIPOA)[0];
-              if (tipo == 'G')
-              {
-                PtrNoFis = cur->pos();
-                Trovato = TRUE;
-                break;
-              }
-              else
-                ++(*cur);            
-            }                                        
-            StabilitaInesistenzaNoFis = !Trovato;
-          }
-
-// Gestisce i casi in cui non ci sono percipienti nella distinta..
-//          if (items==0) _EndPrintDitta=TRUE;                    
-          
-          if (StabilitaInesistenzaNoFis)
-          {
-            _finite_nofis=TRUE;
-            break;             
-          }
-        
-          (*cur) = PtrNoFis;
-          const char tipo = cur->curr().get(QGD_TIPOA)[0];
-
-          if (tipo != 'G')      
-            break;
-          else
-          {
-            CtrNoFis--;                          
-            if (CtrNoFis == 0L) _finite_nofis = TRUE;          
-            set_body(pr, 'G'); 
-            LastRecord     = cur->pos() >= items-1;                    
-            _EndPrintDitta = LastRecord;
-            _CtrNoFisStampati++;   
-            if (!LastRecord)
-            {
-              ++(*cur);
-              PtrNoFis   = cur->pos();
-              LastRecord = cur->pos() >= items-1;          
-            }
-          }
-        }          
-        PtrNoFis = cur->pos();
-      }
-    }  // for pagina..
-  } // while !EndPrintDitta
-  
-  if (usa_progind()) 
-  {
-    delete _prog;
-    _prog = NULL;
-  }  
-  
-  return TRUE;  
-*/  
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////
@@ -3000,6 +2862,7 @@ bool TStampaQuadroG::print_quadro(const int OffsetDitta, const bool modulaser)
 
     items_g  = _form_g->filtra(codditta);
     items_gd = _form_gd->filtra(codditta);
+    if (items_g == 0 && items_gd == 0) continue;
     
 // Dice al form quanto e' lunga la progress-bar      
     _form_g->set_items_gd(items_g, items_gd);