Exibir dados de uma outra tabela com datagrid em uma FormView Olá pessoal, minha duvida é a seguinte: tenho um FormView que exibe os dados da tabela cliente em abas. E quero exibir dados de uma tabela diferente (tabela histórico cliente) neste mesmo Formview em uma outra aba. Como posso fazer isso? Desde já agradeço a ajuda. Segue código: ...
ET
Exibir dados de uma outra tabela com datagrid em uma FormView  
Olá pessoal, minha duvida é a seguinte:
tenho um FormView que exibe os dados da tabela cliente em abas. E quero exibir dados de uma tabela diferente (tabela histórico cliente) neste mesmo Formview em uma outra aba. Como posso fazer isso? Desde já agradeço a ajuda.

Segue código:

 
  1. <?php
  2. /**
  3. * ClienteFormView Form
  4. * @author <your name here>
  5. */
  6. class ClienteFormView extends TPage
  7. {
  8. protected $form; // form
  9. protected $datagrid; // listing
  10. protected $pageNavigation;
  11. /**
  12. * Form constructor
  13. * @param $param Request
  14. */
  15. public function __construct( $param )
  16. {
  17. parent::__construct();
  18. TTransaction::open('microerp');
  19. $this->form = new BootstrapFormBuilder('form_Cliente');
  20. $this->form->setFormTitle('Informações do beneficiário e dependentes');
  21. // ABA 1 - informações pessoais do cliente.
  22. $this->form->appendPage('Beneficiário');
  23. $label1 = new TLabel('Id:', '#333333', '12px', '');
  24. $label2 = new TLabel('Código Cliente:', '#333333', '12px', '');
  25. $label3 = new TLabel('Data Cadastro:', '#333333', '12px', '');
  26. $label4 = new TLabel('Nome:', '#333333', '12px', '');
  27. $label5 = new TLabel('Sexo:', '#333333', '12px', '');
  28. $label6 = new TLabel('RG:', '#333333', '12px', '');
  29. $label7 = new TLabel('Orgão Expeditor:', '#333333', '12px', '');
  30. $label8 = new TLabel('CPF:', '#333333', '12px', '');
  31. $label11 = new TLabel('Estado Civil:', '#333333', '12px', '');
  32. $label12 = new TLabel('Data Nascimento:', '#333333', '12px', '');
  33. $label13 = new TLabel('Idade:', '#333333', '12px', '');
  34. $label14 = new TLabel('Data Falecimento:', '#333333', '12px', '');
  35. $label15 = new TLabel('Telefone 1:', '#333333', '12px', '');
  36. $label16 = new TLabel('Telefone 2:', '#333333', '12px', '');
  37. $label17 = new TLabel('Celular:', '#333333', '12px', '');
  38. $label18 = new TLabel('UF:', '#333333', '12px', '');
  39. $label19 = new TLabel('Cidade:', '#333333', '12px', '');
  40. $label20 = new TLabel('Bairro:', '#333333', '12px', '');
  41. $label21 = new TLabel('Número:', '#333333', '12px', '');
  42. $label22 = new TLabel('Complemento:', '#333333', '12px', '');
  43. $label23 = new TLabel('CEP:', '#333333', '12px', '');
  44. $label24 = new TLabel('Referência:', '#333333', '12px', '');
  45. $label25 = new TLabel('Data Admissão:', '#333333', '12px', '');
  46. $label26 = new TLabel('Data Carência:', '#333333', '12px', '');
  47. $cliente = new Cliente($param['key']);
  48. $text1 = new TTextDisplay($cliente->id, '#333333', '12px', '');
  49. $text2 = new TTextDisplay($cliente->codigo_cliente, '#333333', '12px', '');
  50. $text3 = new TTextDisplay(TDate::convertToMask($cliente->data_cadastro, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  51. $text4 = new TTextDisplay($cliente->nome, '#333333', '12px', '');
  52. $text5 = new TTextDisplay($cliente->sexo->sexo, '#333333', '12px', '');
  53. $text6 = new TTextDisplay($cliente->rg, '#333333', '12px', '');
  54. $text7 = new TTextDisplay($cliente->orgao_expeditor, '#333333', '12px', '');
  55. $text8 = new TTextDisplay($cliente->cpf, '#333333', '12px', '');
  56. $text11 = new TTextDisplay($cliente->estado_civil, '#333333', '12px', '');
  57. $text12 = new TTextDisplay(TDate::convertToMask($cliente->data_nascimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  58. $text13 = new TTextDisplay($cliente->idade, '#333333', '12px', '');
  59. $text14 = new TTextDisplay(TDate::convertToMask($cliente->data_falecimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  60. $text15 = new TTextDisplay($cliente->telefone_um, '#333333', '12px', '');
  61. $text16 = new TTextDisplay($cliente->telefone_dois, '#333333', '12px', '');
  62. $text17 = new TTextDisplay($cliente->celular, '#333333', '12px', '');
  63. $text18 = new TTextDisplay($cliente->uf->uf, '#333333', '12px', '');
  64. $text19 = new TTextDisplay($cliente->cidade->nome, '#333333', '12px', '');
  65. $text20 = new TTextDisplay($cliente->bairro->bairro, '#333333', '12px', '');
  66. $text21 = new TTextDisplay($cliente->numero, '#333333', '12px', '');
  67. $text22 = new TTextDisplay($cliente->complemento, '#333333', '12px', '');
  68. $text23 = new TTextDisplay($cliente->cep, '#333333', '12px', '');
  69. $text24 = new TTextDisplay($cliente->referencia, '#333333', '12px', '');
  70. $text25 = new TTextDisplay(TDate::convertToMask($cliente->data_admissao, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  71. $text26 = new TTextDisplay(TDate::convertToMask($cliente->data_carencia, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  72. $this->form->addFields([$label1],[$text1], [$label2],[$text2]);
  73. $this->form->addFields([$label3],[$text3], [$label4],[$text4]);
  74. $this->form->addFields([$label5],[$text5], [$label6],[$text6]);
  75. $this->form->addFields([$label7],[$text7], [$label8],[$text8]);
  76. $this->form->addFields([$label11],[$text11], [$label12],[$text12]);
  77. $this->form->addFields([$label13],[$text13], [$label14],[$text14]);
  78. $this->form->addFields([$label15],[$text15], [$label16],[$text16]);
  79. $this->form->addFields([$label17],[$text17], [$label18],[$text18]);
  80. $this->form->addFields([$label19],[$text19], [$label20],[$text20]);
  81. $this->form->addFields([$label21],[$text21], [$label22],[$text22]);
  82. $this->form->addFields([$label23],[$text23], [$label24],[$text24]);
  83. $this->form->addFields([$label25],[$text25], [$label26],[$text26]);
  84. //ABA 2 - informações de pagamentos do cleinte.
  85. $this->form->appendPage('Pagamentos');
  86. $label27 = new TLabel('Primeiro Vencimento:', '#333333', '12px', '');
  87. $text27 = new TTextDisplay(TDate::convertToMask($cliente->primeiro_vencimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
  88. $this->form->addFields([$label27],[$text27]);
  89. //ABA 3 - informaçoes complementares do cadastro do cliente
  90. $this->form->appendPage('Informações');
  91. $label9 = new TLabel('Profissão:', '#333333', '12px', '');
  92. $label10 = new TLabel('Religião:', '#333333', '12px', '');
  93. $text9 = new TTextDisplay($cliente->profissao, '#333333', '12px', '');
  94. $text10 = new TTextDisplay($cliente->religiao, '#333333', '12px', '');
  95. $this->form->addFields([$label9],[$text9]);
  96. $this->form->addFields([$label10],[$text10]);
  97. //ABA 4 - Informações do histórico do cliente
  98. $this->form->appendPage('Histórico');
  99. //Quero exibir os dados da tabela histórico do cliente em uma grid aqui.
  100. //ABA 5 - informações (cadastro) dos dependentes do titular do plano.
  101. $this->form->appendPage('Dependentes');
  102. // vertical box container
  103. $container = new TVBox;
  104. $container->style = 'width: 100%';
  105. $container->class = 'formView-container';
  106. $container->add(new TXMLBreadCrumb('menu.xml', 'ClienteList'));
  107. $container->add($this->form);
  108. TTransaction::close();
  109. parent::add($container);
  110. }
  111. public function onShow()
  112. {
  113. }
  114. }
  115. ?>

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 (7)


MG

Erickson
Add uma aba como você faz hoje.
Cria uma datagrid e um método por exemplo onReloadHistorico().
Popula a grid neste método.
Adiciona um TPanelGrupo e depois a grid nele.
Utilizando o método $this->form->addContent(), adicione o Panel Group na página.
E sempre que chamar onEdit, ou onSave, executo o método "onReloadHistóatico()".
ET

Olá Marcelo, bom dia.

Adicionei uma aba e criei o datagrid (que por em quanto está exibindo dados da tabela cliente), mas como posso fazer para popular a grid com os dados da tabela de histórico? quero apenas listar os dados da tabela historico dentro deste formview da tabela cliente.

Obrigado pela ajuda.
MG

Erickson
Basta criar o repository apontando para o model histórico.
Na criteria, adicionar o seguinte:

 
  1. <?php
  2. // assumindo que a chave que liga histórico à clientes, seja o atributo "cliente_id"
  3. $criteria->add(new TFilter('cliente-id','=',$id)); /
  4. ?>
ET

Estou fazendo da seguinte forma, não está me retornando nenhum erro, mas o grid não carrega nenhum dado. O que estou fazendo errado?

 
  1. <?php
  2. //GRID DA FORMVIEW
  3. $this->form->appendPage('Histórico');
  4. $this->datagrid = new TQuickGrid;
  5. $this->datagrid->style = 'width:100%';
  6. $this->datagrid->disableDefaultCLick();
  7. $this->datagrid->addQuickColumn('ID', 'historico_cliente->id', 'left');
  8. $this->datagrid->addQuickColumn('Data', 'data_historico', 'left');
  9. $this->datagrid->addQuickColumn('Observação', 'observacao', 'left');
  10. $this->datagrid->createModel();
  11. $items = HistoricoCliente::where('cliente_id', '=', $historico_cliente->id)->load();
  12. $this->datagrid->addItems($items);
  13. $panel = new TPanelGroup('Histórico do cliente', '#f5f5f5');
  14. $panel->add(new BootstrapDatagridWrapper($this->datagrid));
  15. $this->form->addContent([$panel]);
  16. //MODEL
  17. class HistoricoCliente extends TRecord
  18. {
  19. const TABLENAME = 'historico_cliente';
  20. const PRIMARYKEY = 'id';
  21. const IDPOLICY = 'serial'; // {max, serial}
  22. /**
  23. * Constructor method
  24. */
  25. public function __construct($id = NULL, $callObjectLoad = TRUE)
  26. {
  27. parent::__construct($id, $callObjectLoad);
  28. parent::addAttribute('cliente_id');
  29. parent::addAttribute('data_historico');
  30. parent::addAttribute('observacao');
  31. }
  32. public function set_cliente(Cliente $object)
  33. {
  34. $this->historico_cliente = $object;
  35. $this->cliente_id = $object->id;
  36. }
  37. public function get_cliente()
  38. {
  39. // loads the associated object
  40. if (empty($this->historico_cliente))
  41. $this->historico_cliente = new Cliente($this->cliente_id);
  42. // returns the associated object
  43. return $this->historico_cliente;
  44. }
  45. ?>
MG

Erickson

A colunha "ID" de histórico é somente "id" e nao "historico_cliente_id". Veja seu model, a primary key está setada como "ID"?

 
  1. <?php
  2. $this->datagrid->addQuickColumn('ID', 'historico_cliente->id', 'left');
  3. ?>


Eu sugiro criar um onReloadHistorico.

 
  1. <?php
  2. public function onReloadHistorico($param)
  3. {
  4. $repository = new TRepository('HistoricoCliente'); //
  5. $criteria = new TCriteria;
  6. $criteria->add(new TFilter('cliente_id','=', $param['id'])); // param[id] id do form (cliente)
  7. $objects = $repository->load($criteria);
  8. foreach($objects as $object) {
  9. $this->datagfrid->addItem($object);
  10. }
  11. }
  12. ?>


Chama este método depois do "createModelo()".
Tenta isso!
ET

Consegui.

 
  1. <?php
  2. $this->form->appendPage('Histórico');
  3. //DataGrid Histórico
  4. $this->historico_cliente_list = new TQuickGrid;
  5. $this->historico_cliente_list->style = 'width:100%';
  6. $this->historico_cliente_list->disableDefaultClick();
  7. $this->historico_cliente_list->addQuickColumn('Histórico', 'observacao', 'left');
  8. $this->historico_cliente_list->addQuickColumn('Data', 'data_historico', 'left');
  9. $this->historico_cliente_list->createModel();
  10. $items = HistoricoCliente::where('cliente_id', '=', $cliente->id)->load();
  11. $this->historico_cliente_list->addItems($items);
  12. $panel = new TPanelGroup('Histórico', '#f5f5f5');
  13. $panel->add(new BootstrapDatagridWrapper($this->historico_cliente_list));
  14. $this->form->addContent([$panel]);
  15. ?>


O brigado pela atenção Marcelo.
CM

Erickson boa noite.
Sei que o posto é antigo, mas estou precisando exatamente do que você fez. Que é um histórico do Cliente.
Copiei seus códigos, mas não consegui fazer funcionar nem a pau!
Poderia ajudar nisso? Falta algum código na última parte do seu?
Obrigado