Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Como eu chamo essa função para formatar um valor do tipo moeda? Eu quero formatar o campo salário para ficar no padrão brasileiro, mas, o mais importante é que os valores com duas casas decimais ,00 só está exibindo com um número. Por exemplo: Eu digito assim: 500.00 mas fica assim 500.0 Bem, a minha função que eu quero chamar é esta abaixo, mas como chamar? function moeda($get_valor) { $source = array('.', ','); $replace = array('','...
AM
Como eu chamo essa função para formatar um valor do tipo moeda?  
Fechado
Eu quero formatar o campo salário para ficar no padrão brasileiro, mas, o mais importante é que os valores com duas casas decimais ,00 só está exibindo com um número. Por exemplo: Eu digito assim: 500.00 mas fica assim 500.0
Bem, a minha função que eu quero chamar é esta abaixo, mas como chamar?
function moeda($get_valor) {
$source = array('.', ',');
$replace = array('','.');
$valor = str_replace($source, $replace, $get_valor); // remove os pontos e substitui a virgula pelo ponto.
return $valor; // retorna o valor formatado p gravar no banco
}

=======================================
Veja abaixo uma parte do código do formulário de cadastro:

  1. <?php
  2. class SalarioForm extends TPage
  3. {
  4.     private $form;
  5.     
  6.     public function __construct()
  7.     {
  8.         parent::__construct();
  9.         // Executa um script que substitui o Tab pelo Enter.
  10.         parent::include_js('app/lib/include/application.js');
  11.         
  12.         TScript::create('$("#nome").focus();');
  13.        
  14.         $this->form = new TQuickForm('form_salario');
  15.         $this->form->setFormTitle('Cadastro de Recibo de Salário');
  16.         $this->form->class 'tform';
  17.         $this->form->style 'width: 800px';
  18.         $salario  = new TEntry('salario');
  19.         $extras   = new TEntry('extras');
  20.         $soma1    = new TEntry('soma1');
  21.         // Atualiza o Valor nos campos: Salario
  22.         $salario->setExitAction(new TAction(array($this'onUpdateTotal')));
  23.         $extras->setExitAction(new TAction(array($this'onUpdateTotal')));
  24.         $salario->setSize(100);
  25.         $salario->setNumericMask(2'.'',');
  26.         $extras->setSize(100);
  27.         $extras->setNumericMask(2'.'',');
  28.         $soma1->setSize(100);
  29.         $soma1->setNumericMask(2'.'',');
  30.         $soma1->setEditable(FALSE);
  31.         // Adiciona uma linha cinza com duas coluna e um título
  32.         $row $this->form->addRow();
  33.         $row->class 'tformsection';
  34.         $row->addCell( new TLabel('RENDIMENTOS'))->colspan 2;
  35.         $this->form->addQuickFields(new TLabel('Salário.........:'), array($salario,
  36.         $label_extras = new TLabel('Horas Extras...............:'), $extras));
  37.         $label_soma1 = new TLabel('Soma..............:'), $soma1));
  38.         // Botões
  39.         $novo = new TAction( array($this'onNovo'));
  40.         $this->form->addQuickAction('Novo'$novo'ico_new.png');
  41.         $save = new TAction( array($this'onSave'));
  42.         $this->form->addQuickAction('Salvar'$save'ico_save.png');
  43.         parent::add($this->form);
  44.     }
  45.     
  46.     function show()
  47.     {
  48.         parent::show();
  49.     }
  50.     
  51.     public function onNovo()
  52.     {
  53.     try
  54.     {
  55.         TTransaction::open('dbsalario');
  56.            $object $this->form->getData('Salario');
  57.            $object->store();
  58.         TTransaction::close();
  59.     }
  60.     catch (Exception $e)
  61.     {
  62.        new TMessage('error'$e->getMessage());
  63.        TTransaction::rollback();
  64.     }
  65.    }
  66.     public function onSave()
  67.     {
  68.         try
  69.         {
  70.             TTransaction::open('dbsalario');
  71.             $object $this->form->getData('salario');  // Obtem os dados do formulário.
  72.             $object->store();                         // Grava os Dados
  73.             
  74.             // Preenche o formulário com os dados do registro ativo.
  75.             $this->form->setData($object);
  76.             
  77.             TTransaction::close();
  78.             // new TMessage('info', 'Dados salvos com sucesso.');
  79.         }
  80.         catch (Exception $e)
  81.         {
  82.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  83.             TTransaction::rollback();
  84.         }
  85.     }
  86.     public static function onExitProduct($param)
  87.     {
  88.         1424 $param['id']; // obter o código
  89.         try
  90.         {
  91.             TTransaction::open('dbsalario');
  92.             $product = new Product($product_id); // lê o registro
  93.             $obj = new StdClass;
  94.             
  95.             $obj->salario  0;
  96.             $obj->extras   0;
  97.             $obj->salario  number_format($product->salario2'.'',');
  98.             $obj->extras   number_format($product->extras2'.'',');
  99.             $obj->soma1    number_format($product->soma12'.'',');
  100.             TTransaction::close();
  101.             TForm::sendData('form_salario'$obj);
  102.         }
  103.         catch (Exception $e)
  104.         {
  105.             // does nothing
  106.         }
  107.     }
  108.     public static function onUpdateTotal($param)
  109.     {
  110.         $salario  = (double) str_replace(','''$param['salario']);
  111.         $extras   = (double) str_replace(','''$param['extras']);
  112.         $soma1    = (double) str_replace(','''$param['soma1']);
  113.         $obj = new StdClass;
  114.         $obj->soma1   number_format($salario $extras2'.'',');
  115.         TForm::sendData('form_salario'$obj);
  116.     } 
  117.     function moeda($get_valor)  {
  118.     $source = array('.'',');
  119.     $replace = array('','.');
  120.     $valor str_replace($source$replace$get_valor);  // remove os pontos e substitui a virgula pelo ponto.
  121.     return $valor// retorna o valor formatado p gravar no banco
  122.     }   
  123. }
  124. ?>








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


