/**
  * Retorna Documentos por Pessoa
  * @param PessoaValueObject $voPessoa
  * @throws PersistException
  */
 public function findByPessoa(PessoaValueObject $voPessoa)
 {
     try {
         /*
          * SELECT pe.sq_pessoa,
          *        do.tx_valor,
          *        ad.no_atributo_documento,
          *        td.no_tipo_documento
          * FROM   corporativo.pessoa AS pe
          * INNER JOIN corporativo.documento AS do ON do.sq_pessoa = pe.sq_pessoa
          * INNER JOIN corporativo.atributo_tipo_documento AS atd ON atd.sq_atributo_documento = do.sq_atributo_tipo_documento
          * INNER JOIN corporativo.atributo_documento AS ad ON ad.sq_atributo_documento = atd.sq_atributo_documento
          * INNER JOIN corporativo.tipo_documento AS td ON td.sq_tipo_documento = atd.sq_tipo_documento
          * WHERE (pe.sq_pessoa = :sq_pessoa);
          */
         # obtem a entidade com base na anotacao
         $eDocumento = $this->getEntity(array('doc' => $this->annotation()->load()->class));
         # cria entidade Pessoa
         $ePessoa = $this->getEntity(array('pes' => PessoaValueObject::factory()));
         # cria entidade AtributoTipoDocumento
         $eAtributoTipoDoc = $this->getEntity(array('atd' => AtributoTipoDocumentoValueObject::factory()));
         # cria entidade AtributoDocumento
         $eAtributoDocumento = $this->getEntity(array('ado' => AtributoDocumentoValueObject::factory()));
         # cria entidade TipoDocumento
         $eTipoDocumento = $this->getEntity(array('tdo' => TipoDocumentoValueObject::factory()));
         # cria objeto de consulta baseando-se em AttrTipoDoc
         $query = $this->getQuery($ePessoa)->join($eDocumento, $ePessoa->column('sqPessoa')->equals($eDocumento->column('sqPessoa')))->join($eAtributoTipoDoc, $eDocumento->column('sqAtributoTipoDocumento')->equals($eAtributoTipoDoc->column('sqAtributoTipoDocumento')))->join($eAtributoDocumento, $eAtributoTipoDoc->column('sqAtributoDocumento')->equals($eAtributoDocumento->column('sqAtributoDocumento')))->join($eTipoDocumento, $eAtributoTipoDoc->column('sqTipoDocumento')->equals($eTipoDocumento->column('sqTipoDocumento')))->where($ePessoa->column('sqPessoa')->equals($voPessoa->getSqPessoa()));
         return $this->execute($query);
     } catch (\Exception $excp) {
         throw new PersistException($excp->getMessage());
     }
 }
function libCorpSavePessoa($ctPessoaSave, $userCredential = NULL)
{
    try {
        Registry::factory()->setCredential($userCredential);
        $voPessoa = PessoaValueObject::factory()->loadData($ctPessoaSave);
        PessoaBusiness::factory(NULL, 'libcorp')->save($voPessoa);
        return sprintf(XML_RESULT, 'success', '00000', $voPessoa->toXml());
    } catch (\Exception $excp) {
        return sprintf(XML_RESULT, 'failure', $excp->getCode(), $excp->getMessage());
    }
}
function libCorpUpdatePessoaJuridica($ctPessoaJuridicaUpdate, $userCredential = NULL)
{
    Registry::factory()->setCredential($userCredential);
    $xmlResult = '<result><status>%s</status><errocode>%s</errocode><response>%s</response></result>';
    try {
        $voPessoa = PessoaValueObject::factory()->loadData($ctPessoaJuridicaUpdate);
        $voPessoaJuridica = PessoaJuridicaValueObject::factory()->loadData($ctPessoaJuridicaUpdate);
        $voPessoaJuridica = PessoaJuridicaBusiness::factory()->updatePessoaJuridica($voPessoa, $voPessoaJuridica);
        return sprintf($xmlResult, 'success', '00000', $voPessoaJuridica->toXml());
    } catch (\Exception $excp) {
        return sprintf($xmlResult, 'failure', $excp->getCode(), $excp->getMessage());
    }
}
function libCorpSavePessoaFisica($ctPessoaFisicaSave, $userCredential = NULL)
{
    Registry::factory()->setCredential($userCredential);
    $lcCorpPFTemplateMessage = '<result><status>%s</status><errocode>%s</errocode><response>%s</response></result>';
    try {
        $voPessoa = PessoaValueObject::factory()->loadData($ctPessoaFisicaSave);
        $voPessoaFisica = PessoaFisicaValueObject::factory()->loadData($ctPessoaFisicaSave);
        $voPessoaFisica = PessoaFisicaBusiness::factory(NULL, 'libcorp')->savePessoaFisica($voPessoa, $voPessoaFisica);
        return sprintf($lcCorpPFTemplateMessage, 'success', '00000', $voPessoaFisica->toXml());
    } catch (\Exception $excp) {
        return sprintf($lcCorpPFTemplateMessage, 'failure', $excp->getCode(), $excp->getMessage());
    }
}
 /**
  * @param string $voPessoaJuridica
  * @return PessoaJuridicaModel
  * */
 public function findByCnpj($nuCnpj)
 {
     $ePessoaJuridica = $this->getEntity(array('ps' => PessoaJuridicaValueObject::factory()));
     $ePessoa = $this->getEntity(PessoaValueObject::factory());
     # cria consulta
     $query = $this->getQuery($ePessoa)->join($ePessoaJuridica, $ePessoaJuridica->column('sqPessoa')->equals($ePessoa->column('sqPessoa')))->where($ePessoaJuridica->column('nuCnpj')->like($nuCnpj . '%'));
     try {
         return $this->execute($query);
     } catch (PersistException $pExc) {
         # efetua log de erro ;
         throw new ModelException(self::REQUIRE_DATA_ERROR_MESSAGE);
     }
 }
