Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Montando grid de visualizando de dados, a partir do registro pai Boa tarde pessoal! Sou novo no Adianti e estou fazendo uma aplicação que necessita após uma listagem em uma grid, dá a opção para o usuário visualizar os dados vinculados um determinado registro. Dessa forma, ela abrirá em outra tela, os dados iniciais deste registro e os itens (outra grid) vinculado ao dado da tela anterior (Grids de NxN). São três tabelas no banco de dados (relação n...
TN
Montando grid de visualizando de dados, a partir do registro pai  
Boa tarde pessoal! Sou novo no Adianti e estou fazendo uma aplicação que necessita após uma listagem em uma grid, dá a opção para o usuário visualizar os dados vinculados um determinado registro. Dessa forma, ela abrirá em outra tela, os dados iniciais deste registro e os itens (outra grid) vinculado ao dado da tela anterior (Grids de NxN). São três tabelas no banco de dados (relação n x n). Ocorre que realizei o código seguindo as orientações do Adianti criando a função dentro do dão e simplesmente chamando na grid "function->atributo". O problema que não está funcionando. Vou postar todos os códigos aqui no fórum! Acredito que seja apenas algum erro de uso por minha parte do frimework (estou começando).


Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (4)


TN

  1. <?php
  2. /**
  3.  * Grupo Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Contagem extends TRecord
  7. {
  8.     const TABLENAME 'health_contagem_estoque';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     /**
  12.      * Constructor method
  13.      */
  14.     public function __construct($id NULL$callObjectLoad TRUE)
  15.     {
  16.         parent::__construct($id$callObjectLoad);
  17.         parent::addAttribute('local_estoque_id');
  18.         parent::addAttribute('data_contagem');
  19.         parent::addAttribute('ativo');
  20.     }
  21.     //função para pegar o local estoque local_estoque->nome
  22.     public function get_local_estoque()
  23.     {
  24.         return LocaisEstoque::find($this->local_estoque_id);
  25.     }
  26.     
  27.     public function get_item_estoque()
  28.     {
  29.         $criteria = new TCriteria;
  30.         $criteria->add(new TFilter('contagem_estoque_id''='$this->id));
  31.         return ContagemItem::getObjects$criteria );
  32.     }
  33. }
TN

