Erro ao tentar editar form campos TDBUniqueSearch e TDBSelec Pessoal, estou tentando editar uma informação de um formulário que busco do banco normalmente. Mas na hora de salvar, como valido alguns campos, apresenta a informação que o cod_cliente não esta preenchido. Primeiro estava com problema em trazer os dados de um TDBSelect (Agregação), que só consegui sobrescrevendo o metódo de edição, agora estou no cod_cliente, que é um TDBUniqueSearch...
HT
Erro ao tentar editar form campos TDBUniqueSearch e TDBSelec  
Pessoal, estou tentando editar uma informação de um formulário que busco do banco normalmente. Mas na hora de salvar, como valido alguns campos, apresenta a informação que o cod_cliente não esta preenchido. Primeiro estava com problema em trazer os dados de um TDBSelect (Agregação), que só consegui sobrescrevendo o metódo de edição, agora estou no cod_cliente, que é um TDBUniqueSearch. Ele preenche o campo com a informação, mais quando vai para função salvar, o valor do campo vai zerado.

 
  1. <?php
  2. class SacColetaForm extends TPage
  3. {
  4. protected $form; // form
  5. use Adianti\Base\AdiantiStandardFormTrait; // Standard form methods
  6. /**
  7. * Class constructor
  8. * Creates the page and the registration form
  9. */
  10. function __construct($param)
  11. {
  12. parent::__construct();
  13. $this->setDatabase('mysql'); // defines the database
  14. $this->setActiveRecord('SacColeta'); // defines the active record
  15. // creates the form
  16. $this->form = new BootstrapFormBuilder('form_SacColeta');
  17. $this->form->setFormTitle('Sac Coleta');
  18. // create the form fields
  19. $id = new TEntry('id');
  20. $data_coleta = new TDate('data_coleta');
  21. $data_saida = new TDate('data_saida');
  22. $cod_cliente = new TDBUniqueSearch('cod_cliente', 'sqlserver', 'Clien', 'Codigo', 'Razao_Social');
  23. $motivo = new TEntry('motivo', 'mysql', 'Motivo', 'id', 'descricao');
  24. $sac_proced_id = new TDBSelect('sac_proced_id', 'mysql', 'SacProcedimento', 'id', 'descricao');
  25. $sac_protoc_tipo_id = new TDBCombo('sac_protoc_tipo_id', 'mysql', 'SacProtocoloTipo', 'id', 'descricao');
  26. $observacao = new TEntry('observacao');
  27. $nota_fiscal = new TEntry('nota_fiscal');
  28. $controle = new TCombo('controle');
  29. $controle->addItems(array('E'=> 'Enviado', 'R'=> 'Recebido', 'A' => 'Arquivado'));
  30. // add the fields
  31. $this->form->addFields( [ new TLabel('Id') ], [ $id ] );
  32. $this->form->addFields( [ new TLabel('Tipo Protocolo') ], [ $sac_protoc_tipo_id ] );
  33. $this->form->addFields( [ new TLabel('Nota Fiscal') ], [ $nota_fiscal ] );
  34. $this->form->addFields( [ new TLabel('Data Coleta') ], [ $data_coleta ] );
  35. $this->form->addFields( [ new TLabel('Data Saida') ], [ $data_saida ] );
  36. $this->form->addFields( [ new TLabel('Cliente') ], [ $cod_cliente ] );
  37. $this->form->addFields( [ new TLabel('Motivo') ], [ $motivo ] );
  38. $this->form->addFields( [ new TLabel('Procedimento') ], [ $sac_proced_id ] );
  39. $this->form->addFields( [ new TLabel('Observacao') ], [ $observacao ] );
  40. $this->form->addFields( [ new TLabel('Controle') ], [ $controle ] );
  41. $nota_fiscal->setExitAction(new TAction(array($this, 'onExitNota')));
  42. // set sizes
  43. $id->setSize('100%');
  44. $data_coleta->setSize('100%');
  45. $data_saida->setSize('100%');
  46. $cod_cliente->setSize('100%');
  47. $motivo->setSize('100%');
  48. $sac_proced_id->setSize('100%', 200);
  49. $sac_protoc_tipo_id->setSize('100%');
  50. $observacao->setSize('100%');
  51. $nota_fiscal->setSize('100%');
  52. $nota_fiscal->setMask('99999999999');
  53. // add validation
  54. $sac_proced_id->addValidation( 'Procedimento', new TRequiredValidator );
  55. $sac_protoc_tipo_id->addValidation( 'Tipo Protocolo', new TRequiredValidator );
  56. $cod_cliente->addValidation( 'Cliente', new TRequiredValidator );
  57. $observacao->addValidation( 'Observação', new TRequiredValidator );
  58. $id->setEditable(FALSE);
  59. if (!empty($param['key']))
  60. {
  61. $data_coleta->setEditable(FALSE);
  62. $data_saida->setEditable(FALSE);
  63. $cod_cliente->setEditable(FALSE);
  64. $motivo->setEditable(FALSE);
  65. $sac_proced_id->setEditable(FALSE);
  66. $sac_protoc_tipo_id->setEditable(FALSE);
  67. $observacao->setEditable(FALSE);
  68. $nota_fiscal->setEditable(FALSE);
  69. TButton::enableField('form_SacColeta','salvar');
  70. }else{
  71. TButton::disableField('form_SacColeta','cancelar');
  72. TButton::disableField('form_SacColeta','fechar');
  73. }
  74. // create the form actions
  75. $btn = $this->form->addAction(_t('Save'), new TAction([$this, 'onSave']), 'fa:floppy-o');
  76. $btn->class = 'btn btn-sm btn-primary';
  77. $this->form->addAction('Voltar', new TAction(['SacColetaList', 'onReload']), 'fa:backward blue');
  78. $this->form->addAction('Fechar', new TAction([$this, 'onQuestionFechar']), 'fa:times green');
  79. $this->form->addAction('Cancelar', new TAction([$this, 'onQuestionCancel']), 'fa:eraser red');
  80. // vertical box container
  81. $container = new TVBox;
  82. $container->style = 'width: 100%';
  83. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  84. $container->add($this->form);
  85. parent::add($container);
  86. }
  87. function onQuestionFechar($param)
  88. {
  89. $this->form->setData($this->form->getData());
  90. if($param['controle'] == '')
  91. {
  92. new TMessage('info','O campo controle precisa ser definido!');
  93. }else{
  94. $action = new TAction(array($this, 'onFechar'));
  95. $action->setParameter('id', $param['id']);
  96. $action->setParameter('controle', $param['controle']);
  97. new TQuestion('Deseja realmente fechar a coleta?.', $action);
  98. }
  99. }
  100. function onFechar($param)
  101. {
  102. try
  103. {
  104. TTransaction::open('mysql');
  105. $coleta = new SacColeta($param['id']);
  106. $coleta->status = 'F';
  107. $coleta->controle = $param['controle'];
  108. $coleta->store();
  109. TTransaction::close();
  110. $action = new TAction(array('SacColetaList','onReload'));
  111. new TMessage('info','Coleta fechada com sucesso!', $action);
  112. }catch(Exception $e)
  113. {
  114. new TMessage('erro', $e->getMessage());
  115. }
  116. }
  117. function onQuestionCancel($param)
  118. {
  119. $action = new TAction(array($this, 'onCancel'));
  120. $action->setParameter('id', $param['id']);
  121. new TQuestion('Deseja realmente cancelar a coleta?.', $action);
  122. }
  123. function onCancel($param)
  124. {
  125. try
  126. {
  127. TTransaction::open('mysql');
  128. $coleta = new SacColeta($param['id']);
  129. $coleta->status = 'C';
  130. $coleta->store();
  131. TTransaction::close();
  132. $action = new TAction(array('SacColetaList','onReload'));
  133. new TMessage('info','Coleta cancelada com sucesso!', $action);
  134. }catch(Exception $e)
  135. {
  136. new TMessage('erro', $e->getMessage());
  137. }
  138. }
  139. /**
  140. * method onExitNota()
  141. * Action to input nota
  142. */
  143. static function onExitNota($param)
  144. {
  145. try
  146. {
  147. TTransaction::open('sqlserver');
  148. $nfscb = new Nfscb($param['nota_fiscal']);
  149. if(!empty($nfscb))
  150. {
  151. $object = new StdClass;
  152. $object->cod_cliente = $nfscb->Cod_Cliente;
  153. TForm::sendData('form_SacColeta', $object);
  154. }
  155. TTransaction::close();
  156. }catch(Exception $e){
  157. new TMessage('erro', $e->getMessage());
  158. }
  159. }
  160. /**
  161. * method onSave()
  162. * Executed whenever the user clicks at the save button
  163. */
  164. public function onSave($param)
  165. {
  166. try
  167. {
  168. $object = $this->form->getData();
  169. print_r($object);
  170. $this->form->validate();
  171. $object = $this->form->getData();
  172. $this->form->setData($object);
  173. TTransaction::open('mysql');
  174. $sacColeta = new SacColeta;
  175. TTransaction::close();
  176. TTransaction::open('sqlserver');
  177. $cliente = new Clien($object->cod_cliente);
  178. if(!empty($object->nota_fiscal))
  179. {
  180. $nfscb = new Nfscb($object->nota_fiscal);
  181. $sacColeta->nota_fiscal = $object->nota_fiscal;
  182. $sacColeta->vendedor = $nfscb->vendedor->Nome_Guerra;
  183. $sacColeta->operador = $nfscb->vendedor->Nome_Guerra;
  184. if($nfscb->Cod_Cliente != $object->cod_cliente)
  185. {
  186. throw new Exception('Nota Fiscal não esta relacionada a esse cliente!', 1);
  187. }
  188. }
  189. $sacColeta->data_emissao = date('Y-m-d');
  190. $sacColeta->data_coleta = $object->data_coleta;
  191. $sacColeta->data_saida = $object->data_saida;
  192. $sacColeta->cod_cliente = $object->cod_cliente;
  193. $sacColeta->razao = $cliente->Razao_Social;
  194. $sacColeta->cnpj = $cliente->Cgc_Cpf;
  195. $sacColeta->endereco = $cliente->Endereco;
  196. $sacColeta->numero = $cliente->Numero;
  197. $sacColeta->bairro = $cliente->bairro->Descricao;
  198. $sacColeta->cidade = $cliente->cidade->Descricao;
  199. $sacColeta->estado = $cliente->Cod_Estado;
  200. $sacColeta->sac_protoc_tipo_id = $object->sac_protoc_tipo_id;
  201. $sacColeta->motivo = $object->motivo;
  202. $sacColeta->observacao = $object->observacao;
  203. TTransaction::close();
  204. TTransaction::open('mysql');
  205. $sacColeta->protocolo = date('dmy'). str_pad(rand(1,100),3,0,STR_PAD_LEFT) . $sacColeta->getLastID() + 1;
  206. foreach ($object->sac_proced_id as $key => $value)
  207. {
  208. $sac_proc = new SacProcedimento($value);
  209. $sacColeta->addSacColetaProcedimento($sac_proc);
  210. }
  211. $sacColeta->store();
  212. // close the transaction
  213. TTransaction::close();
  214. $pdf = new SacProtocoloDownload;
  215. $pdf->protocoloPdfColeta($sacColeta->id);
  216. $action = new TAction(array('SacColetaList','onReload'));
  217. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'), $action);
  218. }
  219. catch (Exception $e) // in case of exception
  220. {
  221. // get the form data
  222. $object = $this->form->getData();
  223. // fill the form with the active record data
  224. $this->form->setData($object);
  225. // shows the exception error message
  226. new TMessage('error', $e->getMessage());
  227. // undo all pending operations
  228. TTransaction::rollback();
  229. }
  230. }
  231. /**
  232. * method onEdit()
  233. * Executed whenever the user clicks at the edit button da datagrid
  234. * @param $param An array containing the GET ($_GET) parameters
  235. */
  236. public function onEdit($param)
  237. {
  238. try
  239. {
  240. if (empty($this->database))
  241. {
  242. throw new Exception(AdiantiCoreTranslator::translate('^1 was not defined. You must call ^2 in ^3', AdiantiCoreTranslator::translate('Database'), 'setDatabase()', AdiantiCoreTranslator::translate('Constructor')));
  243. }
  244. if (empty($this->activeRecord))
  245. {
  246. throw new Exception(AdiantiCoreTranslator::translate('^1 was not defined. You must call ^2 in ^3', 'Active Record', 'setActiveRecord()', AdiantiCoreTranslator::translate('Constructor')));
  247. }
  248. if (isset($param['key']))
  249. {
  250. // get the parameter $key
  251. $key=$param['key'];
  252. // open a transaction with database
  253. TTransaction::open($this->database);
  254. $class = $this->activeRecord;
  255. // instantiates object
  256. $object = new $class($key);
  257. // AQUI TIVE QUE FAZER ASSIM PARA PREENCHER O CAMPO TDBSelect.
  258. $object->sac_proced_id = $object->getSacColetaProcedimentos();
  259. // fill the form with the active record data
  260. $this->form->setData($object);
  261. // close the transaction
  262. TTransaction::close();
  263. return $object;
  264. }
  265. else
  266. {
  267. $this->form->clear();
  268. }
  269. }
  270. catch (Exception $e) // in case of exception
  271. {
  272. // shows the exception error message
  273. new TMessage('error', $e->getMessage());
  274. // undo all pending operations
  275. TTransaction::rollback();
  276. }
  277. }
  278. }
  279. ?>

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)


NR

O var_dump de $param na função onSave retorna esse campo?
HT

Sim, mas retorna vazio
HT

O sistema carrega o cliente no campo, mas na hora de salvar, informa o campo vazio.