예제 #1
0
 /**
  * Obtem pessoa por CNPJ
  * @param PessoaJuridicaValueObject $voPessoaJuridica
  */
 public function findByCnpj(PessoaJuridicaValueObject $voPessoaJuridica)
 {
     try {
         /*
          *       SELECT
          *           PJ.sq_pessoa,
          *           PJ.nu_cnpj,
          *           PJ.no_fantasia,
          *           PJ.sg_empresa,
          *           PJ.dt_abertura,
          *           P.no_pessoa,
          *           P.sq_tipo_pessoa
          *       FROM
          *           corporativo.pessoa_juridica PJ
          *       JOIN
          *           corporativo.pessoa P ON P.sq_pessoa = PJ.sq_pessoa
          *       WHERE PJ.nu_cnpj = :nu_cnpj
          **/
         # obtem a entidade com base na anotacao
         $ePessoa = $this->getEntity(array('pes' => $this->annotation()->load()->class));
         $ePessoaJuridica = $this->getEntity(array('pej' => PessoaJuridicaValueObject::factory()));
         # cria objeto de consulta baseando-se em email
         $query = $this->getQuery($ePessoa)->join($ePessoaJuridica, $ePessoa->column('sqPessoa')->equals($ePessoaJuridica->column('sqPessoa')))->where($ePessoaJuridica->column('nuCnpj')->equals($voPessoaJuridica->getNuCnpj()));
         # executa query
         return $this->execute($query);
     } catch (IllegalArgumentException $iae) {
         throw new PersistException(self::INVALID_PARAMETER);
     } catch (\Exception $exp) {
         throw new PersistException(self::UNEXPECTED_EXCEPTION);
     }
 }
 /**
  * Efetua a validação
  * @param PessoaValueObject $voPessoa
  * @param PessoaJuridicaValueObject $voPessoaJuridica
  * @throws BusinessException
  */
 private function _validatePessoaJuridica(PessoaValueObject $voPessoa, PessoaJuridicaValueObject $voPessoaJuridica)
 {
     if (trim($voPessoaJuridica->getNuCnpj())) {
         BusinessException::throwsExceptionIfParamIsNull(Validate::isCnpj($voPessoaJuridica->getNuCnpj()), self::INVALID_CNPJ);
     }
     if (trim($voPessoaJuridica->getDtAbertura())) {
         # Efetua sanitizacao de datas
         $dateAbertura = $voPessoaJuridica->getDtAbertura();
         $voPessoaJuridica->setDtAbertura(Date::factory($dateAbertura, 'd/m/Y')->output());
     }
 }