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

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


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