Files correlati : Ricompilazione Demo : [ ] Commento : cespiti per analitica in corso d'opera git-svn-id: svn://10.65.10.50/trunk@20489 c028cbd2-c16b-5b4b-a496-9718f37d4682
169 lines
4.3 KiB
C++
Executable File
169 lines
4.3 KiB
C++
Executable File
#include<automask.h>
|
|
#include<relapp.h>
|
|
|
|
#include "ce4100a.h"
|
|
|
|
//=============================================================================================
|
|
//maschera
|
|
|
|
class TCesp_per_cms_mask: public TAutomask
|
|
{
|
|
int _pos_cms, _pos_fase, _pos_cdc, _pos_util, _pos_cop, _pos_fondo;
|
|
|
|
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();
|
|
};
|
|
|
|
TCesp_per_cms_mask::TCesp_per_cms_mask() : TAutomask ("ce4100a")
|
|
{
|
|
//setta le posizioni dei campi dello sheet
|
|
TSheet_field& sf_righe = sfield(F_RIGHE);
|
|
_pos_cms = sf_righe.cid2index(S_CODCMS);
|
|
_pos_fase = sf_righe.cid2index(S_CODFASE);
|
|
_pos_cdc = sf_righe.cid2index(S_CODCDC);
|
|
_pos_util = sf_righe.cid2index(S_PERCUTIL);
|
|
_pos_cop = sf_righe.cid2index(S_PERCCOPE);
|
|
_pos_fondo = sf_righe.cid2index(S_FONDO);
|
|
}
|
|
|
|
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(_pos_util));
|
|
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(),_pos_util);
|
|
}
|
|
}
|
|
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 ugualmente?");
|
|
|
|
TAssoc_array keys_list;
|
|
|
|
TSheet_field& ss = sfield(F_RIGHE);
|
|
FOR_EACH_SHEET_ROW(ss,i,r)
|
|
{
|
|
//controllo di esistenza codici commessa e cdc
|
|
const TString& cms = r->get(_pos_cms);
|
|
if (cms.blank())
|
|
return error_box("Specificare la commessa sulla riga %d", i+1);
|
|
const TString& cdc = r->get(_pos_cdc);
|
|
if (cdc.blank())
|
|
return error_box("Specificare il centro di costo sulla riga %d", i+1);
|
|
//controllo di duplicazione chiave della riga (cms/fase/cdc)
|
|
TToken_string row_key;
|
|
row_key.add(cms);
|
|
const TString& fase = r->get(_pos_fase);
|
|
row_key.add(fase);
|
|
row_key.add(cdc);
|
|
if (keys_list.is_key(row_key))
|
|
return error_box("Codice riga %s duplicato", (const char *)row_key);
|
|
|
|
keys_list.add(row_key);
|
|
}
|
|
}
|
|
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("Distribuzione analitica cespiti"));
|
|
return 0;
|
|
}
|
|
|