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

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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. ?>