campo-sirio/ce/ce4100.cpp
luca fb5350232e Patch level :4.0 528
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
2007-02-19 14:53:34 +00:00

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;
}