Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Retorno de valores usando TFieldList Segue meu codigo. Estou fazendo uma entrada de produto utilizando um TFieldList, coloquei no produto o evento onChangeProduct que deveria retornar o preco de venda do produto , só que isso nao esta acontecendo, ja procurei mas nao consegui localizar o erro, na function onChangeProduct esta trazendo os valores ja testei, o problema esta em atualizar a tela. obrigado. ...
PG
Retorno de valores usando TFieldList  
Segue meu codigo.

Estou fazendo uma entrada de produto utilizando um TFieldList,
coloquei no produto o evento onChangeProduct que
deveria retornar o preco de venda do produto , só que
isso nao esta acontecendo, ja procurei mas nao consegui localizar o erro,
na function onChangeProduct esta trazendo os valores ja testei,
o problema esta em atualizar a tela.
obrigado.



 
  1. <?php
  2. /**
  3. * ComprasForm Master/Detail
  4. * @author <your name here>
  5. */
  6. class ComprasForm extends TPage
  7. {
  8. protected $form; // form
  9. protected $fieldlist;
  10. /**
  11. * Class constructor
  12. * Creates the page and the registration form
  13. */
  14. function __construct($param)
  15. {
  16. parent::__construct($param);
  17. // creates the form
  18. $this->form = new BootstrapFormBuilder('form_Compras');
  19. $this->form->setFormTitle('Compras');
  20. // master fields
  21. $id = new TEntry('id');
  22. $fornecedor_id = new TDBUniqueSearch('fornecedor_id', 'tutorerpdfe', 'Pessoa', 'id', 'nome');
  23. $usuario_id = new THidden('usuario_id');
  24. $nfnumero = new TEntry('nfnumero');
  25. $observacao = new TEntry('observacao');
  26. $totalprodutos = new TEntry('totalprodutos');
  27. $desconto = new TEntry('desconto');
  28. $totalnota = new TEntry('totalnota');
  29. $data_nota = new TDate('data_nota');
  30. $nfrete = new TEntry('nfrete');
  31. $xml_path = new TEntry('xml_path');
  32. $xml_chave = new TEntry('xml_chave');
  33. // sizes
  34. $id->setSize('100%');
  35. $fornecedor_id->setSize('100%');
  36. $usuario_id->setSize('100%');
  37. $nfnumero->setSize('100%');
  38. $observacao->setSize('100%');
  39. $totalprodutos->setSize('100%');
  40. $desconto->setSize('100%');
  41. $totalnota->setSize('100%');
  42. $data_nota->setSize('50%');
  43. $nfrete->setSize('100%');
  44. $xml_path->setSize('100%');
  45. $xml_chave->setSize('100%');
  46. $totalprodutos->setNumericMask(2, ',', '.', true);
  47. $desconto->setNumericMask(2, ',', '.', true);
  48. $totalnota->setNumericMask(2, ',', '.', true);
  49. $nfrete->setNumericMask(2, ',', '.', true);
  50. $totalprodutos->setValue('0');
  51. $desconto->setValue('0');
  52. $totalnota->setValue('0');
  53. $nfrete->setValue('0');
  54. $fornecedor_id->setMinLength(0);
  55. $data_nota->setMask('dd/mm/yyyy',true);
  56. $data_nota->setDatabaseMask('yyyy-mm-dd');
  57. $data_nota->setOption('showOnFocus', false);
  58. $data_nota->setOption('triggerEvent', 'dblclick');
  59. if (!empty($id))
  60. {
  61. $id->setEditable(FALSE);
  62. }
  63. $this->form->addField($usuario_id );
  64. // add form fields to the form
  65. $row=$this->form->addFields( [new TLabel('Fornecedor')], [$fornecedor_id] , [new TLabel('Id')], [$id] );
  66. $row->layout = [ 'col-sm-2 control-label', 'col-sm-7', 'col-sm-2 control-label', 'col-sm-1' ];
  67. $row->class = 'form-control-sm';
  68. $row=$this->form->addFields( [new TLabel('Data Nota')], [$data_nota] , [new TLabel('NF. Numero')], [$nfnumero] );
  69. $row->class = 'form-control-sm';
  70. $row=$this->form->addFields( [new TLabel('R$ Desconto')], [$desconto] , [new TLabel('R$ Frete')], [$nfrete] );
  71. $row->class = 'form-control-sm';
  72. $row=$this->form->addFields( [new TLabel('R$ Produtos')], [$totalprodutos] , [new TLabel(' R$ Nota')], [$totalnota] );
  73. $row->class = 'form-control-sm';
  74. $row=$this->form->addFields( [new TLabel('Observacao')], [$observacao] );
  75. $row->class = 'form-control-sm';
  76. $row=$this->form->addFields( [new TLabel('Xml Path')], [$xml_path] );
  77. $row->class = 'form-control-sm';
  78. $row=$this->form->addFields( [new TLabel('Xml Chave')], [$xml_chave] );
  79. $row->class = 'form-control-sm';
  80. // detail fields
  81. $this->fieldlist = new TFieldList;
  82. $this->fieldlist-> width = '100%';
  83. $this->fieldlist->enableSorting();
  84. $produto_id = new TDBUniqueSearch('list_produto_id[]', 'tutorerpdfe', 'Produto', 'id', 'sdescricao');
  85. $produto_id->setChangeAction(new TAction(array($this, 'onChangeProduct')));
  86. $nvalorunitario = new TEntry('list_nvalorunitario[]');
  87. $nvalorunitario->setNumericMask(2,',','.', true);
  88. $nvalorunitario->setSize('100%');
  89. $nvalorunitario->style = 'text-align: right';
  90. $nquantidade = new TEntry('list_nquantidade[]');
  91. $nquantidade->setNumericMask(2,',','.', true);
  92. $nquantidade->setSize('100%');
  93. $nquantidade->setExitAction(new TAction(array($this, 'onUpdateTotal')));
  94. $nquantidade->style = 'text-align: right';
  95. $ntotalitem = new TEntry('list_ntotalitem[]');
  96. $ntotalitem->setNumericMask(2,',','.', true);
  97. $ntotalitem->setSize('100%');
  98. $ntotalitem->style = 'text-align: right';
  99. $unidade_id = new TDBUniqueSearch('list_unidade_id[]', 'tutorerpdfe', 'Unidade', 'id', 'sdescricao');
  100. $produto_id->setSize('100%');
  101. $nvalorunitario->setSize('100%');
  102. $nquantidade->setSize('100%');
  103. $ntotalitem->setSize('100%');
  104. $unidade_id->setSize('100%');
  105. $produto_id->setMinLength(0);
  106. $unidade_id->setMinLength(0);
  107. $this->fieldlist->addField( '<p style="color:navy"><b>Produto</b></p>', $produto_id,['width' => '30%']);
  108. $this->fieldlist->addField( '<p style="color:navy"><b>Unidade</b></p>', $unidade_id,['width' => '15%']);
  109. $this->fieldlist->addField( '<p style="color:navy"><b>R$ Unitário</b></p>', $nvalorunitario);
  110. $this->fieldlist->addField( '<p style="color:navy"><b>Quantidade</b></p>', $nquantidade);
  111. $this->fieldlist->addField( '<p style="color:navy"><b>R$ Total</b></p>', $ntotalitem ,['sum' => true] );
  112. $this->form->addField($produto_id);
  113. $this->form->addField($unidade_id);
  114. $this->form->addField($nvalorunitario);
  115. $this->form->addField($nquantidade);
  116. $this->form->addField($ntotalitem);
  117. $this->form->addFields( [new TFormSeparator('Itens da Compra', 'navy', '18', '#eeeeee')] );
  118. $this->form->addFields( [$this->fieldlist] );
  119. // create actions
  120. $this->form->addAction( _t('Save'), new TAction( [$this, 'onSave'] ), 'fa:save green' );
  121. $this->form->addAction( _t('Clear'), new TAction( [$this, 'onClear'] ), 'fa:eraser red' );
  122. // create the page container
  123. $container = new TVBox;
  124. $container->style = 'width: 100%';
  125. //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  126. $container->add($this->form);
  127. parent::add($container);
  128. }
  129. /**
  130. * Executed whenever the user clicks at the edit button da datagrid
  131. */
  132. function onEdit($param)
  133. {
  134. try
  135. {
  136. TTransaction::open('tutorerpdfe');
  137. if (isset($param['key']))
  138. {
  139. $key = $param['key'];
  140. $object = new Compras($key);
  141. $this->form->setData($object);
  142. $items = ComprasItem::where('compras_id', '=', $key)->load();
  143. if ($items)
  144. {
  145. $this->fieldlist->addHeader();
  146. foreach($items as $item )
  147. {
  148. $detail = new stdClass;
  149. $detail->list_produto_id = $item->produto_id;
  150. $detail->list_nvalorunitario = $item->nvalorunitario;
  151. $detail->list_nquantidade = $item->nquantidade;
  152. $detail->list_ntotalitem = $item->ntotalitem;
  153. $detail->list_unidade_id = $item->unidade_id;
  154. $this->fieldlist->addDetail($detail);
  155. }
  156. $this->fieldlist->addCloneAction();
  157. }
  158. else
  159. {
  160. $this->onClear($param);
  161. }
  162. TTransaction::close(); // close transaction
  163. }
  164. else
  165. {
  166. $this->onClear($param);
  167. }
  168. }
  169. catch (Exception $e) // in case of exception
  170. {
  171. new TMessage('error', $e->getMessage());
  172. TTransaction::rollback();
  173. }
  174. }
  175. /**
  176. * Clear form
  177. */
  178. public function onClear($param)
  179. {
  180. $this->fieldlist->addHeader();
  181. $this->fieldlist->addDetail( new stdClass );
  182. $this->fieldlist->addCloneAction();
  183. }
  184. /**
  185. * Save the Compras and the ComprasItem's
  186. */
  187. public static function onSave($param)
  188. {
  189. try
  190. {
  191. TTransaction::open('tutorerpdfe');
  192. $id = (int) $param['id'];
  193. $master = new Compras;
  194. $master->fromArray( $param);
  195. $master->store(); // save master object
  196. // delete details
  197. ComprasItem::where('compras_id', '=', $master->id)->delete();
  198. if( !empty($param['list_produto_id']) AND is_array($param['list_produto_id']) )
  199. {
  200. foreach( $param['list_produto_id'] as $row => $produto_id)
  201. {
  202. if (!empty($produto_id))
  203. {
  204. $detail = new ComprasItem;
  205. $detail->compras_id = $master->id;
  206. $detail->produto_id = $param['list_produto_id'][$row];
  207. $detail->nvalorunitario = $param['list_nvalorunitario'][$row];
  208. $detail->nquantidade = $param['list_nquantidade'][$row];
  209. $detail->ntotalitem = $param['list_ntotalitem'][$row];
  210. $detail->unidade_id = $param['list_unidade_id'][$row];
  211. $detail->store();
  212. }
  213. }
  214. }
  215. $data = new stdClass;
  216. $data->id = $master->id;
  217. TForm::sendData('form_Compras', $data);
  218. TTransaction::close(); // close the transaction
  219. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  220. }
  221. catch (Exception $e) // in case of exception
  222. {
  223. new TMessage('error', $e->getMessage());
  224. TTransaction::rollback();
  225. }
  226. }
  227. public static function onChangeProduct($param)
  228. {
  229. $input_id = $param['_field_id'];
  230. $produto_id = $param['_field_value'];
  231. $input_pieces = explode('_', $input_id);
  232. $unique_id = end($input_pieces);
  233. if ($produto_id)
  234. {
  235. $response = new stdClass;
  236. try
  237. {
  238. TTransaction::open('tutorerpdfe');
  239. $produto = Produto::find($produto_id);
  240. $response->{'nvalorunitario_'.$unique_id} = number_format($produto->nprecovenda,2,',', '.');
  241. $response->{'nquantidade_'.$unique_id} = '1,00';
  242. $response->{'ntotalitem_'.$unique_id} = number_format($produto->nprecovenda,2,',', '.');
  243. TForm::sendData('form_Compras', $response);
  244. TTransaction::close();
  245. }
  246. catch (Exception $e)
  247. {
  248. TTransaction::rollback();
  249. }
  250. }
  251. }
  252. /**
  253. * Update the total based on the sale price, amount and discount
  254. */
  255. public static function onUpdateTotal($param)
  256. {
  257. $input_id = $param['_field_id'];
  258. $produto_id = $param['_field_value'];
  259. $input_pieces = explode('_', $input_id);
  260. $unique_id = end($input_pieces);
  261. parse_str($param['_field_data'], $field_data);
  262. $row = $field_data['row'];
  263. $sale_price = (double) str_replace(['.', ','], ['', '.'], $param['nvalorunitario'][$row]);
  264. $amount = (double) str_replace(['.', ','], ['', '.'], $param['nquantidade'][$row]);
  265. $obj = new StdClass;
  266. $obj->{'ntotalitem_'.$unique_id} = number_format( ($sale_price * $amount), 2, ',', '.');
  267. TForm::sendData('form_Compras', $obj);
  268. }
  269. }

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


NR

O nome dos campos está errado:
 
  1. <?php
  2. // construct
  3. $nvalorunitario = new TEntry('list_nvalorunitario[]');
  4. // onChangeProduct - falta o list_
  5. $response->{'nvalorunitario_'.$unique_id} = number_format($produto->nprecovenda,2,',', '.');
  6. ?>