cg0500?.uml Aggiustate maschere cg2100.cpp Gestione cespiti cg2100?.uml Aggiustate maschere cg2103.cpp Aggiunti metodo a TCausale per cespiti cg2200.cpp Gestione movimenti provvisori dei cespiti cglib01.cpp Aggiunstata indentazione git-svn-id: svn://10.65.10.50/trunk@4852 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			273 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <stdlib.h>
 | |
| 
 | |
| #include <prefix.h>
 | |
| #include <tabutil.h>
 | |
| 
 | |
| #include "cg2103.h"
 | |
| 
 | |
| #include <causali.h>
 | |
| #include <rcausali.h>
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // Causale
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| TCausale::TCausale(const char* cod, int year) 
 | |
|         : TArray(12), _rec(LF_CAUSALI), 
 | |
|           _iva(iva_errata), _corrisp(FALSE),
 | |
|           _sezione_clifo(' '), _sezione_ritsoc(' ')
 | |
| {
 | |
|   if (*cod) read(cod, year);
 | |
| }
 | |
| 
 | |
| 
 | |
| // Legge le righe della causale attualmente selezionata sulla maschera
 | |
| bool TCausale::read(const char* cod, int year)
 | |
| {
 | |
|   _rec.zero();                                        // Delete header
 | |
|   destroy();                                          // Delete all rows
 | |
|   _iva = iva_errata;                                  // Delete misc info
 | |
|   _sezione_clifo = _sezione_ritsoc = ' ';
 | |
|   _corrisp = FALSE;
 | |
| 
 | |
|   if (*cod > ' ')
 | |
|   {
 | |
|     TLocalisamfile caus(LF_CAUSALI);
 | |
|     caus.put(CAU_CODCAUS, cod);
 | |
| 
 | |
|     int err = caus.read();
 | |
|     if (err != NOERR) 
 | |
|       return FALSE;
 | |
|     _rec = caus.curr();
 | |
|     
 | |
|     TLocalisamfile rcaus(LF_RCAUSALI);                        
 | |
|     rcaus.put(CAU_CODCAUS, cod);
 | |
|     rcaus.put(CAU_NRIGA, 0);          
 | |
|     
 | |
|     for (err = rcaus.read(_isgteq);                       // Find first line
 | |
|          err == NOERR && rcaus.get(CAU_CODCAUS) == cod;
 | |
|          err = rcaus.next()                               // Read next line
 | |
|          )
 | |
|     {
 | |
|       const int riga = rcaus.get_int(CAU_NRIGA);
 | |
|       add(rcaus.curr(), riga);
 | |
|     } 
 | |
|     
 | |
| /*    
 | |
|     rcaus.zero();                                      
 | |
|     for (int riga = 1; riga < size(); riga++)          // Fill gaps
 | |
|       if (row(riga) == NULL) add(rcaus.curr(), riga);
 | |
| */
 | |
|   
 | |
|     const TString codreg(caus.get(CAU_REG));
 | |
|     const bool ok = _reg.read(codreg, year);         // Read register
 | |
|     if (!ok && codreg.not_empty()) 
 | |
|       return error_box("Non esiste il registro '%s' del %d", 
 | |
|                        (const char*)codreg, year);
 | |
|     calcIVA();
 | |
|   }
 | |
|   else 
 | |
|   {
 | |
|     _iva = nessuna_iva;                                // Clear IVA data
 | |
|     _corrisp = FALSE;
 | |
|     _reg.read("", year);
 | |
|   }                            
 | |
| 
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| 
 | |
| TBill& TCausale::bill(int num, TBill& conto) const
 | |
| {
 | |
|   const TRectype* rec = row(num);
 | |
|   if (rec != NULL)
 | |
|     conto.set(rec->get_int(RCA_GRUPPO), rec->get_int(RCA_CONTO),
 | |
|               rec->get_long(RCA_SOTTOCONTO), rec->get_char(RCA_TIPOCF));
 | |
|   return conto;
 | |
| }   
 | |
| 
 | |
| const char* TCausale::desc_agg(int num) const
 | |
| {         
 | |
|   const char* deag = "";
 | |
|   
 | |
|   const TRectype* rec = row(num);
 | |
|   if (rec != NULL)
 | |
|   {  
 | |
|     const TString& cod = rec->get(RCA_CODDESC);
 | |
|     if (cod.not_empty())
 | |
|     {
 | |
|       TTable da("%DPN");
 | |
|       da.put("CODTAB", cod);
 | |
|       if (da.read() == NOERR)
 | |
|         deag = da.get("S0");
 | |
|     }
 | |
|   }    
 | |
|   
 | |
|   return deag;
 | |
| }   
 | |
| 
 | |
| const char* TCausale::descrizione() const
 | |
| { return _rec.get(CAU_DESCR); }
 | |
| 
 | |
| const char* TCausale::codice() const
 | |
| { return _rec.get(CAU_CODCAUS); }
 | |
| 
 | |
| 
 | |
| bool TCausale::data_doc() const 
 | |
| { return _rec.get_bool(CAU_DATADOC); }
 | |
| 
 | |
| bool TCausale::num_doc() const 
 | |
| { return _rec.get_bool(CAU_NUMDOC); }
 | |
| 
 | |
| bool TCausale::apertura() const 
 | |
| { return _rec.get_char(CAU_MOVAP) == 'A'; }
 | |
| 
 | |
| bool TCausale::chiusura() const 
 | |
| { return _rec.get_char(CAU_MOVAP) == 'C'; }
 | |
| 
 | |
| bool TCausale::sezionale() const 
 | |
| { return _rec.get_bool(CAU_MOVSEZ); }
 | |
| 
 | |
| bool TCausale::valuta() const 
 | |
| { return _rec.get_bool(CAU_MOVVAL); }
 | |
| 
 | |
| bool TCausale::intra() const 
 | |
| { return _rec.get_bool(CAU_INTRACOM); }
 | |
| 
 | |
| bool TCausale::valintra() const 
 | |
| { return _rec.get_bool(CAU_VALINTRA); }
 | |
| 
 | |
| const TString& TCausale::causale_inc_imm() const 
 | |
| { return _rec.get(CAU_CODCAUSIM); }
 | |
| 
 | |
| const TString& TCausale::tipo_doc() const 
 | |
| { return _rec.get(CAU_TIPODOC); }
 | |
| 
 | |
| int TCausale::tipomov() const
 | |
| { return _rec.get_int(CAU_TIPOMOV); }
 | |
| 
 | |
| bool TCausale::saldaconto() const
 | |
| { return tipomov() > 0; }
 | |
| 
 | |
| int TCausale::link_m770() const
 | |
| { return _rec.get_int(CAU_M770); }
 | |
| 
 | |
| char TCausale::link_cespiti() const
 | |
| { return _rec.get_char(CAU_COLLCESP); }
 | |
| 
 | |
| bool TCausale::ok() const
 | |
| {
 | |
|   if (iva() == iva_errata) 
 | |
|     return FALSE;
 | |
|   
 | |
|   if (corrispettivi() != reg().corrispettivi())
 | |
|     return error_box("Tipo documento e registro incongruenti per i corrispettivi");
 | |
|   
 | |
|   return TRUE;  
 | |
| }
 | |
| 
 | |
| 
 | |
| char TCausale::sezione(int riga) const
 | |
| { 
 | |
|   const TRectype* rec = row(riga);
 | |
|   char sez = rec ? toupper(rec->get_char(RCA_SEZIONE)) : ' ';
 | |
|   if (sez <= ' ')                                  // Guess section on tipocf
 | |
|   {
 | |
|     const TRectype* uno = row(1);
 | |
|     char tipocf = uno ? toupper(uno->get_char(RCA_TIPOCF)) : ' ';
 | |
|     if (tipocf <= ' ') 
 | |
|       tipocf = (iva() == iva_vendite) ? 'C' : 'F'; // Guess tipocf on IVA
 | |
|     sez = (tipocf == 'C') ? 'D' : 'A';
 | |
|   }  
 | |
|   return sez;
 | |
| }
 | |
| 
 | |
| char TCausale::sezione_clifo()
 | |
| {
 | |
|   if (_sezione_clifo == ' ')
 | |
|     _sezione_clifo = sezione(1);
 | |
|   return _sezione_clifo;
 | |
| }
 | |
| 
 | |
| char TCausale::sezione_ritsoc()
 | |
| {
 | |
|   if (_sezione_ritsoc == ' ')
 | |
|     _sezione_ritsoc = sezione(9);
 | |
|   return _sezione_ritsoc;
 | |
| }
 | |
| 
 | |
| void TCausale::calcIVA()
 | |
| {
 | |
|   TipoIVA i = nessuna_iva;                          // Tipo IVA di default
 | |
|   bool c = FALSE;                                   // Corrispettivi di default
 | |
|     
 | |
|   const TString& td = tipo_doc();
 | |
|   if (td.not_empty())
 | |
|   {
 | |
|     TTable tpd("%TPD");
 | |
|     tpd.put("CODTAB", td);
 | |
|     if (tpd.read() == NOERR)
 | |
|     {
 | |
|       i = (TipoIVA)tpd.get_int("I0");               // IVA acquisti, vendite, generica
 | |
|       const TipoIVA ri = _reg.iva();
 | |
|       if (i == iva_generica)
 | |
|         i = ri;
 | |
|       if (i != ri) 
 | |
|       {
 | |
|         error_box("Tipo documento '%s' incompatibile con tipo registro", (const char*)td);
 | |
|         i = iva_errata;
 | |
|       }  
 | |
|       c = tpd.get_bool("B0"); 
 | |
|     }
 | |
|     else error_box("Tipo documento sconosciuto: '%s'", (const char*)td);
 | |
|   }
 | |
|   _iva = i;                    
 | |
|   _corrisp = c;          
 | |
| }  
 | |
| 
 | |
| bool TCausale::similar(const TCausale& c) const
 | |
| {                                         
 | |
|   const char* err = "";
 | |
|   if (sezionale() != c.sezionale()) err = "il segnale di sezionale";
 | |
|   if (intra() != c.intra()) err = "la gestione dei movimenti intra";
 | |
|   if (valuta() != c.valuta()) err = "la gestione valuta";
 | |
|   if (valintra() != c.valintra()) err = "la gestione valuta intracomunitaria";
 | |
|   if (corrispettivi() != c.corrispettivi()) err = "la gestione dei corrispettivi";
 | |
|   if (iva() != c.iva()) err = "il tipo di IVA"; 
 | |
|   if (tipomov() != c.tipomov()) err = "il tipo di movimento";
 | |
|   
 | |
|   if (*err)  
 | |
|     error_box("La causale e' diversa per %s", err);
 | |
|   
 | |
|   return *err ? FALSE : TRUE;
 | |
| }
 | |
|  
 | |
| bool TCausale::IVA2bill(const TCodiceIVA& iva, TBill& c) const
 | |
| {
 | |
|   const TString& tipo = iva.tipo();
 | |
|   
 | |
|   if (tipo.not_empty())
 | |
|   {
 | |
|     if (tipo == "ES") bill(5, c); else
 | |
|       if (tipo == "NI") bill(6, c); else
 | |
|         if (tipo == "NS") bill(7, c);
 | |
|   }  
 | |
| 
 | |
|   if (!c.ok()) 
 | |
|     bill(2, c);
 | |
|   
 | |
|   const int spric = c.tipo_cr();
 | |
|   if (spric == 2 || spric == 3)
 | |
|   {
 | |
|     const TString& td = tipo_doc();
 | |
|     if (td == "FV" || td == "NC") 
 | |
|       c.tipo_cr(4);
 | |
|   } 
 | |
|   
 | |
|   return c.ok();  
 | |
| }
 | |
|  
 | |
|  
 | |
| 
 |