264 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			264 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// Apertura nuovo esercizio
 | 
						|
#include "cg4501.h"
 | 
						|
#include "cg4500a.h"
 | 
						|
 | 
						|
class TAp_eser : public TApplication
 | 
						|
{
 | 
						|
  TTable* _esc, * _reg;
 | 
						|
  int     _anno, _newanno;
 | 
						|
  TDate   _dataini, _datafin, _datainp, _datafip;
 | 
						|
 | 
						|
protected:
 | 
						|
  static bool mask_dataini   (TMask_field&, KEY);
 | 
						|
  static bool mask_newanno   (TMask_field&, KEY);
 | 
						|
 | 
						|
public:
 | 
						|
  virtual bool create();
 | 
						|
  virtual bool destroy();
 | 
						|
  virtual bool menu(MENU_TAG m);
 | 
						|
 | 
						|
  bool  set();
 | 
						|
  bool  apertura_es();
 | 
						|
  
 | 
						|
  TAp_eser() {}
 | 
						|
};
 | 
						|
 | 
						|
TDate InizioEsercizio(int anno)
 | 
						|
{
 | 
						|
  TTable TabEs ("ESC");
 | 
						|
  TString codtab;
 | 
						|
  TDate inizio_es;
 | 
						|
 | 
						|
  TabEs.zero();
 | 
						|
  codtab.format ("%04d", anno);
 | 
						|
  TabEs.put ("CODTAB", codtab);
 | 
						|
  TabEs.read();
 | 
						|
  if (TabEs.good())
 | 
						|
    inizio_es= TabEs.get_date ("D0");
 | 
						|
 | 
						|
  return inizio_es;
 | 
						|
}
 | 
						|
 | 
						|