function libCorpPessoaByNome($noPessoa)
{
    try {
        $voPessoa = PessoaValueObject::factory()->setNoPessoa($noPessoa);
        $tmpResult = PessoaBusiness::factory()->findByNome($voPessoa);
        $tmpTxt = '<result>';
        foreach ($tmpResult as $result) {
            $tmpTxt .= $result->toXml();
        }
        $tmpTxt .= '</result>';
        return $tmpTxt;
    } catch (\Exception $excp) {
        throw new IOException($excp->getMessage());
    }
}
function libCorpUnidadeOrgByUndDescenNome($noPessoa)
{
    try {
        $voPessoa = PessoaValueObject::factory()->setnoPessoa($noPessoa);
        $unidadeOrgBusiness = UnidadeOrgBusiness::factory(NULL, 'libcorp');
        $tmpTxt = '<result>';
        $tmpResult = $unidadeOrgBusiness->findUndDescentralizadaByNome($voPessoa);
        foreach ($tmpResult as $result) {
            $tmpTxt .= $result->toXml();
        }
        $tmpTxt .= '</result>';
        return $tmpTxt;
    } catch (\Exception $excp) {
        throw new IOException($excp->getMessage());
    }
}
function libCorpSavePessoaJuridica($ctSavePessoaJuridica, $userCredential = NULL)
{
    Registry::factory()->setCredential($userCredential);
    $xmlResult = '<result><status>%s</status><errocode>%s</errocode><response>%s</response></result>';
    try {
        if (!isset($ctSavePessoaJuridica['inTipoEstabelecimento'])) {
            $ctSavePessoaJuridica['inTipoEstabelecimento'] = TRUE;
        }
        $voPessoa = PessoaValueObject::factory()->loadData($ctSavePessoaJuridica);
        $voPessoaJuridica = PessoaJuridicaValueObject::factory()->loadData($ctSavePessoaJuridica);
        $voPessoaJuridica = PessoaJuridicaBusiness::factory(NULL, 'libcorp')->savePessoaJuridica($voPessoa, $voPessoaJuridica);
        return sprintf($xmlResult, 'success', '00000', $voPessoaJuridica->toXml());
    } catch (\Exception $excp) {
        return sprintf($xmlResult, 'failure', $excp->getCode(), $excp->getMessage());
    }
}
 /**
  * Efetua a busca por UnidadeDescentralizada e por Nome
  * Solicitacao via Ticket #459
  * @param PessoaValueObject $voPessoa
  * @throws PersistException
  */
 public function findundDescentralizadaByNome(PessoaValueObject $voPessoa)
 {
     try {
         /*
          * SELECT [fields]
          * FROM tipo_unidade_org_hierarq vwTipo
          * JOIN unidade_org uniOrg ON (vwTipo.sq_tipo_unidade_org = uniOrg.sq_tipo_unidade)
          * INNER JOIN pessoa pes ON (uniOrg.sq_pessoa = pes.sq_pessoa)
          * WHERE trilha_sigla ilike '%ud--%' AND pes.no_pessoa ilike '%Parque%'
          */
         # obtem a entidade com base na anotacao
         $eUnidadeOrg = $this->getEntity(array('unOrg' => $this->annotation()->load()->class));
         # Busca pela View
         $eVwTipoUnidade = $this->getEntity(array('vwTipoUnidadeHierarq' => VwTipoUnidadeOrgHierarqValueObject::factory()));
         $ePessoa = $this->getEntity(array('pess' => PessoaValueObject::factory()));
         $query = $this->getQuery($eVwTipoUnidade)->join($eUnidadeOrg, $eVwTipoUnidade->column('sqTipoUnidadeOrg')->equals($eUnidadeOrg->column('sqTipoUnidade')))->join($ePessoa, $eUnidadeOrg->column('sqPessoa')->equals($ePessoa->column('sqPessoa')))->where($eVwTipoUnidade->column('trilhaSigla')->ilike('%' . self::PAR_UNIDADE_DESCENTRALIZADA . '%'))->and($ePessoa->column('noPessoa')->ilike('%' . $voPessoa->getNoPessoa() . '%'));
         # executa query
         return $this->execute($query);
     } catch (IllegalArgumentException $iae) {
         throw new PersistException('Um ou mais paramentros informados para na montagem da query foi avaliado como inválido', 0, $iae);
     } catch (\Exception $exp) {
         throw new PersistException('Um erro inesperado ocorreu ao tentar executar a recuperação dos dados', 0, $exp);
     }
 }