Cálcudo no adianti Boa tarde! Preciso realizar alguns cálculos para serem exibidos no datagrid, procedi da seguinte maneira: 1 - Criei as variáveis var $val; var $marg; var $valpro; var $valnor; 2 - Fiz a atribuição das mesmas o conteúdo da $valnor exibe Division by zero 3 - O...
PC
Cálcudo no adianti  
Fechado
Boa tarde!

Preciso realizar alguns cálculos para serem exibidos no datagrid, procedi da seguinte maneira:
1 - Criei as variáveis
var $val;
var $marg;
var $valpro;
var $valnor;

2 - Fiz a atribuição das mesmas
 
  1. <?php
  2. $marg = $this->margem;
  3. $val = $this->valor;
  4. $valpro = $val/((($marg+10)/100));
  5. $valnor = $val/($marg/100);
  6. ?>

o conteúdo da $valnor exibe Division by zero

3 - O datagrid não exibe os valores segue código:
 
  1. <?php
  2. $this->datagrid->addQuickColumn('Id', 'id', 'right', 30, new TAction(array($this, 'onReload')), array('order', 'id'));
  3. $codigo = $this->datagrid->addQuickColumn('Codigo', 'codigo', 'left', 50, new TAction(array($this, 'onReload')), array('order', 'codigo'));
  4. $descricao = $this->datagrid->addQuickColumn('Descrição', 'descricao', 'left', 250, new TAction(array($this, 'onReload')), array('order', 'descricao'));
  5. $valor1 = $this->datagrid->addQuickColumn('Valor Normal', $valnor, 'left', 70, new TAction(array($this, 'onReload')));
  6. $valor2 = $this->datagrid->addQuickColumn('Valor Promocional', $valpro, 'left', 70, new TAction(array($this, 'onReload')));
  7. ?>


Como devo proceder? Não encontrei exemplos de cálculo no livro e nem dos modelos no tutor.

Grato

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)


AS

então cara você tem que fazer os calculos em uma função e usar o onReload para carregar, ou faz os calculos nele mesmo, coloca seu onReload para gente dar uma olhada
PC

Alexandre bom dia!

Obrigado pela atenção, mas, estou utilizando o onReload padrão.

Se eu criar uma função como fica a chamada na criação da coluna no datagrid?

Grato.
AN

Eu faria os cálculos usando um getter na model e chamaria este método na coluna do datagrid. Assim pode usar seu onReload "padrão".

AS

então Paulo, para fazer o calculo no controller teria que criar o method onRelod, no meu ponto de vista é o mais serto a se fazer porem você pode criar as variaveis na model e usar os getters como Ademilson disse,


 
  1. <?php
  2. protected $val;
  3. protected $marg;
  4. protected $valpro;
  5. protected $valnor;
  6. function get_val(){
  7. $val = calculo ...
  8. $this->val = $val;
  9. return $this->val;
  10. }
  11. dessa maneira quando ascessar a variavel $val no controller ele ja pega o val calculado
  12. abraços
PD

Oi Paulo,

O segundo parâmetro do método TQuickGrid::addQuickColumn() representa o nome do atributo do banco de dados a ser exibido na coluna e não pode ser uma variável da forma que você colocou.

O que você pode fazer, como o Ademilson sugeriu, é criar um método na sua model (classe filha de TRecord), mais ou menos da seguinte maneira:
 
  1. <?php
  2. class Produto extends TRecord
  3. {
  4. function get_valpro()
  5. {
  6. $marg = $this->margem;
  7. $val = $this->valor;
  8. $valpro = $val/((($marg+10)/100));
  9. return $valpro;
  10. }
  11. }
  12. ?>


Assim, podemos acessar o objeto da seguinte maneira:
$objeto = new Produto(10);
print $objeto->valpro;

Veja que não existe um atributo chamado "valpro" no cadastro. Então, no momento que acessamos "valpro", automaticamente é executado o método get_valpro(), caso ele exista. Ali é realizado o cálculo.

Assim, podemos usar esse atributo "virtual" em datagrids, da seguinte maneira... Veja que "valpro" irá retornar o conteúdo de get_valpro():
 
  1. <?php
  2. $this->datagrid->addQuickColumn('Valor', 'valpro', 'left', 50);
  3. ?>


O lado positivo de colocar na Model (classe filha de TRecord) é poder reaproveitar esse atributo "virtual" em vários lugares diferentes do sistema (diferentes classes de controle).

Um abraço,
Pablo
PC

Amigos agradeço à todos pela ajuda o código ficou como o abaixo:

 
  1. <?php
  2. function get_valpro()
  3. {
  4. $val = $this->valor;
  5. $valpro = $val/.60;
  6. return '<span >'. 'R$ ' . number_format((double)$valpro,2,',','') . '</span>';
  7. }
  8. <?
  9. O resultado foi excelente pena que não dar para subir a imagem.