186 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <form.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <printapp.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include "lf.h"
 | 
						|
#include "donaz.h"
 | 
						|
#include "soggetti.h"
 | 
						|
#include "sezioni.h"
 | 
						|
 | 
						|
#include "at6.h"
 | 
						|
#include "at6500a.h"
 | 
						|
 | 
						|
//#define ALIAS_LDN 100
 | 
						|
 | 
						|
class TRiepilogoDonazioni : public TPrintapp
 | 
						|
{
 | 
						|
  TRelation*					_rel;
 | 
						|
  TMask*      				_msk;
 | 
						|
  int 								_cur;
 | 
						|
  TDate								_dataini, _datafin;
 | 
						|
  TString16						_codsez, _codsot;
 | 
						|
  int									_mese,_anno;
 | 
						|
  //bool								_primedon;
 | 
						|
  TAssoc_array*				_totali_mese;
 | 
						|
  TAssoc_array*				_totali_anno;
 | 
						|
  TAssoc_array*				_totali_sezione;
 | 
						|
  
 | 
						|
protected:
 | 
						|
  virtual bool user_create();
 | 
						|
  virtual bool user_destroy();
 | 
						|
  virtual bool set_print(int m);
 | 
						|
  virtual void set_page(int file, int cnt);
 | 
						|
  virtual bool preprocess_page(int file, int counter);
 | 
						|
 | 
						|
public:
 | 
						|
  void crea_intestazione();
 | 
						|
  void header_sezione(const TString16 codsez, const TString16 codsot);
 | 
						|
  TMask& app_mask() { return *_msk; }
 | 
						|
  TRiepilogoDonazioni() {}
 | 
						|
};
 | 
						|
 | 
						|
HIDDEN inline TRiepilogoDonazioni& app() { return (TRiepilogoDonazioni&) main_app(); }
 | 
						|
 | 
						|
