Dados nao aparecem no Grid ! Fiz um formulario Mestre/detalhes. Cadastro de Pessoa (Mestre) Cadastro de Enderecos (Filho). No cadastro de endreco tem (tipo de endereco (entrega,cobranca,faturamento). e cidade/uf. Quando faço uma inclusao de dados no formulario o grid dos enderecos nao prenche o tipo de endereco e nem a cadade, uf;. Mas quando salvo no banco de dados fica salvo corrento, entro novamente e o grid...
PG
Dados nao aparecem no Grid !  
Fiz um formulario Mestre/detalhes.
Cadastro de Pessoa (Mestre)
Cadastro de Enderecos (Filho).

No cadastro de endreco tem (tipo de endereco (entrega,cobranca,faturamento).
e cidade/uf.

Quando faço uma inclusao de dados no formulario o grid dos enderecos nao prenche
o tipo de endereco e nem a cadade, uf;.

Mas quando salvo no banco de dados fica salvo corrento,
entro novamente e o grid esta preenchido corretamente,
mas se vou editar um registro, e salvor esse registgro (filho)
no formulario nao preenche os campos, mas qd salvo no banco de
dados fica ok.
O que estou fazendo de errado ?




 
  1. <?php
  2. /**
  3. * PessoaForm
  4. *
  5. * @version 1.0
  6. * @package tutorerpdfe
  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. use Brazanation\Documents\Cpf;
  13. use Brazanation\Documents\Cnpj;
  14. use Brazanation\Documents\StateRegistration;
  15. use Brazanation\Documents\Exception\InvalidDocument as InvalidDocumentException;
  16. class PessoaForm extends TWindow
  17. {
  18. protected $form; // form
  19. /**
  20. * Form constructor
  21. * @param $param Request
  22. */
  23. public function __construct( $param )
  24. {
  25. parent::__construct();
  26. parent::setSize(0.8, null);
  27. parent::removePadding();
  28. parent::removeTitleBar();
  29. //parent::disableEscape();
  30. // creates the form
  31. $this->form = new BootstrapFormBuilder('form_Pessoa');
  32. $this->form->setFormTitle('Pessoa');
  33. $this->form->setProperty('style', 'margin:0;border:0');
  34. $this->form->setClientValidation(true);
  35. $this->form->appendPage('');
  36. // create the form fields
  37. $id = new TEntry('id');
  38. $nome = new TEntry('nome');
  39. $nome_fantasia = new TEntry('nome_fantasia');
  40. $tipo = new TCombo('tipo');
  41. $codigo_nacional = new TEntry('codigo_nacional');
  42. $codigo_estadual = new TEntry('codigo_estadual');
  43. $codigo_municipal = new TEntry('codigo_municipal');
  44. $fone = new TEntry('fone');
  45. $celular = new TEntry('celular');
  46. $email = new TEntry('email');
  47. $email_nfe = new TEntry('email_nfe');
  48. $observacao = new TText('observacao');
  49. $cep = new TEntry('cep');
  50. $logradouro = new TEntry('logradouro');
  51. $numero = new TEntry('numero');
  52. $complemento = new TEntry('complemento');
  53. $bairro = new TEntry('bairro');
  54. $cadastro_completo = new TCombo('cadastro_completo');
  55. $filter = new TCriteria;
  56. $filter->add(new TFilter('id', '<', '0'));
  57. $cidade_id = new TDBCombo('cidade_id', 'tutorerpdfe', 'Cidade', 'id', 'nome', 'nome', $filter);
  58. $grupo_id = new TDBUniqueSearch('grupo_id', 'tutorerpdfe', 'Grupo', 'id', 'nome');
  59. $papeis_id = new TDBMultiSearch('papeis_id', 'tutorerpdfe', 'Papel', 'id', 'nome');
  60. $estado_id = new TDBCombo('estado_id', 'tutorerpdfe', 'Estado', 'id', '{nome} ({uf})');
  61. $estado_id->setChangeAction( new TAction( [$this, 'onChangeEstado'] ) );
  62. $cep->setExitAction( new TAction([ $this, 'onExitCEP']) );
  63. $codigo_nacional->setExitAction( new TAction( [$this, 'onExitCNPJ'],['tipo'=>$tipo] ) );
  64. $cidade_id->enableSearch();
  65. $estado_id->enableSearch();
  66. $grupo_id->setMinLength(0);
  67. $papeis_id->setMinLength(0);
  68. $papeis_id->setSize('100%', 60);
  69. $observacao->setSize('100%', 60);
  70. $tipo->addItems( ['F' => 'Física', 'J' => 'Jurídica' ] );
  71. $cadastro_completo->addItems( ['SIM' => 'SIM', 'NAO' => 'NAO' ] );
  72. $tipo->setValue('J');
  73. $cadastro_completo->setValue('SIM');
  74. $nome->forceUpperCase();
  75. $nome_fantasia->forceUpperCase();
  76. $logradouro->forceUpperCase();
  77. $complemento->forceUpperCase();
  78. $bairro->forceUpperCase();
  79. // add the fields
  80. $row1=$this->form->addFields( [ new TLabel('Id') ], [ $id ],[ new TLabel('Cadastro Completo') ], [ $cadastro_completo ] );
  81. $row2=$this->form->addFields( [ new TLabel('Tipo','red') ], [ $tipo ], [ new TLabel('CPF/CNPJ','red') ], [ $codigo_nacional ] );
  82. $row3=$this->form->addFields( [ new TLabel('Nome','red') ], [ $nome ] , [ new TLabel('Nome Fantasia') ], [ $nome_fantasia ] );
  83. $row5=$this->form->addFields( [ new TLabel('Papéis','red')], [ $papeis_id ], [ new TLabel('Grupo','red') ], [ $grupo_id ] );
  84. $row6=$this->form->addFields( [ new TLabel('I.E.') ], [ $codigo_estadual ], [ new TLabel('I.M.') ], [ $codigo_municipal ] );
  85. $row7=$this->form->addFields( [ new TLabel('Fone','red') ], [ $fone ], [ new TLabel('Email','red') ], [ $email ] );
  86. $row14=$this->form->addFields([ new TLabel('Celular') ], [ $celular ], [ new TLabel('Email-NFe') ], [ $email_nfe ] );
  87. $row8=$this->form->addFields( [ new TLabel('Observacao') ], [ $observacao ] );
  88. $row1->class = 'form-control-sm';
  89. $row2->class = 'form-control-sm';
  90. $row3->class = 'form-control-sm';
  91. // $row4->class = 'form-control-sm';
  92. $row5->class = 'form-control-sm';
  93. $row6->class = 'form-control-sm';
  94. $row7->class = 'form-control-sm';
  95. $row8->class = 'form-control-sm';
  96. // $row9->class = 'form-control-sm';
  97. $row14->class = 'form-control-sm';
  98. // set sizes
  99. $id->setSize('100%');
  100. $nome->setSize('100%');
  101. $nome_fantasia->setSize('100%');
  102. $tipo->setSize('100%');
  103. $cadastro_completo->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->setSize('100%');
  110. $email_nfe->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. $fone->setMask('(99)9999-9999');
  121. $celular->setMask('(99)99999-9999');
  122. $fone->placeholder = '(99)99999-9999';
  123. $celular->placeholder = '(99)99999-9999';
  124. $id->setEditable(FALSE);
  125. $nome->addValidation('Nome', new TRequiredValidator);
  126. $nome_fantasia->addValidation('Nome Fantasia', new TRequiredValidator);
  127. $tipo->addValidation('Tipo', new TRequiredValidator);
  128. $grupo_id->addValidation('Grupo', new TRequiredValidator);
  129. $cidade_id->addValidation('Cidade', new TRequiredValidator);
  130. if ($cadastro_completo == 'SIM') {
  131. $codigo_nacional->addValidation('CPF/CNPJ', new TRequiredValidator);
  132. $fone->addValidation('Fone', new TRequiredValidator);
  133. $email->addValidation('Email', new TRequiredValidator);
  134. $email->addValidation('Email', new TEmailValidator);
  135. $cep->addValidation('CEP', new TRequiredValidator);
  136. $logradouro->addValidation('Logradouro', new TRequiredValidator);
  137. $numero->addValidation('Número', new TRequiredValidator);
  138. }
  139. /*subform para enderecos principal
  140. */
  141. $subform = new BootstrapFormBuilder;
  142. $subform->setFieldSizes('100%');
  143. $subform->setProperty('style', 'border:none');
  144. $subform->appendPage( 'Endereço Principal' );
  145. //$row9 =$subform->form->addContent([ new TFormSeparator('Endereço Principal', '#3d32a5', '16', '#eeeeee')]);
  146. $row10=$subform->addFields( [ new TLabel('Cep','red') ], [ $cep ] );
  147. $row11=$subform->addFields( [ new TLabel('Logradouro','red') ], [ $logradouro ], [ new TLabel('Numero','red') ], [ $numero ] );
  148. $row12=$subform->addFields( [ new TLabel('Complemento') ], [ $complemento ], [ new TLabel('Bairro','red') ], [ $bairro ] );
  149. $row13=$subform->addFields( [ new TLabel('Estado','red') ], [$estado_id], [ new TLabel('Cidade','red') ], [ $cidade_id ] );
  150. $row10->class = 'form-control-sm';
  151. $row11->class = 'form-control-sm';
  152. $row12->class = 'form-control-sm';
  153. $row13->class = 'form-control-sm';
  154. /*subform para enderecos outros
  155. */
  156. $subform->appendPage( 'Endereço Outros' );
  157. $detail_uniqid = new THidden('detail_uniqid');
  158. $detail_id = new THidden('detail_id');
  159. $detail_endereco_id = new TDBUniqueSearch('detail_endereco_id', 'tutorerpdfe', 'Endereco', 'id', 'nome');
  160. $detail_cep = new TEntry('detail_cep');
  161. $detail_logradouro = new TText('detail_logradouro');
  162. $detail_numero = new TText('detail_numero');
  163. $detail_complemento = new TText('detail_complemento');
  164. $detail_bairro = new TText('detail_bairro');
  165. $detail_cidade_id = new TDBUniqueSearch('detail_cidade_id', 'tutorerpdfe', 'Cidade', 'id', 'nome');
  166. $detail_endereco_id->setMinLength(0);
  167. $detail_cidade_id->setMinLength(2);
  168. $detail_cep->setExitAction( new TAction([ $this, 'onExitCEPDetail']) );
  169. $detail_cep->setMask('99.999-999');
  170. // detail fields
  171. $rowd1=$subform->addFields( [$detail_uniqid] );
  172. $rowd2=$subform->addFields( [$detail_id] );
  173. $rowd3=$subform->addFields( [new TLabel('Endereco')], [$detail_endereco_id],[],[] );
  174. $rowd4=$subform->addFields( [new TLabel('Cep')], [$detail_cep] , [new TLabel('Cidade')], [$detail_cidade_id]);
  175. $rowd5=$subform->addFields( [new TLabel('Logradouro')], [$detail_logradouro],
  176. [new TLabel('Numero')], [$detail_numero] );
  177. $rowd7=$subform->addFields( [new TLabel('Complemento')], [$detail_complemento], [new TLabel('Bairro')], [$detail_bairro] );
  178. $add = TButton::create('add', [$this, 'onDetailAdd'], 'Registrar Endereço', 'fa:plus-circle green');
  179. $add->getAction()->setParameter('static','1');
  180. $rowd12=$subform->addFields( [], [$add] );
  181. $rowd1->class = 'form-control-sm';
  182. $rowd2->class = 'form-control-sm';
  183. $rowd3->class = 'form-control-sm';
  184. $rowd4->class = 'form-control-sm';
  185. $rowd5->class = 'form-control-sm';
  186. $rowd7->class = 'form-control-sm';
  187. $rowd12->class = 'form-control-sm';
  188. $this->detail_list = new BootstrapDatagridWrapper(new TDataGrid);
  189. $this->detail_list->setId('PessoaEndereco_list');
  190. $this->detail_list->generateHiddenFields();
  191. $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
  192. $this->detail_list->class = 'table-sm table-striped table-hover';
  193. // items
  194. $column_uniqid = new TDataGridColumn('uniqid', 'Uniqid', 'center');
  195. $column_id = new TDataGridColumn('id', 'Id', 'center');
  196. $column_endereco_id = new TDataGridColumn('endereco_id', 'Endereco_id', 'center');
  197. $column_endereco_nome = new TDataGridColumn('endereco->nome', 'Endereco', 'left', 20);
  198. $column_cep = new TDataGridColumn('cep', 'Cep', 'left', 20);
  199. $column_logradouro = new TDataGridColumn('logradouro', 'Logradouro', 'left', 150);
  200. $column_numero = new TDataGridColumn('numero', 'Numero', 'left', 20) ;
  201. $column_bairro = new TDataGridColumn('bairro', 'Bairro', 'left', 100) ;
  202. $column_cidade_id = new TDataGridColumn('cidade_id', 'Cidade_id', 'center');
  203. $column_cidade_nome = new TDataGridColumn('cidade->nome', 'Cidade Id', 'left', 150) ;
  204. $column_cidade_estado_uf = new TDataGridColumn('cidade->estado->uf', 'UF', 'left',50);
  205. $this->detail_list->addColumn($column_uniqid)->setVisibility(false);
  206. $this->detail_list->addColumn($column_id)->setVisibility(false);
  207. $this->detail_list->addColumn($column_endereco_id)->setVisibility(false);
  208. $this->detail_list->addColumn($column_endereco_nome);
  209. $this->detail_list->addColumn($column_cep);
  210. $this->detail_list->addColumn($column_logradouro);
  211. $this->detail_list->addColumn($column_numero);
  212. $this->detail_list->addColumn($column_bairro);
  213. $this->detail_list->addColumn($column_cidade_id)->setVisibility(false);
  214. $this->detail_list->addColumn($column_cidade_nome);
  215. $this->detail_list->addColumn($column_cidade_estado_uf);
  216. // $this->detail_list->addColumn( new TDataGridColumn('complemento', 'Complemento', 'left', 100) );
  217. // detail actions
  218. $action1 = new TDataGridAction([$this, 'onDetailEdit'] );
  219. $action1->setFields( ['uniqid', '*'] );
  220. $action2 = new TDataGridAction([$this, 'onDetailDelete']);
  221. $action2->setField('uniqid');
  222. // add the actions to the datagrid
  223. $this->detail_list->addAction($action1, _t('Edit'), 'fa:edit blue');
  224. $this->detail_list->addAction($action2, _t('Delete'), 'far:trash-alt red');
  225. $this->detail_list->createModel();
  226. $panel = new TPanelGroup;
  227. $panel->add($this->detail_list);
  228. $panel->getBody()->style = 'overflow-x:auto';
  229. $subform->addContent( [$panel] );
  230. /* FIM DOS DOS ENDERECOS
  231. */
  232. // create the form actions
  233. $this->form->addHeaderActionLink( _t('Close'), new TAction([__CLASS__, 'onClose'], ['static'=>'1']), 'fa:times red');
  234. $btn = $this->form->addAction(_t('Save'), new TAction([$this, 'onSave']), 'fa:save');
  235. $btn->class = 'btn btn-sm btn-primary';
  236. $this->form->addActionLink(_t('New'), new TAction([$this, 'onEdit']), 'fa:eraser red');
  237. // adicionar acoes
  238. //******************************************************************
  239. //script para definir a mascara do cpf/cn
  240. $script = new TElement('script');
  241. $script->type = 'text/javascript';
  242. $javascript = "
  243. $(document).ready(function () {
  244. $('select[name=\"tipo\"]').trigger('change');
  245. });
  246. $(document).on('change','select[name=\"tipo\"]' , function(event){
  247. //alert($(this).val() );
  248. //$('input[name=\"codigo_nacional\"]').val('');
  249. $('select[name=\"tipo\"] > option:selected').each(function(){
  250. tipoPessoa = $(this).val();
  251. });
  252. if(tipoPessoa == 'F') {
  253. // $('input[name=\"codigo_nacional\"]').val('');
  254. $('input[name=\"codigo_nacional\"]').attr('placeholder', \"999.999.999-99\");
  255. $('input[name=\"codigo_nacional\"]').attr({onkeypress:'return tentry_mask(this,event,\"999.999.999-99\")'});
  256. }
  257. if(tipoPessoa == 'J') {
  258. // $('input[name=\"codigo_nacional\"]').val('');
  259. $('input[name=\"codigo_nacional\"]').attr('placeholder', \"99.999.999/9999-99\");
  260. $('input[name=\"codigo_nacional\"]').attr({onkeypress:'return tentry_mask(this,event,\"99.999.999/9999-99\")'});
  261. }
  262. });";
  263. $script->add($javascript);
  264. $tableScriptPessoa = new TTable;
  265. $tableScriptPessoa->addRow()->addCell($script);
  266. //*****************************************************************
  267. // vertical box container
  268. $this->form->addContent( [$subform] );
  269. $container = new TVBox;
  270. $container->style = 'width: 100%';
  271. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  272. $container->add($this->form);
  273. $container->add($tableScriptPessoa);
  274. parent::add($container);
  275. }
  276. /**
  277. * Save form data
  278. * @param $param Request
  279. */
  280. public function onSave( $param )
  281. {
  282. try
  283. {
  284. TTransaction::open('tutorerpdfe'); // open a transaction
  285. $this->form->validate(); // validate form data
  286. $data = $this->form->getData(); // get form data as array
  287. $data->codigo_nacional = Uteis::awi_pegarApenasNumeros($data->codigo_nacional);
  288. $data->cep = Uteis::awi_pegarApenasNumeros($data->cep);
  289. $data->fone = Uteis::awi_pegarApenasNumeros($data->fone);
  290. $data->celular = Uteis::awi_pegarApenasNumeros($data->celular);
  291. $object = new Pessoa; // create an empty object
  292. $object->fromArray( (array) $data); // load the object with data
  293. $object->store(); // save the object
  294. PessoaEndereco::where('pessoa_id', '=', $object->id)->delete();
  295. if( $param['PessoaEndereco_list_id'] )
  296. {
  297. foreach( $param['PessoaEndereco_list_id'] as $key => $item_id )
  298. {
  299. $detail = new PessoaEndereco;
  300. $detail->endereco_id = $param['PessoaEndereco_list_endereco_id'][$key];
  301. $detail->pessoa_id = $object->id;
  302. $detail->cep = $param['PessoaEndereco_list_cep'][$key];
  303. $detail->cep = Uteis::awi_pegarApenasNumeros($detail->cep);
  304. $detail->logradouro = $param['PessoaEndereco_list_logradouro'][$key];
  305. $detail->numero = $param['PessoaEndereco_list_numero'][$key];
  306. $detail->bairro = $param['PessoaEndereco_list_bairro'][$key];
  307. $detail->cidade_id = $param['PessoaEndereco_list_cidade_id'][$key];
  308. $detail->store();
  309. }
  310. }
  311. PessoaPapel::where('pessoa_id', '=', $object->id)->delete();
  312. if ($data->papeis_id)
  313. {
  314. foreach ($data->papeis_id as $papel_id)
  315. {
  316. $pp = new PessoaPapel;
  317. $pp->pessoa_id = $object->id;
  318. $pp->papel_id = $papel_id;
  319. $pp->store();
  320. }
  321. }
  322. // get the generated id
  323. $data->id = $object->id;
  324. $this->form->setData($data); // fill form data
  325. TTransaction::close(); // close the transaction
  326. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  327. }
  328. catch (Exception $e) // in case of exception
  329. {
  330. new TMessage('error', $e->getMessage()); // shows the exception error message
  331. $this->form->setData( $this->form->getData() ); // keep form data
  332. TTransaction::rollback(); // undo all pending operations
  333. }
  334. }
  335. /**
  336. * Clear form data
  337. * @param $param Request
  338. */
  339. public function onClear( $param )
  340. {
  341. $this->form->clear(TRUE);
  342. }
  343. /**
  344. * Load object to form data
  345. * @param $param Request
  346. */
  347. public function onEdit( $param )
  348. {
  349. try
  350. {
  351. if (isset($param['key']))
  352. {
  353. $key = $param['key'];
  354. TTransaction::open('tutorerpdfe');
  355. $object = new Pessoa($key);
  356. $object->codigo_nacional = Uteis::awi_mask($object->codigo_nacional,'CNPJCPF');
  357. $object->papeis_id = PessoaPapel::where('pessoa_id', '=', $object->id)->getIndexedArray('papel_id');
  358. $this->form->setData($object);
  359. $items = PessoaEndereco::where('pessoa_id', '=', $key)->load();
  360. foreach( $items as $item )
  361. {
  362. $item->uniqid = uniqid();
  363. $row = $this->detail_list->addItem( $item );
  364. $row->id = $item->uniqid;
  365. }
  366. // force fire events
  367. $data = new stdClass;
  368. $data->estado_id = $object->cidade->estado->id;
  369. $data->cidade_id = $object->cidade_id;
  370. TForm::sendData('form_Pessoa', $data);
  371. TTransaction::close();
  372. }
  373. else
  374. {
  375. $this->form->clear(TRUE);
  376. }
  377. }
  378. catch (Exception $e) // in case of exception
  379. {
  380. new TMessage('error', $e->getMessage()); // shows the exception error message
  381. TTransaction::rollback(); // undo all pending operations
  382. }
  383. }
  384. /**
  385. * Action to be executed when the user changes the state
  386. * @param $param Action parameters
  387. */
  388. public static function onChangeEstado($param)
  389. {
  390. try
  391. {
  392. TTransaction::open('tutorerpdfe');
  393. if (!empty($param['estado_id']))
  394. {
  395. $criteria = TCriteria::create( ['estado_id' => $param['estado_id'] ] );
  396. // formname, field, database, model, key, value, ordercolumn = NULL, criteria = NULL, startEmpty = FALSE
  397. TDBCombo::reloadFromModel('form_Pessoa', 'cidade_id', 'tutorerpdfe', 'Cidade', 'id', '{nome} ({id})', 'nome', $criteria, TRUE);
  398. }
  399. else
  400. {
  401. TCombo::clearField('form_Pessoa', 'cidade_id');
  402. }
  403. TTransaction::close();
  404. }
  405. catch (Exception $e)
  406. {
  407. new TMessage('error', $e->getMessage());
  408. }
  409. }
  410. /**
  411. * Autocompleta outros campos a partir do CNPJ
  412. */
  413. public static function onExitCNPJ($param)
  414. {
  415. session_write_close();
  416. $cnpj = preg_replace('/[^0-9]/', '', $param['codigo_nacional']);
  417. if (($cnpj <> '00000000000') and ($cnpj <> '00000000000000'))
  418. {
  419. $valido = true;
  420. if (strlen($cnpj) == 11)
  421. {
  422. try {
  423. $document = new Cpf($cnpj);
  424. } catch (InvalidDocumentException $e) {
  425. $valido = false;
  426. }
  427. }
  428. else
  429. {
  430. try {
  431. $document = new Cnpj($cnpj);
  432. } catch (InvalidDocumentException $e) {
  433. $valido = false;
  434. }
  435. }
  436. if (true === $valido)
  437. {
  438. try
  439. {
  440. if (strlen($cnpj) > 11)
  441. {
  442. $url = 'http://receitaws.com.br/v1/cnpj/'.$cnpj;
  443. $content = @file_get_contents($url);
  444. if ($content !== false)
  445. {
  446. $cnpj_data = json_decode($content);
  447. $data = new stdClass;
  448. if (is_object($cnpj_data) && $cnpj_data->status !== 'ERROR')
  449. {
  450. $data->tipo = 'J';
  451. $data->nome = $cnpj_data->nome;
  452. $data->nome_fantasia = !empty($cnpj_data->fantasia) ? $cnpj_data->fantasia : $cnpj_data->nome;
  453. if (empty($param['cep']))
  454. {
  455. $data->cep = $cnpj_data->cep;
  456. $data->numero = $cnpj_data->numero;
  457. }
  458. if (empty($param['fone']))
  459. {
  460. $data->fone = $cnpj_data->telefone;
  461. }
  462. if (empty($param['email']))
  463. {
  464. $data->email = $cnpj_data->email;
  465. }
  466. TForm::sendData('form_Pessoa', $data, false, true);
  467. }
  468. else
  469. {
  470. $data->nome = '';
  471. $data->nome_fantasia = '';
  472. $data->cep = '';
  473. $data->numero = '';
  474. $data->telefone = '';
  475. $data->email = '';
  476. TForm::sendData('form_Pessoa', $data, false, true);
  477. }
  478. }
  479. }
  480. }
  481. catch (Exception $e)
  482. {
  483. new TMessage('error', $e->getMessage());
  484. }
  485. } else
  486. {
  487. new TMessage('info', 'CPF/CNPJ - Inválido !'.$cnpj.' Para não Cadastrar digite Zeros (0)!');
  488. }
  489. }
  490. }
  491. /**
  492. * Autocompleta outros campos a partir do CEP
  493. */
  494. public static function onExitCEP($param)
  495. {
  496. session_write_close();
  497. try
  498. {
  499. $cep = preg_replace('/[^0-9]/', '', $param['cep']);
  500. $url = 'https://viacep.com.br/ws/'.$cep.'/json/unicode/';
  501. $content = @file_get_contents($url);
  502. if ($content !== false)
  503. {
  504. $cep_data = json_decode($content);
  505. $data = new stdClass;
  506. if (is_object($cep_data) && empty($cep_data->erro))
  507. {
  508. TTransaction::open('tutorerpdfe');
  509. $estado = Estado::where('uf', '=', $cep_data->uf)->first();
  510. $cidade = Cidade::where('codigo_ibge', '=', $cep_data->ibge)->first();
  511. TTransaction::close();
  512. $data->logradouro = $cep_data->logradouro;
  513. $data->complemento = $cep_data->complemento;
  514. $data->bairro = $cep_data->bairro;
  515. $data->estado_id = $estado->id ?? '';
  516. $data->cidade_id = $cidade->id ?? '';
  517. TForm::sendData('form_Pessoa', $data, false, true);
  518. }
  519. else
  520. {
  521. $data->logradouro = '';
  522. $data->complemento = '';
  523. $data->bairro = '';
  524. $data->estado_id = '';
  525. $data->cidade_id = '';
  526. TForm::sendData('form_Pessoa', $data, false, true);
  527. }
  528. }
  529. }
  530. catch (Exception $e)
  531. {
  532. new TMessage('error', $e->getMessage());
  533. }
  534. }
  535. /**
  536. Onexit cep detail
  537. **/
  538. public static function onExitCEPDetail($param)
  539. {
  540. session_write_close();
  541. try
  542. {
  543. $cep = preg_replace('/[^0-9]/', '', $param['detail_cep']);
  544. $url = 'https://viacep.com.br/ws/'.$cep.'/json/unicode/';
  545. $content = @file_get_contents($url);
  546. if ($content !== false)
  547. {
  548. $cep_data = json_decode($content);
  549. $data = new stdClass;
  550. if (is_object($cep_data) && empty($cep_data->erro))
  551. {
  552. TTransaction::open('tutorerpdfe');
  553. $estado = Estado::where('uf', '=', $cep_data->uf)->first();
  554. $cidade = Cidade::where('codigo_ibge', '=', $cep_data->ibge)->first();
  555. TTransaction::close();
  556. $data->detail_logradouro = $cep_data->logradouro;
  557. $data->detail_complemento = $cep_data->complemento;
  558. $data->detail_bairro = $cep_data->bairro;
  559. $data->detail_estado_id = $estado->id ?? '';
  560. $data->detail_cidade_id = $cidade->id ?? '';
  561. TForm::sendData('form_Pessoa', $data, false, true);
  562. }
  563. else
  564. {
  565. $data->logradouro = '';
  566. $data->complemento = '';
  567. $data->bairro = '';
  568. $data->estado_id = '';
  569. $data->cidade_id = '';
  570. TForm::sendData('form_Pessoa', $data, false, true);
  571. }
  572. }
  573. }
  574. catch (Exception $e)
  575. {
  576. new TMessage('error', $e->getMessage());
  577. }
  578. }
  579. /**
  580. * Closes window
  581. */
  582. public static function onClose()
  583. {
  584. parent::closeWindow();
  585. }
  586. /**
  587. * Add detail item
  588. * @param $param URL parameters
  589. */
  590. public function onDetailAdd( $param )
  591. {
  592. try
  593. {
  594. $this->form->validate();
  595. $data = $this->form->getData();
  596. // echo '<br>'.'param'.'<br>';
  597. // print_r($param);
  598. // echo '<br>'.'data'.'<br>';
  599. /** validation sample
  600. if (empty($data->fieldX))
  601. {
  602. throw new Exception('The field fieldX is required');
  603. }
  604. **/
  605. $uniqid = !empty($data->detail_uniqid) ? $data->detail_uniqid : uniqid();
  606. $grid_data = [];
  607. $grid_data['uniqid'] = $uniqid;
  608. $grid_data['id'] = $data->detail_id;
  609. $grid_data['endereco_id'] = $data->detail_endereco_id;
  610. $grid_data['cep'] = $data->detail_cep;
  611. $grid_data['logradouro'] = $data->detail_logradouro;
  612. $grid_data['numero'] = $data->detail_numero;
  613. $grid_data['complemento'] = $data->detail_complemento;
  614. $grid_data['bairro'] = $data->detail_bairro;
  615. $grid_data['cidade_id'] = $data->detail_cidade_id;
  616. // insert row dynamically
  617. $row = $this->detail_list->addItem( (object) $grid_data );
  618. $row->id = $uniqid;
  619. TDataGrid::replaceRowById('PessoaEndereco_list', $uniqid, $row);
  620. // clear detail form fields
  621. $data->detail_uniqid = '';
  622. $data->detail_id = '';
  623. $data->detail_endereco_id = '';
  624. $data->detail_cep = '';
  625. $data->detail_logradouro = '';
  626. $data->detail_numero = '';
  627. $data->detail_complemento = '';
  628. $data->detail_bairro = '';
  629. $data->detail_cidade_id = '';
  630. // send data, do not fire change/exit events
  631. TForm::sendData( 'form_Pessoa', $data, false, false );
  632. }
  633. catch (Exception $e)
  634. {
  635. $this->form->setData( $this->form->getData());
  636. new TMessage('error', $e->getMessage());
  637. }
  638. }
  639. /**
  640. * Edit detail item
  641. * @param $param URL parameters
  642. */
  643. public static function onDetailEdit( $param )
  644. {
  645. $data = new stdClass;
  646. $data->detail_uniqid = $param['uniqid'];
  647. $data->detail_id = $param['id'];
  648. $data->detail_endereco_id = $param['endereco_id'];
  649. $data->detail_cep = $param['cep'];
  650. $data->detail_logradouro = $param['logradouro'];
  651. $data->detail_numero = $param['numero'];
  652. $data->detail_complemento = $param['complemento'];
  653. $data->detail_bairro = $param['bairro'];
  654. $data->detail_cidade_id = $param['cidade_id'];
  655. // send data, do not fire change/exit events
  656. TForm::sendData( 'form_Pessoa', $data, false, false );
  657. }
  658. /**
  659. * Delete detail item
  660. * @param $param URL parameters
  661. */
  662. public static function onDetailDelete( $param )
  663. {
  664. // clear detail form fields
  665. $data = new stdClass;
  666. $data->detail_uniqid = '';
  667. $data->detail_id = '';
  668. $data->detail_endereco_id = '';
  669. $data->detail_cep = '';
  670. $data->detail_logradouro = '';
  671. $data->detail_numero = '';
  672. $data->detail_complemento = '';
  673. $data->detail_bairro = '';
  674. $data->detail_cidade_id = '';
  675. // send data, do not fire change/exit events
  676. TForm::sendData( 'form_Pessoa', $data, false, false );
  677. // remove row
  678. TDataGrid::removeRowById('PessoaEndereco_list', $param['uniqid']);
  679. }
  680. }

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


NR

Usar associação nesses casos não funciona, pois ao adicionar um item não temos uma instância de TRecord, apenas um objeto genérico:
 
  1. <?php
  2. // associação na coluna da grid
  3. $column_cidade_nome = new TDataGridColumn('cidade->nome', 'Cidade Id', 'left', 150);
  4. // item adicionado na grid pela função onDetailAdd
  5. $row = $this->detail_list->addItem( (object) $grid_data ); // veja que aqui é feito um cast de array para objeto genérico
  6. // talvez isso funcione(trocar o addItem acima por esse)
  7. $endereco = new PessoaEndereco();
  8. $endereco->fromArray($grid_data);
  9. $endereco->uniqid = $uniqid;
  10. $row = $this->detail_list->addItem( $endereco );
  11. ?>
PG

fiz a troca mas agora aparece esse erro :


Sem transação ativa com a base de dados: AdiantiDatabaseTRecord::load "public"."endereco" 86.808-160 Rua Ouro Branco 11 Centro Sem transação ativa com a base de dados: AdiantiDatabaseTRecord::load cidade Sem transação ativa com a base de dados: AdiantiDatabaseTRecord::load cidade

na linha do grid apos inclusao.
NR

Abra transação antes de chamar addItem
PG

obrigado. deu certo