CG
Exibir o dados do objeto associado.
Fechado
Prezados bom dia,
Estou implementando uma tela que faz associação entre dois objetos.
Tenho um objeto Viagem que possui 1 ou mais veículos, conforme imagem em anexo. A classe veículo possui um tipo (cavalo, semi reboque 1, semi reboque 2 e semi reboque 3)
No formulário, implementei 4 campos para o usuário informar os veículos (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3). O campo cavalo mecânico é obrigatório.
Consigo gravar os dados dos veículos que o usuário informa.
O meu problema é quando recupero os dados e tenho que exibir os dados corretamente em cada campo (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3).
Consigo exibir o dado para o usuário, porém se o usuário alterar o veículo, o sistema não atualiza o registro.
Segue o meu código que fiz:
Estou implementando uma tela que faz associação entre dois objetos.
Tenho um objeto Viagem que possui 1 ou mais veículos, conforme imagem em anexo. A classe veículo possui um tipo (cavalo, semi reboque 1, semi reboque 2 e semi reboque 3)
No formulário, implementei 4 campos para o usuário informar os veículos (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3). O campo cavalo mecânico é obrigatório.
Consigo gravar os dados dos veículos que o usuário informa.
O meu problema é quando recupero os dados e tenho que exibir os dados corretamente em cada campo (cavalo mecânico, semi reboque 1 e semi reboque 2 e semi reboque 3).
Consigo exibir o dado para o usuário, porém se o usuário alterar o veículo, o sistema não atualiza o registro.
Segue o meu código que fiz:
- <?php
- /**
- * Viagem Active Record
- * @author <your-name-here>
- */
- class Viagem extends TRecord
- {
- const TABLENAME = 'tblviagem';
- const PRIMARYKEY= 'id';
- const IDPOLICY = 'max'; // {max, serial}
- private $viagem_veiculos;
- /**
- * Constructor method
- */
- public function __construct(835 = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct(835, $callObjectLoad);
- parent::addAttribute('datacadastro');
- parent::addAttribute('motorista_id');
- parent::addAttribute('agente_id');
- parent::addAttribute('cliente_id');
- parent::addAttribute('flgtomador');
- parent::addAttribute('fretereceber_id');
- parent::addAttribute('datacancelamento');
- parent::addAttribute('datainicio');
- parent::addAttribute('datafinalizacao');
- parent::addAttribute('dadosgeraisfretereceber_id');
- }
- /**
- * Method addViagemVeiculo
- * Add a ViagemVeiculo to the Viagem
- * @param $object Instance of ViagemVeiculo
- */
- public function addViagemVeiculo(ViagemVeiculo $object)
- {
- $this->viagem_veiculos[] = $object;
- }
- /**
- * Method getViagemVeiculos
- * Return the Viagem' ViagemVeiculo's
- * @return Collection of ViagemVeiculo
- */
- public function getViagemVeiculos()
- {
- return $this->viagem_veiculos;
- }
- /**
- * Reset aggregates
- */
- public function clearParts()
- {
- $this->viagem_veiculos = array();
- }
- /**
- * Load the object and its aggregates
- * @param 835 object ID
- */
- public function load(835)
- {
- $this->viagem_veiculos = parent::loadComposite('ViagemVeiculo', 'viagem_id', 835);
- return parent::load(835);
- }
- /**
- * Store the object and its aggregates
- */
- public function store()
- {
- parent::store();
- parent::saveComposite('ViagemVeiculo', 'viagem_id', $this->id, $this->viagem_veiculos);
- }
- /**
- * Delete the object and its aggregates
- * @param 835 object ID
- */
- public function delete(835 = NULL)
- {
- parent::deleteComposite('ViagemVeiculo', 'viagem_id', 835);
- // delete the object itself
- parent::delete(835);
- }
- public function get_cliente(){
- $cliente = new DadosGerais($this->cliente_id);
- return $cliente;
- }
- public function get_DataInicioFormatada(){
- //$viagem = new Viagem($this->id);
- return TDate::date2br($this->datainicio);
- }
- public function get_DataCadastroFormatada(){
- return TDateSollaris::date2brdatahora($this->datacadastro);
- }
- public function get_NomeAgente(){
- $agente = new DadosGerais($this->agente_id);
- return $agente->razaoSocial;
- }
- public function get_NomeCliente(){
- $agente = new DadosGerais($this->cliente_id);
- return $agente->razaoSocial;
- }
- public function get_NomeMotorista(){
- $motorista = new Motorista($this->motorista_id);
- return $motorista->nome;
- }
- public function get_cavalo_id(){
- try
- {
- TTransaction::open('sollus');
- $criteria = new TCriteria;
- $criteria->add( new TFilter( 'viagem_id', '=', $this->id ));
- $criteria->add( new TFilter( 'tipo', '=', 'cv' ));
- $cavalos = ViagemVeiculo::getObjects($criteria);
- $cavalo_id = 0;
- foreach ($cavalos as $cavalo)
- {
- $cavalo_id = $cavalo->veiculo_id;
- }
- return $cavalo_id;
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- }
- ?>
Na ação de salvar do formulário, você precisa limpar os objetos relacionados:
$viagem->clearParts();
E posteriormente adicionar os dados novamente vindos do form:
$data = $this->form->getData();
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_cavalo) );
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_semireboque) );
$viagem->addViagemVeiculo( new ViagemVeiculo($data->id_semireboque2) );
E então salvar:
$viagem->store();
Entretanto, me parece que a modelagem não está correta. Será que não ficaria melhor termos o seguinte?
Viagem ---<agregação>---Veículo
Assim, você poderia adicionar veículos à uma viagem por meio de um objeto do tipo TMultiField, e não ficaria limitado quanto à quantidade de campos no formulário... Algo parecido com o que temos nessa tela do livro em relação aos seus autores (é preciso logar antes com ana/test):
www.adianti.com.br/framework_files/library/index.php?class=BookForm&
Att,
Pablo
Prezado Pablo,
Farei desta maneira.
Obrigado pela ajuda.