git-svn-id: svn://10.65.10.50/branches/R_10_00@22809 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			360 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// Programma per la gestione e la stampa della dichiarazione periodica IVA
 | 
						|
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <form.h>
 | 
						|
#include <recarray.h>
 | 
						|
#include <reprint.h>
 | 
						|
 | 
						|
#include <nditte.h>
 | 
						|
 | 
						|
#include "cg5800.h"
 | 
						|
#include "cglib03.h"
 | 
						|
 | 
						|
class TQuadro_VT_selfirm_mask : public TAutomask
 | 
						|
{
 | 
						|
  TArray_sheet * _ditte;
 | 
						|
  int            _year;
 | 
						|
  
 | 
						|
protected:
 | 
						|
  bool select_button();
 | 
						|
  void build_ditte_sheet();
 | 
						|
 | 
						|
public:
 | 
						|
  const int get_year() const { return _year; }
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
  TQuadro_VT_selfirm_mask();
 | 
						|
  ~TQuadro_VT_selfirm_mask();
 | 
						|
};
 | 
						|
 | 
						|
TQuadro_VT_selfirm_mask::TQuadro_VT_selfirm_mask() : TAutomask("cg5800a")
 | 
						|
{
 | 
						|
  _ditte  = new TArray_sheet(-1, -1, -4, -4, TR("Selezione Ditte"), HR("Cod.@5|Ragione Sociale@50"));  
 | 
						|
  const TDate oggi(TODAY);                    
 | 
						|
  _year = oggi.year();
 | 
						|
 | 
						|
  build_ditte_sheet();                             
 | 
						|
}
 | 
						|
 | 
						|
TQuadro_VT_selfirm_mask::~TQuadro_VT_selfirm_mask()
 | 
						|
{
 | 
						|
  delete _ditte;
 | 
						|
}
 | 
						|
 | 
						|
