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

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