TDate FineEsercizio(int anno)
 | 
						|
{
 | 
						|
  TTable TabEs ("ESC");
 | 
						|
  TString codtab;
 | 
						|
  TDate fine_es;
 | 
						|
 | 
						|
  TabEs.zero();
 | 
						|
  codtab.format ("%04d", anno);
 | 
						|
  TabEs.put ("CODTAB", codtab);
 | 
						|
  TabEs.read();
 | 
						|
  if (TabEs.good())
 | 
						|
    fine_es= TabEs.get_date ("D1");
 | 
						|
 | 
						|
  return fine_es;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::mask_newanno (TMask_field& f, KEY k)
 | 
						|
{ 
 | 
						|
  TTable TabEs ("ESC");
 | 
						|
  TString codtab; 
 | 
						|
 | 
						|
  //  if ( (k == K_TAB) && f.mask().is_running() )
 | 
						|
  if ( (k == K_ENTER) && f.to_check(k) )
 | 
						|
  {
 | 
						|
    int newanno = f.mask().get_int(F_NUOVOANNO);
 | 
						|
    int anno    = f.mask().get_int(F_ANNO);
 | 
						|
    TabEs.zero();
 | 
						|
    codtab.format ("%04d", newanno);
 | 
						|
    TabEs.put ("CODTAB", codtab);
 | 
						|
    TabEs.read();
 | 
						|
    if ( TabEs.good() )
 | 
						|
    {
 | 
						|
      f.warning_box ("L'anno inserito e' gia' presente nella tabella degli esercizi!");
 | 
						|
      return FALSE;
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (newanno != anno + 1)
 | 
						|
    {
 | 
						|
      f.warning_box ("L'anno del nuovo esercizio deve essere successivo all'anno esercizio precedente");
 | 
						|
      return FALSE;
 | 
						|
    }  
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::mask_dataini (TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if ( (k == K_ENTER) && f.to_check(k) )
 | 
						|
  {
 | 
						|
    TDate data(f.mask().get(F_DATAINI));
 | 
						|
    TDate fine(f.mask().get(F_DATAFINC)); 
 | 
						|
    /*
 | 
						|
       if ( data.year() != FineEsercizio(anno).year() + 1 )
 | 
						|
       {
 | 
						|
       warning_box ("L'anno del nuovo esercizio deve essere successivo a quello della fine dell'esercizio precedente");
 | 
						|
       return FALSE; 
 | 
						|
       }
 | 
						|
       */
 | 
						|
    if ( data <= fine )
 | 
						|
    {
 | 
						|
      f.warning_box ("La data di inizio del nuovo esercizio deve essere superiore alla data di fine esercizio precedente");
 | 
						|
      return FALSE;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::create()
 | 
						|
{
 | 
						|
  _esc    = new TTable("ESC");
 | 
						|
  _reg    = new TTable("REG");
 | 
						|
 | 
						|
  enable_menu_item(M_FILE_NEW, FALSE);
 | 
						|
 | 
						|
  dispatch_e_menu (BAR_ITEM(1));
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::destroy()
 | 
						|
{
 | 
						|
  delete _esc;
 | 
						|
  delete _reg;
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::menu(MENU_TAG m)
 | 
						|
{
 | 
						|
  TTable TabEs ("ESC");
 | 
						|
  TMask msk ("cg4500a");
 | 
						|
  
 | 
						|
  if (TabEs.last() != NOERR)
 | 
						|
    return error_box("Non e' ancora stato aperto alcun esercizio!");
 | 
						|
  
 | 
						|
  int anno     = TabEs.get_int ("CODTAB");
 | 
						|
  TDate inizio = TabEs.get_date("D0"); //data inizio es. in corso  
 | 
						|
  TDate fine   = TabEs.get_date("D1"); //data fine es. in corso
 | 
						|
  
 | 
						|
  msk.set(F_ANNO, anno);
 | 
						|
  msk.set(F_DATAINIC, inizio.string());
 | 
						|
  msk.set(F_DATAFINC, fine.string());
 | 
						|
  msk.set(F_NUOVOANNO, anno+1);
 | 
						|
  
 | 
						|
  msk.set_handler (F_NUOVOANNO, mask_newanno);
 | 
						|
  msk.set_handler (F_DATAINI,   mask_dataini);
 | 
						|
  
 | 
						|
  if (msk.run() == K_ENTER)
 | 
						|
  {
 | 
						|
    _anno    = msk.get_int(F_ANNO);
 | 
						|
    _datainp = msk.get(F_DATAINIC);
 | 
						|
    _datafip = msk.get(F_DATAFINC);      
 | 
						|
    _newanno = msk.get_int(F_NUOVOANNO);   //nuovo anno esercizio
 | 
						|
    _dataini = msk.get(F_DATAINI);
 | 
						|
    _datafin = msk.get(F_DATAFIN);
 | 
						|
    
 | 
						|
    apertura_es();
 | 
						|
  }
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
bool TAp_eser::apertura_es()
 | 
						|
{
 | 
						|
  TTable   TabReg ("REG");
 | 
						|
  TTable   TabEs  ("ESC"); 
 | 
						|
  TString  anno   (4);
 | 
						|
  TString  annonew(4);
 | 
						|
  TDate    data;
 | 
						|
  bool ok = FALSE; 
 | 
						|
 | 
						|
  //viene aggiornata la tabella dei registri. Se esisteva gia' un record relativo al nuovo esercizio, viene cancellato.
 | 
						|
  //In ogni caso ne viene creato uno nuovo relativo al nuovo esercizio.
 | 
						|
  TabReg.zero();
 | 
						|
  annonew = format ("%04d", _newanno);
 | 
						|
  TabReg.put ("CODTAB", annonew);
 | 
						|
  
 | 
						|
  TRectype r (TabReg.curr());
 | 
						|
  
 | 
						|
  TabReg.read(_isgteq);
 | 
						|
  
 | 
						|
  for (; !TabReg.eof(); TabReg.next())
 | 
						|
  {
 | 
						|
    if (TabReg.curr() != r) break;
 | 
						|
    
 | 
						|
    int tiporeg = TabReg.get_int("I0");
 | 
						|
    if (tiporeg == 5)
 | 
						|
      TabReg.remove();
 | 
						|
  }
 | 
						|
 | 
						|
  TabReg.zero();
 | 
						|
  TRectype nuovo (TabReg.curr());
 | 
						|
  anno = format ("%04d", _anno);
 | 
						|
  TabReg.put ("CODTAB", anno);
 | 
						|
  
 | 
						|
  TRectype rec (TabReg.curr());
 | 
						|
  
 | 
						|
  TabReg.read(_isgteq);
 | 
						|
  
 | 
						|
  for (; !TabReg.eof(); TabReg.next())
 | 
						|
  { 
 | 
						|
    if (TabReg.curr() != rec) break;
 | 
						|
    
 | 
						|
    int tiporeg = TabReg.get_int("I0");
 | 
						|
    TString cod_reg = TabReg.get("CODTAB");
 | 
						|
    cod_reg = cod_reg.mid(4,3);
 | 
						|
    if (tiporeg == 5)
 | 
						|
    {
 | 
						|
      ok = TRUE;
 | 
						|
      nuovo  = TabReg.curr();
 | 
						|
      TString16 cod;
 | 
						|
      cod << _newanno << cod_reg;
 | 
						|
      nuovo.put("CODTAB", cod);
 | 
						|
      nuovo.put("D2", data);
 | 
						|
      nuovo.put("D3", data);
 | 
						|
      nuovo.put("I6", 0L);
 | 
						|
      nuovo.put("R1", real(0.0));
 | 
						|
      nuovo.put("R2", real(0.0));
 | 
						|
      
 | 
						|
      TabReg.write(nuovo);
 | 
						|
    }   
 | 
						|
  }
 | 
						|
  /*
 | 
						|
     if (!ok)
 | 
						|
     {
 | 
						|
     error_box("Non esiste il registro libro giornale relativo all'es. precedente");
 | 
						|
     return FALSE;
 | 
						|
     }
 | 
						|
     */
 | 
						|
  //viene aggiornata la tabella degli esercizi  
 | 
						|
  TabEs.zero();
 | 
						|
  annonew = format ("%04d", _newanno);
 | 
						|
  TabEs.put ("CODTAB", annonew);
 | 
						|
  TabEs.put ("D0", _dataini);
 | 
						|
  TabEs.put ("D1", _datafin);
 | 
						|
  TabEs.write();  
 | 
						|
  
 | 
						|
  message_box("Apertura nuovo esercizio completata");
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int cg4500 (int argc, char* argv[])
 | 
						|
{
 | 
						|
  switch (*argv[2])
 | 
						|
  {
 | 
						|
  case 'C':
 | 
						|
  {
 | 
						|
    TAp_eser a;
 | 
						|
    a.run(argc, argv, "Apertura nuovo esercizio");
 | 
						|
  }
 | 
						|
  break;
 | 
						|
 case 'I':
 | 
						|
{
 | 
						|
  TAp_iva a;      
 | 
						|
  a.run(argc, argv, "Apertura nuovo esercizio IVA");
 | 
						|
}
 | 
						|
break;
 | 
						|
default:
 | 
						|
break;
 | 
						|
}
 | 
						|
return TRUE;
 | 
						|
}
 | 
						|
 |