Files correlati : cg2.exe Ricompilazione Demo : [ ] Commento : Aggiunte traduzioni a cg2 git-svn-id: svn://10.65.10.50/trunk@11006 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			264 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <stdlib.h>
 | 
						|
 | 
						|
#include <diction.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <recarray.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 > ' ')
 | 
						|
  { 
 | 
						|
    int err;
 | 
						|
 | 
						|
    _rec = cache().get(LF_CAUSALI, cod);
 | 
						|
    if (_rec.empty())
 | 
						|
      return FALSE;
 | 
						|
    
 | 
						|
    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);
 | 
						|
    } 
 | 
						|
    
 | 
						|
    const TString16 codreg(_rec.get(CAU_REG));
 | 
						|
    const bool ok = _reg.read(codreg, year);         // Read register
 | 
						|
    if (!ok && codreg.not_empty()) 
 | 
						|
      return error_box(FR("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())
 | 
						|
    {
 | 
						|
      const TRectype& da = cache().get("%DPN", cod);
 | 
						|
      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); }
 | 
						|
 | 
						|
bool TCausale::soloiva() const 
 | 
						|
{ return _rec.get_bool(CAU_SOLOIVA); }
 | 
						|
 | 
						|
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;
 | 
						|
  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(FR("Tipo documento '%s' incompatibile con tipo registro"), (const char*)td);
 | 
						|
        i = iva_errata;
 | 
						|
      }  
 | 
						|
      c = tpd.get_bool("B0");                       // B0 flag corrispettivi
 | 
						|
    }
 | 
						|
    else error_box(FR("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 = TR("il segnale di sezionale");
 | 
						|
  if (intra() != c.intra()) err = TR("la gestione dei movimenti intra");
 | 
						|
  if (valuta() != c.valuta()) err = TR("la gestione valuta");
 | 
						|
  if (valintra() != c.valintra()) err = TR("la gestione valuta intracomunitaria");
 | 
						|
  if (corrispettivi() != c.corrispettivi()) err = TR("la gestione dei corrispettivi");
 | 
						|
  if (iva() != c.iva()) err = TR("il tipo di IVA"); 
 | 
						|
  if (tipomov() != c.tipomov()) err = TR("il tipo di movimento");
 | 
						|
  
 | 
						|
  if (*err)  
 | 
						|
    error_box(FR("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();  
 | 
						|
}
 | 
						|
 
 | 
						|
 
 | 
						|
 |