funzionalmente (ricerche su tabelle che non esistono) git-svn-id: svn://10.65.10.50/trunk@270 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			383 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			383 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <tabutil.h>
 | 
						|
 | 
						|
#include "cg0501.h"
 | 
						|
 | 
						|
#include <causali.h>
 | 
						|
 | 
						|
 | 
						|
const char* iva2name(TipoIVA iva)
 | 
						|
{
 | 
						|
  const char* i;
 | 
						|
  switch(iva)
 | 
						|
  {
 | 
						|
  case nessuna_iva : 
 | 
						|
    i = "Nessuna IVA"; break;
 | 
						|
  case iva_acquisti: 
 | 
						|
    i = "IVA Acquisti"; break;
 | 
						|
  case iva_vendite : 
 | 
						|
    i = "IVA Vendite"; break;
 | 
						|
  case iva_generica: 
 | 
						|
    i = "IVA Generica"; break;
 | 
						|
    default          : 
 | 
						|
    i = "IVA ERRATA!"; break;
 | 
						|
  }
 | 
						|
  
 | 
						|
  return i;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Registro
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
TRegistro::TRegistro(const char* cod, int year) : _rec(LF_TAB), _att(LF_ATTIV)
 | 
						|
{
 | 
						|
  read(cod, year);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TRegistro::read(const char* cod, int year)
 | 
						|
{               
 | 
						|
  if (year <= 0) 
 | 
						|
  {
 | 
						|
    const TDate oggi(TODAY);
 | 
						|
    year = oggi.year();
 | 
						|
  }
 | 
						|
 | 
						|
  int err = ~NOERR;
 | 
						|
  
 | 
						|
  TTable reg("REG");
 | 
						|
  if (cod && *cod > ' ')
 | 
						|
  {
 | 
						|
    TString16 chiave;
 | 
						|
    chiave << year << cod;
 | 
						|
    reg.put("CODTAB", chiave);
 | 
						|
    err = reg.read(); 
 | 
						|
  }
 | 
						|
  _rec = reg.curr();
 | 
						|
  
 | 
						|
  if (_att.ok())  
 | 
						|
    _att.zero();
 | 
						|
  if (err != NOERR)
 | 
						|
    _rec.zero();
 | 
						|
  return err == NOERR;
 | 
						|
}           
 | 
						|
 | 
						|
 | 
						|
int TRegistro::year() const 
 | 
						|
{ return ok() ? atoi(_rec.get("CODTAB")) : 0; }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
TRegistro& TRegistro::operator =(const TRegistro& r)
 | 
						|
{ 
 | 
						|
  _rec = r._rec; 
 | 
						|
  _att = r._att;
 | 
						|
  return *this;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int TRegistro::tipo() const
 | 
						|
{
 | 
						|
  const int t = ok() ? _rec.get_int("I0") : 0;
 | 
						|
  return t;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TRegistro::corrispettivi() const
 | 
						|
{
 | 
						|
  const bool c = ok() ? _rec.get_bool("B0") : FALSE;
 | 
						|
  return c;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
TipoIVA TRegistro::iva() const
 | 
						|
{ 
 | 
						|
  TipoIVA i = (TipoIVA)tipo();
 | 
						|
  if (i != nessuna_iva && i != iva_vendite && i != iva_acquisti)
 | 
						|
  {
 | 
						|
    error_box("Il registro '%s' non e' un registro IVA o contabile: tipo %d", 
 | 
						|
              (const char*)name(), i);
 | 
						|
    i = nessuna_iva;
 | 
						|
  }
 | 
						|
  return i;     
 | 
						|
} 
 | 
						|
 | 
						|
bool TRegistro::read_att()
 | 
						|
{
 | 
						|
  if (!_att.empty()) 
 | 
						|
    return TRUE;
 | 
						|
 | 
						|
  TLocalisamfile attiv(LF_ATTIV);
 | 
						|
  attiv.put("CODDITTA", MainApp()->get_firm());
 | 
						|
  attiv.put("CODATT", attivita());
 | 
						|
  const int err = attiv.read();
 | 
						|
  _att = attiv.curr();
 | 
						|
  if (err != NOERR)
 | 
						|
    _att.zero();
 | 
						|
  
 | 
						|
  return err == NOERR;
 | 
						|
}
 | 
						|
 | 
						|
bool TRegistro::agenzia_viaggi()
 | 
						|
{                             
 | 
						|
  if (iva() != iva_vendite)
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
  bool av = FALSE;
 | 
						|
  if (read_att()) av = _att.get_bool("REG74TER");
 | 
						|
  
 | 
						|
  return av;
 | 
						|
}
 | 
						|
 | 
						|
const TString& TRegistro::tipo_attivita()
 | 
						|
{
 | 
						|
  read_att();
 | 
						|
  return _att.get("TIPOATT");
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// Certified 99%                       
 | 
						|
bool TRegistro::update(long protiva, const TDate& datareg)
 | 
						|
{ 
 | 
						|
  bool updated = TRUE;
 | 
						|
  
 | 
						|
  if (protiva > _rec.get_long("I5"))
 | 
						|
  {
 | 
						|
    _rec.put("I5", protiva);
 | 
						|
    updated = FALSE;
 | 
						|
  }  
 | 
						|
  if (datareg > _rec.get_date("D2"))
 | 
						|
  {
 | 
						|
    _rec.put("D2", datareg);
 | 
						|
    updated = FALSE;
 | 
						|
  }  
 | 
						|
  if (!updated)
 | 
						|
  { 
 | 
						|
    TTable reg("REG");
 | 
						|
    updated = reg.rewrite(_rec) == NOERR;
 | 
						|
  }  
 | 
						|
  
 | 
						|
  return updated;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Libro giornale
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
// Legge il libro giornale dell'anno specificato
 | 
						|
bool TLibro_giornale::read(int y)
 | 
						|
{
 | 
						|
  if (y <= 0) 
 | 
						|
  {
 | 
						|
    const TDate oggi(TODAY);
 | 
						|
    y = oggi.year();
 | 
						|
  }
 | 
						|
  
 | 
						|
  TTable reg("REG");
 | 
						|
  bool found = FALSE;                 
 | 
						|
  
 | 
						|
  TString16 anno; anno.format("%-4d", y);
 | 
						|
  
 | 
						|
  reg.setkey(1);                                  
 | 
						|
  reg.put("CODTAB", anno);                    // Cerca il primo registro dell'anno y
 | 
						|
  
 | 
						|
  for (int err = reg.read(_isgteq); err == NOERR; err = reg.next())
 | 
						|
  {
 | 
						|
    if (strncmp(reg.get("CODTAB"), anno, 4) != 0) break;
 | 
						|
    if (reg.get_int("I0") == libro_giornale)
 | 
						|
    {       
 | 
						|
      found = TRUE;
 | 
						|
      break;
 | 
						|
    }  
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (!found) reg.zero();                     // Memorizza record (anche vuoto)
 | 
						|
  _rec = reg.curr();
 | 
						|
  
 | 
						|
  return found;
 | 
						|
}
 | 
						|
 | 
						|
TLibro_giornale::TLibro_giornale(int y)
 | 
						|
{
 | 
						|
  read(y);
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Causale
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
TCausale::TCausale(const char* cod, int year) 
 | 
						|
: TArray(12), _rec(LF_CAUSALI), _iva(iva_errata)
 | 
						|
{
 | 
						|
  if (*cod) read(cod, year);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// Legge le righe della causale attualmente selezionata sulla maschera
 | 
						|
bool TCausale::read(const char* cod, int year)
 | 
						|
{
 | 
						|
  destroy();                                          // Delete all rows
 | 
						|
 | 
						|
  if (*cod > ' ')
 | 
						|
  {
 | 
						|
    _iva = iva_errata;
 | 
						|
 | 
						|
    TLocalisamfile caus(LF_CAUSALI);
 | 
						|
    caus.setkey(1);
 | 
						|
    caus.zero();
 | 
						|
    caus.put(CAU_CODCAUS, cod);
 | 
						|
 | 
						|
    int err = caus.read();
 | 
						|
    _rec = caus.curr();
 | 
						|
    if (err != NOERR) return FALSE;
 | 
						|
 | 
						|
    TLocalisamfile rcaus(LF_RCAUSALI);                        
 | 
						|
    rcaus.setkey(1);
 | 
						|
    rcaus.zero();
 | 
						|
    rcaus.put(CAU_CODCAUS, cod);
 | 
						|
    rcaus.put(CAU_NRIGA, 0);          
 | 
						|
    
 | 
						|
    err = rcaus.read(_isgteq);                         // Find first line
 | 
						|
    if (err != NOERR) return FALSE;
 | 
						|
    
 | 
						|
    while (err == NOERR && rcaus.get(CAU_CODCAUS) == cod)
 | 
						|
    {
 | 
						|
      const int riga = rcaus.get_int(CAU_NRIGA);
 | 
						|
      add(rcaus.curr(), riga);
 | 
						|
      err = rcaus.next();                              // Read next line
 | 
						|
    } 
 | 
						|
    rcaus.zero();                                      
 | 
						|
    for (int riga = 1; riga < size(); riga++)          // Fill gaps
 | 
						|
      if (objptr(riga) == NULL) add(rcaus.curr(), riga);
 | 
						|
 | 
						|
    TString16 codreg(caus.get("REG"));
 | 
						|
    const bool ok = _reg.read(codreg, year);         // Read register
 | 
						|
    if (!ok && codreg.not_empty()) 
 | 
						|
      return error_box("Non esiste il registro '%s' per l'anno %d", 
 | 
						|
                       (const char*)codreg, year);
 | 
						|
  }
 | 
						|
  else 
 | 
						|
  {
 | 
						|
    _iva = nessuna_iva;                                // Clear IVA data
 | 
						|
    _reg.read("", year);
 | 
						|
  }                            
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
const TRectype& TCausale::row(int num) const
 | 
						|
{
 | 
						|
  const TRectype* rec = (const TRectype*)objptr(num);
 | 
						|
  CHECKD(rec, "Manca la riga di causale ", num);
 | 
						|
  return *rec;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
TConto& TCausale::bill(int num, TConto& conto) const
 | 
						|
{
 | 
						|
  const TRectype& rec = row(num);
 | 
						|
  conto.set(rec.get_int("GRUPPO"), rec.get_int("CONTO"),
 | 
						|
            rec.get_long("SOTTOCONTO"), rec.get_char("TIPOCF"));
 | 
						|
  return conto;
 | 
						|
}   
 | 
						|
 | 
						|
bool TCausale::data_doc() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("DATADOC") : FALSE; }
 | 
						|
 | 
						|
bool TCausale::num_doc() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("NUMDOC") : FALSE; }
 | 
						|
 | 
						|
bool TCausale::apertura() const 
 | 
						|
{ return _rec.ok() ? _rec.get_char("MOVAP") == 'A' : FALSE; }
 | 
						|
 | 
						|
bool TCausale::sezionale() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("MOVSEZ") : FALSE; }
 | 
						|
 | 
						|
bool TCausale::valuta() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("MOVVAL") : FALSE; }
 | 
						|
 | 
						|
bool TCausale::intra() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("INTRACOM") : FALSE; }
 | 
						|
 | 
						|
bool TCausale::corrval() const 
 | 
						|
{ return _rec.ok() ? _rec.get_bool("VALINTRA") : FALSE; }
 | 
						|
 | 
						|
int TCausale::tipo_mov() const 
 | 
						|
{ return _rec.ok() ? _rec.get_int("TIPOMOV") : -1; }
 | 
						|
 | 
						|
const char* TCausale::cod_reg() const 
 | 
						|
{ return _rec.ok() ? _rec.get("REG") : ""; }
 | 
						|
 | 
						|
const char* TCausale::causale_inc_imm() const 
 | 
						|
{ return _rec.ok() ? _rec.get("CODCAUSIM") : ""; }
 | 
						|
 | 
						|
const char* TCausale::tipo_doc() const 
 | 
						|
{ return _rec.ok() ? _rec.get("TIPODOC") : ""; }
 | 
						|
 | 
						|
 | 
						|
bool TCausale::puramentecontabile() const 
 | 
						|
{
 | 
						|
  const char * codreg = cod_reg();
 | 
						|
  return ((codreg == NULL || *codreg == '\0') && tipo_mov() == 0);
 | 
						|
}
 | 
						|
 | 
						|
TipoIVA TCausale::iva() const
 | 
						|
{
 | 
						|
  if (_iva == iva_errata)
 | 
						|
  {      
 | 
						|
    TipoIVA i = nessuna_iva;
 | 
						|
    
 | 
						|
    if (ok())
 | 
						|
    {           
 | 
						|
      TString tipodoc(_rec.get("TIPODOC"));
 | 
						|
      if (tipodoc.not_empty())
 | 
						|
      {
 | 
						|
        TTable tpd("%TPD");
 | 
						|
        tpd.put("CODTAB", tipodoc);
 | 
						|
        if (tpd.read() == NOERR)
 | 
						|
        {
 | 
						|
          i = (TipoIVA)tpd.get_int("I0");               // IVA acquisti, vendite, generica
 | 
						|
          if (i == iva_generica)
 | 
						|
            i = _reg.iva();
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    ((TCausale*)this)->_iva = i;                        // Ricorda IVA per la prossima volta
 | 
						|
  }
 | 
						|
  return _iva;  
 | 
						|
}  
 | 
						|
 | 
						|
 | 
						|
bool TCausale::similar(const TCausale& c) const
 | 
						|
{
 | 
						|
  return iva() == c.iva() &&
 | 
						|
    sezionale() == c.sezionale() &&
 | 
						|
      valuta() == c.valuta() &&
 | 
						|
        intra() == c.intra();
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Codice IVA
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
TCodiceIVA::TCodiceIVA(const char* cod) : TRectype(LF_TABCOM)
 | 
						|
{
 | 
						|
  read(cod);
 | 
						|
}                 
 | 
						|
 | 
						|
bool TCodiceIVA::read(const char* cod)
 | 
						|
{   
 | 
						|
  int err = ~NOERR;
 | 
						|
  TTable iva("%IVA");
 | 
						|
  if (cod && *cod)
 | 
						|
  {
 | 
						|
    iva.setkey(1);
 | 
						|
    iva.put("CODTAB", cod);
 | 
						|
    err = iva.read();
 | 
						|
  }   
 | 
						|
  TRectype::operator=(iva.curr());
 | 
						|
  if (err != NOERR) zero();
 | 
						|
  return err == NOERR;
 | 
						|
}               
 |