FC

Alex

Não tem nada de errado, no banco de dados sempre irá ficar .0

estude esse link para entender como funciona o BD Sqlite
professorcarlos.blogspot.com.br/2010/05/tipos-de-dado-no-sqlite.html

Você precisará trabalhar com o PHP na formação das mascara com o number_format quando carregar e depois devolver corretamente para o banco igual fazemos com as datas no Mysql.

abraços
AM

Eu gostaria que na impressão os valores ficassem vírgula em baixo de vírgula, ou ponto em baixo de ponto, veja como está saindo:
2,500.00
30.0
600.0
555.46
200.0
435.55

Isso não tem cabimento, e no tutor tem um exemplo que funciona, só que eu olho, olho e não veja nenhuma diferença para o meu código, a não ser o banco de dados, onde os valores monetários estão como float, e eu usando o sqlite, utilizo a opção real, isto porque não tem float no SGBD SqLite.

Veja ai o link do tutor e selecione qualquer produto, por exemplo: selecione o produto 2, HD 120 GB, VEJA que no campo Prince (ou Preço) vai aparecer o valor certinho 180.00 e não assim: 180.0

www.adianti.com.br/framework_files/tutor/index.php?class=POSFormView

Então, não me diga que isso é normal. Por Favor.
FC

É Normal o banco armazena 1.0 alias todos os bancos de dados são assim se vc navegar pelo tutor dentro do adianti vera que é exibido 1.0 etc....

Como te disse é preciso apenas formatar o campo veja o mesmo exemplo do tutor como é feito

$obj = new StdClass;
$obj->sale_price = number_format($product->sale_price, 2, '.', ',');
$obj->amount = 1;
$obj->discount = 0;
$obj->total = number_format($product->sale_price, 2, '.', ',');
TForm::sendData('form_pos', $obj);

Volto a avisar é o mesmo procedimento de salvar datas no mysql da uma googada por ae !!!
AM

Eu já vi este exemplo do tutor, agente digita num campo do formulário de cadastro assim: 500.00 e ele fica assim 500.00, mas no datagrid quando vamos fazer a pesquisa, ele mostra o valor assim: 500.00

Eu não me importo que dentro do Banco de dados grave deste geito 500.0 contanto que no datagrid e na impressão apareça assim: 500.00

Eu só quero que ele exiba de forma correta o valor, sempre com duas casas decimais. Você sabe como resolver isto?
AM

CORREÇÃO: mas no datagrid quando vamos fazer a pesquisa, ele mostra o valor assim: 500.0
FC

é só seguir esse exemplo usando o number_format

www.adianti.com.br/framework_files/tutor/index.php?class=DatagridTra
AM

Eu já tentei com o number_format, não funciona na listagem e nem na visualização da impressão, só funciona no formulário de cadastro quando estamos digitando os valores assim: 500.00 mas no datagrid ele mostra assim: 500.0

Outra coisa, este exemplo ai que você me passou não tem nenhum exemplo de valor em moeda. tem apenas formatação de data.
AM

Agora eu estava dando uma olhada aqui no livro adianti framework, na página 154 onde ali mostra uma função chamada: formatSalary, será que funciona?

O Objetivo ali, parece que é exibir o valor no datagrid.
AL

TTransaction::open('dbsalario');
$object = $this->form->getData('Salario');
$object->salario = str_replace('.',' ',$object->salario);
$object->salario = str_replace(',','.', $object->salario);
$object->store();
TTransaction::close();

No primeiro você troca os pontos(.) por vazio().
No Segundo você troca a vírgula(,) por ponto(.)
E o objeto será salvo corretamente.
AL

TTransaction::open('dbsalario');
$object = $this->form->getData('Salario');
$object->salario = str_replace('.',' ',$object->salario);
$object->salario = str_replace(',','.', $object->salario);
$object->store();
TTransaction::close();

No primeiro você troca os pontos(.) por vazio().
No Segundo você troca a vírgula(,) por ponto(.)
E o objeto será salvo corretamente.
EN

Transforme sua função em stática

public static function moeda ($get_valor)
{
$source = array('.', ',');
$replace = array('','.');
$valor = str_replace($source, $replace, $get_valor); // remove os pontos e substitui a virgula pelo ponto.
return $valor; // retorna o valor formatado p gravar no banco
}

na chamada faça o seguinte:

crie uma variável que receba o conteúdo dessa chamada

public static function onUpdateTotal($param)
{
$salario = (double) self::moeda($param['salario']);
$extras = (double) self::moeda($param['extras']);
$soma1 = (double) self::moeda($param['soma1']);

$obj = new StdClass;
$obj->soma1 = number_format($salario + $extras, 2, '.', ',');
TForm::sendData('form_salario', $obj);
}


Teste por favor!