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.
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.
- <?php
- /**
- * ComprasForm Master/Detail
- * @author <your name here>
- */
- class ComprasForm extends TPage
- {
- protected $form; // form
- protected $fieldlist;
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct($param)
- {
- parent::__construct($param);
- // creates the form
- $this->form = new BootstrapFormBuilder('form_Compras');
- $this->form->setFormTitle('Compras');
- // master fields
- $id = new TEntry('id');
- $fornecedor_id = new TDBUniqueSearch('fornecedor_id', 'tutorerpdfe', 'Pessoa', 'id', 'nome');
- $usuario_id = new THidden('usuario_id');
- $nfnumero = new TEntry('nfnumero');
- $observacao = new TEntry('observacao');
- $totalprodutos = new TEntry('totalprodutos');
- $desconto = new TEntry('desconto');
- $totalnota = new TEntry('totalnota');
- $data_nota = new TDate('data_nota');
- $nfrete = new TEntry('nfrete');
- $xml_path = new TEntry('xml_path');
- $xml_chave = new TEntry('xml_chave');
- // sizes
- $id->setSize('100%');
- $fornecedor_id->setSize('100%');
- $usuario_id->setSize('100%');
- $nfnumero->setSize('100%');
- $observacao->setSize('100%');
- $totalprodutos->setSize('100%');
- $desconto->setSize('100%');
- $totalnota->setSize('100%');
- $data_nota->setSize('50%');
- $nfrete->setSize('100%');
- $xml_path->setSize('100%');
- $xml_chave->setSize('100%');
- $totalprodutos->setNumericMask(2, ',', '.', true);
- $desconto->setNumericMask(2, ',', '.', true);
- $totalnota->setNumericMask(2, ',', '.', true);
- $nfrete->setNumericMask(2, ',', '.', true);
- $totalprodutos->setValue('0');
- $desconto->setValue('0');
- $totalnota->setValue('0');
- $nfrete->setValue('0');
- $fornecedor_id->setMinLength(0);
- $data_nota->setMask('dd/mm/yyyy',true);
- $data_nota->setDatabaseMask('yyyy-mm-dd');
- $data_nota->setOption('showOnFocus', false);
- $data_nota->setOption('triggerEvent', 'dblclick');
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
- $this->form->addField($usuario_id );
- // add form fields to the form
- $row=$this->form->addFields( [new TLabel('Fornecedor')], [$fornecedor_id] , [new TLabel('Id')], [$id] );
- $row->layout = [ 'col-sm-2 control-label', 'col-sm-7', 'col-sm-2 control-label', 'col-sm-1' ];
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('Data Nota')], [$data_nota] , [new TLabel('NF. Numero')], [$nfnumero] );
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('R$ Desconto')], [$desconto] , [new TLabel('R$ Frete')], [$nfrete] );
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('R$ Produtos')], [$totalprodutos] , [new TLabel(' R$ Nota')], [$totalnota] );
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('Observacao')], [$observacao] );
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('Xml Path')], [$xml_path] );
- $row->class = 'form-control-sm';
- $row=$this->form->addFields( [new TLabel('Xml Chave')], [$xml_chave] );
- $row->class = 'form-control-sm';
- // detail fields
- $this->fieldlist = new TFieldList;
- $this->fieldlist-> width = '100%';
- $this->fieldlist->enableSorting();
- $produto_id = new TDBUniqueSearch('list_produto_id[]', 'tutorerpdfe', 'Produto', 'id', 'sdescricao');
- $produto_id->setChangeAction(new TAction(array($this, 'onChangeProduct')));
- $nvalorunitario = new TEntry('list_nvalorunitario[]');
- $nvalorunitario->setNumericMask(2,',','.', true);
- $nvalorunitario->setSize('100%');
- $nvalorunitario->style = 'text-align: right';
- $nquantidade = new TEntry('list_nquantidade[]');
- $nquantidade->setNumericMask(2,',','.', true);
- $nquantidade->setSize('100%');
- $nquantidade->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- $nquantidade->style = 'text-align: right';
- $ntotalitem = new TEntry('list_ntotalitem[]');
- $ntotalitem->setNumericMask(2,',','.', true);
- $ntotalitem->setSize('100%');
- $ntotalitem->style = 'text-align: right';
- $unidade_id = new TDBUniqueSearch('list_unidade_id[]', 'tutorerpdfe', 'Unidade', 'id', 'sdescricao');
- $produto_id->setSize('100%');
- $nvalorunitario->setSize('100%');
- $nquantidade->setSize('100%');
- $ntotalitem->setSize('100%');
- $unidade_id->setSize('100%');
- $produto_id->setMinLength(0);
- $unidade_id->setMinLength(0);
- $this->fieldlist->addField( '<p style="color:navy"><b>Produto</b></p>', $produto_id,['width' => '30%']);
- $this->fieldlist->addField( '<p style="color:navy"><b>Unidade</b></p>', $unidade_id,['width' => '15%']);
- $this->fieldlist->addField( '<p style="color:navy"><b>R$ Unitário</b></p>', $nvalorunitario);
- $this->fieldlist->addField( '<p style="color:navy"><b>Quantidade</b></p>', $nquantidade);
- $this->fieldlist->addField( '<p style="color:navy"><b>R$ Total</b></p>', $ntotalitem ,['sum' => true] );
- $this->form->addField($produto_id);
- $this->form->addField($unidade_id);
- $this->form->addField($nvalorunitario);
- $this->form->addField($nquantidade);
- $this->form->addField($ntotalitem);
- $this->form->addFields( [new TFormSeparator('Itens da Compra', 'navy', '18', '#eeeeee')] );
- $this->form->addFields( [$this->fieldlist] );
- // create actions
- $this->form->addAction( _t('Save'), new TAction( [$this, 'onSave'] ), 'fa:save green' );
- $this->form->addAction( _t('Clear'), new TAction( [$this, 'onClear'] ), 'fa:eraser red' );
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 100%';
- //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- parent::add($container);
- }
- /**
- * Executed whenever the user clicks at the edit button da datagrid
- */
- function onEdit($param)
- {
- try
- {
- TTransaction::open('tutorerpdfe');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $object = new Compras($key);
- $this->form->setData($object);
- $items = ComprasItem::where('compras_id', '=', $key)->load();
- if ($items)
- {
- $this->fieldlist->addHeader();
- foreach($items as $item )
- {
- $detail = new stdClass;
- $detail->list_produto_id = $item->produto_id;
- $detail->list_nvalorunitario = $item->nvalorunitario;
- $detail->list_nquantidade = $item->nquantidade;
- $detail->list_ntotalitem = $item->ntotalitem;
- $detail->list_unidade_id = $item->unidade_id;
- $this->fieldlist->addDetail($detail);
- }
- $this->fieldlist->addCloneAction();
- }
- else
- {
- $this->onClear($param);
- }
- TTransaction::close(); // close transaction
- }
- else
- {
- $this->onClear($param);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * Clear form
- */
- public function onClear($param)
- {
- $this->fieldlist->addHeader();
- $this->fieldlist->addDetail( new stdClass );
- $this->fieldlist->addCloneAction();
- }
- /**
- * Save the Compras and the ComprasItem's
- */
- public static function onSave($param)
- {
- try
- {
- TTransaction::open('tutorerpdfe');
- $id = (int) $param['id'];
- $master = new Compras;
- $master->fromArray( $param);
- $master->store(); // save master object
- // delete details
- ComprasItem::where('compras_id', '=', $master->id)->delete();
- if( !empty($param['list_produto_id']) AND is_array($param['list_produto_id']) )
- {
- foreach( $param['list_produto_id'] as $row => $produto_id)
- {
- if (!empty($produto_id))
- {
- $detail = new ComprasItem;
- $detail->compras_id = $master->id;
- $detail->produto_id = $param['list_produto_id'][$row];
- $detail->nvalorunitario = $param['list_nvalorunitario'][$row];
- $detail->nquantidade = $param['list_nquantidade'][$row];
- $detail->ntotalitem = $param['list_ntotalitem'][$row];
- $detail->unidade_id = $param['list_unidade_id'][$row];
- $detail->store();
- }
- }
- }
- $data = new stdClass;
- $data->id = $master->id;
- TForm::sendData('form_Compras', $data);
- TTransaction::close(); // close the transaction
- new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public static function onChangeProduct($param)
- {
- $input_id = $param['_field_id'];
- $produto_id = $param['_field_value'];
- $input_pieces = explode('_', $input_id);
- $unique_id = end($input_pieces);
- if ($produto_id)
- {
- $response = new stdClass;
- try
- {
- TTransaction::open('tutorerpdfe');
- $produto = Produto::find($produto_id);
- $response->{'nvalorunitario_'.$unique_id} = number_format($produto->nprecovenda,2,',', '.');
- $response->{'nquantidade_'.$unique_id} = '1,00';
- $response->{'ntotalitem_'.$unique_id} = number_format($produto->nprecovenda,2,',', '.');
- TForm::sendData('form_Compras', $response);
- TTransaction::close();
- }
- catch (Exception $e)
- {
- TTransaction::rollback();
- }
- }
- }
- /**
- * Update the total based on the sale price, amount and discount
- */
- public static function onUpdateTotal($param)
- {
- $input_id = $param['_field_id'];
- $produto_id = $param['_field_value'];
- $input_pieces = explode('_', $input_id);
- $unique_id = end($input_pieces);
- parse_str($param['_field_data'], $field_data);
- $row = $field_data['row'];
- $sale_price = (double) str_replace(['.', ','], ['', '.'], $param['nvalorunitario'][$row]);
- $amount = (double) str_replace(['.', ','], ['', '.'], $param['nquantidade'][$row]);
- $obj = new StdClass;
- $obj->{'ntotalitem_'.$unique_id} = number_format( ($sale_price * $amount), 2, ',', '.');
- TForm::sendData('form_Compras', $obj);
- }
- }
O nome dos campos está errado: