Files correlati : Ricompilazione Demo : [ ] Commento : Rivisto programma ripartizione cespiti (no obbligatorietà date utilizzo e percentuali) Aggiunto il programma di stampa dei cespiti in analitica (prima stesura) git-svn-id: svn://10.65.10.50/trunk@20570 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			352 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			352 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						||
#include <automask.h>
 | 
						||
#include <defmask.h>
 | 
						||
#include <dongle.h>
 | 
						||
#include <modaut.h>
 | 
						||
#include <progind.h>
 | 
						||
#include <recarray.h>
 | 
						||
#include <reprint.h>
 | 
						||
 | 
						||
#include "celib.h"
 | 
						||
#include "ce2101.h"
 | 
						||
 | 
						||
#include "ammce.h"
 | 
						||
#include "ammmv.h"
 | 
						||
#include "cespi.h"
 | 
						||
#include "movam.h"
 | 
						||
#include "salce.h"
 | 
						||
#include "salcecms.h"
 | 
						||
 | 
						||
#include "ce4.h"
 | 
						||
#include "ce4500a.h"
 | 
						||
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
//	MASCHERA
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
class TPrint_anal_cespi_mask : public TAutomask
 | 
						||
{
 | 
						||
  bool _preview;
 | 
						||
 | 
						||
protected:
 | 
						||
  bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
public:
 | 
						||
  bool preview() const { return _preview; }
 | 
						||
  TPrint_anal_cespi_mask();
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
bool TPrint_anal_cespi_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
  switch (o.dlg())
 | 
						||
  {
 | 
						||
  case DLG_PRINT:
 | 
						||
    if (e == fe_button)
 | 
						||
      _preview = false;
 | 
						||
    break;
 | 
						||
  case DLG_PREVIEW:
 | 
						||
    if (e == fe_button)
 | 
						||
    {
 | 
						||
      _preview = true;
 | 
						||
      stop_run(K_ENTER);
 | 
						||
    }
 | 
						||
    break;
 | 
						||
  default:
 | 
						||
    break;
 | 
						||
  }
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
TPrint_anal_cespi_mask::TPrint_anal_cespi_mask() : TAutomask("ce4500a"), _preview(false)
 | 
						||
{
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
///////////////////////////////////////////////////////////////
 | 
						||
//	RECORDSET
 | 
						||
///////////////////////////////////////////////////////////////
 | 
						||
class TPrint_anal_cespi_recordset : public TISAM_recordset
 | 
						||
{
 | 
						||
public:
 | 
						||
  void set_filter(const TPrint_anal_cespi_mask& msk);
 | 
						||
  TPrint_anal_cespi_recordset(const TString& sql) : TISAM_recordset(sql) { }
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
//metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
 | 
						||
void TPrint_anal_cespi_recordset::set_filter(const TPrint_anal_cespi_mask& msk)
 | 
						||
{
 | 
						||
  //magggica query
 | 
						||
	TString query = "USE SALCECMS KEY 2";
 | 
						||
 | 
						||
  query << "\nSELECT (BETWEEN(CODCDC,#CODCDC,#CODCDC))&&(BETWEEN(CODCMS,#CODCMS,#CODCMS))&&(BETWEEN(CODFASE,#CODFASE,#CODFASE))";
 | 
						||
 | 
						||
  //from-to sulla key 2 di salcecms 
 | 
						||
  query << "\nFROM CODES=#CODES IDCESPITE=#IDCESPITE";
 | 
						||
  query << "\nTO CODES=#CODES IDCESPITE=#IDCESPITE";
 | 
						||
 | 
						||
  //setta la nuova query nel report (che avrebbe solo USE SALCECMS KEY 2)
 | 
						||
	set(query);
 | 
						||
 | 
						||
  //parte analitica
 | 
						||
  const int codes = msk.get_int(F_ESERCIZIO);
 | 
						||
  const TString& idcespite = msk.get(F_IDCESPITE);
 | 
						||
  const TString& codcdc = msk.get(F_CODCDC);
 | 
						||
  const TString& codcms = msk.get(F_CODCMS);
 | 
						||
  const TString& codfase = msk.get(F_CODFASE);
 | 
						||
 | 
						||
  set_var("#CODES", long(codes));
 | 
						||
  set_var("#IDCESPITE", idcespite);
 | 
						||
  set_var("#CODCDC", codcdc);
 | 
						||
  set_var("#CODCMS", codcms);
 | 
						||
  set_var("#CODFASE", codfase);
 | 
						||
 | 
						||
  const TRecnotype cazzo = items();
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
//	REPORT
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
class TPrint_anal_cespi_rep : public TReport
 | 
						||
{
 | 
						||
	int _tpamm, _codes;
 | 
						||
  TString _codcdc, _codcms, _codfase;
 | 
						||
	TCespite _cespite;
 | 
						||
 | 
						||
protected:
 | 
						||
	real val_amm(const TRectype& rec_saldi) const;
 | 
						||
	virtual bool get_usr_val(const TString& name, TVariant& var) const;
 | 
						||
  virtual bool use_mask() { return false; }
 | 
						||
 | 
						||
public:
 | 
						||
	void set_filter(const TPrint_anal_cespi_mask& msk);
 | 
						||
};
 | 
						||
 | 
						||
 | 
						||
void TPrint_anal_cespi_rep::set_filter(const TPrint_anal_cespi_mask& msk)
 | 
						||
{
 | 
						||
  //parametri presi dalla maschera; servono solo per essere riportati sul report in quanto <20>..
 | 
						||
  //..use_mask()=false; l'unico che serve per i conti <20> _tpamm (saldi cespite in base a _tpamm)
 | 
						||
	_tpamm = msk.get_int(F_SITUAZIONE);
 | 
						||
  _codcdc = msk.get(F_CODCDC);
 | 
						||
  _codcms = msk.get(F_CODCMS);
 | 
						||
  _codfase = msk.get(F_CODFASE);
 | 
						||
 | 
						||
  TPrint_anal_cespi_recordset* rs = new TPrint_anal_cespi_recordset(EMPTY_STRING);
 | 
						||
  set_recordset(rs);
 | 
						||
	rs->set_filter(msk);
 | 
						||
}
 | 
						||
 | 
						||
real TPrint_anal_cespi_rep::val_amm(const TRectype& rec_saldi) const
 | 
						||
{
 | 
						||
	real valore = rec_saldi.get_real(SALCE_CSTO);
 | 
						||
 | 
						||
  if (_tpamm == 1)  //solo fiscale
 | 
						||
    valore -= rec_saldi.get_real(SALCE_VNONAMM06);
 | 
						||
 | 
						||
	if (_tpamm == 2)  //solo civilistico
 | 
						||
  {
 | 
						||
		valore -= rec_saldi.get_real(SALCE_VNONAMMC);
 | 
						||
    valore += rec_saldi.get_real(SALCE_RIVGC);
 | 
						||
  }
 | 
						||
	else  //fiscale e/o gestionale
 | 
						||
  {
 | 
						||
		valore -= rec_saldi.get_real(SALCE_VNONAMM);
 | 
						||
    valore += rec_saldi.get_real(SALCE_RIVGF);
 | 
						||
  }
 | 
						||
	
 | 
						||
	valore += rec_saldi.get_real(SALCE_RIV75);
 | 
						||
	valore += rec_saldi.get_real(SALCE_RIV83);
 | 
						||
	valore += rec_saldi.get_real(SALCE_RIV90);
 | 
						||
	valore += rec_saldi.get_real(SALCE_RIV91);
 | 
						||
 | 
						||
	if (valore < ZERO)
 | 
						||
		valore = ZERO;
 | 
						||
 | 
						||
	return valore;
 | 
						||
}
 | 
						||
 | 
						||
//metodo per il calcolo dei campi da calcolare (ma va'!) nel report
 | 
						||
bool TPrint_anal_cespi_rep::get_usr_val(const TString& name, TVariant& var) const
 | 
						||
{
 | 
						||
	const TRecordset& recset = *recordset();
 | 
						||
	const TString& idcespite = recset.get(SALCECMS_IDCESPITE).as_string();
 | 
						||
  const TString& desc = cache().get(LF_CESPI, idcespite, CESPI_DESC);
 | 
						||
  const int codes = recset.get(SALCECMS_CODES).as_int();
 | 
						||
  const TString& codcdc = recset.get(SALCECMS_CODCDC).as_string();
 | 
						||
  const TString& codcms = recset.get(SALCECMS_CODCMS).as_string();
 | 
						||
  const TString& codfase = recset.get(SALCECMS_CODFASE).as_string();
 | 
						||
  const real percutil = recset.get(SALCECMS_PERCUTIL).as_real() / CENTO;
 | 
						||
 | 
						||
  if (idcespite != _cespite.get(CESPI_IDCESPITE))
 | 
						||
	{
 | 
						||
		TCespite& c = (TCespite&)_cespite;
 | 
						||
		c.read(idcespite);
 | 
						||
		c.load_saldi(_tpamm, codes);
 | 
						||
	}
 | 
						||
 | 
						||
  //CAMPI CESPITE
 | 
						||
  //-------------
 | 
						||
  if (name.starts_with("#DESC"))
 | 
						||
  {
 | 
						||
    var = desc;
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
 | 
						||
	if (name.starts_with("#VARIAZIONE"))	//variazione del valore annuale (saldo finale - saldo iniziale)
 | 
						||
	{
 | 
						||
		const real val_fin = val_amm(_cespite.sal_pro());
 | 
						||
    const real val_ini = val_amm(_cespite.sal_ini());
 | 
						||
    var = (val_fin - val_ini) * percutil;
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	if (name == "#QAMMMV")	//quote ammortamento su movimento esercizio corrente
 | 
						||
	{
 | 
						||
		real quote_ammmv;
 | 
						||
		const TArray& array_ammmv = _cespite.ammmv();
 | 
						||
		for (int i = 0; i < array_ammmv.items(); i++)
 | 
						||
		{
 | 
						||
			const TRectype& rec_ammmv = (const TRectype&)array_ammmv[i];
 | 
						||
			quote_ammmv += rec_ammmv.get_real(AMMMV_QNOR) + rec_ammmv.get_real(AMMMV_QACC) +
 | 
						||
			               rec_ammmv.get_real(AMMMV_QANT) + rec_ammmv.get_real(AMMMV_QPERSE) + 
 | 
						||
                     rec_ammmv.get_real(AMMMV_QPPRIVATE) + rec_ammmv.get_real(AMMMV_FPRIVATO);
 | 
						||
		}
 | 
						||
    quote_ammmv *= percutil;
 | 
						||
    var = quote_ammmv;
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
 | 
						||
	if (name == "#QAMM")	//quote ammortamento esercizio corrente
 | 
						||
	{
 | 
						||
		const TRectype& rec_ammce = _cespite.amm_pro();
 | 
						||
		real quote_amm = real(rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + 
 | 
						||
               rec_ammce.get_real(AMMCE_QANT) + rec_ammce.get_real(AMMCE_QPERSE) + 
 | 
						||
               rec_ammce.get_real(AMMCE_QPPRIVATE) + rec_ammce.get_real(AMMCE_FPRIVATO));
 | 
						||
    quote_amm *= percutil;
 | 
						||
    var = quote_amm;
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
 	if (name == "#QAMM_FPRIVATO")	//fondo ammortamento privato corrente
 | 
						||
	{
 | 
						||
		const TRectype& rec_ammce = _cespite.amm_pro();
 | 
						||
		real famm = rec_ammce.get_real(AMMCE_FPRIVATO);
 | 
						||
    famm *= percutil;
 | 
						||
    var = famm;
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
  if (name == "#PERCAMM")	// percentuale ammortamento
 | 
						||
	{
 | 
						||
    real percamm;
 | 
						||
    real valamm = val_amm(_cespite.sal_ini());
 | 
						||
    if (valamm.is_zero()) // Non riesce a calcolare il valore ammortizzabile dei cespiti nuovi
 | 
						||
    {
 | 
						||
      const int anno_acq = _cespite.get_date(CESPI_DTCOMP).year();
 | 
						||
      if (anno_acq == codes)
 | 
						||
      {
 | 
						||
        valamm = val_amm(_cespite.sal_pro());
 | 
						||
      }
 | 
						||
    }
 | 
						||
    if (!valamm.is_zero())
 | 
						||
    {
 | 
						||
      TVariant qamm, qammmv;
 | 
						||
      get_usr_val("#QAMM", qamm);
 | 
						||
      get_usr_val("#QAMMMV", qammmv);
 | 
						||
      percamm = CENTO * (qamm.as_real() + qammmv.as_real()) / valamm;
 | 
						||
      percamm.round(1);
 | 
						||
    }  
 | 
						||
		var = percamm;
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	if (name == "#CESSELIM")	//cessioni elminiazioni
 | 
						||
	{
 | 
						||
		real cesselim;
 | 
						||
		const TArray& array_movam = _cespite.movam();
 | 
						||
		for (int i = 0; i < array_movam.items(); i++)
 | 
						||
		{
 | 
						||
			const TRectype& rec_movam = (const TRectype&)array_movam[i];
 | 
						||
			cesselim += rec_movam.get_real(MOVAM_QNOR) + rec_movam.get_real(MOVAM_QACC) + 
 | 
						||
                  rec_movam.get_real(MOVAM_QANT) + rec_movam.get_real(MOVAM_QPERSE) + 
 | 
						||
                  rec_movam.get_real(MOVAM_QPPRIVATE) + rec_movam.get_real(MOVAM_FPRIVATO);
 | 
						||
		}
 | 
						||
    cesselim *= percutil;
 | 
						||
    var = cesselim;
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
  //CAMPI TESTATA (FILTRI)
 | 
						||
  //----------------------
 | 
						||
  if (name == "#CODCDC")
 | 
						||
  {
 | 
						||
    var.set(_codcdc);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  if (name == "#CODCMS")
 | 
						||
  {
 | 
						||
    var.set(_codcms);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  if (name == "#CODFASE")
 | 
						||
  {
 | 
						||
    var.set(_codfase);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
	if (name == "#SITUAZIONE")	//tipo situazione da stampare in testata
 | 
						||
	{
 | 
						||
		var.set(_tpamm);
 | 
						||
		return true;
 | 
						||
	}
 | 
						||
 | 
						||
	return TReport::get_usr_val(name, var);
 | 
						||
}
 | 
						||
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
//	APPLICAZIONE
 | 
						||
////////////////////////////////////////////////////////
 | 
						||
class TPrint_anal_cespi : public TSkeleton_application
 | 
						||
{
 | 
						||
protected:
 | 
						||
  virtual bool create(void);
 | 
						||
  virtual void main_loop();
 | 
						||
};
 | 
						||
 | 
						||
void TPrint_anal_cespi::main_loop()
 | 
						||
{
 | 
						||
	TPrint_anal_cespi_mask mask;
 | 
						||
  while (mask.run() == K_ENTER)
 | 
						||
  {
 | 
						||
		//report e book dei report
 | 
						||
		TReport_book book;
 | 
						||
		TPrint_anal_cespi_rep rep;
 | 
						||
		rep.load("ce4500a");
 | 
						||
 | 
						||
		rep.set_filter(mask);
 | 
						||
		book.add(rep);
 | 
						||
 | 
						||
    //stampa il book dei report
 | 
						||
    if (mask.preview())
 | 
						||
      book.preview();
 | 
						||
    else
 | 
						||
		  book.print();	
 | 
						||
	}
 | 
						||
}
 | 
						||
 | 
						||
bool TPrint_anal_cespi::create()
 | 
						||
{
 | 
						||
  const bool has_ca = dongle().active(CAAUT);
 | 
						||
  //se la chiave non ha CA non si pu<70> proseguire!
 | 
						||
  if (!has_ca)
 | 
						||
    return error_box("Per utilizzare questo programma <20> necessaria l'attivazione del modulo Contabilt<6C> Analitica");
 | 
						||
 | 
						||
  return TSkeleton_application::create();
 | 
						||
}
 | 
						||
 | 
						||
int ce4500(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TPrint_anal_cespi a;
 | 
						||
  a.run(argc, argv, TR("Stampa cespiti per analitica"));
 | 
						||
  return 0;
 | 
						||
} |