Exibir o dados do objeto associado. 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 ...
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:

 
  1. <?php
  2. /**
  3. * Viagem Active Record
  4. * @author <your-name-here>
  5. */
  6. class Viagem extends TRecord
  7. {
  8. const TABLENAME = 'tblviagem';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'max'; // {max, serial}
  11. private $viagem_veiculos;
  12. /**
  13. * Constructor method
  14. */
  15. public function __construct(835 = NULL, $callObjectLoad = TRUE)
  16. {
  17. parent::__construct(835, $callObjectLoad);
  18. parent::addAttribute('datacadastro');
  19. parent::addAttribute('motorista_id');
  20. parent::addAttribute('agente_id');
  21. parent::addAttribute('cliente_id');
  22. parent::addAttribute('flgtomador');
  23. parent::addAttribute('fretereceber_id');
  24. parent::addAttribute('datacancelamento');
  25. parent::addAttribute('datainicio');
  26. parent::addAttribute('datafinalizacao');
  27. parent::addAttribute('dadosgeraisfretereceber_id');
  28. }
  29. /**
  30. * Method addViagemVeiculo
  31. * Add a ViagemVeiculo to the Viagem
  32. * @param $object Instance of ViagemVeiculo
  33. */
  34. public function addViagemVeiculo(ViagemVeiculo $object)
  35. {
  36. $this->viagem_veiculos[] = $object;
  37. }
  38. /**
  39. * Method getViagemVeiculos
  40. * Return the Viagem' ViagemVeiculo's
  41. * @return Collection of ViagemVeiculo
  42. */
  43. public function getViagemVeiculos()
  44. {
  45. return $this->viagem_veiculos;
  46. }
  47. /**
  48. * Reset aggregates
  49. */
  50. public function clearParts()
  51. {
  52. $this->viagem_veiculos = array();
  53. }
  54. /**
  55. * Load the object and its aggregates
  56. * @param 835 object ID
  57. */
  58. public function load(835)
  59. {
  60. $this->viagem_veiculos = parent::loadComposite('ViagemVeiculo', 'viagem_id', 835);
  61. return parent::load(835);
  62. }
  63. /**
  64. * Store the object and its aggregates
  65. */
  66. public function store()
  67. {
  68. parent::store();
  69. parent::saveComposite('ViagemVeiculo', 'viagem_id', $this->id, $this->viagem_veiculos);
  70. }
  71. /**
  72. * Delete the object and its aggregates
  73. * @param 835 object ID
  74. */
  75. public function delete(835 = NULL)
  76. {
  77. parent::deleteComposite('ViagemVeiculo', 'viagem_id', 835);
  78. // delete the object itself
  79. parent::delete(835);
  80. }
  81. public function get_cliente(){
  82. $cliente = new DadosGerais($this->cliente_id);
  83. return $cliente;
  84. }
  85. public function get_DataInicioFormatada(){
  86. //$viagem = new Viagem($this->id);
  87. return TDate::date2br($this->datainicio);
  88. }
  89. public function get_DataCadastroFormatada(){
  90. return TDateSollaris::date2brdatahora($this->datacadastro);
  91. }
  92. public function get_NomeAgente(){
  93. $agente = new DadosGerais($this->agente_id);
  94. return $agente->razaoSocial;
  95. }
  96. public function get_NomeCliente(){
  97. $agente = new DadosGerais($this->cliente_id);
  98. return $agente->razaoSocial;
  99. }
  100. public function get_NomeMotorista(){
  101. $motorista = new Motorista($this->motorista_id);
  102. return $motorista->nome;
  103. }
  104. public function get_cavalo_id(){
  105. try
  106. {
  107. TTransaction::open('sollus');
  108. $criteria = new TCriteria;
  109. $criteria->add( new TFilter( 'viagem_id', '=', $this->id ));
  110. $criteria->add( new TFilter( 'tipo', '=', 'cv' ));
  111. $cavalos = ViagemVeiculo::getObjects($criteria);
  112. $cavalo_id = 0;
  113. foreach ($cavalos as $cavalo)
  114. {
  115. $cavalo_id = $cavalo->veiculo_id;
  116. }
  117. return $cavalo_id;
  118. TTransaction::close();
  119. }
  120. catch (Exception $e)
  121. {
  122. new TMessage('error', $e->getMessage());
  123. }
  124. }
  125. }
  126. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (2)


PD

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
CG

Prezado Pablo,

Farei desta maneira.

Obrigado pela ajuda.