Files correlati : ve6.exe Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 979 git-svn-id: svn://10.65.10.50/trunk@15623 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			693 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			693 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//Creazione versamenti per acconti
 | 
						|
#include <applicat.h>
 | 
						|
#include <currency.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <tabutil.h> 
 | 
						|
#include <recarray.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <sheet.h>
 | 
						|
#include <urldefid.h>
 | 
						|
#include <prefix.h>
 | 
						|
#include <printer.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <utility.h>
 | 
						|
#include <config.h>
 | 
						|
#include <righef24.h>
 | 
						|
#include <modaut.h>
 | 
						|
 | 
						|
#include "cglib03.h"
 | 
						|
 | 
						|
#include "cg4800a.h"
 | 
						|
#include "cg4800b.h"
 | 
						|
 | 
						|
class VersAcc_app : public TApplication
 | 
						|
{
 | 
						|
  TRelation*    _nditte;
 | 
						|
  TArray_sheet* _ditte;
 | 
						|
  TArray        _nomiditte, _desc;
 | 
						|
  TBit_array    _selected;
 | 
						|
  
 | 
						|
  TInteressi_IVA_table* _ver;
 | 
						|
  TProgind*  _prind;
 | 
						|
  
 | 
						|
  int   _year; 
 | 
						|
  real  _acconto, _credito, _diff, _impver, _acconto_minimo, _acconto_minimo_cr_ut;
 | 
						|
  bool  _calcall, _da_stampare, _print;
 | 
						|
  TDate _dataver;
 | 
						|
  TString16 _abi, _cab, _con;
 | 
						|
  TString16 _abips, _cabps; //dai parametri di studio
 | 
						|
	TString4 _freqviva;
 | 
						|
  
 | 
						|
protected:               
 | 
						|
  virtual bool create(); 
 | 
						|
  virtual bool destroy();
 | 
						|
  virtual bool menu(MENU_TAG);
 | 
						|
  virtual void print();
 | 
						|
  
 | 
						|
  // handlers             
 | 
						|
  static bool ch_year_handler(TMask_field& f, KEY key);
 | 
						|
 | 
						|
public:                                                  
 | 
						|
 | 
						|
  static VersAcc_app& app() { return (VersAcc_app&)main_app(); }
 | 
						|
  void build_ditte_sheet();
 | 
						|
  void build_nomiditte();
 | 
						|
 | 
						|
  void lettura_delega();
 | 
						|
  void lettura_anagrafica(bool*);
 | 
						|
  void crea_riga_stampa(bool);
 | 
						|
  void aggiorna_delega(TTable & del);
 | 
						|
  void crea_delega(TTable & del);
 | 
						|
  void vers_acc();
 | 
						|
  
 | 
						|
  bool look_lia();
 | 
						|
  bool video_conferma(TTable & del); 
 | 
						|
  bool check_acc(); 
 | 
						|
  
 | 
						|
  VersAcc_app() : _ditte(NULL), _selected(10000), _nomiditte(100), _desc(100) {}
 | 
						|
};
 | 
						|
 | 
						|
bool VersAcc_app::look_lia()
 | 
						|
{
 | 
						|
  TString16 y;
 | 
						|
	
 | 
						|
	y.format("%05ld%04d", _nditte->lfile().get_long("CODDITTA"), _year);
 | 
						|
  
 | 
						|
	const TRectype & lia = cache().get("%LIA", y);
 | 
						|
 | 
						|
	_acconto = lia.get_real("R4");
 | 
						|
  _credito = lia.get_real("R6");
 | 
						|
	_freqviva = lia.get("S7");
 | 
						|
 | 
						|
  return !lia.empty(); 
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
bool VersAcc_app::create()
 | 
						|
{ 
 | 
						|
  TApplication::create(); 
 | 
						|
 | 
						|
  open_files(LF_TABCOM, LF_TAB, LF_NDITTE, LF_ANAG, LF_COMUNI, 0);
 | 
						|
 | 
						|
	_nditte = new TRelation(LF_NDITTE);
 | 
						|
  _nditte->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR");
 | 
						|
  _nditte->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG);
 | 
						|
  
 | 
						|
  _ditte  = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"),
 | 
						|
                             HR("@1|Cod.@5R|Ragione Sociale@50|Vers."));
 | 
						|
  _ver = new TInteressi_IVA_table();
 | 
						|
  
 | 
						|
  TConfig c (CONFIG_STUDIO, "cg");
 | 
						|
  _abips = c.get("CodABI");
 | 
						|
  _cabps = c.get("CodCAB");
 | 
						|
  
 | 
						|
  TDate oggi(TODAY);
 | 
						|
  _year = oggi.year();
 | 
						|
 | 
						|
  begin_wait();
 | 
						|
  build_nomiditte();
 | 
						|
  build_ditte_sheet();
 | 
						|
  end_wait();
 | 
						|
  
 | 
						|
  dispatch_e_menu(BAR_ITEM(1));
 | 
						|
  
 | 
						|
  return TRUE; 
 | 
						|
}
 | 
						|
 | 
						|
