CM
Acentuação em Grid do Mestre Detalhe
Boa noite.
Tenho um form Mestre Detalhe que funciona tudo perfeitamente.
Só que quando incluo um produto que tenha acentuação ele simplesmente envia tudo codificado, exemplo:
Aliança
Ele adiciona como:
ALIANÃA
Já olhei em outros posts e até mesmo pelo google mas não encontro nada que resolva.
Obrigado.
Segue meu código:
Tenho um form Mestre Detalhe que funciona tudo perfeitamente.
Só que quando incluo um produto que tenha acentuação ele simplesmente envia tudo codificado, exemplo:
Aliança
Ele adiciona como:
ALIANÃA
Já olhei em outros posts e até mesmo pelo google mas não encontro nada que resolva.
Obrigado.
Segue meu código:
- <?php
- <?php
- class ComprasFormMaster extends TPage
- {
- protected $form; // form
- protected $detail_list;
- public function __construct()
- {
- parent::__construct();
- // creates the form
- $this->form = new BootstrapFormBuilder('form_Compras');
- $this->form->setFormTitle('REGISTRO COMPRA');
- $this->form->setFieldSizes('100%');
- // master fields
- $id_compra = new TEntry('id_compra');
- $data_compra = new TDate('data_compra');
- $tipo_compra_txt = new TEntry('tipo_compra_txt');
- $finalizada = new TEntry('finalizada');
- $finalizada = new THidden('finalizada');
- $criteria = new TCriteria;
- $criteria->setProperty('order', 'nome_cliente');
- $cliente_id = new ">TDBSeekButton('cliente_id', 'ourorio', 'form_Compras', 'Clientes', 'nome_cliente', 'cliente_id', 'cliente_txt', $criteria);
- $cliente_txt = new TEntry('cliente_txt');
- $cliente_txt->setEditable(FALSE);
- // define ação de saída do campo
- $cliente_id->setExitAction(new TAction(array($this, 'onExitCliente')));
- $cliente_cep = new THidden('cliente_cep');
- $cliente_endereco_tipo = new THidden('cliente_endereco_tipo');
- $cliente_endereco = new THidden('cliente_endereco');
- $cliente_endereco_numero = new THidden('cliente_endereco_numero');
- $cliente_bairro = new THidden('cliente_bairro');
- $cliente_cidade = new THidden('cliente_cidade');
- $cliente_estado = new THidden('cliente_estado');
- $cliente_telefone = new THidden('cliente_telefone');
- $cliente_nascimento = new THidden('cliente_nascimento');
- $cliente_identidade = new THidden('cliente_identidade');
- $cliente_email = new THidden('cliente_email');
- $cliente_cpf = new THidden('cliente_cpf');
- $anexo_nf_joia_cliente = new TFile('anexo_nf_joia_cliente');
- $vendedor_txt = new TEntry('vendedor_txt');
- $vendedor_id = new THidden('vendedor_id');
- $loja_id = new TEntry('loja_id');
- $loja_id = new THidden('loja_id');
- $loja_txt = new TEntry('loja_txt');
- $finalizada = new TEntry('finalizada');
- $movimento_fechado = new TEntry('movimento_fechado');
- $movimento_fechado_em = new TDate('movimento_fechado_em');
- $valor_total = new TDate('valor_total');
- //Campos Obrigatórios
- $cliente_id->addValidation('Id do Cliente', new TRequiredValidator);
- $cliente_txt->addValidation('Nome do Cliente', new TRequiredValidator);
- $data_compra->addValidation('Data da Compra', new TRequiredValidator);
- // máscara Master
- $data_compra ->setDatabaseMask('yyyy-mm-dd');
- $data_compra ->setMask('dd/mm/yyyy');
- $data_compra->setValue(date("Y-m-d"));
- $loja_id->setValue(TSession::getValue('userunitid')) ; //id da unidade
- $loja_id->setEditable(FALSE);
- $loja_txt->setValue(TSession::getValue('userunitname')); //nome da unidade
- $loja_txt->setEditable(FALSE);
- $vendedor_txt->setEditable(FALSE);
- $vendedor_txt->setValue(TSession::getValue('username')); //nome do usuário
- $vendedor_id->setValue(TSession::getValue('userid'));//id usuario
- $finalizada->setValue('1');
- // set sizes Master
- $cliente_id->setSize('100%');
- $cliente_txt->setSize('100%');
- $vendedor_txt->setSize('100%');
- $loja_txt->setSize('100%');
- // detail fields
- $detail_uniqid = new THidden('detail_uniqid');
- $detail_id_automatico = new THidden('detail_id_automatico');
- $detail_loja_sub_id = new THidden('detail_loja_sub_id');
- $detail_loja_sub_txt = new THidden('detail_loja_sub_txt');
- $detail_vendedor_sub_id = new THidden('detail_vendedor_sub_id');
- $detail_vendedor_sub_txt = new THidden('detail_vendedor_sub_txt');
- $detail_quantidade = new TEntry('detail_quantidade');
- $detail_quantidade = new TNumeric('detail_quantidade', 2, '', '', true);
- $detail_unidade = new TEntry('detail_unidade');
- $detail_descricao = new TEntry('detail_descricao');
- $detail_valor_unit = new TEntry('detail_valor_unit');
- $detail_subtotal = new TEntry('detail_subtotal');
- $detail_tipo_compra_id = new TDBCombo('detail_tipo_compra_id', 'ourorio', 'ComprasTipo', 'id_tipo_compra', 'descricao','descricao');
- $detail_tipo_compra_txt = new TEntry('detail_tipo_compra_txt');
- $detail_tipo_compra_txt = new THidden('detail_tipo_compra_txt');
- $detail_kilate_id = new TDBCombo('detail_kilate_id', 'ourorio', 'ComprasKilate', 'id_kilate', 'descricao_kilate','descricao_kilate');
- $detail_kilate_txt = new TEntry('detail_kilate_txt');
- $detail_kilate_txt = new THidden('detail_kilate_txt');
- $detail_valor_unit->setEditable(FALSE);
- $detail_subtotal->setEditable(FALSE);
- // define ação ao Sair doo Campo
- $detail_quantidade->setExitAction(new TAction(array($this, 'onUpdateTotal')));
- // define ação ao alterar a Combo
- $detail_kilate_id->setChangeAction(new TAction(array($this, 'onChangeKilate')));
- $detail_tipo_compra_id->setChangeAction(new TAction(array($this, 'onChangeTipoCompra')));
- // mascara detalhes
- $detail_descricao->forceUpperCase();
- $detail_unidade->forceUpperCase();
- $detail_unidade->setValue('GR');
- $detail_quantidade->setNumericMask(2, ',', '.', true, true);
- $detail_valor_unit->setNumericMask(2, ',', '.', true);
- $detail_subtotal->setNumericMask(2, ',', '.', true);
- if (!empty($id_compra))
- {
- $id_compra->setEditable(FALSE);
- }
- // master fields
- $row = $this->form->addFields ([new TLabel('Código')], [$id_compra] ,
- [new TLabel('Data')], [$data_compra] ,
- [new TLabel('Oper.')], [$vendedor_txt],
- [new THidden('Loja')], [$loja_txt]);
- $row->layout = ['col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-2','col-sm-0','col-3'];
- $row = $this->form->addFields( [new TLabel('Anexo N.F. Joia')], [$anexo_nf_joia_cliente],
- [new TLabel('ID')], [$cliente_id],
- [new TLabel('Cliente')], [$cliente_txt]);
- $row->layout = ['col-sm-1', 'col-sm-2','col-sm-1', 'col-sm-2','col-sm-1', 'col-sm-5'];
- $row = $this->form->addFields([new THidden('CEP')], [$cliente_cep],
- [new THidden('Tipo')], [$cliente_endereco_tipo],
- [new THidden('Endereço')], [$cliente_endereco],
- [new THidden('Numero')], [$cliente_endereco_numero],
- [new THidden('Bairro')], [$cliente_bairro],
- [new THidden('Cidade')], [$cliente_cidade],
- [new THidden('Estado')], [$cliente_estado],
- [new THidden('Telefone')], [$cliente_telefone],
- [new THidden('Nasc')], [$cliente_nascimento],
- [new THidden('Identidade')], [$cliente_identidade],
- [new THidden('Email')], [$cliente_email],
- [new THidden('CPF')], [$cliente_cpf],
- [new THidden('Op. ID')], [$vendedor_id]);
- $row->layout = ['col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-4','col-sm-1','col-sm-2','col-sm-1', 'col-sm-2', 'col-sm-1','col-sm-2', 'col-sm-1','col-sm-2', 'col-sm-1','col-sm-2', 'col-sm-1','col-sm-2', 'col-sm-1','col-sm-2', 'col-sm-1','col-sm-2'];
- $row = $this->form->addFields([new THidden('ID')], [$loja_id] );
- $row->layout = ['col-sm-1', 'col-sm-3','col-sm-1', 'col-sm-3','col-sm-1','col-sm-3'];
- // detail fields
- $this->form->addContent( ['<h4>Item(s) da Compra</h4><hr>'] );
- $this->form->addFields( [$detail_uniqid] );
- $this->form->addFields( [$detail_id_automatico] );
- $row = $this->form->addFields( [new TLabel('Tipo')], [$detail_tipo_compra_id],
- [new TLabel('Kilate')], [$detail_kilate_id],
- [new TLabel('Quant')], [$detail_quantidade],
- [new TLabel('Unidade')], [$detail_unidade] );
- $row->layout = ['col-sm-1', 'col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-2','col-sm-1','col-sm-2'];
- $row = $this->form->addFields([new THidden('TipoTxt')], [$detail_tipo_compra_txt],
- [new THidden('KilateTxt')], [$detail_kilate_txt]);
- $row->layout = ['col-sm-1', 'col-sm-2','col-sm-1','col-sm-2'];
- $row = $this->form->addFields( [new TLabel('Produto')], [$detail_descricao],
- [new TLabel('Valor')], [$detail_valor_unit],
- [new TLabel('Subtotal')], [$detail_subtotal]);
- $row->layout = ['col-sm-1', 'col-sm-5','col-sm-1','col-sm-2','col-sm-1','col-sm-2'];
- $btn_add = TButton::create('add', [$this, 'onDetailAdd'], 'Lança Produto', 'fa:plus-circle green');
- $btn_add->getAction()->setParameter('static','1');
- $this->form->addFields( [], [$btn_add] );
- $this->detail_list = new BootstrapDatagridWrapper(new TDataGrid);
- $this->detail_list->setId('ComprasSub_list');
- $this->detail_list->generateHiddenFields();
- $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
- // items
- $this->detail_list->addColumn( new TDataGridColumn('uniqid', 'Uniqid', 'center') )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('id_automatico', 'Id', 'center') )->setVisibility(false);
- $quant = $this->detail_list->addColumn( new TDataGridColumn('quantidade', 'Quant', 'right', 50) );
- $this->detail_list->addColumn( new TDataGridColumn('unidade', 'Unid', 'center', 50) );
- $this->detail_list->addColumn( new TDataGridColumn('descricao', 'Descrição', 'left', 100) );
- $this->detail_list->addColumn( new TDataGridColumn('tipo_compra_txt', 'Tipo', 'left', 50) );
- $this->detail_list->addColumn( new TDataGridColumn('kilate_txt', 'Kilate', 'left', 50) );
- $vlr_unit = $this->detail_list->addColumn( new TDataGridColumn('valor_unit', 'Valor Unit', 'right', 50) );
- $this->detail_list->addColumn( new TDataGridColumn('loja_sub_id', 'Loja Id', 'left', 100) )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('loja_sub_txt', 'Loja txt', 'left', 100) )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('vendedor_sub_id', 'Vendedor id', 'left', 100) )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('vendedor_sub_txt', 'Vendedor txt', 'left', 100) )->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('tipo_compra_id', 'Tipo Compra Id', 'left', 50))->setVisibility(false);
- $this->detail_list->addColumn( new TDataGridColumn('kilate_id', 'Kilate Id', 'left', 50) )->setVisibility(false);
- $formula = '={quantidade} * {valor_unit}';
- $st = $this->detail_list->addColumn( new TDataGridColumn($formula, 'SubTotal', 'right', 100) );
- // definir o método do transformador sobre o Valor
- $format_value = function($value) {
- if (is_numeric($value))
- {
- return ' ' . number_format($value, 2, ',', '.');
- }
- return $value;
- };
- $st->setTransformer($format_value);
- $vlr_unit->setTransformer($format_value);
- $quant->setTransformer($format_value);
- // detail actions
- $btn_edita_item = new TDataGridAction([$this, 'onDetailEdit'] );
- //$btn_edita_item->setDisplayCondition( array($this, 'mostrar') );
- $btn_edita_item->setFields( ['uniqid', '*'] );
- $btn_deleta_item = new TDataGridAction([$this, 'onDetailDelete']);
- //$btn_deleta_item->setDisplayCondition( array($this, 'mostrar') );
- $btn_deleta_item->setField('uniqid');
- // add the actions to the datagrid
- $this->detail_list->addAction($btn_edita_item, _t('Edit'), 'fa:edit blue');
- $this->detail_list->addAction($btn_deleta_item, _t('Delete'), 'far:trash-alt red');
- $this->detail_list->createModel();
- $panel = new TPanelGroup;
- $panel->add($this->detail_list);
- $panel->getBody()->style = 'overflow-x:auto';
- $this->form->addContent( [$panel] );
- $btn_gravar = $this->form->addAction( 'SALVAR', new TAction([$this, 'onSave'], ['static'=>'1']), 'fa:save white');
- $btn_gravar->class = 'btn btn-sm btn-primary';
- $btn_voltar = $this->form->addAction('VOLTAR',new TAction(array('ComprasList','onReload')),'far:arrow-alt-circle-left white');
- $btn_voltar->class = 'btn btn-sm btn-danger';
- //BOTÃO PARA GERAR PDF
- $btn_print = $this->form->addAction('RECIBO COMPRA', new TAction(array($this, 'OnPDF')),'far:arrow-alt-circle-left white');
- $btn_print->class = 'btn btn-sm btn-secondary';
- //BOTÃO FINALIZAR
- //$btn_finaliza = $this->form->addAction('FINALIZA', new TAction(array($this, 'onConfirma')),'far:arrow-alt-circle-left white');
- //$btn_finaliza->class = 'btn btn-sm btn-secondary';
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 100%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add(TBreadCrumb::create(['COMPRAS', 'REGISTRO DE COMPRA']));
- $container->add($this->form);
- parent::add($container);
- }
- public function mostrar( $object )
- {
- if ($object->finalizada == 1)
- {
- return TRUE;
- }
- return FALSE;
- }
- /**
- * Clear form
- * @param $param URL parameters
- */
- public function onClear($param)
- {
- $this->form->clear(TRUE);
- }
- /**
- * Add detail item
- * @param $param URL parameters
- */
- public function onDetailAdd( $param )
- {
- try
- {
- $this->form->validate();
- $data = $this->form->getData();
- (new TRequiredValidator)->validate("Tipo de Compra", $data->detail_tipo_compra_id);
- (new TRequiredValidator)->validate("Kilate do Produto", $data->detail_kilate_id);
- (new TRequiredValidator)->validate("Quantidade", $data->detail_quantidade);
- (new TRequiredValidator)->validate("Unidade", $data->detail_unidade);
- (new TRequiredValidator)->validate("Produto", $data->detail_descricao);
- $uniqid = !empty($data->detail_uniqid) ? $data->detail_uniqid : uniqid();
- $grid_data = [];
- $grid_data['uniqid'] = $uniqid;
- $grid_data['id_automatico'] = $data->detail_id_automatico;
- $grid_data['quantidade'] = $data->detail_quantidade;
- $grid_data['descricao'] = $data->detail_descricao;
- $grid_data['unidade'] = $data->detail_unidade;
- $grid_data['valor_unit'] = $data->detail_valor_unit;
- $grid_data['subtotal'] = $data->detail_subtotal;
- $grid_data['tipo_compra_id'] = $data->detail_tipo_compra_id;
- $grid_data['tipo_compra_txt'] = $data->detail_tipo_compra_txt;
- $grid_data['kilate_id'] = $data->detail_kilate_id;
- $grid_data['kilate_txt'] = $data->detail_kilate_txt;
- $grid_data['loja_sub_id'] = $data->loja_id;
- $grid_data['loja_sub_txt'] = $data->loja_txt;
- $grid_data['vendedor_sub_id'] = $data->vendedor_id;
- $grid_data['vendedor_sub_txt'] = $data->vendedor_txt;
- // insert row dynamically
- $row = $this->detail_list->addItem( (object) $grid_data );
- $row->id = $uniqid;
- TDataGrid::replaceRowById('ComprasSub_list', $uniqid, $row);
- // clear detail form fields
- $data->detail_uniqid = '';
- $data->detail_id_automatico = '';
- $data->detail_quantidade = '';
- $data->detail_descricao = '';
- $data->detail_unidade = '';
- $data->detail_valor_unit = '';
- $data->detail_subtotal = '';
- $data->detail_tipo_compra_id = '';
- $data->detail_tipo_compra_txt = '';
- $data->detail_kilate_id = '';
- $data->detail_kilate_txt = '';
- $data->detail_loja_sub_id = '';
- $data->detail_loja_sub_txt = '';
- $data->detail_vendedor_sub_id = '';
- $data->detail_vendedor_sub_txt = '';
- // send data, do not fire change/exit events
- TForm::sendData( 'form_Compras', $data, false, false );
- }
- catch (Exception $e)
- {
- $this->form->setData( $this->form->getData());
- new TMessage('error', $e->getMessage());
- }
- }
- /**
- * Edit detail item
- * @param $param URL parameters
- */
- public static function onDetailEdit( $param )
- {
- $data = new stdClass;
- $data->detail_uniqid = $param['uniqid'];
- $data->detail_id_automatico = $param['id_automatico'];
- $data->detail_quantidade = $param['quantidade'];
- $data->detail_descricao = $param['descricao'];
- $data->detail_unidade = $param['unidade'];
- $data->detail_valor_unit = $param['valor_unit'];
- $data->detail_subtotal = $param['subtotal'];
- $data->detail_tipo_compra_id = $param['tipo_compra_id'];
- $data->detail_tipo_compra_txt = $param['tipo_compra_txt'];
- $data->detail_kilate_id = $param['kilate_id'];
- $data->detail_kilate_txt = $param['kilate_txt'];
- $data->detail_loja_sub_id = $param['detail_loja_sub_id'];
- $data->detail_loja_sub_txt = $param['detail_loja_sub_txt'];
- $data->detail_vendedor_sub_id = $param['detail_vendedor_sub_id'];
- $data->detail_vendedor_sub_txt = $param['detail_vendedor_sub_txt'];
- // send data, do not fire change/exit events
- TForm::sendData( 'form_Compras', $data, false, false );
- }
- /**
- * Delete detail item
- * @param $param URL parameters
- */
- public static function onDetailDelete( $param )
- {
- // clear detail form fields
- $data = new stdClass;
- $data->detail_uniqid = '';
- $data->detail_id_automatico = '';
- $data->detail_quantidade = '';
- $data->detail_descricao = '';
- $data->detail_unidade = '';
- $data->detail_valor_unit = '';
- $data->detail_subtotal = '';
- $data->detail_tipo_compra_id = '';
- $data->detail_tipo_compra_txt = '';
- $data->detail_kilate_id = '';
- $data->detail_kilate_txt = '';
- $data->detail_loja_sub_id = '';
- $data->detail_loja_sub_txt = '';
- $data->detail_vendedor_sub_id = '';
- $data->detail_vendedor_sub_txt = '';
- // send data, do not fire change/exit events
- TForm::sendData( 'form_Compras', $data, false, false );
- // remove row
- TDataGrid::removeRowById('ComprasSub_list', $param['uniqid']);
- }
- /**
- * Load Master/Detail data from database to form
- */
- public function onEdit($param)
- {
- try
- {
- TTransaction::open('ourorio');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $object = new Compras($key);
- //Bloquear campos de acordo com o Status
- if ($object->finalizada=='0')
- {
- TDate::enableField('form_Compras', 'data_compra');
- TDBCombo::enableField('form_Compras', 'cliente_id');
- ">TDBSeekButton::enableField('form_Compras', 'cliente_id');
- TButton::enableField('form_Compras', 'btn_limpar');
- TButton::enableField('form_Compras', 'btn_salvar');
- }
- if ($object->finalizada=='1')
- {
- TDate::disableField('form_Compras', 'data_compra');
- TDBCombo::disableField('form_Compras', 'cliente_id');
- TButton::disableField('form_Compras', 'btn_limpar');
- TButton::disableField('form_Compras', 'btn_salvar');
- }
- $items = ComprasSub::where('compra_id', '=', $key)->load();
- foreach( $items as $item )
- {
- $item->uniqid = uniqid();
- $row = $this->detail_list->addItem( $item );
- $row->id = $item->uniqid;
- }
- $this->form->setData($object);
- TTransaction::close();
- }
- else
- {
- $this->form->clear(TRUE);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * Save the Master/Detail data from form to database
- */
- public function onSave($param)
- {
- try
- {
- // open a transaction with database
- TTransaction::open('ourorio');
- $data = $this->form->getData();
- $this->form->validate();
- $master = new Compras;
- $master->fromArray( (array) $data);
- $master->store();
- ComprasSub::where('compra_id', '=', $master->id_compra)->delete();
- if( $param['ComprasSub_list_quantidade'] )
- {
- foreach( $param['ComprasSub_list_quantidade'] as $key => $item_id )
- {
- $detail = new ComprasSub;
- $detail->quantidade = $param['ComprasSub_list_quantidade'][$key];
- $detail->descricao = $param['ComprasSub_list_descricao'][$key];
- $detail->unidade = $param['ComprasSub_list_unidade'][$key];
- $detail->valor_unit = $param['ComprasSub_list_valor_unit'][$key];
- $detail->tipo_compra_id = $param['ComprasSub_list_tipo_compra_id'][$key];
- $detail->tipo_compra_txt = $param['ComprasSub_list_tipo_compra_txt'][$key];
- $detail->kilate_id = $param['ComprasSub_list_kilate_id'][$key];
- $detail->kilate_txt = $param['ComprasSub_list_kilate_txt'][$key];
- $detail->loja_sub_id = $param['ComprasSub_list_loja_sub_id'][$key];
- $detail->loja_sub_txt = $param['ComprasSub_list_loja_sub_txt'][$key];
- $detail->vendedor_sub_id = $param['ComprasSub_list_vendedor_sub_id'][$key];
- $detail->vendedor_sub_txt = $param['ComprasSub_list_vendedor_sub_txt'][$key];
- $detail->compra_id = $master->id_compra;
- $detail->subtotal = ($detail->quantidade * $detail->valor_unit);
- $master->valor_total += $detail->subtotal;
- $detail->store();
- }
- }
- //FINALIZAR A VENDA
- $master->finalizada = 1;
- $master->store();
- TTransaction::close(); // close the transaction
- TForm::sendData('form_Compras', (object) ['id' => $master->id_compra]);
- TToast::show('show','COMPRA GRAVADA COM SUCESSO!', 'center', 'fas fa-check');
- AdiantiCoreApplication::loadPage( 'ComprasList' );
- exit;
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- public function OnPDF($param)
- {
- // open a transaction with database 'samples'
- TTransaction::open('ourorio');
- // load all customers
- $repository = new TRepository('ComprasSub');
- $criteria = new TCriteria;
- $ComprasSub = $repository->load($criteria);
- $data = $this->form->getData('ComprasSub');
- $this->form->validate();
- $pdf = new TPDFDesigner;
- $pdf->fromXml('app/reports/recibo_compra_cliente.pdf.xml');
- // cabeçalho
- $pdf->replace('{id_compra}',$data->id_compra);
- $pdf->replace('{data_compra}',DateTime::createFromFormat('Y-m-d', $data->data_compra)->format( 'd/m/Y' ));
- $pdf->replace('{cliente_txt}',utf8_decode($data->cliente_txt));
- $pdf->replace('{endereco_tipo}',utf8_decode($data->cliente_endereco_tipo), 0, 0, 'L');
- $pdf->replace('{endereco_numero}',utf8_decode($data->cliente_endereco_numero), 0, 0, 'L');
- $pdf->replace('{endereco}',utf8_decode($data->cliente_endereco), 0, 0, 'L');
- $pdf->replace('{bairro}',utf8_decode($data->cliente_bairro), 0, 0, 'L');
- $pdf->replace('{cpf}',utf8_decode($data->cliente_cpf), 0, 0, 'L');
- $pdf->replace('{identidade}',utf8_decode($data->cliente_identidade), 0, 0, 'L');
- $pdf->replace('{telefone}',utf8_decode($data->cliente_telefone), 0, 0, 'L');
- $pdf->replace('{nascimento}',DateTime::createFromFormat('Y-m-d', $data->cliente_nascimento)->format( 'd/m/Y' ));
- $pdf->replace('{cidade}',utf8_decode($data->cliente_cidade), 0, 0, 'L');
- $pdf->replace('{estado}',utf8_decode($data->cliente_estado), 0, 0, 'L');
- $pdf->replace('{email}',utf8_decode($data->cliente_email), 0, 0, 'L');
- $pdf->replace('{vendedor_txt}',utf8_decode($data->vendedor_txt));
- $pdf->replace('{loja_txt}',utf8_decode($data->loja_txt));
- $pdf->replace('{loja_id}',utf8_decode($data->loja_id));
- $pdf->generate();
- $fill = TRUE;
- // Itens do Pedido
- $tot = 0; // acrescentei aqui
- foreach ($ComprasSub as $pedido_list)
- {
- if($pedido_list->compra_id == $data->id_compra) // alterei aqui para testar
- {
- $pdf->gotoAnchorX('detalhes');
- $pdf->Ln(20);
- $pdf->Cell(50, 12, utf8_decode($pedido_list->quantidade), 0, 0, 'R');
- $pdf->Cell(25, 12, utf8_decode($pedido_list->unidade), 0, 0, 'R');
- $pdf->Cell(100, 12, utf8_decode($pedido_list->descricao), 0, 0, 'L');
- $pdf->Cell(170, 12, utf8_decode($pedido_list->kilate_txt), 0, 0, 'R');
- $pdf->Cell(50, 12, utf8_decode($pedido_list->tipo_compra_txt), 0, 0, 'R');
- $pdf->Cell(115, 12, number_format((double)$pedido_list->valor_unit, 2, ',', '.'), 0, 0, 'R');
- $pdf->Cell(70, 12, number_format((double)$pedido_list->subtotal, 2, ',', '.'), 0, 0, 'R');
- $tot = $tot + $pedido_list->subtotal; // acrescentei aqui
- // grid background
- $fill = !$fill;
- }
- }
- $pdf->Ln(4);
- $pdf->SetX(18);
- $pdf->Cell(570, 14, utf8_decode(""),'B','R', $fill);
- $pdf->Ln(20);
- $pdf->SetX(50);
- $pdf->Cell(530, 14, utf8_decode("Total R$ ". number_format((double)$tot, 2, ',', '.')),0,0,'R'); // acrescentei aqui
- $pdf->Ln(50);
- $pdf->SetX(18);
- $pdf->MultiCell(560, 14, utf8_decode(" Eu, ". utf8_decode($data->cliente_txt) . ", declaro, para todos os fins, de direito e sob as penas da Lei 12.683 de * de julho de 2012 e artigos 155, 156 e 157 todos do Código Penal Brasileiro, em todas as esferas,em juízo ou fora dele, ser o(a) legítimo(a) Proprietário(a) do(s) objeto(s) e/ou ouro velho que, no presente ato vendo a Quality Serviços e Comércio de Metais Preciosos Ltda, declarando ainda que não transfiro em caráter absoluto nenhuma de minhas responsabilidades a referida empresa quanto a procedência, descrição e autenticidade do(s) objeto(s) e/ou ouro velho o(s) qual(is) foi(ram) por mim legalmente adquirido(s) e está(ão) livre(s) e desembaraçada(s) de quaisquer ônus ou pendência(s).
- Respondo sempre e, em quaisquer circunstâncias, pelos termos desta Declaração a qual assino em via única."),0,'J', $fill);
- $pdf->Ln(200);
- $pdf->SetX(20);
- $pdf->Cell(560, 14,DateTime::createFromFormat('Y-m-d', $data->data_compra)->format( 'd' ). ' de ' .DateTime::createFromFormat('Y-m-d', $data->data_compra)->format( 'M' ). ' de ' .DateTime::createFromFormat('Y-m-d', $data->data_compra)->format( 'Y' ),0,0,'L');
- // inicio do rodapé
- $pdf->SetY(-25);
- $pdf->SetFont('Arial', '', 8);
- $pdf->setFontColorRGB( '#000000' );
- $pdf->Cell(590, 10, utf8_decode('Pág. ').$pdf->PageNo().' de {nb}',0,0,'R');
- $pdf->SetY(-25);
- $pdf->Cell(140, 10, utf8_decode('Sistema Gestor OuroRio © 2021 '),0,0,'R');
- $pdf->SetY(-25);
- $pdf->Cell(340,10,utf8_decode("Impresso em ".date("d/m/Y H:i:s"."")),0,1,'R');
- $pdf->SetY(-25);
- $pdf->Cell(420,10,utf8_decode(" Por ".TSession::getValue('username')),0,1,'R'); //nome do usuário
- // fim do rodapé
- $file="app/output/Recibo - ".$data->loja_txt.".pdf";
- if (!file_exists($file) OR is_writable($file))
- {
- $pdf->save($file);
- //Abrir PDF em Janela Modal dentro do Sistema
- $window = TWindow::create($data->loja_txt, 0.8, 0.8);
- $object = new TElement('object');
- $object->data = $file;
- $object->type = 'application/pdf';
- $object->style = "width: 100%; height:calc(100% - 10px)";
- $window->add($object);
- $window->show();
- }
- else
- {
- throw new Exception(_t('Permission denied') . ': ' . $file);
- }
- TToast::show('success','RECIBO GERADO COM SUCESSO!', 'top left', 'fas fa-check');
- TTransaction::close();
- AdiantiCoreApplication::loadPage( 'ComprasList' );
- exit;
- }
- // CÓDIGO PARA PASSAR DADOS DO CLIENTE AOS CAMPOS
- public static function onExitCliente($param)
- {
- $cliente_id = $param['cliente_id']; // get the product code
- try
- {
- TTransaction::open('ourorio');
- $cliente = new Clientes($cliente_id); // reads the product
- $obj = new StdClass;
- $obj->cliente_cep = ($cliente->cep);
- $obj->cliente_endereco_tipo = ($cliente->endereco_tipo);
- $obj->cliente_endereco = ($cliente->endereco);
- $obj->cliente_endereco_numero = ($cliente->endereco_numero);
- $obj->cliente_bairro = ($cliente->bairro);
- $obj->cliente_cidade = ($cliente->cidade);
- $obj->cliente_estado = ($cliente->estado);
- $obj->cliente_telefone = ($cliente->telefone);
- $obj->cliente_nascimento = ($cliente->data_nascimento);
- $obj->cliente_identidade = ($cliente->identidade);
- $obj->cliente_email = ($cliente->email);
- $obj->cliente_cpf = ($cliente->cpf);
- TTransaction::close();
- TForm::sendData('form_Compras', $obj);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- // CÓDIGO PARA PASSAR VALORES DO COMBO KILATE AO CAMPO VALOR UNITÁRIO E DESCRIÇÃO
- public static function onChangeKilate($param)
- {
- $detail_kilate_id = $param['detail_kilate_id']; // get the product code
- try
- {
- TTransaction::open('ourorio');
- $kilate = new ComprasKilate($detail_kilate_id); // reads the product
- $obj = new StdClass;
- $obj->detail_valor_unit = number_format($kilate->valor_unit, 2, ',', '.');
- $obj->detail_kilate_txt = utf8_decode($kilate->descricao_kilate);
- // CÁLCULO DO PRODUTO
- $detail_quantidade = (double) str_replace(['.', ','], ['', '.'], $param['detail_quantidade']);
- $obj->detail_subtotal = number_format($kilate->valor_unit * $detail_quantidade, 2, ',', '.');
- TScript::create('setTimeout(function() { $("input[name=\'detail_quantidade\']").focus() }, 500);');
- TTransaction::close();
- TForm::sendData('form_Compras', $obj);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- // CÓDIGO PARA CALCULAR VALOR TOTAL DOS PRODUTOS
- public static function onUpdateTotal($param)
- {
- $detail_valor_unit = (double) str_replace(['.', ','], ['', '.'], $param['detail_valor_unit']);
- $detail_quantidade = (double) str_replace(['.', ','], ['', '.'], $param['detail_quantidade']);
- $obj = new StdClass;
- $obj->detail_subtotal = number_format( ($detail_valor_unit * $detail_quantidade), 2, ',', '.');
- TForm::sendData('form_Compras', $obj);
- }
- // CÓDIGO PARA PASSAR VALORES DO COMBO TIPO DE COMPRA AO CAMPO DO DETALHE
- public static function onChangeTipoCompra($param)
- {
- $detail_tipo_compra_id = $param['detail_tipo_compra_id']; // get the product code
- try
- {
- TTransaction::open('ourorio');
- $tipo_compraId = new ComprasTipo($detail_tipo_compra_id); // reads the product
- $obj = new StdClass;
- $obj->detail_tipo_compra_txt = ($tipo_compraId->descricao);
- TScript::create('setTimeout(function() { $("input[name=\'detail_kilate_id\']").focus() }, 500);');
- TTransaction::close();
- TForm::sendData('form_Compras', $obj);
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback();
- }
- }
- public static function onConfirma($param)
- {
- $action = new TAction(array(__CLASS__, 'ConfirmarCompra'));
- $action->setParameters($param);
- new TQuestion('Confirma os Dados da Compra ?', $action);
- }
- public static function ConfirmarCompra( $param )
- {
- try
- {
- TTransaction::open('ourorio');
- $repository = new TRepository('Compras');
- TToast::show('show','COMPRA REGISTRADA COM SUCESSO!', 'center', 'fas fa-check');
- AdiantiCoreApplication::loadPage( 'ComprasList' );
- //TPage::openFile('app/output/Recibo.pdf');
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('error', 'Error ' . $e->getMessage());
- TTransaction::rollback();
- }
- }
- }
- ?>
Veja este artigo:
https://www.adianti.com.br/forum/pt/view_572?acentos-utf-8
Marcelo já havia visto este post.
Como o próprio Pablo explicou que nas próximas versões ja viria corrigido.
E este post é de 2013.
Não resolve, inclusive a classe TConnection já está desta forma.
Esse meu problema só acontece no detalhe. O mestre está correto.
Verificou o charset/collation do banco/tabela?
Uso:
Charset: utf8mb4
Collation:utf8mb4_general_ci
Veja se este artigo pode ajudar?
https://pt.stackoverflow.com/questions/72139/qual-codifica%C3%A7%C3%A3o-de-caracteres-collation-devo-usar-em-mysql
Qual a versão do Adianti? Se não me engano, esse problema ocorria ao adicionar um item de forma estática na grid, mas foi corrigido na última versão.
Oi Nataniel. Estou com a última mais atualizada. Studio: 5
Framework: 7
A última versão do Studio é a 7.0.0 e a do framework é a 7.3.0
Eu enviei pelo telefone. Mas as minhas versões são essas mesmas Nataniel.
Studio: 7.0.0
Framework: 7.3.0
Marcelo, já havia lido este site.
Fiz a modificação, mas não adiantou.
Claudio
Se o Nataniel ( que é um dos adm do Fw) não conseguiu te ajudar!!!
Aqui comigo isso não ocorre.
O meu studio está usando a última versão do FW e meus projetos também e não tive problemas.
Não sei como ajudar mais.
Imagino Marcelo. Sei que o Nataniel é o fera do FW.
Obrigado pela ajuda.
Vou me virar aqui.
Abraço
Nataniel, será que haveria possibilidade de ver se o Pablo pode ajudar?
Rapaz, só falta isso pra terminar meu sistema, tenho que entregar ao Cliente semana que vem e não consigo resolver esse problema.
Até aqui não encontrei nada que ajude.
Obrigado.
Cláudio,
Já tentou apelar para como converter a string
Pelo que vc já está ultima versão do FrameWork e o banco já está em UTF-8. A minha sugestão é algo meio tentativa e erro.
Boa tarde Bjverde.
Poderia explicar como e onde aplico esse código?
Sou novato. Rsrs
Obrigado
Cláudio vc tentar fazer setTransformer
Nada feito irmão. Fica na mesma.
É incrível como um problema ocorre e não temos a quem recorrer a não ser os amigos do fórum. Não existe suporte.
O próprio Pablo não dá nem as caras no fórum pra ajudar as pessoas, sei que ele não tem obrigação e muito menos tempo pra isso.
Mas acho que em certos momentos deveria aparecer pra dá uma luz.
Estou encrencado em um problema que é do próprio framework e não consigo resolver, até no grupo do Telegram a galera está tentando ajudar.
Lamentável.
Cole aqui a função ttable_replace_row_by_id do arquivo lib/adianti/include/ttable/ttable.js, quero ver um detalhe.
Oi Nataniel, segue.
Você deve estar rodando a versão 7.0 do Framework, a partir da 7.1 essa função foi modificada.
Como você criou o projeto? Baixou o Studio e criou um novo projeto? Se sim, a versão padrão do framework que vem com o Studio é a 7.0.
Para atualizar a base de códigos para os próximos projetos criados com o Studio, veja o link abaixo:
https://www.adianti.com.br/forum/pt/view_6407?dica-em-video-como-atualizar-na-ad
Para atualizar projetos já existentes:
https://www.adianti.com.br/framework-migration
Versão atualizada para 7.1, mas não resolveu o problema.
Segue o código modificado após a atualização.
Cláudio,
Baixa um versão limpa do Adianti 7.3 (só frame work, sem o template) e testa só essa tela com mestra detalhe. Para ver se resolve o problema
O que você diz com versão limpa?
Baixar uma nova versão do Framerork 7.3?
Vou fazer isso amanhã.
Hoje estou morto.
Me inscrevi no seu canal hoje hein!!
Obrigado irmão.
Bjverde boa tarde.
Não adiantou. Tudo na mesma irmão.
Que coisa isso, não é possível que um problema desse não tenha solução.