Lançado Adianti Framework 8.1!
Clique aqui para saber mais
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->setDataTSession::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,