bool VersAcc_app::destroy()
 | 
						|
{                                  
 | 
						|
  delete _ver;
 | 
						|
  delete _ditte;
 | 
						|
  delete _nditte;
 | 
						|
  
 | 
						|
  return TApplication::destroy();
 | 
						|
}
 | 
						|
 | 
						|
bool VersAcc_app::ch_year_handler(TMask_field& f, KEY key)
 | 
						|
{                                                    
 | 
						|
  if (key == K_TAB && f.focusdirty())
 | 
						|
  {                         
 | 
						|
		TWait_cursor hourglass;
 | 
						|
 | 
						|
    app()._year = atoi(f.get());
 | 
						|
    app().build_nomiditte();
 | 
						|
    app().build_ditte_sheet();  
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
} 
 | 
						|
 | 
						|
 | 
						|
void VersAcc_app::build_ditte_sheet()
 | 
						|
{
 | 
						|
  // build sheet
 | 
						|
  _ditte->destroy();
 | 
						|
  for (int i = 0; i < _nomiditte.items(); i++)
 | 
						|
  {
 | 
						|
    TToken_string* d = new TToken_string(64);
 | 
						|
    *d = (TToken_string&)_nomiditte[i];
 | 
						|
    const char vers = d->get_char(2);
 | 
						|
    d->insert(" |", 0);
 | 
						|
    bool selectable = vers == '?';
 | 
						|
    const long pos = _ditte->add(d);     
 | 
						|
    if (selectable)  _ditte->disable_row(pos);
 | 
						|
    else _ditte->enable_row(pos);
 | 
						|
  }     
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::build_nomiditte()
 | 
						|
{                 
 | 
						|
  _nomiditte.destroy();
 | 
						|
  // ricostruire _nomiditte e rifare build_ditte_sheet
 | 
						|
  TCursor cur(_nditte, "", 1);
 | 
						|
	TRectype & dt = _nditte->curr();
 | 
						|
	const TRecnotype items = cur.items();
 | 
						|
 | 
						|
  for (cur = 0L; cur.pos() < items; ++cur)
 | 
						|
  {     
 | 
						|
    // check no archivi
 | 
						|
    if (prefix().exist(dt.get_long("CODDITTA"))) 
 | 
						|
    {   
 | 
						|
      // check no parametri liquidazione                                               
 | 
						|
      TString key;
 | 
						|
			TToken_string d;
 | 
						|
			
 | 
						|
			// add record 
 | 
						|
			d.add(dt.get_long("CODDITTA"));
 | 
						|
			d.add(dt.get("RAGSOC"));
 | 
						|
 | 
						|
			key.format("%05ld%d", dt.get_long("CODDITTA"), _year);
 | 
						|
      
 | 
						|
			const TRectype & lia = cache().get("%LIA", key);
 | 
						|
 | 
						|
			d.add(lia.empty() ? "??" : lia.get("S7"));
 | 
						|
			_nomiditte.add(d);  
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool VersAcc_app::menu(MENU_TAG)
 | 
						|
{
 | 
						|
  if (check_acc()) 
 | 
						|
  { 
 | 
						|
    if (_calcall || _selected.ones() > 0l)
 | 
						|
    {
 | 
						|
      vers_acc();
 | 
						|
      if (_print)
 | 
						|
      {
 | 
						|
       enable_menu_item(M_FILE_PRINT);
 | 
						|
       print();
 | 
						|
      }   
 | 
						|
    }
 | 
						|
    else warning_box(TR("Nessuna ditta selezionata!"));
 | 
						|
  }
 | 
						|
  return FALSE;
 | 
						|
}                
 | 
						|
 | 
						|
bool VersAcc_app::check_acc()
 | 
						|
{               
 | 
						|
  KEY k = 0;
 | 
						|
  
 | 
						|
  TMask m("cg4800a");
 | 
						|
  
 | 
						|
  m.set_handler(FLD_CGB_YEAR, ch_year_handler);   
 | 
						|
  
 | 
						|
  long j;
 | 
						|
  _calcall = FALSE;
 | 
						|
 | 
						|
  for (;;)
 | 
						|
  {
 | 
						|
    if (k == K_ESC || k == K_ENTER)
 | 
						|
      break;
 | 
						|
 | 
						|
    k = m.run();
 | 
						|
    
 | 
						|
    switch (k)
 | 
						|
    {
 | 
						|
     case DLG_SELECT:
 | 
						|
       _ditte->run();
 | 
						|
       for (j = 0l; j < _ditte->items(); j++)
 | 
						|
          if (_ditte->checked(j)) _selected.set(j);
 | 
						|
       break;
 | 
						|
 | 
						|
     case BUT_CGB_ALL:
 | 
						|
       _ditte->check(-1);
 | 
						|
       for (j = 0l; j < _ditte->items(); j++)
 | 
						|
          if (_ditte->checked(j) && !_ditte->row_disabled(j)) 
 | 
						|
            _selected.set(j);
 | 
						|
       _calcall = TRUE;
 | 
						|
       k = K_ENTER;
 | 
						|
       break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (k == K_ENTER) _year = m.get_int(FLD_CGB_YEAR);
 | 
						|
 | 
						|
  return k == K_ENTER;
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::vers_acc()
 | 
						|
{
 | 
						|
  char buf[256]; bool tipo;
 | 
						|
  
 | 
						|
  _desc.destroy();
 | 
						|
  _da_stampare = _print = FALSE;
 | 
						|
 | 
						|
  _prind = new TProgind(_calcall ? 0l : _selected.ones(),
 | 
						|
                        TR("         Creazione versam. acconti \n"
 | 
						|
                           "        preparazione archivi       \n"
 | 
						|
                           "                                   \n"),
 | 
						|
                        TRUE, TRUE);
 | 
						|
  
 | 
						|
  if (_ver->read(_year,12)!=NOERR)
 | 
						|
    warning_box(FR("Errore %d in lettura tabella versamenti ed interessi."),_ver->status());
 | 
						|
  _acconto_minimo = _ver->get(I_ACCONTOIVA);
 | 
						|
  for (int l = 0; l < _ditte->items(); l++)
 | 
						|
  {
 | 
						|
    if (_prind->iscancelled())
 | 
						|
      break;
 | 
						|
 | 
						|
    if (!(_calcall || _selected[l]) || _ditte->row_disabled(l)) 
 | 
						|
      continue;
 | 
						|
    
 | 
						|
    _abi = _abips;
 | 
						|
    _cab = _cabps;
 | 
						|
    _da_stampare = FALSE;  //relativo a ciascuna ditta
 | 
						|
    
 | 
						|
    const long ditta = _ditte->row(l).get_long(1);
 | 
						|
    TApplication::set_firm(ditta);
 | 
						|
    TIva_round ir; ir.set_default_iva_mode(_year, FALSE);
 | 
						|
 | 
						|
    _nditte->curr().zero();
 | 
						|
    _nditte->curr().put("CODDITTA",ditta);
 | 
						|
    _nditte->read();                                                          
 | 
						|
   
 | 
						|
    if (!look_lia()) continue;    
 | 
						|
    
 | 
						|
    sprintf (buf,FR("Creazione vers. acconti:\nditta %s\n "),
 | 
						|
             (const char*)_nditte->lfile().get("RAGSOC"));
 | 
						|
    _prind->set_text(buf);
 | 
						|
    
 | 
						|
    lettura_anagrafica(&tipo);
 | 
						|
    
 | 
						|
    lettura_delega();
 | 
						|
    
 | 
						|
    if (_da_stampare)
 | 
						|
    { 
 | 
						|
      crea_riga_stampa(tipo);
 | 
						|
      _print = TRUE;   //relativo alla stampa finale 
 | 
						|
    }
 | 
						|
     
 | 
						|
    _prind->addstatus(1);
 | 
						|
  }
 | 
						|
  delete _prind;
 | 
						|
}  
 | 
						|
 | 
						|
void VersAcc_app::print()
 | 
						|
{
 | 
						|
  printer().open();
 | 
						|
  
 | 
						|
  TPrintrow row;
 | 
						|
  
 | 
						|
  row.put(TR("Gestione iva"), 0);
 | 
						|
  row.put(FR("Data @>"), 106);
 | 
						|
  row.put(FR("Pag.@#"), 124);
 | 
						|
  printer().setheaderline(0,row);
 | 
						|
  
 | 
						|
  row.reset(); 
 | 
						|
  TString256 t(FR("@bCREAZIONE VERSAMENTI PER ACCONTI DICEMBRE"));
 | 
						|
  t <<' '<<_year;
 | 
						|
  row.put(t,34); 
 | 
						|
  printer().setheaderline(1,row);
 | 
						|
  
 | 
						|
  t = "";
 | 
						|
  t.fill('-',132);
 | 
						|
  row.reset();
 | 
						|
  row.put(t,0);
 | 
						|
  printer().setheaderline(2,row);
 | 
						|
  printer().setheaderline(4,row);  
 | 
						|
  
 | 
						|
  row.reset();
 | 
						|
  row.put(TR("Ditta"),0);
 | 
						|
  row.put(TR("Denominazione"),7);
 | 
						|
  row.put(TR("Importo"),46);
 | 
						|
  row.put(TR("Banca"),55);
 | 
						|
  row.put(TR("Dipendenza"),62);
 | 
						|
  row.put(TR("Concessione"),74);
 | 
						|
  printer().setheaderline(3,row);
 | 
						|
  
 | 
						|
  for (int i = 0; i < _desc.items(); i++)
 | 
						|
  {
 | 
						|
    TToken_string& tt = (TToken_string&)_desc[i]; 
 | 
						|
    
 | 
						|
    TParagraph_string rs (tt.get(1),30);
 | 
						|
 | 
						|
    row.reset();
 | 
						|
    row.put(tt.get(0),0);  
 | 
						|
 | 
						|
    const real imp = tt.get(2);
 | 
						|
    TCurrency cur(imp);
 | 
						|
    TString80 descr = cur.string(TRUE);
 | 
						|
    descr.right_just(15);
 | 
						|
    row.put(descr,38);
 | 
						|
    
 | 
						|
    if (tt.get_int(7) == 0)
 | 
						|
    {        
 | 
						|
      row.put(tt.get(3),55);
 | 
						|
      row.put(tt.get(4),63);
 | 
						|
    }
 | 
						|
    else row.put(tt.get(5),77);
 | 
						|
    
 | 
						|
    descr = tt.get(6);
 | 
						|
    row.put(descr.left(45),86);    
 | 
						|
    const char* r;
 | 
						|
    while ((r = rs.get()) != NULL)
 | 
						|
    {
 | 
						|
      row.put(r,7);
 | 
						|
      printer().print(row);
 | 
						|
      row.reset(); 
 | 
						|
    }
 | 
						|
  }                 
 | 
						|
  printer().close();
 | 
						|
} 
 | 
						|
 | 
						|
void round_mille_lire(real& d)
 | 
						|
{
 | 
						|
  const int dec = TCurrency::get_firm_dec();
 | 
						|
  if (dec == 0) // lire
 | 
						|
  {
 | 
						|
    if (d % real(500.0) == ZERO) d -= 1.0;
 | 
						|
    d.round(-3);
 | 
						|
  }
 | 
						|
  else  //  Non si sa ancora come gestire l'euro
 | 
						|
    d.round(0);
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::lettura_delega()
 | 
						|
{
 | 
						|
	const bool has_f24 = main_app().has_module(GVAUT);
 | 
						|
  TString16 cod;
 | 
						|
  TString16 y; y.format("%05ld", _nditte->lfile().get_long("CODDITTA"));
 | 
						|
  const real minimo = _credito != ZERO ? _acconto_minimo_cr_ut : _acconto_minimo;
 | 
						|
  
 | 
						|
  _diff = _acconto - _credito;  
 | 
						|
  
 | 
						|
  TIva_round ir; 
 | 
						|
  ir.round(_diff);
 | 
						|
  
 | 
						|
	cod << y << _year << 12 << 7;
 | 
						|
 | 
						|
	TTable del("%DEL");
 | 
						|
 | 
						|
	del.put("CODTAB", cod);
 | 
						|
	if (del.read() == NOERR)
 | 
						|
	{
 | 
						|
		if (_diff < minimo)  //l'importo non e' dovuto
 | 
						|
		{
 | 
						|
			//cancello la delega
 | 
						|
			del.remove();
 | 
						|
			return;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			// se sono qui e' perche' l'importo e' dovuto (_diff >= minimo)
 | 
						|
			bool stampata = del.get_bool("B0");
 | 
						|
  
 | 
						|
			_impver = del.get_real("R0");
 | 
						|
			_dataver = del.get_date("D0");
 | 
						|
  
 | 
						|
			if (stampata)
 | 
						|
			{       
 | 
						|
				_abi = del.get("S7");
 | 
						|
				_cab = del.get("S8");
 | 
						|
				_con = del.get("S9"); 
 | 
						|
				if (_diff != _impver)
 | 
						|
					video_conferma(del); 
 | 
						|
			}
 | 
						|
			else 
 | 
						|
			{
 | 
						|
				aggiorna_delega(del);
 | 
						|
				_da_stampare = TRUE;  
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	else //non esiste la delega
 | 
						|
	{
 | 
						|
		if (_diff >= minimo) 
 | 
						|
		//creo record delega
 | 
						|
		{
 | 
						|
			crea_delega(del); 
 | 
						|
			_da_stampare = TRUE;
 | 
						|
		}
 | 
						|
	}
 | 
						|
  if (has_f24)
 | 
						|
	{
 | 
						|
		TLocalisamfile f24(LF_RIGHEF24);
 | 
						|
		TTable trib("%TRB");
 | 
						|
		long progr = 0L;
 | 
						|
		TString descr("Acconto IVA");
 | 
						|
		const bool mensile = _freqviva == "M"; 
 | 
						|
 | 
						|
		const int codtrib = mensile ? 6013 : 6035;
 | 
						|
		TDate scad(27, 12, _year);
 | 
						|
		const long codditta = _nditte->lfile().get_long("CODDITTA");
 | 
						|
 | 
						|
		while (scad.wday() > 5)
 | 
						|
			++scad;
 | 
						|
		trib.put("CODTAB", codtrib);
 | 
						|
		if (trib.read() != NOERR)
 | 
						|
		{
 | 
						|
			int g = 0, c = 0;
 | 
						|
			long s = 0;
 | 
						|
			trib.put("CODTAB", 6001);
 | 
						|
			if (trib.read(_isgteq) == NOERR)
 | 
						|
			{
 | 
						|
				const int cod = trib.get_int("CODTAB");
 | 
						|
				if (cod > 6000 && cod < 6036)
 | 
						|
				{
 | 
						|
					g = trib.get_int("I0");
 | 
						|
					c = trib.get_int("I1");
 | 
						|
					s = trib.get_long("I2");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			trib.zero();
 | 
						|
			trib.put("CODTAB", codtrib);
 | 
						|
			trib.put("S0", descr);
 | 
						|
			trib.put("S6", "E");
 | 
						|
			trib.put("I0", g);
 | 
						|
			trib.put("I1", c);
 | 
						|
			trib.put("I2", s);
 | 
						|
			trib.write();
 | 
						|
		}
 | 
						|
 | 
						|
		f24.setkey(4);
 | 
						|
		f24.put(F24_TIPOINTEST, "D");
 | 
						|
		f24.put(F24_INTEST, codditta);
 | 
						|
		f24.put(F24_ANNO, _year);
 | 
						|
		f24.put(F24_TRIBUTO, codtrib);
 | 
						|
		if (f24.read() == NOERR)
 | 
						|
		{
 | 
						|
			if (f24.get(F24_DATAVERS).blank())
 | 
						|
			{
 | 
						|
				int err = NOERR;
 | 
						|
				if (_diff < minimo)
 | 
						|
					err = f24.remove();						// non devo versare
 | 
						|
				else
 | 
						|
				{
 | 
						|
					f24.put(F24_DATASCAD, scad);
 | 
						|
					f24.put(F24_IMPORTODEB, _diff);
 | 
						|
					err = f24.rewrite();
 | 
						|
				}
 | 
						|
				
 | 
						|
				if (err != NOERR)
 | 
						|
					error_box(FR("Ditta %ld\n%s\nerrore %d"), codditta, (const char *) descr, err);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			if (_diff >= minimo)
 | 
						|
			{
 | 
						|
				f24.setkey(1);
 | 
						|
				if (f24.last() == NOERR)
 | 
						|
					progr = f24.get_long(F24_PROGR);
 | 
						|
				progr++;
 | 
						|
				f24.zero();
 | 
						|
				f24.put(F24_PROGR, progr);
 | 
						|
 | 
						|
 | 
						|
				f24.put(F24_TRIBUTO, codtrib);
 | 
						|
				f24.put(F24_TIPOINTEST, "D");
 | 
						|
				f24.put(F24_INTEST, codditta);
 | 
						|
				f24.put(F24_DESCR, descr);
 | 
						|
				f24.put(F24_DATASCAD, scad);
 | 
						|
				f24.put(F24_ANNO, _year);
 | 
						|
				f24.put(F24_IMPORTODEB, _diff);
 | 
						|
 | 
						|
				const int err = f24.write();
 | 
						|
 | 
						|
				if (err != NOERR)
 | 
						|
					error_box(FR("Ditta %ld\n%s\nerrore %d"), codditta, (const char *) descr, err);
 | 
						|
			}
 | 
						|
		}
 | 
						|
  }
 | 
						|
  return;  
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::crea_delega(TTable & del)
 | 
						|
{
 | 
						|
  TString16 y (format("%05ld", _nditte->lfile().get_long("CODDITTA")));
 | 
						|
  TString16 cod;
 | 
						|
  
 | 
						|
  cod << y << _year << 12 << 7;
 | 
						|
  
 | 
						|
  del.zero();
 | 
						|
  del.put("CODTAB", cod);
 | 
						|
  del.put("S7", _abi);
 | 
						|
  del.put("S8", _cab);
 | 
						|
  del.put("S9", _con);
 | 
						|
  del.put("R0", _diff);
 | 
						|
  
 | 
						|
  del.write();  
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::aggiorna_delega(TTable & del)
 | 
						|
{ 
 | 
						|
  del.put("S7", _abi);
 | 
						|
  del.put("S8", _cab);
 | 
						|
  del.put("S9", _con);
 | 
						|
  del.put("R0", _diff);
 | 
						|
  
 | 
						|
  del.rewrite();
 | 
						|
}                 
 | 
						|
 | 
						|
static real pezza_euro(real n)
 | 
						|
{
 | 
						|
  if (is_euro_value(NULL))
 | 
						|
  {
 | 
						|
    n /= 1936.27;
 | 
						|
    n.round(2);
 | 
						|
  }
 | 
						|
  return n;
 | 
						|
}
 | 
						|
 | 
						|
void VersAcc_app::lettura_anagrafica(bool* tipo)
 | 
						|
{
 | 
						|
  TLocalisamfile& anag = _nditte->lfile(LF_ANAG);
 | 
						|
  TLocalisamfile& com  = _nditte->lfile(LF_COMUNI); // Comune residenza fiscale
 | 
						|
    
 | 
						|
  const bool cf = anag.get_bool("TITCF");    
 | 
						|
  const int isdel = anag.get_int("TIPOSTDEL");
 | 
						|
  
 | 
						|
  // Se deve stampare un bollettino  delega l'importo minimo con credito utilizzato diventa 12500;
 | 
						|
  // se invece deve stampare una distinta l'importo minimo e' 13500
 | 
						|
  if (cf)
 | 
						|
    _acconto_minimo_cr_ut = pezza_euro(isdel == 2 ? 13500.0 : 12500.0);
 | 
						|
  else
 | 
						|
    // Nel caso non sia titolare conto fiscale  l'importo minimo e' 500
 | 
						|
    _acconto_minimo_cr_ut = pezza_euro(500.0);
 | 
						|
  if (cf && (isdel == 1 || isdel == 2))
 | 
						|
  {
 | 
						|
    *tipo = TRUE;
 | 
						|
    const int con = com.get_int("UFFCONC"); 
 | 
						|
    _abi = "";
 | 
						|
    _cab = "";
 | 
						|
    _con.format("%03d",con);
 | 
						|
  }  
 | 
						|
  else
 | 
						|
  {
 | 
						|
    *tipo = FALSE;
 | 
						|
    _con = "";
 | 
						|
    const long codabi = _nditte->lfile().get_long("ABIBAN");
 | 
						|
    const long codcab = _nditte->lfile().get_long("CABBAN");
 | 
						|
    if (codabi != 0 && codcab != 0)
 | 
						|
    {
 | 
						|
      _abi = format("%05ld", codabi);
 | 
						|
      _cab = format("%05ld", codcab);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}  
 | 
						|
   
 | 
						|
bool VersAcc_app::video_conferma(TTable & del)
 | 
						|
{                                               
 | 
						|
  TMask m("cg4800b");  
 | 
						|
 | 
						|
  m.field(F_CODDITTA).set(_nditte->lfile().get("CODDITTA"));
 | 
						|
  m.field(F_RAGSOC).set(_nditte->lfile().get("RAGSOC"));
 | 
						|
  m.field(F_DATAVER).set(_dataver);
 | 
						|
  m.field(F_ABI).set(_abi);
 | 
						|
  m.field(F_CAB).set(_cab);
 | 
						|
  m.field(F_CON).set(_con);       
 | 
						|
  m.field(F_IMPVER).set(_impver.string());
 | 
						|
  m.field(F_NEWIMP).set(_diff.string());    
 | 
						|
 | 
						|
  for (bool stop = FALSE; !stop;)
 | 
						|
  {
 | 
						|
    KEY k = m.run();        
 | 
						|
    
 | 
						|
    switch(k)
 | 
						|
    {
 | 
						|
     case K_SAVE: 
 | 
						|
       {
 | 
						|
         KEY k = yesnocancel_box(TR("Delega gia' stampata. Si desidera ugualmente confermare l'aggiornamento?"));
 | 
						|
         if (k ==  K_YES)
 | 
						|
         {
 | 
						|
           _da_stampare = TRUE;
 | 
						|
           del.put("R0",_diff);
 | 
						|
           del.put("B0", "");
 | 
						|
           del.rewrite();
 | 
						|
         }
 | 
						|
         if (k == K_YES || k == K_NO) 
 | 
						|
           stop = TRUE;
 | 
						|
       }    
 | 
						|
       break;  
 | 
						|
     case K_ESC:
 | 
						|
     //case K_QUIT:     
 | 
						|
       stop = TRUE;
 | 
						|
       break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}    
 | 
						|
 | 
						|
void VersAcc_app::crea_riga_stampa(bool tipost)
 | 
						|
{
 | 
						|
  TToken_string* tt = new TToken_string(150);    
 | 
						|
  TString80 desc; 
 | 
						|
  
 | 
						|
  if (tipost) //prendo la descrizione dell'ufficio concessione
 | 
						|
  {
 | 
						|
    if (_con.not_empty())
 | 
						|
     desc = cache().get("%UCC", _con, "S0");
 | 
						|
  }
 | 
						|
  else       //prendo la descrizione della banca
 | 
						|
  {
 | 
						|
    if (_abi.not_empty())
 | 
						|
    {
 | 
						|
			TString16 key;
 | 
						|
 | 
						|
			key = _abi;
 | 
						|
			if (!_cab.empty())
 | 
						|
				key << _cab; 
 | 
						|
	    desc = cache().get("%BAN", key, "S0");
 | 
						|
		}
 | 
						|
  }                        
 | 
						|
  
 | 
						|
  tt->add(_nditte->lfile().get("CODDITTA"));
 | 
						|
  tt->add(_nditte->lfile().get("RAGSOC"));
 | 
						|
  tt->add(_diff.string());
 | 
						|
  tt->add(_abi);
 | 
						|
  tt->add(_cab);
 | 
						|
  tt->add(_con);
 | 
						|
  tt->add(desc);
 | 
						|
  tt->add(tipost);
 | 
						|
  
 | 
						|
  if (tt != NULL)
 | 
						|
		_desc.add(tt);  
 | 
						|
}
 | 
						|
 | 
						|
int cg4800(int argc, char* argv[])
 | 
						|
{
 | 
						|
  VersAcc_app app;
 | 
						|
  app.run(argc, argv, TR("Creazione versam. acconti dicembre"));
 | 
						|
  return 0;
 | 
						|
} |