Lançado Adianti Framework 8.1!
Clique aqui para saber mais
Como aplicar uma máscara em campo do TMultiField ? Bom tarde. Gostaria de uma ajuda de vocês pessoal. Quando eu for editar um formulário eu preciso carregar os dados de um TMultiField aplicando a seguinte máscara nos campos Quantidade e Valor Unitário Segue o código fonte do onEdit: ...
RC
Como aplicar uma máscara em campo do TMultiField ?  
Fechado
Bom tarde.

Gostaria de uma ajuda de vocês pessoal.

Quando eu for editar um formulário eu preciso carregar os dados de um TMultiField aplicando a seguinte máscara nos campos
Quantidade
e
Valor Unitário

  1. <?php
  2. number_format($num$decimal',''.');
  3. ?>


Segue o código fonte do onEdit:
  1. <?php
  2.     function onEdit($param) {
  3.         try {
  4.             if (isset($param['key'])) {
  5.                 $key $param['key'];
  6.                 TTransaction::open('permission');
  7.                 
  8.                 //Contém os dados do Formulário
  9.                 $object = new Entrada($key);
  10.                 $object->dataentrada TDate::date2br($object->dataentrada);
  11.                 $object->datanotafiscal TDate::date2br($object->datanotafiscal);
  12.                 
  13.                 //Contém os dados do TMultiField 
  14.                 $object->produtos $object->getProdutos();
  15.                
  16.                 //Tentei fazer assim
  17.                 $object->qtde Uteis::numeroBrasil($object->produtos->qtde);
  18.                 $object->valorunitario Uteis::numeroBrasil($object->valorunitario);                
  19.                 
  20.                 $this->form->setData($object);
  21.                 TTransaction::close();
  22.             } else {
  23.                 $this->form->clear();
  24.             }
  25.         } catch (Exception $e) {
  26.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  27.             TTransaction::rollback();
  28.         }
  29.     }
  30. ?>


Código da função Uteis::numeroBrasil:
  1. <?php
  2.     /**
  3.      * method numeroIngles()
  4.      * recebe um numero, pode ser float, do tipo do ingles 
  5.      * e o transforma num numero do tipo brasileiro (ex. 1.524,36)
  6.      * @param $num string com os numeros 
  7.      * @returns string com o valor formatado
  8.      */    
  9.     public static function numeroBrasil($num$decimal 2
  10.     {                
  11.         if($num)
  12.         {                       
  13.             return number_format($num$decimal',''.');
  14.         }                    
  15.     }
  16. ?>


Quando vou executar seguindo esse meu exemplo ai é apresentado a seguinte mensagem de erro:
Notice: Trying to get property of non-object in C:\Program Files\wamp\www\almoxarifado\app\control\estoque\EntradaFormView.class.php on line 215





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


RC

Eu tentei criar os métodos get_quantidade e get_valor_unitario no model correspondente aos dados do TMultiField:

  1. <?php
  2. class EntradaItem extends TRecord
  3. {
  4.     const TABLENAME 'estoque_itens_entrada';
  5.     const PRIMARYKEY'id';
  6.     const IDPOLICY =  'max'// {max, serial}
  7.         
  8.     private $produto;
  9.     
  10.     public function __construct($id NULL)
  11.     {
  12.         parent::__construct($id);
  13.         parent::addAttribute('qtde');
  14.         parent::addAttribute('valorunitario');
  15.         parent::addAttribute('id_produto');
  16.         parent::addAttribute('id_entrada');
  17.     }
  18.     
  19.       /**
  20.      * Retorna o nome do produto     
  21.      */
  22.     public function get_name()
  23.     {
  24.         if (empty($this->produto))
  25.         {
  26.             $this->produto = new Produto($this->id_produto);
  27.         }
  28.         
  29.         return $this->produto->descricao;
  30.     }
  31.     
  32.       /**
  33.      * Retorna a qtde em formato monetário. Ex: 5,00     
  34.      */
  35.     public function get_quantidade()
  36.     {       
  37.         return Uteis::numeroBrasil($this->qtde);
  38.     }
  39.     
  40.       /**
  41.      * Retorna a qtde em formato monetário. Ex: 5,00     
  42.      */
  43.     public function get_valor_unitario()
  44.     {          
  45.             return Uteis::numeroBrasil($this->valorunitario);
  46.     }
  47.     
  48. }
  49. ?>


E depois alterei os dois atributos do multifield para referenciar esses métodos:
  1. <?php
  2.         $multifield_produtos->addField('quantidade''Quantidade'$quantidade100TRUE);        
  3.         $multifield_produtos->addField('valor_unitario''Valor Unitátio'$valor_unitario100TRUE);
  4. ?>


Mas só dá certo até eu editar ou adicionar um novo registro no multifield!

Assim que eu edito ou adiciono um novo registro no multifield todos as colunas da tabela do banco que contém a qtde e o valor unitário são apagadas.

Muito estranho.

Alguém pode me socorrer com esse problema, por favor!
RC

Depois de incansáveis tentativas, eis que cheguei no resultado que desejava.

Vou postar aqui a solução que encontrei para quem um dia precisar fazer o mesmo

O onEdit ficou assim:
  1. <?php
  2.     function onEdit($param) {
  3.         try {
  4.             if (isset($param['key'])) {
  5.                 $key $param['key'];
  6.                 TTransaction::open('permission');
  7.                 
  8.                 //Contém os dados do Formulário
  9.                 $object = new Entrada($key);
  10.                 $object->dataentrada TDate::date2br($object->dataentrada);
  11.                 $object->datanotafiscal TDate::date2br($object->datanotafiscal);
  12.                 
  13.                 //Contém os dados do TMultiField 
  14.                 $object->produtos $object->getProdutos();                            
  15.                 
  16.                 $this->form->setData($object);
  17.                 TTransaction::close();
  18.             } else {
  19.                 $this->form->clear();
  20.             }
  21.         } catch (Exception $e) {
  22.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  23.             TTransaction::rollback();
  24.         }
  25.     }
  26. ?>


E no model Entrada eu alterei o método getProdutos para o seguinte:
  1. <?php
  2.     public function getProdutos()
  3.     {                        
  4.         $repository = new TRepository('EntradaItem');
  5.         $criteria = new TCriteria;
  6.         $criteria->add(new TFilter('id_entrada''='$this->id));
  7.         $entrada_produtos $repository->load($criteria);
  8.        
  9.         //Converte QTDE e VALORUNITARIO para valor monetário. Ex: 5,25
  10.         $resultado = array();
  11.         foreach ($entrada_produtos as $ent_prod) {
  12.             $ent_prod->qtde Uteis::numeroBrasil($ent_prod->qtde);
  13.             $ent_prod->valorunitario Uteis::numeroBrasil($ent_prod->valorunitario);
  14.             $resultado [] = $ent_prod;
  15.         }
  16.         return $resultado;
  17.         
  18.     }
  19. ?>


A classe Uteis é uma colaboração do Ricardo Câmara. Eu peguei neste link: www.adianti.com.br/forum/pt/view_1582?erro-na-soma-ao-formatar-valor