Files correlati : Ricompilazione Demo : [ ] Commento :la ricerca delle commesse va fatta sul file LF_COMMESSE, non sulla tabella CMS git-svn-id: svn://10.65.10.50/trunk@14931 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			146 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include<automask.h>
 | 
						|
#include<relapp.h>
 | 
						|
 | 
						|
#include "ce4100a.h"
 | 
						|
 | 
						|
//=============================================================================================
 | 
						|
//maschera
 | 
						|
 | 
						|
class TCesp_per_cms_mask: public TAutomask 
 | 
						|
{
 | 
						|
public:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
  real TCesp_per_cms_mask::somma_perc() const;
 | 
						|
 | 
						|
  TCesp_per_cms_mask():TAutomask("ce4100a") {}
 | 
						|
};
 | 
						|
 | 
						|
real TCesp_per_cms_mask::somma_perc() const
 | 
						|
{
 | 
						|
  TSheet_field& ss = sfield(F_RIGHE);
 | 
						|
  real tot_perc;
 | 
						|
  FOR_EACH_SHEET_ROW(ss,i,r)
 | 
						|
    tot_perc += real(r->get(ss.cid2index(S_PERCUTIL)));
 | 
						|
  return tot_perc;
 | 
						|
}
 | 
						|
 | 
						|
bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
  case F_RIGHE:
 | 
						|
    if (e == se_notify_add)
 | 
						|
    {
 | 
						|
      TSheet_field& ss = (TSheet_field&)o;
 | 
						|
      real residuo = CENTO - somma_perc();
 | 
						|
      if (residuo > 0)
 | 
						|
      {
 | 
						|
        TToken_string& row = ss.row(jolly);
 | 
						|
        row.add(residuo.string(),ss.cid2index(S_PERCUTIL));
 | 
						|
      } 
 | 
						|
    }
 | 
						|
    if (e == fe_close && (insert_mode() || edit_mode()))
 | 
						|
    {
 | 
						|
//controllo sulle percentuali totali di un cespite
 | 
						|
      if (somma_perc() != CENTO)
 | 
						|
        return noyes_box("La percentuale complessiva di utilizzo del cespite e' diversa da 100"
 | 
						|
                         "\nSi desidera proseguire ?");
 | 
						|
      
 | 
						|
      TAssoc_array lista_cms;
 | 
						|
 | 
						|
      TSheet_field& ss = sfield(F_RIGHE);
 | 
						|
      FOR_EACH_SHEET_ROW(ss,i,r)
 | 
						|
      {
 | 
						|
//controllo di esistenza codice commessa
 | 
						|
        const TString& cms = r->get(ss.cid2index(S_CODCMS));
 | 
						|
        if (cms.blank())
 | 
						|
          return error_box("Specificare la commessa sulla riga %d", i+1);
 | 
						|
//controllo di duplicazione codice commessa
 | 
						|
        if (lista_cms.is_key(cms))
 | 
						|
          return error_box("Codice commessa %s duplicato", (const char *)cms);
 | 
						|
        lista_cms.add(cms);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  default: break;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
//===============================================================================================
 | 
						|
//Applicazione
 | 
						|
class TCesp_per_cms: public TRelation_application 
 | 
						|
{
 | 
						|
  TCesp_per_cms_mask *_msk; // maschera principale
 | 
						|
  TRelation *_rel; // relazione principale
 | 
						|
 | 
						|
//metodi virtuali obbligatori per gli oggetti TRelation_application
 | 
						|
protected:
 | 
						|
  virtual bool user_create();
 | 
						|
  virtual bool user_destroy();
 | 
						|
  virtual TMask* get_mask(int mode) { return _msk; }
 | 
						|
  virtual bool changing_mask(int mode) { return false;}
 | 
						|
  virtual void init_query_mode(TMask& m);
 | 
						|
  virtual void init_query_insert_mode(TMask& m);
 | 
						|
  virtual void init_insert_mode(TMask& m);
 | 
						|
  virtual void init_modify_mode(TMask& m);
 | 
						|
 | 
						|
  virtual TRelation* get_relation() const { return _rel; }
 | 
						|
 | 
						|
public:
 | 
						|
  virtual ~TCesp_per_cms() {}
 | 
						|
};
 | 
						|
 | 
						|
//metodi per la maschera
 | 
						|
//abilita i campi per inserimento nuovo cespite,attivando i campi del gruppo 2 (che fanno riferimento al file LF_CESPI)
 | 
						|
void TCesp_per_cms::init_query_insert_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.enable(-2);
 | 
						|
  m.show(-2);
 | 
						|
  m.hide(-1);
 | 
						|
}
 | 
						|
//abilita i campi per ricercare un cespite gia' inserito,attivando i campi del gruppo 1(LF_SALCECMS)
 | 
						|
void TCesp_per_cms::init_query_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.show(-1);
 | 
						|
  m.hide(-2);
 | 
						|
  m.set(F_DESC,"");
 | 
						|
}
 | 
						|
 | 
						|
void TCesp_per_cms::init_insert_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.hide(-1);
 | 
						|
  m.disable(-2);
 | 
						|
}
 | 
						|
 | 
						|
void TCesp_per_cms::init_modify_mode(TMask& m)
 | 
						|
{
 | 
						|
  m.hide(-2);
 | 
						|
}
 | 
						|
 | 
						|
bool TCesp_per_cms::user_create()
 | 
						|
{
 | 
						|
  _rel = new TRelation(LF_SALCECMS);
 | 
						|
  _msk = new TCesp_per_cms_mask;
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
bool TCesp_per_cms::user_destroy() 
 | 
						|
{
 | 
						|
  delete _rel;
 | 
						|
  delete _msk;
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
int ce4100(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TCesp_per_cms a;
 | 
						|
  a.run(argc,argv,TR("Inserimento cespiti per commessa"));
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 |