/**
  * @param object $oContribuinte
  * @param array  $aDadosComuns
  * @param array  $aDadosApuracaoMensal
  */
 public function __construct($oContribuinte, array $aDadosComuns, array $aDadosApuracaoMensal)
 {
     $this->oContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('id', $oContribuinte->getContribuintes());
     $this->carregaIdentificador($aDadosComuns[0], $aDadosApuracaoMensal[0]);
     $this->carregarDadosContas($aDadosComuns);
     $this->carregarDadosReceitas($aDadosApuracaoMensal);
 }
 /**
  * Processa o arquivo Webservice
  */
 public function consultaDados($oParametros)
 {
     try {
         $sNomeTempArquivo = TEMP_PATH . "/ConsultarSituacaoLoteRps-" . time() . ".xml";
         /* gravo o xml enviado */
         $fp = fopen($sNomeTempArquivo, "w");
         fwrite($fp, $oParametros);
         fclose($fp);
         /* carrega o arquivo em memoria para manipulação */
         $oXml = simplexml_load_file($sNomeTempArquivo);
         $oRetorno = new StdClass();
         $oRetorno->iNumeroLote = '';
         $oRetorno->iSituacao = 1;
         $oParametrosArquivo = $oXml->ConsultarSituacaoLoteRpsEnvio;
         if (!$this->validarRequisicao($oParametrosArquivo)) {
             return $this->processaRetornoWebService($oRetorno);
         }
         /**
          * Busca usuário contribuinte pelo cnpj_cpf
          */
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $oParametrosArquivo->Prestador->Cnpj);
         if (empty($oUsuarioContribuinte)) {
             $this->adicionarInconsistencia('E45');
             return $this->processaRetornoWebService($oRetorno);
         }
         $oProtocolo = Administrativo_Model_Protocolo::getByAttribute('protocolo', $oParametrosArquivo->Protocolo);
         if (!$oProtocolo) {
             // situação de não recebido
             $oRetorno->iNumeroLote = $oParametrosArquivo->Protocolo;
             $oRetorno->iSituacao = 1;
             return $this->processaRetornoWebService($oRetorno);
         }
         $oProtocoloImportacao = Contribuinte_Model_ProtocoloImportacao::getByAttribute('protocolo', $oProtocolo->getId());
         if (!$oProtocoloImportacao->getImportacao()) {
             // situação de recebido mas processado com erro
             $oRetorno->iNumeroLote = $oProtocoloImportacao->getNumeroLote();
             $oRetorno->iSituacao = 3;
             return $this->processaRetornoWebService($oRetorno);
         }
         // situação de recebido e processado com sucesso
         $oRetorno->iNumeroLote = $oProtocoloImportacao->getNumeroLote();
         $oRetorno->iSituacao = 4;
         return $this->processaRetornoWebService($oRetorno);
     } catch (Exception $oErro) {
         return $oErro->getMessage();
     }
 }
 /**
  * @param integer $iIdContribuinte
  */
 public static function consultaGuiasDesif($iIdContribuinte)
 {
     try {
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('id', $iIdContribuinte);
         $em = parent::getEm();
         $sDql = 'SELECT g FROM Contribuinte\\Guia g INNER JOIN  Contribuinte\\DesifContaGuia d WITH g.id = d.guia';
         $sDql .= ' WHERE g.id_contribuinte = :c AND g.tipo_documento_origem = :t';
         $oQuery = $em->createQuery($sDql)->setParameters(array('t' => self::$DOCUMENTO_ORIGEM_NFSE, 'c' => $oUsuarioContribuinte->getEntity()));
         $aResultado = $oQuery->getResult();
         $aGuias = array();
         if ($aResultado != NULL) {
             foreach ($aResultado as $q) {
                 $aGuias[] = new self($q);
             }
         }
         return $aGuias;
     } catch (Excpetion $oErro) {
         throw $oErro;
     }
 }
 /**
  * Acition para para carregar o form de emissão de contas
  */
 public function emitirContasAction()
 {
     $oContribuinte = $this->_session->contribuinte;
     $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('id', $oContribuinte->getIdUsuarioContribuinte());
     $aImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getByAttribute('contribuinte', $oUsuarioContribuinte->getEntity());
     if (!empty($aImportacaoDesif)) {
         if (is_array($aImportacaoDesif)) {
             foreach ($aImportacaoDesif as $oImportacaoDesif) {
                 $aComp = array();
                 $aComp[] = substr($oImportacaoDesif->getCompetenciaInicial(), 0, 4);
                 $aComp[] = substr($oImportacaoDesif->getCompetenciaInicial(), 4);
                 $aCompetencias[$oImportacaoDesif->getId()] = implode("/", $aComp);
             }
         } else {
             $aComp = array();
             $aComp[] = substr($aImportacaoDesif->getCompetenciaInicial(), 0, 4);
             $aComp[] = substr($aImportacaoDesif->getCompetenciaInicial(), 4);
             $aCompetencias[$aImportacaoDesif->getId()] = implode("/", $aComp);
         }
         $oForm = new Contribuinte_Form_EmitirContasDesif($aCompetencias);
         $this->view->oForm = $oForm;
     }
 }
 /**
  * Realiza a execução da pesquisa dos dados conforme arquivo de requisicao
  *
  * @param $sArquivo
  * @return string
  */
 public function processar($sArquivo)
 {
     if (empty($sArquivo)) {
         $this->adicionarInconsistencia('E160');
     }
     $sNomeTempArquivo = TEMP_PATH . "/ConsultarLoteRps-" . time() . ".xml";
     /* gravo o xml enviado */
     $fp = fopen($sNomeTempArquivo, "w");
     fwrite($fp, $sArquivo);
     fclose($fp);
     $this->oRequisicao = simplexml_load_string($sArquivo);
     if (empty($this->oRequisicao)) {
         $this->adicionarInconsistencia('E160');
     }
     if (!$this->validarRequisicao()) {
         return $this->escreverRetorno();
     }
     $sCnpj = $this->oRequisicao->Prestador->Cnpj;
     $sNumeroProtocolo = $this->oRequisicao->Protocolo;
     $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $sCnpj);
     if (empty($oUsuarioContribuinte)) {
         $this->adicionarInconsistencia('E45');
     }
     $oProtocolo = Administrativo_Model_Protocolo::getByAttribute('protocolo', $sNumeroProtocolo);
     if (empty($oProtocolo)) {
         $this->adicionarInconsistencia('E86');
         return $this->escreverRetorno();
     }
     $oProtocoloImportacao = Contribuinte_Model_ProtocoloImportacao::getByAttribute('protocolo', $oProtocolo->getId());
     if (!$oProtocoloImportacao->getImportacao()) {
         $this->adicionarInconsistencia('E86');
         return $this->escreverRetorno();
     }
     $this->aNotas = $oProtocoloImportacao->getNotasImportadas();
     return $this->escreverRetorno();
 }
 /**
  * Informacoes da Dms filtrando por inscricao municipal, competencia e operacao.
  *
  * @param string|null $sCpfCnpj  CPF/CNPJ do Contribuinte
  * @param integer     $iMes      Mês da competência
  * @param integer     $iAno      Ano da competência
  * @param string      $sOperacao Tipo da Operacao Contribuinte_Model_Dms::SAIDA|Contribuinte_Model_Dms::ENTRADA
  * @return array
  * @throws Exception
  */
 public static function getCompetenciaByCpfCnpj($sCpfCnpj = NULL, $iMes, $iAno, $sOperacao = self::SAIDA)
 {
     if ($sCpfCnpj == NULL) {
         throw new Exception('Parametro Cnpj/Cpf é obrigatório.');
     }
     $aUsuariosContribuintes = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $sCpfCnpj);
     if (!is_array($aUsuariosContribuintes)) {
         $aUsuariosContribuintes = array($aUsuariosContribuintes);
     }
     $aContribuintes = array();
     foreach ($aUsuariosContribuintes as $oContribuinte) {
         $aContribuintes[] = $oContribuinte->getId();
     }
     $sCampoPesquisa = array('id_contribuinte' => $aContribuintes, 'ano_comp' => $iAno, 'mes_comp' => $iMes, 'operacao' => $sOperacao);
     $sCamposOrdem = array('id' => 'DESC');
     return self::getByAttributes($sCampoPesquisa, $sCamposOrdem);
 }
 /**
  * Vincula os usuários ao contadores
  */
 public function vincularAction()
 {
     $usuario = $this->getRequest()->getParam('usuario');
     $usuario = Administrativo_Model_Usuario::getById($usuario);
     $contribuinte = $this->getRequest()->getParam('contribuinte');
     if ($contribuinte == NULL) {
         $this->_helper->getHelper('FlashMessenger')->addMessage(array('error' => $this->translate->_('Não foi possível vincular o contribuinte.')));
         $this->_redirector->gotoSimple('editar', 'usuario', 'administrativo', array('id' => $usuario->getId()));
     }
     $usuario_contrib = new Administrativo_Model_UsuarioContribuinte();
     $oDadosContribuinte = $usuario_contrib->getByAttribute('im', $contribuinte);
     if ($oDadosContribuinte != NULL) {
         $this->_helper->getHelper('FlashMessenger')->addMessage(array('error' => $this->translate->_('Contribuinte já está vinculado ao usuário.')));
         $this->_redirector->gotoSimple('editar', 'usuario', 'administrativo', array('id' => $usuario->getId()));
     }
     $res = $usuario_contrib->persist(array('usuario' => $usuario, 'contribuinte' => $contribuinte));
     $usuario->addUsuarioContribuinte($usuario_contrib);
     if ($res === NULL) {
         $this->_helper->getHelper('FlashMessenger')->addMessage(array('error' => $this->translate->_('Não foi possível vincular o contribuinte.')));
     } else {
         $this->_helper->getHelper('FlashMessenger')->addMessage(array('success' => $this->translate->_('Contribuinte vinculado com sucesso.')));
     }
     $this->_redirector->gotoSimple('editar', 'usuario', 'administrativo', array('id' => $usuario->getId(), 'cont' => $usuario_contrib->getId()));
 }
 /**
  * Metodo Responsável por atualizar a lista de contribuintes
  *
  * @param array $contribuintes_novos
  */
 public function atualizaListaContribuintes($contribuintes_novos)
 {
     $contribuintes_velhos = Administrativo_Model_UsuarioContribuinte::getByAttribute('usuario', $this->getId());
     $novos_im = array();
     $velhos_im = array();
     // monta array de inscricoes novas. recebidas pelo webservice
     foreach ($contribuintes_novos as $c) {
         $novos_im[$c->attr('inscricao')] = $c;
     }
     if (!empty($contribuintes_velhos)) {
         // monta array de inscricoes velhas. recebidas do banco de dados
         if (is_array($contribuintes_velhos)) {
             foreach ($contribuintes_velhos as $c) {
                 $velhos_im[$c->getIm()] = $c;
             }
         } else {
             $velhos_im[$contribuintes_velhos->getIm()] = $contribuintes_velhos;
         }
     }
     // diferença entre as novas e velhas são as inscricoes que precisam ser adicionadas
     $adicionar = array_diff_key($novos_im, $velhos_im);
     // diferença entre as velhas e as novas sao as incricões que precisam ser removidas
     $remover = array_diff_key($velhos_im, $novos_im);
     // Reabilita vinculos existentes
     foreach ($novos_im as $oNovoContribuinte) {
         if (isset($velhos_im[$oNovoContribuinte->attr('inscricao')])) {
             $oUsuarioContribuinteExistente = $velhos_im[$oNovoContribuinte->attr('inscricao')];
             $oUsuarioContribuinteExistente->setHabilitado(TRUE);
             $oUsuarioContribuinteExistente->persist();
         }
     }
     // Cria novos vinculos
     foreach ($adicionar as $oNovoContribuinte) {
         $oUsuarioContribuinte = new Administrativo_Model_UsuarioContribuinte();
         $oUsuarioContribuinte->setUsuario($this->entity);
         $oUsuarioContribuinte->setIm($oNovoContribuinte->attr('inscricao'));
         $oUsuarioContribuinte->setCnpjCpf($oNovoContribuinte->attr('cnpj'));
         $oUsuarioContribuinte->setHabilitado(true);
         $this->addUsuarioContribuinte($oUsuarioContribuinte);
         $oUsuarioContribuinte->persist();
     }
     // Desabilita o usuario contribuinte
     foreach ($remover as $oUsuarioRemover) {
         $oUsuarioRemover->setHabilitado(FALSE);
         $oUsuarioRemover->persist();
     }
 }
 /**
  * Retorna a instancia do contribuinte atraves do Cnpj/cpf
  *
  * @param string $sCpfCnpj
  * @return bool|Contribuinte_Model_ContribuinteEventual|object
  * @throws Exception
  */
 public static function getByCpfCnpj($sCpfCnpj)
 {
     $oContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $sCpfCnpj);
     // Se retornar mais de um contribuinte pega o primeiro da lista
     if (is_array($oContribuinte)) {
         $oContribuinte = reset($oContribuinte);
     }
     if ($oContribuinte->getUsuario()->getCnpj() == '') {
         throw new Exception('Contribuinte eventual não possui CPF / CNPJ.');
     }
     $oCgm = self::getByCpfCnpjWebService($sCpfCnpj);
     if (!empty($oCgm)) {
         $oContribuinteEventual = Contribuinte_Model_ContribuinteEventual::preencherInstanciaContribuinte($oCgm);
         $oContribuinteEventual->setIdUsuarioContribuinte($oContribuinte->getId());
         return $oContribuinteEventual;
     }
     return FALSE;
 }
 public static function atualizaTipoEmissao($aContribuintesAtualizar)
 {
     if (!is_array($aContribuintesAtualizar) && count($aContribuintesAtualizar) <= 0) {
         throw new Exception('Problemas ao atualizar tipo de emissão dos contribuintes!');
     }
     foreach ($aContribuintesAtualizar as $aUsuarioContribuinteAtualizar) {
         $aUsuarioContribuinte = NULL;
         $iTipoEmissaoWeb = NULL;
         $iWebServiceUsuarioTipoEmissao = NULL;
         if ($aUsuarioContribuinteAtualizar == NULL) {
             throw new Exception('Problemas ao atualizar tipo de emissão dos contribuintes!');
         }
         if (in_array('attr', get_class_methods($aUsuarioContribuinteAtualizar))) {
             $iTipoEmissaoWeb = $aUsuarioContribuinteAtualizar->attr('tipo_emissao');
             $iWebServiceUsuarioTipoEmissao = !empty($iTipoEmissaoWeb) ? $iTipoEmissaoWeb : 9;
             $aUsuarioContribuintes = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $aUsuarioContribuinteAtualizar->attr('cnpj'));
             $iCgm = $aUsuarioContribuinteAtualizar->attr('cgm');
         } else {
             // quando o usuario é tomador que não tem inscrição os dados vem de outro metodo webservice
             if (empty($aUsuarioContribuinteAtualizar->cgccpf) || empty($aUsuarioContribuinteAtualizar->tipo_emissao)) {
                 $aUsuarioContribuinteAtualizar->cgccpf = $aUsuarioContribuinteAtualizar->iCnpj;
                 $aUsuarioContribuinteAtualizar->tipo_emissao = 9;
                 //tipo emissao tomador
                 $aUsuarioContribuinteAtualizar->numero_cgm = $aUsuarioContribuinteAtualizar->iCodigoCgm;
             }
             $iTipoEmissaoWeb = $aUsuarioContribuinteAtualizar->tipo_emissao;
             $iWebServiceUsuarioTipoEmissao = !empty($iTipoEmissaoWeb) ? $iTipoEmissaoWeb : 9;
             $aUsuarioContribuintes = Administrativo_Model_UsuarioContribuinte::getByAttribute('cnpj_cpf', $aUsuarioContribuinteAtualizar->cgccpf);
             $iCgm = $aUsuarioContribuinteAtualizar->numero_cgm;
         }
         if (!is_array($aUsuarioContribuintes)) {
             $aUsuarioContribuintes = array($aUsuarioContribuintes);
         }
         foreach ($aUsuarioContribuintes as $oContribuinte) {
             if (!$oContribuinte instanceof Administrativo_Model_UsuarioContribuinte) {
                 continue;
             }
             if ($iTipoEmissaoWeb == $oContribuinte->getTipoEmissao()) {
                 continue;
             }
             $aTiposEmissao = array(Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_DMS, Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA);
             $iTipoContribuinte = Administrativo_Model_UsuarioContribuinte::CONTRIBUINTE_MUNICIPAL;
             $iCgmAtualizar = NULL;
             if (!in_array($iWebServiceUsuarioTipoEmissao, $aTiposEmissao)) {
                 $iTipoContribuinte = Administrativo_Model_UsuarioContribuinte::CONTRIBUINTE_EVENTUAL;
                 $iCgmAtualizar = $iCgm;
             }
             $aDados = array('usuario' => $oContribuinte->getUsuario(), 'contribuinte' => $oContribuinte->getIm(), 'cnpj_cpf' => $oContribuinte->getCnpjCpf(), 'tipo_emissao' => $iWebServiceUsuarioTipoEmissao, 'tipo_contribuinte' => $iTipoContribuinte, 'cgm' => $iCgmAtualizar);
             $oContribuinte->persist($aDados);
             $oContribuinte->limparAcoes(TRUE);
             $oTipoEmissaoPerfil = $oContribuinte->getPerfilTipoEmissao($iWebServiceUsuarioTipoEmissao);
             $oPerfil = Administrativo_Model_Perfil::getById($oTipoEmissaoPerfil->iCodigoPerfil);
             $oContribuinte->adicionaAcoes($oPerfil->getAcoes());
         }
     }
 }