void TRiepilogoDonazioni::set_page(int file, int cnt)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool TRiepilogoDonazioni::preprocess_page(int file, int counter)
 | 
						|
{
 | 
						|
	TRectype& recsog = current_cursor()->curr(LF_SOGGETTI);
 | 
						|
	// salto pagina se cambio sezione
 | 
						|
	const TString16 codsez = recsog.get(SOG_CODSEZ);		
 | 
						|
	const TString16 codsot = recsog.get(SOG_CODSOT);		
 | 
						|
	if ((_codsez != codsez) || (_codsot != codsot))
 | 
						|
	{
 | 
						|
		if (_codsez != "**")
 | 
						|
			//printer().formfeed();
 | 
						|
			riepilogo_sezione();
 | 
						|
		_codsez = codsez;
 | 
						|
		_codsot = codsot;
 | 
						|
		_mese = -1;
 | 
						|
		_anno = -1;
 | 
						|
		header_sezione(codsez, codsot);
 | 
						|
	}
 | 
						|
	const TDate datadon = current_cursor()->curr().get(DON_DATADON);
 | 
						|
	const int mese = datadon.month();
 | 
						|
	const int anno = datadon.year();
 | 
						|
	if (_mese != mese)
 | 
						|
	{                  
 | 
						|
		if (_mese != -1)
 | 
						|
			riepilogo_mese();
 | 
						|
		_mese = mese;			
 | 
						|
	}
 | 
						|
	if (_anno != anno)
 | 
						|
	{                  
 | 
						|
		if (_anno != -1)
 | 
						|
			riepilogo_anno();
 | 
						|
		_anno = anno;			
 | 
						|
	}
 | 
						|
	const char* tipodon = current_cursor()->curr().get(DON_TIPODON);
 | 
						|
	if (_totali_mese.is_key(tipodon))
 | 
						|
		_totali_mese[tipodon]++;
 | 
						|
	else
 | 
						|
		_totali_mese.add(tipodon,1);
 | 
						|
	if (_totali_anno.is_key(tipodon))
 | 
						|
		_totali_anno[tipodon]++;
 | 
						|
	else
 | 
						|
		_totali_anno.add(tipodon,1);
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TRiepilogoDonazioni::set_print(int m)
 | 
						|
{ 
 | 
						|
  KEY tasto;
 | 
						|
 	tasto = _msk->run();
 | 
						|
 	if (tasto == K_ENTER)
 | 
						|
 	{ 
 | 
						|
		_dataini = 	_msk->get_date(F_DATAINI);	
 | 
						|
		_datafin = 	_msk->get_date(F_DATAFIN);	
 | 
						|
		//_primedon = _msk->get_bool(F_PRIMEDON);	
 | 
						|
		TString80 chiave = "";
 | 
						|
		chiave = "90->CODSEZ|90->CODSOT|92->DATADON|";
 | 
						|
		// filtro per sezione/sottogruppo
 | 
						|
		TString80 filtro = "";			
 | 
						|
		if		
 | 
						|
		// filtro per data
 | 
						|
	  TRectype da(LF_DONAZ);
 | 
						|
  	TRectype a (LF_DONAZ);
 | 
						|
  	if (_dataini.ok())
 | 
						|
			da.put(DON_DATADON, _dataini);
 | 
						|
  	if (_datafin.ok())
 | 
						|
			a.put(DON_DATADON, _datafin);
 | 
						|
	  _cur = add_cursor(new TSorted_cursor(_rel, (const char*) chiave, "", 2, &da, &a));
 | 
						|
	  // manca il filtro da sez./sot. a sez./sot.
 | 
						|
		//current_cursor()->setfilter((const char*) filtro, TRUE);
 | 
						|
  	_codsez = "**";
 | 
						|
  	_codsot = "**";
 | 
						|
  	_mese = -1;
 | 
						|
  	_anno = -1;
 | 
						|
	  reset_files(); 
 | 
						|
  	add_file(LF_DONAZ);
 | 
						|
		reset_print();
 | 
						|
		crea_intestazione();
 | 
						|
		return TRUE;
 | 
						|
  }	            
 | 
						|
 	else
 | 
						|
  	return FALSE;
 | 
						|
}
 | 
						|
 
 | 
						|
void TRiepilogoDonazioni::crea_intestazione()
 | 
						|
{
 | 
						|
  reset_header();
 | 
						|
	TString sep(132);
 | 
						|
	sep = "RIEPILOGO DONAZIONI ";
 | 
						|
	if (_dataini.ok())
 | 
						|
	{
 | 
						|
		sep << " DAL ";
 | 
						|
		sep << _dataini.string();
 | 
						|
	}
 | 
						|
	if (_datafin.ok())
 | 
						|
	{
 | 
						|
		sep << " AL ";
 | 
						|
		sep << _datafin.string();
 | 
						|
	}
 | 
						|
	sep.center_just();
 | 
						|
	set_header(2, "@0g%s", (const char*) sep);
 | 
						|
	TString16 data_stampa = _data_stampa.string();
 | 
						|
	set_header(2,"@0g%10s", (const char*) data_stampa);
 | 
						|
	sep = "";
 | 
						|
	sep << "Pag. @#";
 | 
						|
	set_header(2, "@120g%s", (const char*) sep);  
 | 
						|
	sep = "";
 | 
						|
	sep.fill('-');
 | 
						|
	set_header(3, (const char *) sep);
 | 
						|
}
 | 
						|
 | 
						|
bool TRiepilogoDonazioni::user_create()
 | 
						|
{
 | 
						|
  _rel = new TRelation(LF_DONAZ);
 | 
						|
  _rel->add(LF_SOGGETTI, "CODICE==CODICE");
 | 
						|
  //_rel->add("LDN", "CODTAB==LUOGODON",1,0,ALIAS_LDN);
 | 
						|
  _msk = new TMask("at6500a");
 | 
						|
	_totali_mese = new TAssoc_array();
 | 
						|
	_totali_anno = new TAssoc_array();
 | 
						|
	_totali_sezione = new TAssoc_array();
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TRiepilogoDonazioni::user_destroy()
 | 
						|
{
 | 
						|
  delete _msk;
 | 
						|
  delete _rel;
 | 
						|
  delete _totali_mese;
 | 
						|
  delete _totali_anno;
 | 
						|
  delete _totali_sezione;
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
int at6500(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TRiepilogoDonazioni a;
 | 
						|
  a.run(argc, argv, "Riepilogo donazioni");
 | 
						|
  return 0;
 | 
						|
}
 |