Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Erro na soma ao formatar valores. Boa noite, Estou utilizando uma função para somar vários valores (R$) e através do método setExitAction popular outro campo. O problema é que a soma funciona corretamente com valores até R$ 999,99. Como não tenho muita experiência ainda, não estou conseguindo encontrar onde estou errando. Eu sei que é algo na formatação do valor, mas já tentei alguns exemplos e não dá certo. Por e...
FS
Erro na soma ao formatar valores.  
Fechado
Boa noite,
Estou utilizando uma função para somar vários valores (R$) e através do método setExitAction popular outro campo. O problema é que a soma funciona corretamente com valores até R$ 999,99. Como não tenho muita experiência ainda, não estou conseguindo encontrar onde estou errando. Eu sei que é algo na formatação do valor, mas já tentei alguns exemplos e não dá certo. Por exemplo, insiro 3 valores, 200,00, 1.000,00 e 200,00, só que ao invés de retornar R$ 1.400,00, está retornando 401,00 . Segue abaixo a função e também como estou formatando os valores. Desde já agradeço.

  1. <?php
  2.         
  3.         //Formatação dos campos 
  4.         
  5.     $valoconsum->setNumericMask(2,',''.');
  6.         $deprec->setNumericMask(2,',''.');
  7.         $valorenergia->setNumericMask(2,',''.');
  8.         $salariofunc->setNumericMask(2,'.''.');
  9.         
  10.         
  11.         //Minha função pra atualizar o campo custohora
  12.         
  13.         public static function onUpdateCustoh($param)
  14.     {
  15.         $valorenergia   = (double) str_replace(','''$param['valorenergia']);
  16.         $valoconsum   = (double) str_replace(','''$param['valoconsum']);
  17.         $deprec   = (double) str_replace(','''$param['deprec']);
  18.         $salariofunc   =  (double) str_replace(','''$param['salariofunc']);
  19.         $horastrab   $param['horastrab'];
  20.                         
  21.         $obj = new StdClass;
  22.         $obj->custohora       =  number_format(($valorenergia $valoconsum $deprec $salariofunc), 2',''');
  23.         TForm::sendData('form_Custo'$obj);
  24.     }  
  25.         
  26.         
  27. ?>

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


RC

A questão é que as operações matemáticas são realizadas com números no padrão inglês.
Então você deve:
1- formatar os números do padrão Brasil para o Inglês;
2- efetuar as operações matemáticas;
3- formata o resultado para o padrão de Inglês para Brasileiro, para exibir na tela.

Assim, eu criei uma classe (Uteis.class.php) com vários métodos que facilitam o dia-a-dia, esta classe fica salva na pasta: app/lib/util
Nela eu utilizo os seguintes métodos:

Uteis::numeroIngles($num); //para formatar no padrão Inglês
Uteis::numeroBrasil($num); //para formatar no padrão Brasil


