Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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.