Aggiunto programma cancellazione movimenti provvisori git-svn-id: svn://10.65.10.50/trunk@276 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			331 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			331 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// cg4306: liquidazione IVA
 | 
						|
// funzionalita' accessorie (calcolo acconto, estrazione deleghe)
 | 
						|
 | 
						|
#include "cg4300.h"
 | 
						|
#include "cg4300b.h"
 | 
						|
#include "cg4300c.h"
 | 
						|
 | 
						|
static char buf[256];
 | 
						|
 | 
						|
// -------------------------------------------------- estrazione deleghe
 | 
						|
bool CG4300_App::set_deleghe()
 | 
						|
{
 | 
						|
  TMask m("cg4300b.msk");
 | 
						|
  int k = 0;
 | 
						|
  long l, j;
 | 
						|
  _calcall = FALSE;
 | 
						|
 | 
						|
  for (;;)
 | 
						|
  {
 | 
						|
    if (k == K_ESC)
 | 
						|
      break;
 | 
						|
    if (k == K_ENTER && (_calcall || _selected.ones() > 0l))
 | 
						|
      break;
 | 
						|
    k = m.run();
 | 
						|
 | 
						|
    //                  _isprint  = m.get_bool(CHK_CGB_PRINT);
 | 
						|
    //                  _isbase   = m.get_bool(CHK_CGB_BASE);
 | 
						|
    //                  _basecalc = (tbc)m.get_long(RDB_CGB_BASE);
 | 
						|
 | 
						|
    switch (k)
 | 
						|
    {
 | 
						|
    case DLG_SELECT:
 | 
						|
      _selected.reset();
 | 
						|
      _ditte->destroy();
 | 
						|
 | 
						|
      // build sheet
 | 
						|
      for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next())
 | 
						|
      {
 | 
						|
        TString cod  = _nditte_r->get("CODDITTA");
 | 
						|
        TString vers = _nditte_r->get("FREQVIVA");
 | 
						|
 | 
						|
        TToken_string d(" ");
 | 
						|
        
 | 
						|
        // add record 
 | 
						|
        d.add(cod);
 | 
						|
        d.add(_nditte_r->get("RAGSOC"));
 | 
						|
        d.add(vers);
 | 
						|
        
 | 
						|
        _ditte->add(d);
 | 
						|
        if (_selected[l]) _ditte->check(l);
 | 
						|
      }
 | 
						|
      
 | 
						|
      // scegli ditte
 | 
						|
      _ditte->run();
 | 
						|
 | 
						|
      for (j = 0l; j < _ditte->items(); j++)
 | 
						|
        if (_ditte->checked(j)) _selected.set(j);
 | 
						|
 | 
						|
      break;
 | 
						|
    case BUT_CGB_ALL:
 | 
						|
      _calcall = TRUE;
 | 
						|
      k = K_ENTER;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (k == K_ENTER)
 | 
						|
  {
 | 
						|
    _year     = m.get(FLD_CGB_YEAR);
 | 
						|
    _month    = atoi(m.get(FLD_CGB_MONTH));
 | 
						|
  }
 | 
						|
 | 
						|
  return k == K_ENTER;
 | 
						|
}
 | 
						|
 | 
						|
bool CG4300_App::extract_deleghe()
 | 
						|
{
 | 
						|
  long firm = TApplication::get_firm();
 | 
						|
  _prind = new TProgind(_n_ditte,
 | 
						|
                        "         Estrazione deleghe        "
 | 
						|
                        "\n         Preparazione archivi      ",
 | 
						|
                        TRUE,TRUE,40);
 | 
						|
 | 
						|
  long l;
 | 
						|
  for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next())
 | 
						|
  {
 | 
						|
    if (_prind->iscancelled())
 | 
						|
      break;
 | 
						|
 | 
						|
    if (!(_calcall || _selected[l])) continue;
 | 
						|
 | 
						|
    TApplication::set_firm(_nditte->curr().get_long("CODDITTA"));
 | 
						|
    sprintf (buf,"Estrazione deleghe (%d):\nditta %s",
 | 
						|
             _month,
 | 
						|
             (const char*)_nditte_r->get("RAGSOC"));
 | 
						|
    _prind->set_text(buf);
 | 
						|
    if (is_month_ok(_month))
 | 
						|
    {
 | 
						|
      _isbenzinaro = _nditte->curr(LF_ATTIV).get_bool("ART74/4");
 | 
						|
      _freqviva    = _nditte->curr().get("FREQVIVA");
 | 
						|
      bool   mens  = _freqviva == "M";
 | 
						|
      _isannual    = (_month == 12 && !mens && !_isbenzinaro) ||
 | 
						|
        (_month == 13 && (mens || _isbenzinaro));
 | 
						|
      _isriepilogo = _month == 13;
 | 
						|
 | 
						|
      extract_delega(_month);
 | 
						|
    }
 | 
						|
    _prind->addstatus(1);
 | 
						|
  }
 | 
						|
 | 
						|
  TApplication::set_firm(firm);
 | 
						|
  delete _prind;
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool CG4300_App::extract_delega(int month)
 | 
						|
{
 | 
						|
  if (_isriepilogo && !_isannual) 
 | 
						|
    return FALSE;
 | 
						|
  if (look_lim(month))
 | 
						|
  {
 | 
						|
    real topay = _lim->get_real("R0");
 | 
						|
    if (topay.sign() <= 0) return TRUE;
 | 
						|
    if (_isannual)
 | 
						|
    {
 | 
						|
      if (look_del(12,7))
 | 
						|
      {
 | 
						|
        topay -= _del->get_real("R0");
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else 
 | 
						|
    {
 | 
						|
      // importo rettifiche solo se non e' annuale
 | 
						|
      topay += _lim->get_real("R5");
 | 
						|
    }
 | 
						|
    
 | 
						|
    if (topay.sign() > 0)
 | 
						|
    {
 | 
						|
      look_del(month, _isannual ? 2 : 1, TRUE);
 | 
						|
      _del->put("R0",topay);
 | 
						|
      _del->rewrite();
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
// -------------------------------------------- calcolo acconto dicembre
 | 
						|
bool CG4300_App::set_acconto()
 | 
						|
{
 | 
						|
  TMask m("cg4300c.msk");
 | 
						|
  m.set(CHK_CGC_PRINT,"X");
 | 
						|
 | 
						|
  int k = 0;
 | 
						|
  _calcall = FALSE;
 | 
						|
  _selected.reset();
 | 
						|
  long j;
 | 
						|
 | 
						|
  for (;;)
 | 
						|
  {
 | 
						|
    if (k == K_ESC)
 | 
						|
      break;
 | 
						|
    if (k == K_ENTER && (_calcall || _selected.ones() > 0l))
 | 
						|
      break;
 | 
						|
    k = m.run();
 | 
						|
    
 | 
						|
    _year     = m.get(FLD_CGC_YEAR);
 | 
						|
    _isprint  = m.get_bool(CHK_CGC_PRINT);
 | 
						|
    _isbase   = m.get_bool(CHK_CGC_BASE);
 | 
						|
    _basecalc = (tbc)m.get_long(RDB_CGC_BASE);
 | 
						|
    
 | 
						|
    switch (k)
 | 
						|
    {
 | 
						|
    case DLG_SELECT:
 | 
						|
      _selected.reset();
 | 
						|
      _ditte->destroy();
 | 
						|
 | 
						|
      // build sheet
 | 
						|
      long l;
 | 
						|
      for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next())
 | 
						|
      {
 | 
						|
        TString cod  = _nditte_r->get("CODDITTA");
 | 
						|
        TString vers = _nditte_r->get("FREQVIVA");
 | 
						|
        
 | 
						|
        TToken_string d(" ");
 | 
						|
        
 | 
						|
        // add record 
 | 
						|
        d.add(cod);
 | 
						|
        d.add(_nditte_r->get("RAGSOC"));
 | 
						|
        d.add(vers);
 | 
						|
        
 | 
						|
        _ditte->add(d);
 | 
						|
        if (_selected[l]) _ditte->check(l);
 | 
						|
      }
 | 
						|
      
 | 
						|
      // scegli ditte
 | 
						|
      _ditte->run();
 | 
						|
 | 
						|
      for (j = 0l; j < _ditte->items(); j++)
 | 
						|
        if (_ditte->checked(j)) _selected.set(j);
 | 
						|
 | 
						|
      break;
 | 
						|
    case BUT_CGC_ALL:
 | 
						|
      _calcall = TRUE;
 | 
						|
      k = K_ENTER;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return k == K_ENTER;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool CG4300_App::recalc_acconti()
 | 
						|
{
 | 
						|
  long l; bool onemade = FALSE;
 | 
						|
  
 | 
						|
  long firm = TApplication::get_firm();
 | 
						|
  _prind = new TProgind(_n_ditte,
 | 
						|
                        "              Calcolo acconto         "
 | 
						|
                        "\n         Preparazione archivi      ",
 | 
						|
                        TRUE,TRUE,40);
 | 
						|
 | 
						|
  for (l = 0l, _nditte->first(); !_nditte->eof(); l++, _nditte->next()) 
 | 
						|
  {
 | 
						|
    if (_prind->iscancelled()) 
 | 
						|
      break;
 | 
						|
    if (_calcall || _selected[l])
 | 
						|
    {
 | 
						|
      if (onemade == FALSE && _isprint)
 | 
						|
      {
 | 
						|
        _DescrItem* d = new _DescrItem(ACCHEAD);
 | 
						|
        d->_f0 = _basecalc == incorso;
 | 
						|
        d->_f1 = _isbase;
 | 
						|
        _descr_arr.add(d);
 | 
						|
      }
 | 
						|
      
 | 
						|
      TApplication::set_firm(_nditte->curr().get_long("CODDITTA"));     
 | 
						|
      sprintf (buf,"Calcolo acconto:\nditta %s",
 | 
						|
               (const char*)_nditte_r->get("RAGSOC"));
 | 
						|
      _prind->set_text(buf);
 | 
						|
      recalc_acconto();
 | 
						|
      onemade = TRUE;
 | 
						|
    }
 | 
						|
    _prind->addstatus(1);
 | 
						|
  }
 | 
						|
  
 | 
						|
  TApplication::set_firm(firm);
 | 
						|
  delete _prind;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool CG4300_App::recalc_acconto()
 | 
						|
{
 | 
						|
  real basecalcolo, acconto;
 | 
						|
  bool isdifferita = FALSE;
 | 
						|
  bool error = FALSE;
 | 
						|
  
 | 
						|
  // this is absolutely fundamental
 | 
						|
 | 
						|
  if (_basecalc == incorso)
 | 
						|
  {
 | 
						|
    // that's pazzesc but it turns out there's no better way
 | 
						|
    _comp_acconto = TRUE;
 | 
						|
    // force recalc of current month
 | 
						|
    _recalc       = one;
 | 
						|
    update_firm(12);
 | 
						|
    
 | 
						|
    // TBI calcola l'acconto!!!
 | 
						|
    if (look_lim(12))
 | 
						|
    {
 | 
						|
      basecalcolo = _lim->get_real("R0");
 | 
						|
      if (basecalcolo.sign() > 0)
 | 
						|
        acconto = basecalcolo * ACCONTO_DICEMBRE;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      acconto = real(-1);
 | 
						|
    }
 | 
						|
    // riaggiustati le palle
 | 
						|
    _comp_acconto = FALSE;
 | 
						|
    update_firm(12);
 | 
						|
  }
 | 
						|
else if (_basecalc == precedente)
 | 
						|
{
 | 
						|
  int yr = atoi(_year) - 1;
 | 
						|
  _lim->zero();
 | 
						|
  *_lim_anno = yr;
 | 
						|
  *_lim_mese = 12;
 | 
						|
  if (_lim->read() == NOERR)
 | 
						|
  {
 | 
						|
    basecalcolo = _lim->get_real("R0");
 | 
						|
    if (basecalcolo.sign() > 0)
 | 
						|
      acconto = basecalcolo * ACCONTO_DICEMBRE;
 | 
						|
  }
 | 
						|
  else error = TRUE;    
 | 
						|
}
 | 
						|
 | 
						|
// sbatti l'acconto in LIA
 | 
						|
if (look_lia())
 | 
						|
{
 | 
						|
  _lia->put("R4",acconto);
 | 
						|
  isdifferita = _lia->get_bool("B1");
 | 
						|
  _lia->rewrite();
 | 
						|
}
 | 
						|
 | 
						|
if (acconto.sign() > 0)
 | 
						|
{
 | 
						|
  // crea o aggiorna delega
 | 
						|
  look_del(12,7,TRUE);
 | 
						|
  _del->put("R0", acconto);
 | 
						|
  _del->rewrite();
 | 
						|
}
 | 
						|
 | 
						|
// per questa volta lasciamo perdere la describe_acconto
 | 
						|
if (_isprint)
 | 
						|
{
 | 
						|
  _DescrItem* d = new _DescrItem(ACCONTO);
 | 
						|
  d->_r0 = basecalcolo;
 | 
						|
  d->_r1 = acconto;
 | 
						|
  d->_f0 = _basecalc == incorso;
 | 
						|
  d->_f1 = _isbase;
 | 
						|
  d->_f2 = error;
 | 
						|
  d->_f3 = isdifferita;
 | 
						|
  d->_s0 = _nditte->curr().get("CODDITTA");
 | 
						|
  d->_s1 = _nditte->curr().get("RAGSOC");
 | 
						|
  _descr_arr.add(d);
 | 
						|
}  
 | 
						|
return TRUE;
 | 
						|
}
 | 
						|
 |