Segue a classe Uteis:

  1. <?php
  2. class Uteis 
  3. {
  4.     
  5.     /**
  6.      * method numeroIngles()
  7.      * recebe um numero, pode ser float, do tipo do ingles 
  8.      * e o transforma num numero do tipo brasileiro (ex. 1.524,36)
  9.      * @param $num string com os numeros 
  10.      * @returns string com o valor formatado
  11.      */    
  12.     public function numeroBrasil($num$decimal 2
  13.     {                
  14.         if($num)
  15.         {
  16.             return number_format($num$decimal',''.');
  17.         }                    
  18.     }
  19.     
  20.     
  21.     /**
  22.      * method numeroIngles()
  23.      * recebe um numero, pode ser float, do tipo do brasileiro 
  24.      * e o transforma num numero aceito pelo banco de dados (ex. 1524.36)
  25.      * @param $num string com os numeros 
  26.      * @returns string com os valor formatado
  27.      */    
  28.     public static function numeroIngles($num
  29.     {        
  30.         if($num)
  31.         {        
  32.             $source  = array('.'',');
  33.             $replace = array('''.');
  34.             return str_replace($source$replace$num); //remove os pontos e substitui a virgula pelo ponto    
  35.         }    
  36.     }
  37.     
  38.     
  39.     /**
  40.      * method pegarApenasNumeros()
  41.      * retorna apenas os numeros de uma string 
  42.      * @param $str string com os numeros 
  43.      * @returns string apenas com os caracteres numericos
  44.      */    
  45.     public static function pegarApenasNumeros($str) {
  46.         if($str)
  47.         {
  48.             return preg_replace("/[^0-9]/"""$str);
  49.         }
  50.     }
  51.     
  52.     
  53.     /**
  54.      * method getFormatCPF()
  55.      * retorna uma string formatada como CPF (999.999.999-99)
  56.      * @param $str string que se quer formatar
  57.      * @returns string formatada como CPF
  58.      */
  59.     public static function getFormatCPF($str) {
  60.         if($str)
  61.         {
  62.             $formatado  substr$str0) . '.';
  63.             $formatado .= substr$str3) . '.';
  64.             $formatado .= substr$str6) . '-';
  65.             $formatado .= substr$str9) . '';
  66.             return $formatado;
  67.         }
  68.     }        
  69.     
  70.     
  71.     /**
  72.      * method formataPeso()
  73.      * formata $peso da TDataGrid com um decimal
  74.      * @param $valor é o valor da coluna que se quer formatar
  75.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  76.      * @param $row é a própria linha da datagrid
  77.      * @returns $valor retorna o $valor formatado
  78.      */
  79.     public static function formataPeso($valor$objeto$row)
  80.     {
  81.         if($valor)
  82.         {
  83.             return number_format($valor1);
  84.         }    
  85.     }
  86.     
  87.     
  88.     /**
  89.      * method formataData()
  90.      * formata $data_cadastro da TDataGrid com o padrão brasileiro
  91.      * @param $valor é o valor da coluna que se quer formatar
  92.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  93.      * @param $row é a própria linha da datagrid
  94.      * @returns $valor com a data formatada no padrão brasileiro
  95.      */
  96.     public function formataData($valor$objeto$row)
  97.     {
  98.         if($valor)
  99.         {
  100.             return TDate::date2br($valor);
  101.         }        
  102.     }
  103.         
  104.     
  105.     /**
  106.      * method formataAltura()
  107.      * formata $peso da TDataGrid com 2 decimais
  108.      * @param $valor é o valor da coluna que se quer formatar
  109.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  110.      * @param $row é a própria linha da datagrid
  111.      * @returns $valor retorna o $valor formatado
  112.      */
  113.     public function formataAltura($valor$objeto$row)
  114.     {
  115.         if($valor)
  116.         {
  117.             return number_format($valor2);
  118.         }        
  119.     }
  120.     
  121.     
  122.     /**
  123.      * method formataMoeda()
  124.      * formata valores da TDataGrid com 2 decimais no padrao Brasil
  125.      * @param $valor é o valor da coluna que se quer formatar
  126.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  127.      * @param $row é a própria linha da datagrid
  128.      * @returns $valor retorna o $valor formatado
  129.      */
  130.     public function formataMoeda($valor$objeto$row)
  131.     {
  132.         if($valor)
  133.         {
  134.             return number_format($valor2',''.');
  135.         }        
  136.     }
  137.     
  138.     
  139.     /**
  140.      * method formataAtivo()
  141.      * formata $ativo da TDataGrid (Ativo/Inativo)
  142.      * @param $valor é o valor da coluna que se quer formatar
  143.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  144.      * @param $row é a própria linha da datagrid
  145.      * @returns $valor com formatado
  146.      */
  147.     public function formataAtivo($valor$objeto$row)
  148.     {
  149.         if($valor)
  150.         {
  151.             return 'Ativo';
  152.         }
  153.         else
  154.         {
  155.             return 'Inativo';
  156.         }        
  157.     }
  158.     
  159.     
  160.     /**
  161.      * method formataCPF()
  162.      * formata valores da TDataGrid no padrao do CPF
  163.      * @param $valor é o valor da coluna que se quer formatar
  164.      * @param $objeto é o stdClass com os dados que estão representados na linha da datagrid
  165.      * @param $row é a própria linha da datagrid
  166.      * @returns $valor retorna o $valor formatado
  167.      */
  168.     public function formataCPF($valor$objeto$row)
  169.     {
  170.         if($valor)
  171.         {
  172.             return Uteis::getFormatCPF($valor);
  173.         }        
  174.     }
  175.     
  176.     
  177.     /**
  178.      * method dataProximoMes()
  179.      * retorna uma data ajustada para a data do proximo mes
  180.      * @param $data data tem no formato ingles (aaaa-mm-dd)
  181.      * @returns $data projetada para o proximo mês
  182.      */
  183.     public static function dataProximoMes($data) {
  184.         //verifica dia maior que 30
  185.         $novaData explode("-"$data);
  186.         if($novaData[2] > 30) {
  187.             $novaData[2] = 30;
  188.         }
  189.         //verifica se o mes é maior que 12 (dezembro) e se o dia de fevereiro é maior que 28
  190.         $novaData[1]++;
  191.         switch($novaData[1]) {
  192.             case 13:
  193.                 $novaData[1] = '01';
  194.                 $novaData[0]++;
  195.             break;
  196.             case 14:
  197.                 $novaData[1] = '01';
  198.                 $novaData[0]++;
  199.             break;
  200.             case 2:
  201.                 if($novaData[2] > 28) {
  202.                     $novaData[2] = 28;
  203.                 }
  204.             break;
  205.             case 3:
  206.                 if($novaData[2] == 28) {
  207.                     $novaData[2] = 30;
  208.                 }
  209.             break;
  210.         }
  211.         //preenche com zero à esquerda o dia e mês
  212.         $novaData[2] = str_pad($novaData[2], 2'0'STR_PAD_LEFT);
  213.         $novaData[1] = str_pad($novaData[1], 2'0'STR_PAD_LEFT);
  214.         $novaDataVenc implode("-"$novaData);
  215.         return $novaDataVenc;
  216.     }
  217. }    /* end of class Uteis */
  218. ?>
RC

Olá Ricardo Câmara.

Muito interessante essa sua classe! Vc poderia explicar a forma correta de se trabalhar com essa sua classe? Tipo: Os métodos dela devem ser chamados da classe controller ou do model? Pode dar um exemplo de como chamar esses métodos?

Também fiquei na dúvida quanto aos métodos utilizados para tratar dados da TDatagrid... Tem algum exemplo de uma TDatagrid utilizando algum desses métodos?
FS

Muito obrigado Ricardo, irei testar aqui.
PD

Para ajudar,

Aqui tem um exemplo com cálculo na saída do campo:
www.adianti.com.br/framework_files/tutor/index.php?class=POSFormView

Busque pelo método onExitProduct().

Att,
RC

A classe Uteis tem todos os métodos tipo STATIC, pra que sejam utilizados sem instanciar a classe, você pode usar assim:
  1. <?php
  2. $object->peso Uteis::numeroBrasil($object->peso);
  3. ?>


Os métodos das TDataGrids você usar isto após ter declarado as colunas da TDataGrid:
  1. <?php
  2. $cpf->setTransformer( array('Uteis''formataCPF') );
  3. ?>
AM

Eu Fiz um Recibo de Salário cheio de cálculos, veja ai como eu fiz:
=============================================================
  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.         // Set focus no campo especificado
  13.         TScript::create('setTimeout(function() { $("input[name=\'nome\']").focus() }, 500);');
  14.         // Cria o Form e configura
  15.         $this->form = new TQuickForm('form_salario');
  16.         $this->form->setFormTitle('Cadastro de Recibo de Salário');
  17.         $this->form->class 'tform';
  18.         $this->form->style 'width: 800px';
  19.         
  20.         // Definição dos campos do form
  21.         $id      = new TEntry('id');
  22.         $nome    = new TEntry('nome');
  23.         $empresa = new TEntry('empresa');
  24.         
  25.         $dia1 = new TEntry('dia1');
  26.         $mes1 = new TEntry('mes1');
  27.         $ano1 = new TEntry('ano1');
  28.         $dia2 = new TEntry('dia2');
  29.         $mes2 = new TEntry('mes2');
  30.         $ano2 = new TEntry('ano2');
  31.                         
  32.         $salario  = new TEntry('salario');
  33.         $extras   = new TEntry('extras');
  34.         $rendi1   = new TEntry('rendi1');        
  35.         $rendi2   = new TEntry('rendi2');
  36.         $rendi3   = new TEntry('rendi3');
  37.         $rendi1vr = new TEntry('rendi1vr');        
  38.         $rendi2vr = new TEntry('rendi2vr');
  39.         $rendi3vr = new TEntry('rendi3vr');
  40.         $soma1    = new TEntry('soma1');
  41.         
  42.         $inss    = new TEntry('inss');
  43.         $imposto = new TEntry('imposto');
  44.         $adianta = new TEntry('adianta');        
  45.         $dedu1   = new TEntry('dedu1');
  46.         $dedu2   = new TEntry('dedu2');
  47.         $dedu1vr = new TEntry('dedu1vr');                
  48.         $dedu2vr = new TEntry('dedu2vr');
  49.         $soma2   = new TEntry('soma2');
  50.         
  51.         $familia  = new TEntry('familia');        
  52.         $liquido  = new TEntry('liquido');
  53.         $extenso1 = new TEntry('extenso1');
  54.         $extenso2 = new TEntry('extenso2');
  55.         $idcidade     = new TDBCombo('idcidade''dbsalario''Cidade''id''idcidade');
  56.         $dia = new TEntry('dia');
  57.         
  58.         // ===================================================================================
  59.         // idmes: é o campo desta tabela que vai ficar associado com o campo idmes de outra tabela.
  60.         // dbsalario: é o banco de dados onde estão todas as tabelas.
  61.         // Mes: é o nome da classe definida em Model, referente à tabela mes que está no banco de dados dbsalario.
  62.         // id: é o campo chave da tabela Mes.
  63.         // idmes: é outro campo da tabela Mes que está associado com o campo idmes da tabela salario.       
  64.         $idmes    = new TDBCombo('idmes''dbsalario''Mes''id''idmes');
  65.         // ===================================================================================
  66.         
  67.         $ano = new TEntry('ano');
  68. // =====================================================================         
  69.         // Atualiza os Valores
  70.         $salario->setExitAction(new TAction(array($this'onUpdateTotal')));
  71.         $extras->setExitAction(new TAction(array($this'onUpdateTotal')));
  72.         $rendi1vr->setExitAction(new TAction(array($this'onUpdateTotal')));
  73.         $rendi2vr->setExitAction(new TAction(array($this'onUpdateTotal')));
  74.         $rendi3vr->setExitAction(new TAction(array($this'onUpdateTotal')));
  75.         $inss->setExitAction(new TAction(array($this'onUpdateTotal')));
  76.         $imposto->setExitAction(new TAction(array($this'onUpdateTotal')));
  77.         $adianta->setExitAction(new TAction(array($this'onUpdateTotal')));
  78.         $dedu1vr->setExitAction(new TAction(array($this'onUpdateTotal')));
  79.         $dedu2vr->setExitAction(new TAction(array($this'onUpdateTotal')));
  80.         $familia->setExitAction(new TAction(array($this'onUpdateTotal')));
  81.         $liquido->setExitAction(new TAction(array($this'onUpdateTotal')));
  82.          //  Campos Não Editáveis
  83.         $id->setEditable(FALSE);                 
  84.         $soma1->setEditable(FALSE);
  85.         $soma2->setEditable(FALSE);         
  86.         $liquido->setEditable(FALSE);
  87.  
  88.          //  Máscaras     
  89.         $dia1->setMask('99');
  90.         $mes1->setMask('99');        
  91.         $ano1->setMask('9999');
  92.         $dia2->setMask('99');
  93.         $mes2->setMask('99');
  94.         $ano2->setMask('9999');        
  95.         $dia->setMask('99');
  96.         $ano->setMask('9999');
  97.         // Formatação para Valores Monetário
  98.         $salario->setNumericMask(2'.'',');        
  99.         $extras->setNumericMask(2'.'',');
  100.         $rendi1vr->setNumericMask(2'.'',');         
  101.         $rendi2vr->setNumericMask(2'.'','); 
  102.         $rendi3vr->setNumericMask(2'.'','); 
  103.         $soma1->setNumericMask(2'.'',');        
  104.         $inss->setNumericMask(2'.'',');         
  105.         $imposto->setNumericMask(2'.'',');
  106.         $adianta->setNumericMask(2'.'',');          
  107.         $dedu1vr->setNumericMask(2'.'',');  
  108.         $dedu2vr->setNumericMask(2'.'',');         
  109.         $soma2->setNumericMask(2'.'',');
  110.         $familia->setNumericMask(2'.'',');         
  111.         $liquido->setNumericMask(2'.'','); 
  112. // ===================================================================== 
  113.         //  Tamanho dos Campos no formulário        
  114.         $id->setSize(50);
  115.         $nome->setSize(650);
  116.         $empresa->setSize(650);
  117.                 
  118.         $dia1->setSize(30);
  119.         $mes1->setSize(30);
  120.         $ano1->setSize(50);
  121.         $dia2->setSize(30);
  122.         $mes2->setSize(30);
  123.         $ano2->setSize(50);
  124.         $salario->setSize(100);
  125.         $extras->setSize(100);
  126.         $rendi1->setSize(100);
  127.         $rendi2->setSize(100);
  128.         $rendi3->setSize(100);
  129.         $rendi1vr->setSize(100);
  130.         $rendi2vr->setSize(100);
  131.         $rendi3vr->setSize(100);
  132.         $soma1->setSize(100);
  133.         
  134.         $inss->setSize(100);
  135.         $imposto->setSize(100);
  136.         $adianta->setSize(100);
  137.         $dedu1->setSize(100);
  138.         $dedu2->setSize(100);
  139.         $dedu1vr->setSize(100);
  140.         $dedu2vr->setSize(100);
  141.         $soma2->setSize(100);
  142.         $familia->setSize(100);
  143.         $liquido->setSize(100);
  144.         $extenso1->setSize(430);
  145.         $extenso2->setSize(487);
  146.         $idcidade->setSize(250);
  147.         $dia->setSize(30);
  148.         $idmes->setSize(120);
  149.         $ano->setSize(50);  
  150. // ===================================================================== 
  151.         
  152.         // Número de Caracteres permitidos dentro dos campos
  153.                 
  154.         $id->setMaxLength(7);
  155.         $nome->setMaxLength(60);       
  156.         $empresa->setMaxLength(60);
  157.         $dia1->setMaxLength(2);        
  158.         $mes1->setMaxLength(2);
  159.         $ano1->setMaxLength(4);       
  160.         $dia2->setMaxLength(2);
  161.         $mes2->setMaxLength(2);        
  162.         $ano2->setMaxLength(4);
  163.         $rendi1->setMaxLength(12);        
  164.         $rendi2->setMaxLength(12);
  165.         $rendi3->setMaxLength(12);       
  166.         $dedu1->setMaxLength(12);       
  167.         $dedu2->setMaxLength(12);
  168.         $extenso1->setMaxLength(40);
  169.         $extenso2->setMaxLength(50);
  170.         $dia->setMaxLength(2);        
  171.         $ano->setMaxLength(4); 
  172.         
  173.         // Adiciona uma linha em branco no form        
  174.         $row $this->form->addRow();
  175.         $row->addCell( new TLabel(''));
  176.         
  177.         $this->form->addQuickFields(new TLabel('Código:'), array($id));
  178.         $this->form->addQuickFields(new TLabel('Nome:'), array($nome));
  179.         $this->form->addQuickFields(new TLabel('Empresa:'), array($empresa));
  180.         $this->form->addQuickFields(new TLabel('Período - Dia: '), array($dia1,
  181.         $label_mes1 = new TLabel('Mes:'), $mes1,
  182.         $label_ano1 = new TLabel('Ano:'), $ano1,
  183.         $label_dia2 = new TLabel('Dia:'), $dia2,
  184.         $label_mes2 = new TLabel('Mes:'), $mes2,
  185.         $label_ano2 = new TLabel('Ano:'), $ano2));
  186.         
  187.         // Adiciona uma linha em branco no form        
  188.         $row $this->form->addRow();
  189.         $row->addCell( new TLabel(''));
  190.         
  191.         // Adiciona uma linha cinza com duas coluna e um título
  192.         $row $this->form->addRow();
  193.         $row->class 'tformsection';
  194.         $row->addCell( new TLabel('RENDIMENTOS'))->colspan 2;
  195.         
  196.         // Adiciona uma linha em branco no form        
  197.         $row $this->form->addRow();
  198.         $row->addCell( new TLabel(''));
  199.         $this->form->addQuickFields(new TLabel('Salário.........:'), array($salario,
  200.         $label_extras = new TLabel('Horas Extras...........:'), $extras));
  201.         $this->form->addQuickFields(new TLabel('Rendimento:'), array($rendi1,
  202.         $label_rendi1vr = new TLabel('Valor do Rendimento:'), $rendi1vr));
  203.         $this->form->addQuickFields(new TLabel('Rendimento:'), array($rendi2,
  204.         $label_rendi2vr = new TLabel('Valor do Rendimento:'), $rendi2vr));
  205.         $this->form->addQuickFields(new TLabel('Rendimento:'), array($rendi3,
  206.         $label_rendi3vr = new TLabel('Valor do Rendimento:'), $rendi3vr,
  207.         $label_soma1 = new TLabel('Soma..............:'), $soma1));
  208.                  
  209.         // Adiciona uma linha em branco no form        
  210.         $row $this->form->addRow();
  211.         $row->addCell( new TLabel(''));
  212.         // Adiciona uma linha cinza com duas coluna e um título
  213.         $row $this->form->addRow();  // Adiciona uma linha
  214.         $row->class 'tformsection';  // Aplica na linha a cor cinza
  215.         $row->addCell( new TLabel('DEDUÇÕES'))->colspan 2// Divide a linha em 2 colunas e coloca o título.
  216.         // Adiciona uma linha em branco no form        
  217.         $row $this->form->addRow();
  218.         $row->addCell( new TLabel(''));
  219.         
  220.         $this->form->addQuickFields(new TLabel('Inss..............:'), array($inss,
  221.         $label_imposto = new TLabel('I.R.Fonte.................:'), $imposto,
  222.         $label_adianta = new TLabel('Adiantamento..:'), $adianta));
  223.         
  224.         $this->form->addQuickFields(new TLabel('Dedução:'), array($dedu1,
  225.         $label_dedu1vr = new TLabel('Valor da Dedução.....:'), $dedu1vr));
  226.         
  227.         $this->form->addQuickFields(new TLabel('Dedução:'), array($dedu2,
  228.         $label_dedu2vr = new TLabel('Valor da Dedução.....:'), $dedu2vr,
  229.         $label_soma2 = new TLabel('Soma:..............'), $soma2));
  230.         // Adiciona uma linha em branco no form        
  231.         $row $this->form->addRow();
  232.         $row->addCell( new TLabel(''));
  233.         
  234.         // Adiciona uma linha cinza com duas coluna e um título                
  235.         $row $this->form->addRow();
  236.         $row->class 'tformsection';
  237.         $row->addCell( new TLabel('COMPLEMENTO'))->colspan 2;
  238.         
  239.         // Adiciona uma linha em branco no form        
  240.         $row $this->form->addRow();
  241.         $row->addCell( new TLabel(''));        
  242.         $this->form->addQuickFields(new TLabel('Salário Familia:'), array($familia,
  243.         $label_liquido = new TLabel('Líquido a Receber....:'), $liquido));
  244.         
  245.         $this->form->addQuickFields(new TLabel('Valor por Extenso:'), array($extenso1));
  246.         $this->form->addQuickFields(new TLabel('Continuação:'), array($extenso2));        
  247.         $this->form->addQuickFields(new TLabel('Nome da Cidade: '), array($idcidade,
  248.         $label_dia = new TLabel('Dia:'), $dia,
  249.         $label_idmes = new TLabel('Mês:'), $idmes,
  250.         $label_ano = new TLabel('Ano:'), $ano));
  251.         // Adiciona uma linha em branco no form        
  252.         $row $this->form->addRow();
  253.         $row->addCell( new TLabel(''));
  254.         
  255.         // Adiciona Legendas nos campos
  256.         $nome->setTip('Não deixe a Tecla Enter ou Tab pressionada, se fizer isto, irá Travar. Se isto acontecer, clique no botão Voltar do Navegador.)');        
  257.         $salario->setTip('Na impressão, todos os valores monetários serão impressos no Padrão Brasileiro: 0.000,00)');
  258.         $idcidade->setTip('Quando estiver neste campo, tecle Barra de Espaço para abrir a janela de opções. Para cadastrar mais cidades ou excluir, vá até o menu (Cadastro), depois: (Dados dos Campos).');
  259.         $idmes->setTip('Para cadastrar ou excluir, vá até o menu (Cadastro), depois: (Dados dos Campos).');        
  260.         $salario->placeholder '0,000.00';
  261.         $ano->setTip('Após digitar este campo, clique no botão Salvar e depois Novo se for inserir outro registro.');         
  262.         //  Define um valor inicial para os campos. 
  263.         //  Eu desativei porque eu resolvi este problema lá na Impressão do formulário. 
  264.         /*
  265.         $salario->setValue('0.00');
  266.         $extras->setValue('0.00');
  267.         $rendi1vr->setValue('0.00');
  268.         $rendi2vr->setValue('0.00');
  269.         $rendi3vr->setValue('0.00');
  270.         $inss->setValue('0.00');
  271.         $imposto->setValue('0.00');
  272.         $adianta->setValue('0.00');
  273.         $dedu1vr->setValue('0.00');
  274.         $dedu2vr->setValue('0.00');
  275.         $familia->setValue('0.00');
  276.         $soma1->setValue('0.00');
  277.         $soma2->setValue('0.00');
  278.         $liquido->setValue('0.00');
  279.         */
  280.         $ano->setValue('2015');        
  281.         $ano1->setValue('2015'); 
  282.         $ano2->setValue('2015');                         
  283.         // Botões
  284.         $save = new TAction( array($this'onSave'));
  285.         $this->form->addQuickAction('Salvar'$save'ico_save.png');
  286.         $novo = new TAction( array($this'onNovo'));
  287.         $this->form->addQuickAction('Novo'$novo'ico_new.png');
  288.         
  289.         $delete = new TAction( array($this'onDelete'));
  290.         $this->form->addQuickAction('Excluir'$delete'ico_delete.png');
  291.    
  292.         $list = new TAction( array('SalarioList''onReload'));
  293.         $this->form->addQuickAction('Consulta'$list'ico_datagrid.png');
  294.         
  295.         $limp = new TAction( array('SalarioForm''onLimp'));
  296.         $this->form->addQuickAction('Limpar Campos'$limp'ico_datagrid.png');         
  297.         
  298.         // Na linha abaixo, se desejar retirar a pergunta se desejar excluir tudo,
  299.         // basta substituir onTudo por Tudo
  300.         $tudo = new TAction( array($this'onTudo'));  
  301.         $this->form->addQuickAction('Excluir Tudo'$tudo'ico_delete.png');
  302.         
  303.         // Para isso abaixo funcionar, tem que colocar a função onShow lá na Ajuda.class.php
  304.         $ajuda = new TAction( array('Ajuda''onShow'));  
  305.         $this->form->addQuickAction('Ajuda'$ajuda'ico_question.png');        
  306.         parent::add($this->form);
  307.     }
  308.     
  309.     function show()
  310.     {
  311.         parent::show();
  312.     }
  313.     
  314.     public function onNovo()
  315.     {
  316.     try
  317.     {
  318.         TTransaction::open('dbsalario');
  319.            $object $this->form->getData('Salario');
  320.            $object->store();
  321.         TTransaction::close();
  322.     }
  323.     catch (Exception $e)
  324.     {
  325.        new TMessage('error'$e->getMessage());
  326.        TTransaction::rollback();
  327.     }
  328.    }
  329.     public function onSave()
  330.     {
  331.         try
  332.         {
  333.             TTransaction::open('dbsalario');
  334.             $object $this->form->getData('Salario');  // Obtem os dados do formulário.
  335.             $object->store();                         // Grava os Dados
  336.             
  337.             // Preenche o formulário com os dados do registro ativo.
  338.             $this->form->setData($object);
  339.             
  340.             TTransaction::close();
  341.             // new TMessage('info', 'Dados salvos com sucesso.');
  342.         }
  343.         catch (Exception $e)
  344.         {
  345.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  346.             TTransaction::rollback();
  347.         }
  348.     }
  349.     public function onDelete($param)
  350.     {
  351.     try
  352.     {
  353.         $key=$param['id'];
  354.         TTransaction::open('dbsalario');
  355.             $object = new Salario($key);
  356.             $object->delete();
  357.         TTransaction::close();
  358.         }
  359.     catch (Exception $e)
  360.     {
  361.         new TMessage('error'"O registro não pode ser excluido.");
  362.         TTransaction::rollback();
  363.     }
  364.     }
  365. //  A chamada para o método abaixo está no SalarioList
  366.    public function onEdit$param )
  367.    {
  368.       try
  369.       {
  370.            TTransaction::open('dbsalario');
  371.               $key $param['key'];
  372.               $object = new Salario $key );
  373.               $this->form->setData$object );
  374.            TTransaction::close();
  375.       }
  376.        catch (Exception $e)
  377.          {
  378.             new TMessage('error'$e->getMessage());
  379.             TTransaction::rollback();
  380.          }
  381.    }
  382.     function onTudo($param)
  383.     {
  384.         $action = new TAction(array($this'Tudo'));
  385.         $action->setParameters($param);
  386.         new TQuestion('Deseja Excluir Todos os Registros Cadastrados até Hoje?'$action);
  387.     }
  388.     public function Tudo$param )
  389.     {
  390.         try
  391.         {
  392.             TTransaction::open('dbsalario'); 
  393.             $repository = new TRepository('Salario'); 
  394.             $repository->delete(); 
  395.             
  396. //            new TMessage('info', 'Todos os Registros foram Excluidos.'); 
  397.             TTransaction::close(); 
  398.         }
  399.         catch (Exception $e)
  400.         {
  401.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  402.             TTransaction::rollback();
  403.         }
  404.     }
  405.     
  406.     public static function onExitProduct($param)
  407.     {
  408.         $id $param['id']; // obter o código
  409.         try
  410.         {
  411.             TTransaction::open('dbsalario');
  412.             $product = new Product($product_id); // lê o registro
  413.             $obj = new StdClass;
  414.                       
  415.             $obj->salario  0;
  416.             $obj->extras   0;
  417.             $obj->rendi1vr 0;
  418.             $obj->rendi2vr 0;
  419.             $obj->rendi3vr 0;
  420.             $obj->soma1    0;
  421.             $obj->inss     0;
  422.             $obj->imposto  0;
  423.             $obj->adianta  0;
  424.             $obj->dedu1vr  0;
  425.             $obj->dedu2vr  0;
  426.             $obj->soma2    0;
  427.             $obj->familia  0;
  428.             $obj->liquido  0;
  429.                                        
  430.             $obj->salario  number_format($product->salario2'.'',');
  431.             $obj->extras   number_format($product->extras2'.'',');
  432.             $obj->rendi1vr number_format($product->rendi1vr2'.'',');
  433.             $obj->rendi2vr number_format($product->rendi2vr2'.'',');
  434.             $obj->rendi3vr number_format($product->rendi3vr2'.'',');
  435.             $obj->soma1    number_format($product->soma12'.'',');
  436.             
  437.             $obj->inss    number_format($product->inss2'.'',');
  438.             $obj->imposto number_format($product->imposto2'.'',');
  439.             $obj->adianta number_format($product->adianta2'.'',');
  440.             $obj->dedu1vr number_format($product->dedu1vr2'.'',');
  441.             $obj->dedu2vr number_format($product->dedu2vr2'.'',');
  442.             $obj->soma2   number_format($product->soma22'.'',');            
  443.             
  444.             $obj->familia number_format($product->familia2'.'',');
  445.             $obj->liquido number_format($product->liquido2'.'',');             
  446.             TTransaction::close();
  447.             TForm::sendData('form_salario'$obj);
  448.         }
  449.         catch (Exception $e)
  450.         {
  451.             // does nothing
  452.         }
  453.     }
  454.     
  455.     public static function onUpdateTotal($param)
  456.     {
  457.         $salario  = (double) str_replace(','''$param['salario']);
  458.         $extras   = (double) str_replace(','''$param['extras']);
  459.         $rendi1vr = (double) str_replace(','''$param['rendi1vr']);
  460.         $rendi2vr = (double) str_replace(','''$param['rendi2vr']);
  461.         $rendi3vr = (double) str_replace(','''$param['rendi3vr']);                
  462.         $soma1    = (double) str_replace(','''$param['soma1']);
  463.         $inss     = (double) str_replace(','''$param['inss']);
  464.         $imposto  = (double) str_replace(','''$param['imposto']);
  465.         $adianta  = (double) str_replace(','''$param['adianta']);
  466.         $dedu1vr  = (double) str_replace(','''$param['dedu1vr']);
  467.         $dedu2vr  = (double) str_replace(','''$param['dedu2vr']);                
  468.         $soma2    = (double) str_replace(','''$param['soma2']);
  469.         $familia  = (double) str_replace(','''$param['familia']);                
  470.         $liquido  = (double) str_replace(','''$param['liquido']);
  471.         $obj = new StdClass;
  472.         $obj->soma1   number_format($salario $extras $rendi1vr $rendi2vr $rendi3vr2'.'',');
  473.         $obj->soma2   number_format$inss $imposto $adianta $dedu1vr $dedu2vr2'.'',');
  474.         $obj->liquido number_format( ($soma1 $familia) - $soma22'.'',');                
  475.         TForm::sendData('form_salario'$obj);
  476.     }
  477.     
  478.     function onLimp()
  479.     {
  480.         try
  481.         {
  482.             TTransaction::open('dbsalario');
  483.             $obj $this->form->getData('Salario');
  484.         $obj->nome '';     
  485.         $obj->empresa ''
  486.         $obj->dia1 ''
  487.         $obj->mes1 ''
  488.         $obj->ano1 ''
  489.         $obj->dia2 ''
  490.         $obj->mes2 ''
  491.         $obj->ano2 ''
  492.         $obj->salario ''
  493.         $obj->extras ''
  494.         $obj->rendi1 ''
  495.         $obj->rendi2 ''
  496.         $obj->rendi3 ''
  497.         $obj->rendi1vr ''
  498.         $obj->rendi2vr ''
  499.         $obj->rendi3vr ''
  500.         $obj->soma1 ''
  501.         
  502.         $obj->inss ''
  503.         $obj->imposto ''
  504.         $obj->adianta ''
  505.         $obj->dedu1 ''
  506.         $obj->dedu2 ''
  507.         $obj->dedu1vr ''
  508.         $obj->dedu2vr ''
  509.         $obj->soma2 ''
  510.         $obj->familia ''
  511.         $obj->liquido ''
  512.         $obj->extenso1 ''
  513.         $obj->extenso2 ''
  514.         $obj->idcidade ''
  515.         $obj->dia ''
  516.         $obj->idmes ''
  517.         $obj->ano ''
  518.             
  519.         }
  520.      catch (Exception $e)
  521.      {
  522.             // does nothing
  523.      }
  524.    }     
  525. }
  526. ?>