Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Incluir Grid dentro de um formulario ! estou tentando incluir um grid dentro desse formulario. Criei $subform (2 abas) endereco princiapal - endereco outros. coloquei os campos no endereco princial , so que agora nao consigo colocar um grid, com a lista dos outros enderecos na outra aba, ???? ...
PG
Incluir Grid dentro de um formulario !  
estou tentando incluir um grid
dentro desse formulario.
Criei $subform (2 abas) endereco princiapal - endereco outros.
coloquei os campos no endereco princial ,
so que agora nao consigo colocar um grid, com a lista dos outros enderecos
na outra aba, ????

  1. <?php
  2. /**
  3.  * PessoaForm
  4.  *
  5.  * @version    1.0
  6.  * @package    erphouse
  7.  * @subpackage control
  8.  * @author     Pablo Dall'Oglio
  9.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  10.  * @license    http://www.adianti.com.br/framework-license
  11.  */
  12. class PessoaForm extends TWindow
  13. {
  14.     protected $form// form
  15.     
  16.     /**
  17.      * Form constructor
  18.      * @param $param Request
  19.      */
  20.     public function __construct$param )
  21.     {
  22.         parent::__construct();
  23.         parent::setSize(0.8null);
  24.         parent::removePadding();
  25.         parent::removeTitleBar();
  26.         //parent::disableEscape();
  27.         
  28.         // creates the form
  29.         $this->form = new BootstrapFormBuilder('form_Pessoa');
  30.         $this->form->setFormTitle('Pessoa');
  31.         $this->form->setProperty('style''margin:0;border:0');
  32.         $this->form->setClientValidation(true);
  33.         // create the form fields
  34.         $id = new TEntry('id');
  35.         $nome = new TEntry('nome');
  36.         $nome_fantasia = new TEntry('nome_fantasia');
  37.         $tipo = new TCombo('tipo');
  38.         $codigo_nacional = new TEntry('codigo_nacional');
  39.         $codigo_estadual = new TEntry('codigo_estadual');
  40.         $codigo_municipal = new TEntry('codigo_municipal');
  41.         $fone = new TEntry('fone');
  42.         $celular = new TEntry('celular');
  43.         $email = new TEntry('email');
  44.         $email_nfe = new TEntry('email_nfe');
  45.         $observacao = new TText('observacao');
  46.         $cep = new TEntry('cep');
  47.         $logradouro = new TEntry('logradouro');
  48.         $numero = new TEntry('numero');
  49.         $complemento = new TEntry('complemento');
  50.         $bairro = new TEntry('bairro');
  51.         
  52.         $filter = new TCriteria;
  53.         $filter->add(new TFilter('id''<''0'));
  54.         $cidade_id = new TDBCombo('cidade_id''tutorerpdfe''Cidade''id''nome''nome'$filter);
  55.         $grupo_id = new TDBUniqueSearch('grupo_id''tutorerpdfe''Grupo''id''nome');
  56.         $papeis_id = new TDBMultiSearch('papeis_id''tutorerpdfe''Papel''id''nome');
  57.         $estado_id = new TDBCombo('estado_id''tutorerpdfe''Estado''id''{nome} ({uf})');
  58.         
  59.         $estado_id->setChangeAction( new TAction( [$this'onChangeEstado'] ) );
  60.         $cep->setExitAction( new TAction([ $this'onExitCEP']) );
  61.         $codigo_nacional->setExitAction( new TAction( [$this'onExitCNPJ'] ) );
  62.         
  63.         $cidade_id->enableSearch();
  64.         $estado_id->enableSearch();
  65.         $grupo_id->setMinLength(0);
  66.         $papeis_id->setMinLength(0);
  67.         $papeis_id->setSize('100%'60);
  68.         $observacao->setSize('100%'60);
  69.         $tipo->addItems( ['F' => 'Física''J' => 'Jurídica' ] );
  70.         
  71.         // add the fields
  72.         $row1=$this->form->addFields( [ new TLabel('Id') ], [ $id ] );
  73.         $row2=$this->form->addFields( [ new TLabel('Tipo') ], [ $tipo ], [ new TLabel('CPF/CNPJ') ], [ $codigo_nacional ] );
  74.         $row3=$this->form->addFields( [ new TLabel('Nome') ], [ $nome ] );
  75.         $row4=$this->form->addFields( [ new TLabel('Nome Fantasia') ], [ $nome_fantasia ] );
  76.         $row5=$this->form->addFields( [ new TLabel('Papéis')], [ $papeis_id ], [ new TLabel('Grupo') ], [ $grupo_id ] );
  77.         $row6=$this->form->addFields( [ new TLabel('I.E.') ], [ $codigo_estadual ], [ new TLabel('I.M.') ], [ $codigo_municipal ] );
  78.         $row7=$this->form->addFields( [ new TLabel('Fone') ], [ $fone ], [ new TLabel('Celular') ], [ $celular ] );
  79.         $row8=$this->form->addFields( [ new TLabel('Email') ], [ $email ], [ new TLabel('Email-NFe') ], [ $email_nfe ] );
  80.         $row9=$this->form->addFields( [ new TLabel('Observacao') ], [ $observacao ] );
  81.         $row10=$this->form->addContent( [new TFormSeparator('Endereço')]);
  82.         
  83.         
  84.         $subform = new BootstrapFormBuilder;
  85.         $subform->setFieldSizes('100%');
  86.         $subform->setProperty('style''border:none');   
  87.         $subform->appendPage'Endereço Principal' );     
  88.         
  89.         $row11=$subform->addFields( [ new TLabel('Cep') ], [ $cep ] );
  90.         $row11->layout = [ 'col-sm-2 control-label''col-sm-2''col-sm-6''col-sm-2' ];  
  91.         $row12=$subform->addFields( [ new TLabel('Logradouro') ], [ $logradouro ], [ new TLabel('Numero') ], [ $numero ] );
  92.         $row13=$subform->addFields( [ new TLabel('Complemento') ], [ $complemento ], [ new TLabel('Bairro') ], [ $bairro ] );
  93.         $row14=$subform->addFields( [ new TLabel('Estado') ], [$estado_id], [ new TLabel('Cidade') ], [ $cidade_id ] );
  94.         
  95.         $row1->class 'form-control-sm';
  96.         $row2->class 'form-control-sm';
  97.         $row3->class 'form-control-sm';
  98.         $row4->class 'form-control-sm';
  99.         $row5->class 'form-control-sm';
  100.         $row6->class 'form-control-sm';
  101.         $row7->class 'form-control-sm';
  102.         $row8->class 'form-control-sm';
  103.         $row9->class 'form-control-sm';
  104.         $row10->class 'form-control-sm';
  105.         $row11->class 'form-control-sm';
  106.         $row12->class 'form-control-sm';
  107.         $row13->class 'form-control-sm';
  108.         $row14->class 'form-control-sm';
  109.         // set sizes
  110.         $id->setSize('100%');
  111.         $nome->setSize('100%');
  112.         $nome_fantasia->setSize('100%');
  113.         $tipo->setSize('100%');
  114.         $codigo_nacional->setSize('100%');
  115.         $codigo_estadual->setSize('100%');
  116.         $codigo_municipal->setSize('100%');
  117.         $fone->setSize('100%');
  118.         $celular->setSize('100%');
  119.         $email_nfe->setSize('100%');
  120.         $email->setSize('100%');
  121.         $observacao->setSize('100%');
  122.         $cep->setSize('100%');
  123.         $logradouro->setSize('100%');
  124.         $numero->setSize('100%');
  125.         $complemento->setSize('100%');
  126.         $bairro->setSize('100%');
  127.         $cidade_id->setSize('100%');
  128.         $grupo_id->setSize('100%');
  129.         $cep->setMask('99.999-999');
  130.         
  131.         $id->setEditable(FALSE);
  132.         $nome->addValidation('Nome', new TRequiredValidator);
  133.         $nome_fantasia->addValidation('Nome Fantasia', new TRequiredValidator);
  134.         $tipo->addValidation('Tipo', new TRequiredValidator);
  135.         $codigo_nacional->addValidation('CPF/CNPJ', new TRequiredValidator);
  136.         $grupo_id->addValidation('Grupo', new TRequiredValidator);
  137.         $fone->addValidation('Fone', new TRequiredValidator);
  138.         $celular->addValidation('Celular', new TRequiredValidator);
  139.         $email->addValidation('Email', new TRequiredValidator);
  140.         $email_nfe->addValidation('Email-NFe', new TEmailValidator);
  141.         $cidade_id->addValidation('Cidade', new TRequiredValidator);
  142.         $cep->addValidation('CEP', new TRequiredValidator);
  143.         $logradouro->addValidation('Logradouro', new TRequiredValidator);
  144.         $numero->addValidation('Número', new TRequiredValidator);
  145.         $subform->appendPage'Endereço Outros' );   
  146.          
  147.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  148.         $this->datagrid->style 'width: 100%';
  149.         $this->datagrid->class 'table-sm table-striped table-hover';
  150.         
  151.         // creates the datagrid columns
  152.         $column_endereco_id = new TDataGridColumn('enderco_id''Endereco''left');
  153.         $column_logradouro  = new TDataGridColumn('logradouro''Logradouro''left');
  154.         $column_bairro      = new TDataGridColumn('bairro''Bairro''left');
  155.         $column_cep         = new TDataGridColumn('cep''Cep''left');
  156.         $column_cidade_id   = new TDataGridColumn('cidade_id''Cidade''left');
  157.         // add the columns to the DataGrid
  158.         $this->datagrid->addColumn($column_endereco_id);
  159.         $this->datagrid->addColumn($column_logradouro);
  160.         $this->datagrid->addColumn($column_bairro);
  161.         $this->datagrid->addColumn($column_cep);
  162.         $this->datagrid->addColumn($column_cidade_id);
  163.         $this->datagrid->createModel();
  164.        
  165.         // create the form actions
  166.         $this->form->addHeaderActionLink_t('Close'),  new TAction([__CLASS__'onClose'], ['static'=>'1']), 'fa:times red');
  167.         $btn $this->form->addAction(_t('Save'), new TAction([$this'onSave']), 'fa:save');
  168.         $btn->class 'btn btn-sm btn-primary';
  169.         $this->form->addActionLink(_t('New'),  new TAction([$this'onEdit']), 'fa:eraser red');
  170.         $this->form->addContent( [$subform] );
  171.         
  172.         // vertical box container
  173.         $container = new TVBox;
  174.         $container->style 'width: 100%';
  175.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  176.         $container->add($this->form);
  177.         
  178.         parent::add($container);
  179.     }
  180.     /**
  181.      * Save form data
  182.      * @param $param Request
  183.      */
  184.     public function onSave$param )
  185.     {
  186.         try
  187.         {
  188.             TTransaction::open('tutorerpdfe'); // open a transaction
  189.             
  190.             $this->form->validate(); // validate form data
  191.             $data $this->form->getData(); // get form data as array
  192.             
  193.             $object = new Pessoa;  // create an empty object
  194.             $object->fromArray( (array) $data); // load the object with data
  195.             $object->store(); // save the object
  196.             
  197.             PessoaPapel::where('pessoa_id''='$object->id)->delete();
  198.             
  199.             if ($data->papeis_id)
  200.             {
  201.                 foreach ($data->papeis_id as $papel_id)
  202.                 {
  203.                     $pp = new PessoaPapel;
  204.                     $pp->pessoa_id $object->id;
  205.                     $pp->papel_id  $papel_id;
  206.                     $pp->store();
  207.                 }
  208.             }
  209.             
  210.             // get the generated id
  211.             $data->id $object->id;
  212.             
  213.             $this->form->setData($data); // fill form data
  214.             TTransaction::close(); // close the transaction
  215.             
  216.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'));
  217.         }
  218.         catch (Exception $e// in case of exception
  219.         {
  220.             new TMessage('error'$e->getMessage()); // shows the exception error message
  221.             $this->form->setData$this->form->getData() ); // keep form data
  222.             TTransaction::rollback(); // undo all pending operations
  223.         }
  224.     }
  225.     
  226.     /**
  227.      * Clear form data
  228.      * @param $param Request
  229.      */
  230.     public function onClear$param )
  231.     {
  232.         $this->form->clear(TRUE);
  233.     }
  234.     
  235.     /**
  236.      * Load object to form data
  237.      * @param $param Request
  238.      */
  239.     public function onEdit$param )
  240.     {
  241.         try
  242.         {
  243.             if (isset($param['key']))
  244.             {
  245.                 $key $param['key'];
  246.                 TTransaction::open('tutorerpdfe');
  247.                 $object = new Pessoa($key);
  248.                 
  249.                 $object->papeis_id PessoaPapel::where('pessoa_id''='$object->id)->getIndexedArray('papel_id');
  250.                 
  251.                 $this->form->setData($object);
  252.                 
  253.                 // force fire events
  254.                 $data = new stdClass;
  255.                 $data->estado_id $object->cidade->estado->id;
  256.                 $data->cidade_id $object->cidade_id;
  257.                 TForm::sendData('form_Pessoa'$data);
  258.                 
  259.                 TTransaction::close();
  260.             }
  261.             else
  262.             {
  263.                 $this->form->clear(TRUE);
  264.             }
  265.         }
  266.         catch (Exception $e// in case of exception
  267.         {
  268.             new TMessage('error'$e->getMessage()); // shows the exception error message
  269.             TTransaction::rollback(); // undo all pending operations
  270.         }
  271.     }
  272.     
  273.     /**
  274.      * Action to be executed when the user changes the state
  275.      * @param $param Action parameters
  276.      */
  277.     public static function onChangeEstado($param)
  278.     {
  279.         try
  280.         {
  281.             TTransaction::open('tutorerpdfe');
  282.             if (!empty($param['estado_id']))
  283.             {
  284.                 $criteria TCriteria::create( ['estado_id' => $param['estado_id'] ] );
  285.                 
  286.                 // formname, field, database, model, key, value, ordercolumn = NULL, criteria = NULL, startEmpty = FALSE
  287.                 TDBCombo::reloadFromModel('form_Pessoa''cidade_id''tutorerpdfe''Cidade''id''{nome} ({id})''nome'$criteriaTRUE);
  288.             }
  289.             else
  290.             {
  291.                 TCombo::clearField('form_Pessoa''cidade_id');
  292.             }
  293.             
  294.             TTransaction::close();
  295.         }
  296.         catch (Exception $e)
  297.         {
  298.             new TMessage('error'$e->getMessage());
  299.         }
  300.     }
  301.     
  302.     /**
  303.      * Autocompleta outros campos a partir do CNPJ
  304.      */
  305.     public static function onExitCNPJ($param)
  306.     {
  307.         session_write_close();
  308.         
  309.         try
  310.         {
  311.             $cnpj preg_replace('/[^0-9]/'''$param['codigo_nacional']);
  312.             $url  'http://receitaws.com.br/v1/cnpj/'.$cnpj;
  313.             
  314.             $content = @file_get_contents($url);
  315.             
  316.             if ($content !== false)
  317.             {
  318.                 $cnpj_data json_decode($content);
  319.                 
  320.                 
  321.                 $data = new stdClass;
  322.                 if (is_object($cnpj_data) && $cnpj_data->status !== 'ERROR')
  323.                 {
  324.                     $data->tipo 'J';
  325.                     $data->nome $cnpj_data->nome;
  326.                     $data->nome_fantasia = !empty($cnpj_data->fantasia) ? $cnpj_data->fantasia $cnpj_data->nome;
  327.                     
  328.                     if (empty($param['cep']))
  329.                     {
  330.                         $data->cep $cnpj_data->cep;
  331.                         $data->numero $cnpj_data->numero;
  332.                     }
  333.                     
  334.                     if (empty($param['fone']))
  335.                     {
  336.                         $data->fone $cnpj_data->telefone;
  337.                     }
  338.                     
  339.                     if (empty($param['email']))
  340.                     {
  341.                         $data->email $cnpj_data->email;
  342.                     }
  343.                     
  344.                     TForm::sendData('form_Pessoa'$datafalsetrue);
  345.                 }
  346.                 else
  347.                 {
  348.                     $data->nome '';
  349.                     $data->nome_fantasia '';
  350.                     $data->cep '';
  351.                     $data->numero '';
  352.                     $data->telefone '';
  353.                     $data->email '';
  354.                     TForm::sendData('form_Pessoa'$datafalsetrue);
  355.                 }
  356.             }
  357.         }
  358.         catch (Exception $e)
  359.         {
  360.             new TMessage('error'$e->getMessage());
  361.         }
  362.     }
  363.     
  364.     /**
  365.      * Autocompleta outros campos a partir do CEP
  366.      */
  367.     public static function onExitCEP($param)
  368.     {
  369.         session_write_close();
  370.         
  371.         try
  372.         {
  373.             $cep preg_replace('/[^0-9]/'''$param['cep']);
  374.             $url 'https://viacep.com.br/ws/'.$cep.'/json/unicode/';
  375.             
  376.             $content = @file_get_contents($url);
  377.             
  378.             if ($content !== false)
  379.             {
  380.                 $cep_data json_decode($content);
  381.                 
  382.                 $data = new stdClass;
  383.                 if (is_object($cep_data) && empty($cep_data->erro))
  384.                 {
  385.                     TTransaction::open('tutorerpdfe');
  386.                     $estado Estado::where('uf''='$cep_data->uf)->first();
  387.                     $cidade Cidade::where('codigo_ibge''='$cep_data->ibge)->first();
  388.                     TTransaction::close();
  389.                     
  390.                     $data->logradouro  $cep_data->logradouro;
  391.                     $data->complemento $cep_data->complemento;
  392.                     $data->bairro      $cep_data->bairro;
  393.                     $data->estado_id   $estado->id ?? '';
  394.                     $data->cidade_id   $cidade->id ?? '';
  395.                     
  396.                     TForm::sendData('form_Pessoa'$datafalsetrue);
  397.                 }
  398.                 else
  399.                 {
  400.                     $data->logradouro  '';
  401.                     $data->complemento '';
  402.                     $data->bairro      '';
  403.                     $data->estado_id   '';
  404.                     $data->cidade_id   '';
  405.                     
  406.                     TForm::sendData('form_Pessoa'$datafalsetrue);
  407.                 }
  408.             }
  409.         }
  410.         catch (Exception $e)
  411.         {
  412.             new TMessage('error'$e->getMessage());
  413.         }
  414.     }
  415.     
  416.     /**
  417.      * Closes window
  418.      */
  419.     public static function onClose()
  420.     {
  421.         parent::closeWindow();
  422.     }
  423. }

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


MG

A outra aba é o $subform?
Se for, $subform->addConten([$sua_grid]);
PG

Blz. deu certo.
agora da esse erro quando vou preencher o grid.

Sem transação ativa com a base de dados: AdiantiDatabaseTRepository::load "public"."pessoa_endereco"

$this->datagrid->createModel();
$items = PessoaEndereco::where('pessoa_id', '=', $this->id)->orderBy('id', 'desc')->take(5)->load();
$this->datagrid->addItems($items);


$subform->addContent([$this->datagrid]);
MG

Paulo
para usar um model, vc precisa abrir a transação: TTransaction::open().