void TQuadro_VT_selfirm_mask::build_ditte_sheet()
 | 
						|
{
 | 
						|
  TTable pum("PUM");
 | 
						|
 | 
						|
  _ditte->destroy();
 | 
						|
  TPointer_array firms; 
 | 
						|
  TPrefix::firms(firms);
 | 
						|
 | 
						|
  long good_company = -1;
 | 
						|
 | 
						|
  FOR_EACH_ARRAY_ITEM(firms, i, obj)
 | 
						|
  {
 | 
						|
    TToken_string* d = new TToken_string(63);
 | 
						|
    const long codditta = firms.get_long(i);
 | 
						|
    d->add(codditta);
 | 
						|
    d->add(cache().get(LF_NDITTE, codditta, NDT_RAGSOC));
 | 
						|
    const long pos = _ditte->add(d);  
 | 
						|
 | 
						|
    pum.put("CODTAB", _year);
 | 
						|
    if (pum.read(_isgteq) == NOERR && atoi(pum.get("CODTAB").left(4)) == _year)
 | 
						|
    {
 | 
						|
      if (good_company <= 0)
 | 
						|
        good_company = pos;
 | 
						|
    }
 | 
						|
    else
 | 
						|
      _ditte->disable_row(pos);
 | 
						|
  }
 | 
						|
 | 
						|
  if (good_company >= 0)
 | 
						|
  {
 | 
						|
    TToken_string& row = _ditte->row(good_company);
 | 
						|
    set(F_CODDITTA, row.get(0));
 | 
						|
    set(F_RAGSOC,   row.get(1));
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    reset(F_CODDITTA);
 | 
						|
    reset(F_RAGSOC);
 | 
						|
  }
 | 
						|
     
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadro_VT_selfirm_mask::select_button()
 | 
						|
{     
 | 
						|
  if (_ditte->run() == K_ENTER)
 | 
						|
  {
 | 
						|
    TToken_string& row = _ditte->row(_ditte->selected()); 
 | 
						|
    set(F_CODDITTA, row.get(0));
 | 
						|
    set(F_RAGSOC, row.get(1));
 | 
						|
    return true;        
 | 
						|
  }
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadro_VT_selfirm_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{                                                  
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
    case F_CODDITTA:
 | 
						|
      if (e == fe_button)
 | 
						|
        return select_button();
 | 
						|
      
 | 
						|
      if (e == fe_modify)
 | 
						|
      {
 | 
						|
        bool found = false;
 | 
						|
        TString16 ditta = o.get();
 | 
						|
        for (int i = 0; i < _ditte->items(); i++)
 | 
						|
        { 
 | 
						|
          TToken_string& row = _ditte->row(i);
 | 
						|
          if (ditta == row.get(0))
 | 
						|
          { 
 | 
						|
            if (_ditte->row_enabled(i))
 | 
						|
            {
 | 
						|
              set(F_CODDITTA, row.get(0));
 | 
						|
              set(F_RAGSOC, row.get(1));
 | 
						|
              found = true;
 | 
						|
            }
 | 
						|
            else 
 | 
						|
            { 
 | 
						|
              warning_box(FR("Non sono definiti i parametri liquidazione per la ditta %ld"),
 | 
						|
                          atol(ditta));
 | 
						|
              o.reset(); 
 | 
						|
            }
 | 
						|
            break;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        if (!found)
 | 
						|
          o.reset();
 | 
						|
        return found;
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    case F_RAGSOC:
 | 
						|
      if (e == fe_button)
 | 
						|
        return select_button();
 | 
						|
      if (e == fe_modify)
 | 
						|
      {
 | 
						|
        bool found = false;
 | 
						|
        TString8 ditta = o.get();
 | 
						|
        for (int i = 0; i < _ditte->items(); i++)
 | 
						|
        { 
 | 
						|
          TToken_string& row = _ditte->row(i);
 | 
						|
          TString ts(row.get(1));
 | 
						|
          if (ts.find(ditta) != -1)
 | 
						|
          { 
 | 
						|
            if (_ditte->row_enabled(i))
 | 
						|
            {
 | 
						|
              set(F_CODDITTA, row.get(0));
 | 
						|
              set(F_RAGSOC, row.get(1));
 | 
						|
              found = true;
 | 
						|
              break;
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
        if (!found) o.reset(); 
 | 
						|
        return found;  
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    case F_YEAR:
 | 
						|
      if (e == fe_modify)
 | 
						|
      {
 | 
						|
        _year = atoi(o.get());
 | 
						|
        build_ditte_sheet();  
 | 
						|
        set(F_CODDITTA, "");  
 | 
						|
        set(F_RAGSOC, "");  
 | 
						|
      }
 | 
						|
      break;
 | 
						|
     default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  
 | 
						|
  return true;
 | 
						|
} 
 | 
						|
 | 
						|
class TQuadro_VT_iva_form : public TForm
 | 
						|
{
 | 
						|
public:
 | 
						|
  TQuadro_VT_iva_form() : TForm("cg5800a") {}
 | 
						|
};
 | 
						|
  
 | 
						|
class TQuadro_VT_iva_mask : public TAutomask
 | 
						|
{
 | 
						|
  TQuadro_VT_selfirm_mask* _sf;
 | 
						|
 | 
						|
protected:
 | 
						|
  void read_iva_data();
 | 
						|
 | 
						|
public:
 | 
						|
  void set_prospect();
 | 
						|
  void print_prospect();
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
  TQuadro_VT_iva_mask(TQuadro_VT_selfirm_mask *m) : TAutomask("cg5800b"), _sf(m)  { }
 | 
						|
};
 | 
						|
 | 
						|
void TQuadro_VT_iva_mask::read_iva_data()
 | 
						|
{
 | 
						|
  TTable pem("PEM");
 | 
						|
	real tprimp, tpriva, timp, tiva;
 | 
						|
  TString16 key;
 | 
						|
 | 
						|
  key.format("%04d00", _sf->get_year());
 | 
						|
	pem.put("CODTAB", key);
 | 
						|
	int err = pem.read();
 | 
						|
  
 | 
						|
 | 
						|
	if (err == NOERR)
 | 
						|
	{
 | 
						|
		set(F_TOTIVIMP, pem.get("R0"));
 | 
						|
		set(F_TOTIVIVA, pem.get("R1"));
 | 
						|
		timp += pem.get_real("R0");
 | 
						|
		tiva += pem.get_real("R1");
 | 
						|
	
 | 
						|
		for (int codreg = 1;codreg < 23; codreg++)
 | 
						|
		{
 | 
						|
			key.format("%04d%02d", _sf->get_year(), codreg);
 | 
						|
			pem.put("CODTAB", key);
 | 
						|
			err = pem.read();
 | 
						|
 | 
						|
			if (err == NOERR)
 | 
						|
			{
 | 
						|
				set(F_REGIMP(codreg - 1), pem.get("R0"));
 | 
						|
				set(F_REGIVA(codreg - 1), pem.get("R1"));
 | 
						|
				tprimp += pem.get_real("R0");
 | 
						|
				tpriva += pem.get_real("R1");
 | 
						|
				timp += pem.get_real("R0");
 | 
						|
				tiva += pem.get_real("R1");
 | 
						|
			}
 | 
						|
		}
 | 
						|
		set(F_TOTIMP, timp);
 | 
						|
		set(F_TOTIVA, tiva);
 | 
						|
		set(F_TOTPRIMP, tprimp);
 | 
						|
		set(F_TOTPRIVA, tpriva);
 | 
						|
	}
 | 
						|
	else
 | 
						|
    warning_box(FR("Risultati liquidazione non presenti o da ricalcolare per l'anno %d."), _sf->get_year());
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void TQuadro_VT_iva_mask::print_prospect()
 | 
						|
{
 | 
						|
  const int anno = _sf->get_int(F_YEAR);
 | 
						|
  TQuadro_VT_iva_form frm;
 | 
						|
  
 | 
						|
  frm.find_field('B', odd_page, FF_YEAR).set(get(F_YEAR));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTIMP).set(get(F_TOTIMP));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTIVA).set(get(F_TOTIVA));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTPRIMP).set(get(F_TOTPRIMP));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTPRIVA).set(get(F_TOTPRIVA));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTIVIMP).set(get(F_TOTIVIMP));
 | 
						|
	frm.find_field('B', odd_page, FF_TOTIVIVA).set(get(F_TOTIVIVA));
 | 
						|
 | 
						|
  for (int reg = 0; reg < 22; reg++)
 | 
						|
	{
 | 
						|
		frm.find_field('B', odd_page, FF_REGIMP(reg)).set(get(F_REGIMP(reg)));
 | 
						|
		frm.find_field('B', odd_page, FF_REGIVA(reg)).set(get(F_REGIVA(reg)));
 | 
						|
	}
 | 
						|
		
 | 
						|
	TRectype f(LF_NDITTE);  
 | 
						|
  f.put(NDT_CODDITTA, get(F_CODDITTA));
 | 
						|
  
 | 
						|
  frm.cursor()->setregion(f,f);
 | 
						|
  frm.print();
 | 
						|
}
 | 
						|
 | 
						|
bool TQuadro_VT_iva_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{                                                  
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
  case DLG_PRELPR:
 | 
						|
    if (e == fe_button)
 | 
						|
		{
 | 
						|
		  TReport rep;
 | 
						|
			if (rep.load("cg5800ra.rep"))
 | 
						|
			{
 | 
						|
				TRecordset* r = rep.recordset();
 | 
						|
				if (r != NULL)
 | 
						|
				{
 | 
						|
					const TVariant var = get(F_YEAR);
 | 
						|
					r->set_var("#ANNO", var);
 | 
						|
				}
 | 
						|
  			rep.print_or_preview();
 | 
						|
			}
 | 
						|
		}
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  
 | 
						|
  return true;
 | 
						|
} 
 | 
						|
 | 
						|
void TQuadro_VT_iva_mask::set_prospect()
 | 
						|
{
 | 
						|
  CHECK(_sf, "Invalid mask");
 | 
						|
  
 | 
						|
  const int anno = _sf->get_year();
 | 
						|
  const long ditta = _sf->get_long(F_CODDITTA);
 | 
						|
  
 | 
						|
  set(F_YEAR, anno);
 | 
						|
  set(F_CODDITTA, ditta);
 | 
						|
  set(F_RAGSOC, _sf->get(F_RAGSOC));
 | 
						|
  
 | 
						|
  TFirm frm(ditta);
 | 
						|
  
 | 
						|
  TIva_round ir;
 | 
						|
  ir.set_default_iva_mode(anno, false, ditta);
 | 
						|
  
 | 
						|
  read_iva_data();
 | 
						|
}
 | 
						|
 | 
						|
class TQuadro_VT_iva_app : public TSkeleton_application
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool create(); 
 | 
						|
  virtual void main_loop();
 | 
						|
public:
 | 
						|
  virtual bool firm_change_enabled() const { return false; }
 | 
						|
};
 | 
						|
 | 
						|
bool TQuadro_VT_iva_app::create()
 | 
						|
{ 
 | 
						|
  open_files(LF_TAB, LF_TABCOM, LF_NDITTE, 0);
 | 
						|
  return TSkeleton_application::create();
 | 
						|
}
 | 
						|
 | 
						|
void TQuadro_VT_iva_app::main_loop()
 | 
						|
{
 | 
						|
  const long ditta = get_firm();
 | 
						|
 
 | 
						|
  TQuadro_VT_selfirm_mask* m1 = new TQuadro_VT_selfirm_mask();
 | 
						|
  while (m1->run() != K_QUIT)
 | 
						|
  {
 | 
						|
    if (m1->get(F_CODDITTA).empty() || m1->get(F_RAGSOC).empty())  
 | 
						|
    { 
 | 
						|
      error_box(TR("Selezionare una ditta"));
 | 
						|
      continue;
 | 
						|
    }
 | 
						|
    
 | 
						|
    set_firm(m1->get_long(F_CODDITTA));
 | 
						|
 | 
						|
    TQuadro_VT_iva_mask* m2 = new TQuadro_VT_iva_mask(m1);
 | 
						|
    m2->reset();
 | 
						|
    m2->enable_default();
 | 
						|
    m2->set_prospect();
 | 
						|
    if (m2->run() == K_ENTER)
 | 
						|
      m2->print_prospect();
 | 
						|
    delete m2;  
 | 
						|
  }
 | 
						|
  delete m1;  
 | 
						|
 | 
						|
  set_firm(ditta);
 | 
						|
}
 | 
						|
 | 
						|
int cg5800(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TQuadro_VT_iva_app a;
 | 
						|
  a.run(argc, argv, TR("Quadro VT"));
 | 
						|
  return 0;
 | 
						|
} |