#include <applicat.h>
#include <automask.h>
#include <form.h>
#include <report.h>
#include <reprint.h>
#include <tabutil.h>
#include <textset.h>

#include "co2.h"
#include "co2100a.h"

#include "socicoop.h"

////////////////////////////////////////////////////////
//	MASCHERA
////////////////////////////////////////////////////////
class TStampaAnagSoci_mask : public TAutomask
{
protected:
  bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
  TStampaAnagSoci_mask();
  virtual ~TStampaAnagSoci_mask() {};
};
  
TStampaAnagSoci_mask::TStampaAnagSoci_mask() :TAutomask ("co2100a")
{
}  

bool TStampaAnagSoci_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
{ 
	return true;
}

/////////////////////////////////////////////////////////////
//  REPORT
/////////////////////////////////////////////////////////////
class TStampaAnagSoci_report : public TReport
{
protected:
virtual bool use_mask() { return false; }
public:
  TStampaAnagSoci_report() {}
};


////////////////////////////////////////////////////////
//	APPLICAZIONE
////////////////////////////////////////////////////////

class TStampaAnagSoci : public TSkeleton_application
{
public:
  virtual void main_loop();
};

void TStampaAnagSoci::main_loop()
{
  TStampaAnagSoci_mask m;
  while (m.run() == K_ENTER)
  {
		TStampaAnagSoci_report rep;
		TReport_book book;
		
		const int formato = m.get_int(F_FORMATO);

		//ATTENZIONE: in caso di formato == 3 il report dovrebbe essere co2100b e non co2100a!!!!!!!!!!!!!!!
		if (rep.load(formato==3 ? "co2100b" : "co2100a"))  
		{
			TString use(rep.recordset()->query_text());
			int pos = use.find("JOIN");
			if (pos <= 0) pos = use.len();
			
			switch(formato)
			{
			case 1: use.insert("SELECT BETWEEN(DATAASS, #DADATA, #ADATA)\n", pos); break;
			case 2: use.insert("SELECT BETWEEN(DATAREC, #DADATA, #ADATA)\n", pos); break;
			case 3: use.insert("SELECT BETWEEN(#DADATA, DATAASS, DATAREC) || BETWEEN(#ADATA, DATAASS, DATAREC)\n", pos); break;
			default: break;
			}


			const int ordinamento = m.get_int(F_ORDINAMENTO);
			pos = use.find("JOIN");
			if (pos <= 0) pos = use.len();
			if (ordinamento == 2)
					use.insert("BY 20.RAGSOC\n", pos);		
			else
					use.insert("BY CODCF\n", pos);		
			rep.set_recordset(use);
		}

		rep.recordset()->set_var("#DASOCIO", TVariant(m.get(F_DASOCIO)));
		rep.recordset()->set_var("#ASOCIO", TVariant(m.get(F_ASOCIO)));
		rep.recordset()->set_var("#DADATA", TVariant(m.get(F_DADATA)));
		rep.recordset()->set_var("#ADATA", TVariant(m.get(F_ADATA)));

		book.add(rep);
		book.print_or_preview();
	}
}

int co2100(int argc, char* argv[])
{
  TStampaAnagSoci a;
  a.run(argc, argv, TR("Stampa anagrafica soci"));
  return 0;
}