LC
Incluir campos novos na tela grupos, na parte de programas
Fechado
No template ERP II, na tabela: system_group_program, eu criei novos campos.
Agora queria colocar esse campos no SystemGroupForm na parte do multifield onde aparecem os programas que ja foram selecionados.
Os campos eu até consegui colocar na tela, porem acho que tem que alterar alguma coisa nas classes, e ai não obitive sucesso.
Na classe SystemGroupProgram eu informei os novos campos, confome abaixo:
Agora eu acho que tem que ajustar a classe SystemGroup, nesses dois metodos abaixo, mais não sei como.
Agora queria colocar esse campos no SystemGroupForm na parte do multifield onde aparecem os programas que ja foram selecionados.
Os campos eu até consegui colocar na tela, porem acho que tem que alterar alguma coisa nas classes, e ai não obitive sucesso.
Na classe SystemGroupProgram eu informei os novos campos, confome abaixo:
- <?php
- /**
- * System_group_program Active Record
- * @author <your-name-here>
- */
- class SystemGroupProgram extends TRecord
- {
- const TABLENAME = 'system_group_program';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max'; // {max, serial}
- /**
- * Constructor method
- */
- public function __construct(1132 = NULL)
- {
- parent::__construct(1132);
- parent::addAttribute('system_group_id');
- parent::addAttribute('system_program_id');
- // novos campos
- parent::addAttribute('incluir');
- parent::addAttribute('modificar');
- parent::addAttribute('excluir');
- }
- }
- ?>
Agora eu acho que tem que ajustar a classe SystemGroup, nesses dois metodos abaixo, mais não sei como.
- <?php
- /**
- * Load the object and its aggregates
- * @param 1132 object ID
- */
- public function load(1132)
- {
- // load the related System_program objects
- $repository = new TRepository('SystemGroupProgram');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('system_group_id', '=', 1132));
- $system_group_system_programs = $repository->load($criteria);
- if ($system_group_system_programs)
- {
- foreach ($system_group_system_programs as $system_group_system_program)
- {
- $system_program = new SystemProgram( $system_group_system_program->system_program_id );
- $this->addSystemProgram($system_program);
- }
- }
- // load the object itself
- return parent::load(1132);
- }
- /**
- * Store the object and its aggregates
- */
- public function store()
- {
- // store the object itself
- parent::store();
- // delete the related System_groupSystem_program objects
- $criteria = new TCriteria;
- $criteria->add(new TFilter('system_group_id', '=', $this->id));
- $repository = new TRepository('SystemGroupProgram');
- $repository->delete($criteria);
- // store the related System_groupSystem_program objects
- if ($this->system_programs)
- {
- foreach ($this->system_programs as $system_program)
- {
- $system_group_system_program = new SystemGroupProgram;
- $system_group_system_program->system_program_id = $system_program->id;
- $system_group_system_program->system_group_id = $this->id;
- $system_group_system_program->store();
- }
- }
- }
- ?>
Acho que aqui tenho que mudar o relacionamento para composição.
Sim,
SystemGroupProgram original foi pensada somente para fazer a ligação entre grupo e programa, nada mais.
Originalmente é uma agregação. Se tiver atributos próprios, acredito que terá de reescrever para composição.
Att,
Pablo
Pablo, no TMultiField, conseguimos mudar um campo com o SetTransform, tipo campo na base é 1=Sim ou 0=Não ?
Ou tem que usar com datagrid ?
Pablo, me da mais uma dica, eu troquei:
para:
Agora não habilita os programas que estão no grupo em que o usuário faz parte.
Leandro,
TMultiField não tem método setTransformer().
Quanto à segunda dúvida, o loadComposite vai carregar objetos do tipo SystemGroupProgram.
Mas o que é necessário ter em system_programs são objetos do tipo SystemProgram, como estava antes.
Att,