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


Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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"?