Filtro de campo BIT Bom dia. Estou com um problema para filtrar um campo do tipo BIT. Abaixo está a estrutura do TRecord (Cliente.class.php): ...
RL
Filtro de campo BIT  
Bom dia. Estou com um problema para filtrar um campo do tipo BIT.

Abaixo está a estrutura do TRecord (Cliente.class.php):
 
  1. <?php
  2. public function __construct($id = NULL, $callObjectLoad = TRUE)
  3. {
  4. parent::__construct($id, $callObjectLoad);
  5. parent::addAttribute('id_revenda') ; // Id da Revenda
  6. parent::addAttribute('id_mercado') ; // Id do Tipo de mercado
  7. parent::addAttribute('id_pconta') ; // Id do Plano de conta
  8. parent::addAttribute('id_ender_cob') ; // Id do Endereço de cobrança
  9. parent::addAttribute('id_ender_ent') ; // Id do Endereço de entrega
  10. parent::addAttribute('id_vendedor') ; // Id do vendedor
  11. parent::addAttribute('vl_credito_limt'); // Valor do limite de crédito
  12. parent::addAttribute('vl_credito_disp'); // Valor do crédito disponível
  13. parent::addAttribute('nm_email') ; // E-mail de contato
  14. parent::addAttribute('fg_ex_cliente') ; // Se é um ex-cliente ou não
  15. parent::addAttribute('fg_bloqueado') ; // Se o cliente está bloqueado para compra
  16. parent::addAttribute('dt_serasa') ; // Data de consulta no SERASA
  17. parent::addAttribute('nr_lat') ; // Número da latitude (para mapeamento/rota)
  18. parent::addAttribute('nr_lgt') ; // Número da longitude (para mapeamento/rota)
  19. parent::addAttribute('st_ativo') ; // Se o cliente está ativo ou não
  20. parent::addAttribute('nm_login') ; // Nome do login
  21. parent::addAttribute('dt_upd') ; // Data da última alteração
  22. }
  23. ?>


Os campos: FG_EX_CLIENTE, FG_BLOQUEADO e ST_ATIVO são campos do tipo BIT no banco MS SQL, como mostrado abaixo:
COLUNA TIPO -------------------- ---------- id_cliente int id_revenda int id_mercado int id_pconta int id_ender_cob int id_ender_ent int id_vendedor int vl_credito_limt decimal vl_credito_disp decimal nm_email varchar fg_ex_cliente bit fg_bloqueado bit dt_serasa date nr_lat float nr_lgt float st_ativo bit nm_login varchar dt_upd datetime2 (18 rows affected)


Abaixo segue o código da listagem do tipo TPage (ClienteList.class.php) apenas onde estão os campos de busca:
 
  1. <?php
  2. public function __construct()
  3. {
  4. parent::__construct();
  5. $criteria = TCriteria::create(['id_revenda'=> TSession::getValue('id_revenda')]);
  6. $this->setDatabase('base');
  7. $this->setActiveRecord('Cliente');
  8. $this->setDefaultOrder('id_cliente', 'asc');
  9. $this->setCriteria($criteria);
  10. $this->addFilterField('id_cliente' , '=');
  11. $this->addFilterField('id_mercado' , '=');
  12. $this->addFilterField('id_vendedor' , '=');
  13. $this->addFilterField('fg_ex_cliente', '=');
  14. $this->addFilterField('fg_bloqueado' , '=');
  15. $this->addFilterField('st_ativo' , '=');
  16. // creates the form
  17. $this->form = new BootstrapFormBuilder('form_Cliente');
  18. $this->form->setFormTitle('Cliente');
  19. // create the form fields
  20. $id_cliente = new TDBUniqueSearch('id_cliente', 'base', 'Cliente' , 'id_cliente' , 'id_revenda' );
  21. $id_mercado = new TDBCombo('id_mercado' , 'base', 'Mercado' , 'id_mercado' , 'nm_mercado' );
  22. $id_vendedor = new TDBCombo('id_vendedor' , 'base', 'Vendedor' , 'id_vendedor' , 'id_vendedor');
  23. $fg_ex_cliente = new TCombo('fg_ex_cliente');
  24. $fg_bloqueado = new TCombo('fg_bloqueado' );
  25. $st_ativo = new TCombo('st_ativo' );
  26. $fg_ex_cliente->addItems(CM_Vetores::SimNao());
  27. $fg_bloqueado-> addItems(CM_Vetores::SimNao());
  28. $st_ativo-> addItems(CM_Vetores::SimNao());
  29. // add the fields
  30. $this->form->addFields([ new TLabel('Cliente') ], [ $id_cliente ], [ new TLabel('Ex-Cliente')], [ $fg_ex_cliente]);
  31. $this->form->addFields([ new TLabel('Mercado') ], [ $id_mercado ], [ new TLabel('Bloqueado') ], [ $fg_bloqueado ]);
  32. $this->form->addFields([ new TLabel('Vendedor')], [ $id_vendedor], [ new TLabel('Ativo') ], [ $st_ativo ]);
  33. // keep the form filled during navigation with session data
  34. $this->form->setData( TSession::getValue('Cliente_filter_data') );
  35. ?>


Anexo estou enviando uma imagem do print da tela que mostra como ficou o campo de busca.

Quando seleciono SIM, a busca funciona corretamente trazendo apenas os campos com valor "1" do banco. Porém quando seleciono NÃO a busca trás todos os registros independente do valor.

Eu já verifiquei o resultado do campo de busca e os valores enviados para o método addFilterField() estão corretos. Não estou conseguindo avançar desse ponto por isso peço a ajuda de vocês.

Obrigado.

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)


NR

Quando o valor de um campo é = 0 pode acontecer de ser interpretado como nulo ou vazio em alguns ifs e talvez por isso a busca esteja trazendo todos os resultados. Veja a função setBooleanMode da classe TCombo, ela pode ser útil nesse caso pois substitui internamente os valores 0 e 1 por 1 e 2 na hora do post.
RL

Bom dia Nataniel. Obrigado pela dica!

Eu acabei mudando o armazenamento no banco para TINYINT e esto alterei as funções da minha biblioteca. Agora além de usar minha biblioteca eu também consigo usar o método setBooleanMode.

Abs,