Primeira Tela com a lista de registros pai:

  1. <?php
  2. /**
  3.  * ContagemList
  4.  *
  5.  * @version    1.0
  6.  * @package    LexusHealth
  7.  * @subpackage control
  8.  * @author     Tiago Nogueira
  9.  * @copyright  Copyright (c) 2021
  10.  * 
  11.  */
  12. class ContagemList extends TPage
  13. {
  14.     protected $form;     // registration form
  15.     protected $datagrid// listing
  16.     protected $pageNavigation;
  17.     protected $formgrid;
  18.     protected $deleteButton;
  19.     
  20.     use Adianti\base\AdiantiStandardListTrait;
  21.     
  22.     /**
  23.      * Page constructor
  24.      */
  25.     public function __construct()
  26.     {
  27.         parent::__construct();
  28.         
  29.         //Conexão com o BD
  30.         $this->setDatabase('lexushealt_BD');  // defines the database
  31.         $this->setActiveRecord('Contagem');   // defines the actibve record
  32.         $this->setDefaultOrder('id''asc');  // defines the default order
  33.         $this->setLimit(10);
  34.         //define a standard filter
  35.         $this->addFilterField('id''=''id'); // filterField, operator, formField
  36.         $this->addFilterField('data_contagem''=''data_contagem'); // filterField, operator, formField
  37.         $this->addFilterField('local_estoque_id''=''local_estoque_id');
  38.                 
  39.         //creates the form
  40.         $this->form = new BootstrapFormBuilder('form_search_Contagem');
  41.         $this->form->setFormTitle('Contagem de Estoque');
  42.         
  43.         // create the form fields
  44.         $data_contagem = new TDate('data_contagem');
  45.         
  46.         $filter1 = new TCriteria;
  47.         $filter1->add(new TFilter('ativo''=''1'));
  48.         $local_estoque_id = new TDBCombo('local_estoque_id''lexushealt_BD''LocaisEstoque''id''nome''nome'$filter1);
  49.     
  50.         // add the fields
  51.         $this->form->addFields( [ new TLabel('Data:') ], [$data_contagem], [ new TLabel('Local de Estoque:') ], [$local_estoque_id]);
  52.         // set sizes
  53.         $data_contagem->setSize('100%');
  54.         $local_estoque_id->setSize('100%');   
  55.         
  56.         $data_contagem->setMask('dd/mm/yyyy');
  57.         $data_contagem->setDatabaseMask('yyyy-mm-dd');   
  58.         // keep the form filled during navigation with session data
  59.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data') );
  60.         // add the search form actions
  61.         $btn $this->form->addAction(_t('Find'), new TAction(array($this'onSearch')), 'fa:search');
  62.         $btn->class 'btn btn-sm btn-primary';
  63.         $btn2 $this->form->addActionLink('Adicionar',  new TAction(array('ContagemForm''onClear')), 'fa:plus white');
  64.         $btn2->class 'btn btn-salvar';
  65.         // creates a Datagrid
  66.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  67.         $this->datagrid->datatable 'true';
  68.         $this->datagrid->disableDefaultClick();
  69.         $this->datagrid->width '100%'
  70.         $this->datagrid->setHeight(320);                                
  71.         // creates the datagrid columns
  72.         $column_data = new TDataGridColumn('data_contagem''Data''left');
  73.         $column_local = new TDataGridColumn('local_estoque->nome''Local do Estoque''center');
  74.         $ativo = new TDataGridColumn('ativo''Ativo''center');
  75.         $ativo->enableAutoHide(500);
  76.         $column_data->enableAutoHide(500);
  77.         $column_local->enableAutoHide(500);
  78.         // add the columns to the DataGrid
  79.         $this->datagrid->addColumn($column_data);
  80.         $this->datagrid->addColumn($column_local);
  81.         $this->datagrid->addColumn($ativo);
  82.         
  83.         $column_local->setTransformer( function ($value$object$row) {
  84.             if ($object->ativo == '0')
  85.             {
  86.                 $row->style'color: silver';
  87.             }
  88.             
  89.             return $value;
  90.         });
  91.         $ativo->setTransformer(function ($value){
  92.             if ($value == 'true')
  93.             {
  94.                 $div = new TElement('span');
  95.                 $div->class="fas fa-check-circle green";
  96.                 $div->style="text-shadow:none; font-size:16px";
  97.                 
  98.                 return $div;
  99.             }
  100.             else
  101.             {
  102.                 $div = new TElement('span');
  103.                 $div->class="fas fa-times-circle red";
  104.                 $div->style="text-shadow:none; font-size:16px";
  105.                 
  106.                 return $div;
  107.             }
  108.         });
  109.         $column_data->setTransformer( function($value) {
  110.             return TDate::convertToMask($value'yyyy-mm-dd''dd/mm/yyyy');
  111.         });
  112.         $column_data->setAction(new TAction([$this'onReload']), ['order' => 'data_contagem']);
  113.         $column_local->setAction(new TAction([$this'onReload']), ['order' => 'local_estoque_id']);
  114.         // create EDIT action
  115.         $action_edit = new TDataGridAction(array('ContagemView''onEdit'));
  116.         $action_edit->setButtonClass('btn btn-default');
  117.         $action_edit->setLabel(_t('View'));
  118.         $action_edit->setImage('fa:eye gray');
  119.         $action_edit->setField('id');
  120.         $this->datagrid->addAction($action_edit);
  121.         
  122.         // create DELETE action
  123.         //$action_del = new TDataGridAction(array($this, 'onDelete'));
  124.         //$action_del->setButtonClass('btn btn-default');
  125.         //$action_del->setLabel(_t('Delete'));
  126.         //$action_del->setImage('fa:trash red');
  127.         //$action_del->setField('id');
  128.         //$this->datagrid->addAction($action_del);
  129.         
  130.         // create ONOFF action
  131.         $action_onoff = new TDataGridAction(array($this'onTurnOnOff'));
  132.         $action_onoff->setButtonClass('btn btn-default');
  133.         $action_onoff->setLabel(_t('Activate/Deactivate'));
  134.         $action_onoff->setImage('fa:power-off orange');
  135.         $action_onoff->setField('id');
  136.         $this->datagrid->addAction($action_onoff);
  137.  
  138.         // create the datagrid model
  139.         $this->datagrid->createModel();
  140.         
  141.         // creates the page navigation
  142.         $this->pageNavigation = new TPageNavigation;
  143.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  144.         
  145.         $panel = new TPanelGroup('''white');
  146.         $panel->add($this->datagrid);
  147.         $panel->addFooter($this->pageNavigation);
  148.         
  149.         // vertical box container
  150.         $container = new TVBox;
  151.         $container->style 'width: 100%';
  152.         $container->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  153.         $container->add($this->form);
  154.         $container->add($panel);
  155.         
  156.         parent::add($container);
  157.         
  158.     }
  159.     /**
  160.      * Turn on/off an user
  161.      */
  162.     public function onTurnOnOff($param)
  163.     {
  164.         try
  165.         {
  166.             TTransaction::open('lexushealt_BD');
  167.             $obj Contagem::find($param['id']);
  168.             if ($obj instanceof Contagem)
  169.             {
  170.                 $obj->ativo $obj->ativo == true false true;
  171.                 $obj->store();
  172.             }
  173.             
  174.             TTransaction::close();
  175.             
  176.             $this->onReload($param);
  177.         }
  178.         catch (Exception $e)
  179.         {
  180.             new TMessage('error'$e->getMessage());
  181.             TTransaction::rollback();
  182.         }
  183.     }
  184. }
TN

Segunda tela para visualizar os dados que foram vinculados ao registro pai (relação de N X N) na grid

  1. <?php
  2. /**
  3.  * ContagemForm
  4.  *
  5.  * @version    1.0
  6.  * @package    Lexus Health
  7.  * @subpackage control
  8.  * @author     Tigo Nogueira
  9.  * @copyright  Copyright (c) 2021
  10.  */
  11. class ContagemView extends TPage
  12. {
  13.     protected $form;     // registration form
  14.     protected $datagrid// listing
  15.     protected $pageNavigation;
  16.     protected $formgrid;
  17.     protected $deleteButton;
  18.     use Adianti\Base\AdiantiStandardFormTrait
  19.     /**
  20.      * Form constructor
  21.      * @param $param Request
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.         //parent::setTargetContainer('adianti_right_panel'); 
  27.         
  28.         $this->setDatabase('lexushealt_BD');  // defines the database
  29.         $this->setActiveRecord('Contagem');   // defines the active record  
  30.         // creates the form
  31.         $this->form = new BootstrapFormBuilder('form_Contagem');
  32.         $this->form->setFormTitle('Visualizar Contagem de Estoque');
  33.         
  34.         //Dados Pessoais
  35.         $id = new TEntry('id');
  36.         $data_contagem = new TDate ('data_contagem');
  37.         $filter1 = new TCriteria;
  38.         $filter1->add(new TFilter('ativo''=''1'));
  39.         $local_estoque_id = new TDBCombo('local_estoque_id''lexushealt_BD''LocaisEstoque''id''nome''nome'$filter1);
  40.        
  41.         $ativo = new TRadioGroup ('ativo');
  42.         // define some properties for the form fields
  43.         $id->setEditable(FALSE);
  44.         $id->setSize('30%');
  45.         $data_contagem->setSize('100%'); 
  46.         $local_estoque_id->setSize('100%'); 
  47.         $data_contagem->setMask('dd/mm/yyyy');
  48.         $data_contagem->setDatabaseMask('yyyy-mm-dd');
  49.         $ativo->setUseButton();
  50.         $ativo->addItems( [ '1' => 'Sim''0' => 'Não' ] );
  51.         $ativo->setLayout('horizontal');
  52.         $ativo->setValue('1');
  53.         $ativo->style 'width: 20%;';
  54.         $ativo->class ='circle-nicelabel';  
  55.         $data_contagem->setEditable(FALSE);
  56.         $local_estoque_id->setEditable(FALSE);
  57.         
  58.         $this->form->appendPage('Dados Cadastrais');
  59.         //fields
  60.         $this->form->addFields( [ new THidden('id') ]);
  61.         $this->form->addFields( [ new TLabel('Data:<font color="red">*</font>') ], [$data_contagem], 
  62.                                 [ new TLabel('Local de Estoque:<font color="red">*</font>') ], [$local_estoque_id]);
  63.  
  64.                                 $this->form->addFields( [ new TLabel('Ativa:<font color="red">*</font>') ], [$ativo] ); 
  65.         $btn2 $this->form->addAction_t('Back'), new TAction(array('ContagemList''onReload')), 'far:arrow-alt-circle-left white' );
  66.         $btn2->class 'btn btn-fechar';        
  67.         // creates a Datagrid
  68.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  69.         $this->datagrid->datatable 'true';
  70.         $this->datagrid->disableDefaultClick();
  71.         $this->datagrid->width '100%'
  72.         $this->datagrid->setHeight(320);     
  73.         // creates the datagrid columns
  74.         $column_item_estoque_id = new TDataGridColumn('item_estoque->contagem_estoque_id''Item''left');
  75.         //$column_saldo_anterior = new TDataGridColumn('item_estoque->saldo_anterior', 'Saldo Atual', 'center');
  76.         //$column_saldo_atual = new TDataGridColumn('item_estoque->saldo_atual', 'Saldo Contado', 'center');
  77.         
  78.         $column_item_estoque_id->enableAutoHide(500);
  79.         //$column_saldo_anterior->enableAutoHide(500);
  80.         //$column_saldo_atual->enableAutoHide(500);        
  81.         // add the columns to the DataGrid
  82.         $this->datagrid->addColumn($column_item_estoque_id);
  83.         //$this->datagrid->addColumn($column_saldo_anterior);
  84.         //$this->datagrid->addColumn($column_saldo_atual);   
  85.         
  86.         
  87.         // create the datagrid model
  88.         $this->datagrid->createModel();  
  89.         // creates the page navigation
  90.         $this->pageNavigation = new TPageNavigation;
  91.         $this->pageNavigation->setAction(new TAction([$this'onReload']));
  92.         
  93.         $panel = new TPanelGroup('''white');
  94.         $panel->add($this->datagrid);
  95.         $panel->addFooter($this->pageNavigation);        
  96.         // vertical box container
  97.         $container = new TVBox;
  98.         $container->style 'width: 100%';
  99.         //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  100.         $container->add($this->form);
  101.         $container->add($panel);
  102.         
  103.         parent::add($container);
  104.     } 
  105.     public function onReload($param)
  106.     {
  107.         
  108.     }
  109. }
NR

Não sei se entendi direito, mas você está usando o mesmo model para as 2 grids($this->setActiveRecord('Contagem')).

A grid dos filhos não deveria usar o model "ContagemItem"?