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
o conteúdo da $valnor exibe Division by zero
3 - O datagrid não exibe os valores segue código:
Como devo proceder? Não encontrei exemplos de cálculo no livro e nem dos modelos no tutor.
Grato
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
- <?php
- $marg = $this->margem;
- $val = $this->valor;
- $valpro = $val/((($marg+10)/100));
- $valnor = $val/($marg/100);
- ?>
o conteúdo da $valnor exibe Division by zero
3 - O datagrid não exibe os valores segue código:
- <?php
- $this->datagrid->addQuickColumn('Id', 'id', 'right', 30, new TAction(array($this, 'onReload')), array('order', 'id'));
- $codigo = $this->datagrid->addQuickColumn('Codigo', 'codigo', 'left', 50, new TAction(array($this, 'onReload')), array('order', 'codigo'));
- $descricao = $this->datagrid->addQuickColumn('Descrição', 'descricao', 'left', 250, new TAction(array($this, 'onReload')), array('order', 'descricao'));
- $valor1 = $this->datagrid->addQuickColumn('Valor Normal', $valnor, 'left', 70, new TAction(array($this, 'onReload')));
- $valor2 = $this->datagrid->addQuickColumn('Valor Promocional', $valpro, 'left', 70, new TAction(array($this, 'onReload')));
- ?>
Como devo proceder? Não encontrei exemplos de cálculo no livro e nem dos modelos no tutor.
Grato
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
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.
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".
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,
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:
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():
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
Amigos agradeço à todos pela ajuda o código ficou como o abaixo: