Files correlati : Ricompilazione Demo : [ ] Commento :riporti CA da 5.0 (stampa commesse e mastrini) git-svn-id: svn://10.65.10.50/trunk@17758 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			198 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						||
#include <reprint.h>
 | 
						||
 | 
						||
#include "ca1.h"
 | 
						||
#include "ca1600a.h"
 | 
						||
#include "calib01.h"
 | 
						||
#include "calib02.h"
 | 
						||
 | 
						||
///////////////////////////////////
 | 
						||
//  Maschera
 | 
						||
///////////////////////////////////
 | 
						||
class TMask_print_cms : public TAutomask
 | 
						||
{
 | 
						||
 | 
						||
protected:
 | 
						||
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						||
public:
 | 
						||
  TMask_print_cms();
 | 
						||
  virtual ~TMask_print_cms() {}
 | 
						||
};
 | 
						||
 | 
						||
TMask_print_cms::TMask_print_cms()
 | 
						||
								:TAutomask("ca1600a")
 | 
						||
{
 | 
						||
	ca_create_fields(*this, 0, LF_COMMESSE, 3, 2, F_DACMS, F_DACMS + 100, 0x0, "#DACMS");
 | 
						||
	int nfields = ca_create_fields(*this, 0, LF_COMMESSE, 3, 8, F_ACMS, F_ACMS + 100, 0x0, "#ACMS");
 | 
						||
	for (int i = 0; i < nfields; i++)
 | 
						||
	{
 | 
						||
		TMask_field& dacms = field(F_DACMS + i);
 | 
						||
		dacms.set_group(1);
 | 
						||
    dacms.check_type(CHECK_NORMAL);
 | 
						||
		TMask_field& acms = field(F_ACMS + i);
 | 
						||
		acms.set_group(2);
 | 
						||
    acms.check_type(CHECK_NORMAL);
 | 
						||
	}
 | 
						||
  //ci potrebbe essere pure il centro di costo (es. Dinamica con cdc=SEDE)
 | 
						||
  TConfig& ini = ca_config();
 | 
						||
  for (int i = 0; i < 2; i++)
 | 
						||
  {
 | 
						||
    const TString& level = ini.get("Level", NULL, i+1);  // Legge il livello 1 o 2
 | 
						||
    if (level == "CDC")                                  // Crea centro di costo 
 | 
						||
    {
 | 
						||
      ca_create_fields(*this, 0, LF_CDC, 3,  15, F_CDC, F_DESCDC);
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
bool TMask_print_cms::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						||
{
 | 
						||
  switch (o.dlg())
 | 
						||
  {
 | 
						||
  case F_ANNO:
 | 
						||
    if (e == fe_modify && !o.empty())
 | 
						||
    {
 | 
						||
      TEsercizi_contabili esc;
 | 
						||
      TDate inies, fines;
 | 
						||
      if (esc.code2range(atoi(o.get()), inies, fines))
 | 
						||
      {
 | 
						||
        set(F_DADATA, inies);
 | 
						||
        set(F_ADATA, fines);
 | 
						||
      }
 | 
						||
    }
 | 
						||
    break;
 | 
						||
  /*case F_DADATA:
 | 
						||
	case F_ADATA:
 | 
						||
		if (e == fe_close)
 | 
						||
		{
 | 
						||
			const int anno = get_int(F_ANNO);
 | 
						||
			if (anno > 0)	//se viene selezionato un esercizio..
 | 
						||
			{
 | 
						||
				TEsercizi_contabili esc;	//..le date devono essere incluse nell'esercizio selezionato!
 | 
						||
				const TDate data = o.get();
 | 
						||
				if (!data.empty() && esc.date2esc(data) != anno)
 | 
						||
					return error_box(TR("La data deve appartenere all'anno selezionato"));
 | 
						||
			}
 | 
						||
		}
 | 
						||
		break;*/
 | 
						||
  default:
 | 
						||
    break;
 | 
						||
  }
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
///////////////////////////////////
 | 
						||
//  Applicazione
 | 
						||
///////////////////////////////////
 | 
						||
class TPrint_cms : public TSkeleton_application
 | 
						||
{
 | 
						||
	bool create();
 | 
						||
 | 
						||
public:
 | 
						||
	virtual void main_loop();
 | 
						||
};
 | 
						||
 | 
						||
bool TPrint_cms::create()
 | 
						||
{
 | 
						||
  const TMultilevel_code_info& mci = ca_multilevel_code_info(LF_COMMESSE);
 | 
						||
  if (mci.levels() <= 0)
 | 
						||
    return error_box(TR("Le commesse non sono state configurate"));
 | 
						||
 | 
						||
  return TSkeleton_application::create();
 | 
						||
}
 | 
						||
 | 
						||
void TPrint_cms::main_loop()
 | 
						||
{
 | 
						||
  TFilename path;
 | 
						||
  TMask_print_cms m;
 | 
						||
  while (m.run() == K_ENTER)
 | 
						||
  {
 | 
						||
    TReport_book book;
 | 
						||
    TAnal_report rep;
 | 
						||
 | 
						||
		path = m.get(F_REPORT);
 | 
						||
		if (path.empty())
 | 
						||
			path = "ca1600a";
 | 
						||
 | 
						||
    rep.load(path);
 | 
						||
 | 
						||
    //aggiunta con controllo parametri di filtro particolari (Adolf rikiesta)
 | 
						||
    const int anno = m.get_int(F_ANNO);
 | 
						||
    const TDate dadata = m.get_date(F_DADATA);
 | 
						||
    const TDate adata = m.get_date(F_ADATA);
 | 
						||
    TString cdc;
 | 
						||
    for (short cdc_id = F_CDC; m.id2pos(cdc_id) > 0; cdc_id++)
 | 
						||
      cdc << m.get(cdc_id);
 | 
						||
    if (anno  > 0 || dadata.ok() || adata.ok() || cdc.full())
 | 
						||
    {
 | 
						||
      TString query;
 | 
						||
      //se ANNO <20> specificato sono possibili i casi:
 | 
						||
      //a) vengono specificate entrambe le date limite: cms con anno=ANNO,dadata>=DATAINIZIO,adata<=DATAFINE
 | 
						||
      //b) non vengono specificate entrambe le date limite: sono le cms con anno=ANNO
 | 
						||
      //c) specificata solo dadata: cms con anno=ANNO,dadata>=DATAINIZIO,finiscono quando gli pare
 | 
						||
      //d) specificata solo adata: cms con anno=ANNO,adata<=DATAIFINE,cominciano quando gli pare
 | 
						||
      //Se si vuole indicare periodi specifici non legati al campo anno si ottengono le commesse che,nel corso della...
 | 
						||
      //...loro vita,sono interessate dalle date indicate
 | 
						||
      //e) specificando adata prende le cms che abbiano DATAINIZIO>=dadata, ovvero che comincino dopo dadata
 | 
						||
      //f) specificando dadata prende le cms che abbiano DATAFINE<=adata, ovvero che terminino entro adata
 | 
						||
 | 
						||
      if (query.full()) 
 | 
						||
        query << "&&";
 | 
						||
 | 
						||
      if (dadata.ok() || adata.ok())
 | 
						||
      {
 | 
						||
        if (dadata.ok())
 | 
						||
          query << "(NUM(ANSI(DATAINIZIO))>=" << dadata.date2ansi() << ")";
 | 
						||
        if (dadata.ok() && adata.ok())
 | 
						||
          query << "&&";
 | 
						||
        if (adata.ok())
 | 
						||
          query << "(NUM(ANSI(DATAFINE))<=" << adata.date2ansi() << ")";
 | 
						||
 
 | 
						||
      }
 | 
						||
 | 
						||
      if (anno > 0)
 | 
						||
      {
 | 
						||
        if (query.full())
 | 
						||
          query << "&&";
 | 
						||
        query << "(ANNO='" << anno << "')";
 | 
						||
      }
 | 
						||
 | 
						||
      if (cdc.full())
 | 
						||
      {
 | 
						||
        if (query.full()) query << "&&";
 | 
						||
        query << "(CODCOSTO='" << cdc << "')";
 | 
						||
      }
 | 
						||
 | 
						||
      //inserisce la USE e la SELECT all'inizio (tecnica per aggirare il problema degli && ignoti)
 | 
						||
      query.insert("USE COMMESSE\nSELECT ");
 | 
						||
 | 
						||
      //e se la commessa fosse strutturata?
 | 
						||
      TString codcms;
 | 
						||
      for (short codcms_id = F_DACMS; m.id2pos(codcms_id) > 0; codcms_id++)
 | 
						||
        codcms << m.get(codcms_id);
 | 
						||
      if (codcms.full())  //non c'e' bisogno di query.full() x' c'e' gia la USE
 | 
						||
        query << "/n" << "FROM CODCMS='" << codcms << "'";
 | 
						||
 | 
						||
      for (short codcms_id = F_ACMS; m.id2pos(codcms_id) > 0; codcms_id++)
 | 
						||
        codcms << m.get(codcms_id);
 | 
						||
      if (codcms.full())
 | 
						||
        query << "/n" << "TO CODCMS='" << codcms << "'";
 | 
						||
 | 
						||
      //cabia la query al report
 | 
						||
      rep.set_recordset(query);
 | 
						||
    }
 | 
						||
 | 
						||
		rep.mask2report(m);
 | 
						||
		book.add(rep);
 | 
						||
    book.print_or_preview();
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
int ca1600(int argc, char* argv[])
 | 
						||
{
 | 
						||
  TPrint_cms a;
 | 
						||
  a.run(argc, argv, TR("Stampa commesse"));
 | 
						||
  return 0;
 | 
						||
}
 | 
						||
 |