/** * Adiciona parametros para realizar o filtro da grid * @param \Doctrine\ORM\QueryBuilder $query * @param \Core_Dto_Abstract $dto */ public function addWhere(\Doctrine\ORM\QueryBuilder $query, \Core_Dto_Abstract $dto) { $inputs = array('tp.sqTipoPessoa' => $dto->getSqTipoPessoa(), 'pf.nuCpf' => $dto->getNuCpf(), 'pj.nuCnpj' => $dto->getNuCnpj(), 'p.stRegistroAtivo' => $dto->getStRegistroAtivo()); switch ($dto->getSqTipoPessoa()) { case srvPessoa::SQ_TIPO_PESSOA_FISICA: $inputs['p.noPessoa'] = $dto->getNoPessoaFisica(); break; case srvPessoa::SQ_TIPO_PESSOA_JURIDICA: $inputs['p.noPessoa'] = $dto->getNoPessoaJuridica(); $inputs['nj.sqNaturezaJuridicaPai'] = $dto->getSqNaturezaJuridicaPai(); $inputs['nj.sqNaturezaJuridica'] = $dto->getSqNaturezaJuridica(); break; default: $inputs['p.noPessoa'] = $dto->getNoPessoaSemClass(); break; } $countParams = 0; foreach ($inputs as $field => $value) { if ($value != '') { if (strstr($field, 'sq') || strstr($field, 'nu') || strstr($field, 'st')) { if ($field == 'tp.sqTipoPessoa' && $value == srvPessoa::SEM_CLASSIFICACAO) { $query->andWhere($this->_em->createQueryBuilder()->expr()->in('tp.sqTipoPessoa', ':expre'))->setParameter('expre', array(srvPessoa::SQ_TIPO_PESSOA_FISICA, srvPessoa::SQ_TIPO_PESSOA_JURIDICA)); } else { $query->andWhere($field . ' = ?' . $countParams)->setParameter($countParams, \Zend_Filter::filterStatic($value, 'Digits')); } } else { $expre = $query->expr()->lower($query->expr()->trim($field)); $value = "%" . mb_strtolower(trim($value), 'UTF-8') . "%"; $query->andWhere($query->expr()->like('clear_accentuation(' . $expre . ')', $query->expr()->literal($this->translate($value)))); if ($dto->getSqTipoPessoa() == srvPessoa::SEM_CLASSIFICACAO || $dto->getSqTipoPessoa() == srvPessoa::SQ_TIPO_PESSOA_JURIDICA) { $expre = $query->expr()->lower($query->expr()->trim('pj.noFantasia')); $query->orWhere($query->expr()->like('clear_accentuation(' . $expre . ')', $query->expr()->literal($this->translate($value)))); } } $countParams++; } } }