/**
  * Retorna os dados para a emissão da nfse
  *
  * @param string $sCodigoVerificacao
  * @param object $oNota
  * @param object $oPrefeitura
  * @return array
  */
 public static function getDadosEmissao($sCodigoVerificacao, $oNota, $oPrefeitura)
 {
     /**
      * Verifica se os dados foram enviados pela verificar de autenticidade sem nescessidade de estar logado ao sistema
      */
     if ($oNota->getId_contribuinte()) {
         $oPrestador = Contribuinte_Model_Contribuinte::getById($oNota->getId_contribuinte());
     } else {
         $oPrestador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oNota->getP_im());
     }
     $oBaseUrlHelper = new Zend_View_Helper_BaseUrl();
     $oServerUrlHelper = new Zend_View_Helper_ServerUrl();
     // Calcula e divide a quantidade de páginas conforme os dados descritos no campo de 'Descrição do Serviço'
     $iTamanhoTotalTexto = strlen($oNota->getS_dados_discriminacao());
     $iQndPaginas = $iTamanhoTotalTexto > 800 ? 2 : 1;
     $aDados = array();
     // Quebra os modelos de nota em páginas conforme os dados descritos no campo de 'Descrição do Serviço'
     for ($iIndex = 1; $iIndex <= $iQndPaginas; $iIndex++) {
         // Dados de manipulação do cabeçalho
         $oDadosCabecalho = new StdClass();
         $oDadosCabecalho->sBrasao = $oBaseUrlHelper->baseUrl('/global/img/brasao.jpg');
         $oDadosCabecalho->oDadosPrefeitura = $oPrefeitura;
         if (getenv('APPLICATION_ENV') != 'production') {
             $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_sem_valor.png');
         } else {
             if ($oNota->getIdNotaSubstituta()) {
                 $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_substituida.gif');
             } else {
                 if ($oNota->getCancelada()) {
                     $oDadosCabecalho->sUrlTarja = $oBaseUrlHelper->baseUrl('/administrativo/img/nfse/tarja_cancelada.gif');
                 }
             }
         }
         // Gera o QRCode apenas para os modelos que exibem o mesmo
         if (in_array($oPrefeitura->getModeloImpressaoNfse(), array(2, 3))) {
             $aVerificacao = array('module' => 'auth', 'controller' => 'nfse', 'action' => 'autenticar-post', 'prestador_cnpjcpf' => $oNota->getP_cnpjcpf(), 'codigo_verificacao' => $sCodigoVerificacao);
             $sUrlVerificada = DBSeller_Helper_Url_Encrypt::encrypt(array('module' => 'default', 'controller' => 'index', 'action' => 'autentica', 'url' => $aVerificacao));
             //"codigo_verificacao/{$sCodigoVerificacao}/prestador_cnpjcpf/{$oNota->getP_cnpjcpf()}"));
             $sQRCodeImagem = DBSeller_Helper_QRCode_QRCode::getQrCodeNfse($sUrlVerificada, $sCodigoVerificacao);
             $oDadosCabecalho->sQRCode = $oBaseUrlHelper->baseUrl("/tmp/{$sQRCodeImagem}");
         }
         // Dados de manipulação do prestador
         $oDadosPrestador = new StdClass();
         $oDadosPrestador->oPrestador = $oPrestador;
         $sLogoPrestador = Administrativo_Model_Empresa::getLogoByIm($oNota->getP_im());
         $oDadosPrestador->sLogoPrestador = $oBaseUrlHelper->baseUrl("/tmp/{$sLogoPrestador}");
         // Dados de manipulação do serviço
         $oDadosServico = new StdClass();
         $oDadosServico->oDadosNota = $oNota;
         // Verifica se não é a primeira página que será impressa e quebra as demais 'Descrição do Serviço'
         $iInicioCaracterPagina = 0;
         $iQndCaracterPagina = 800;
         if ($iIndex == 2) {
             $iInicioCaracterPagina = 800;
             $iQndCaracterPagina = $iTamanhoTotalTexto;
         }
         $sDiscriminacaoServico = substr($oNota->getS_dados_discriminacao(), $iInicioCaracterPagina, $iQndCaracterPagina);
         $oDadosServico->sDiscriminacaoServico = $sDiscriminacaoServico;
         // Dados de manipulação da nota subtstituida
         $iIdNotaSubstituida = $oNota->getIdNotaSubstituida();
         if ($iIdNotaSubstituida) {
             $oDadosServico->oDadosNotaSubstituida = Contribuinte_Model_Nota::getById($iIdNotaSubstituida);
         }
         $oRegistro = new StdClass();
         $oRegistro->iPagina = $iIndex;
         $oRegistro->oDadosCabecalho = $oDadosCabecalho;
         $oRegistro->oDadosPrestador = $oDadosPrestador;
         $oRegistro->oDadosServico = $oDadosServico;
         $aDados[] = $oRegistro;
     }
     return $aDados;
 }
 /**
  * Retorna os dados da Nota Substituta
  */
 public function getNotaSubstituta()
 {
     $oNota = $this->oNotaFiscal;
     $oXml = $this->oDomDocument;
     if ($oNota->getIdNotaSubstituta() != '') {
         $oNotaSubstituta = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituta());
         if (empty($oNotaSubstituta)) {
             return null;
         }
         $oXmlDadosSubstituicao = $oXml->createElement('ii:NfseSubstituicao');
         $oXmlDadosSubstituidora = $oXml->createElement('ii:NfseSubstituidora', $this->formatarNumeroNota($oNotaSubstituta));
         $oXmlDadosSubstituicao->appendChild($oXmlDadosSubstituidora);
         return $oXmlDadosSubstituicao;
     }
     return null;
 }
 /**
  * Consulta notas para exportar RPS
  */
 public function rpsConsultarAction()
 {
     parent::noTemplate();
     $aParametros = $this->getRequest()->getParams();
     /**
      * Verifica se foi informado mês e ano da competência
      */
     if (!empty($aParametros['mes_competencia']) && !empty($aParametros['ano_competencia'])) {
         $oContribuinte = $this->_session->contribuinte;
         $sCodigosContribuintes = implode(',', $oContribuinte->getContribuintes());
         $oPaginatorAdapter = new DBSeller_Controller_Paginator(Contribuinte_Model_Nota::getQuery(), 'Contribuinte_Model_Nota', 'Contribuinte\\Nota');
         /**
          * Monta a query de consulta
          */
         $oPaginatorAdapter->where("e.id_contribuinte in ({$sCodigosContribuintes})");
         $oPaginatorAdapter->andWhere("e.mes_comp = {$aParametros['mes_competencia']}");
         $oPaginatorAdapter->andWhere("e.ano_comp = {$aParametros['ano_competencia']}");
         if (!empty($aParametros['numero_rps'])) {
             $oPaginatorAdapter->andWhere("e.nota = {$aParametros['numero_rps']}");
         }
         $oPaginatorAdapter->orderBy('e.nota', 'DESC');
         /**
          * Monta a paginação do GridPanel
          */
         $oResultado = new Zend_Paginator($oPaginatorAdapter);
         $oResultado->setItemCountPerPage(10);
         $oResultado->setCurrentPageNumber($this->_request->getParam('page'));
         foreach ($oResultado as $oNota) {
             $oNota->oContribuinte = $oContribuinte;
             $oNota->lNaoGeraGuia = !$oNota->getEmite_guia();
             $oNota->lGuiaEmitida = Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNota->getMes_comp(), $oNota->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE);
             /**
              * Informações da nota substituta
              */
             $oNota->oNotaSubstituida = NULL;
             if ($oNota->getIdNotaSubstituida()) {
                 $oNota->oNotaSubstituida = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituida());
             }
             /**
              * Informações da nota substituta
              */
             $oNota->oNotaSubstituta = NULL;
             if ($oNota->getIdNotaSubstituta()) {
                 $oNota->oNotaSubstituta = Contribuinte_Model_Nota::getById($oNota->getIdNotaSubstituta());
             }
         }
         /**
          * Valores da pesquisa para montar a paginação
          */
         if (is_array($aParametros)) {
             foreach ($aParametros as $sParametro => $sParametroValor) {
                 if ($sParametroValor) {
                     $sParametroValor = str_replace('/', '-', $sParametroValor);
                     $this->view->sBusca .= "{$sParametro}/{$sParametroValor}/";
                 }
             }
         }
         $this->view->oDadosNota = $oResultado;
     }
 }
 /**
  * Método para rejeitar a solicitação de cancelamento de NFSE
  */
 public function rejeitarAction()
 {
     parent::noTemplate();
     $aDados = $this->getRequest()->getParams();
     $oForm = new Fiscal_Form_CancelamentoRejeitar();
     $this->view->solicitacao = $aDados;
     $oForm->populate(array('id' => $aDados['id']));
     $this->view->form = $oForm;
     if ($this->getRequest()->isPost()) {
         parent::noLayout();
         try {
             $aDados = $this->getRequest()->getParams();
             $oSolicitacao = Contribuinte_Model_SolicitacaoCancelamento::getById($aDados['id']);
             $oNota = Contribuinte_Model_Nota::getById($oSolicitacao->getNota()->getId());
             $sRetornoEmail = $this->enviarEmailRejeicao($oNota, $oSolicitacao, $aDados['justificativa_fiscal']);
             $sMensagemRetorno = 'Solicitação rejeitada com sucesso!';
             $sMensagemRetorno = is_null($sRetornoEmail) ? $sMensagemRetorno : $sRetornoEmail;
             $oSolicitacao->destroy();
             $aRetornoJson['status'] = TRUE;
             $aRetornoJson['success'] = $sMensagemRetorno;
         } catch (Exception $oError) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $oError->getMessage();
         }
         echo $this->getHelper('json')->sendJson($aRetornoJson);
     }
 }
 /**
  * Execucao do cancelamento de NFSE via ajax
  */
 public function cancelarPostAction()
 {
     $aDados = $this->getRequest()->getParams();
     $oForm = new Contribuinte_Form_NotaCancelar();
     $oForm->populate($aDados);
     if (!$oForm->isValid($aDados)) {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = 'Preencha os dados corretamente.';
     } else {
         try {
             $oContribuinte = $this->_session->contribuinte;
             $oPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase();
             $aLoginUsuario = Zend_Auth::getInstance()->getIdentity();
             $oUsuario = Administrativo_Model_Usuario::getByAttribute('login', $aLoginUsuario['login']);
             $oDataCancelamento = new DateTime();
             $oNota = Contribuinte_Model_Nota::getById($aDados['id']);
             if ($oNota->podeCancelar($oContribuinte)) {
                 //Retorna os usuarios do tipo fiscal
                 $aUsuariosFiscal = Administrativo_Model_Usuario::getByAttribute('tipo', Administrativo_Model_Usuario::USUARIO_TIPO_FISCAL);
                 //Remove o usuário admin do array
                 if ($aUsuariosFiscal[0]->getAdministrativo()) {
                     unset($aUsuariosFiscal[0]);
                 }
                 $aEmailBCC = array();
                 //Pega os emails cadastrados dos usuarios fiscais
                 foreach ($aUsuariosFiscal as $oUsuarioFiscal) {
                     $sEmail = $oUsuarioFiscal->getEmail();
                     if (!is_null($sEmail) && $sEmail != '') {
                         $aEmailBCC[] = $sEmail;
                     }
                 }
                 if ($oPrefeitura->getSolicitaCancelamento()) {
                     $oSolicitacaoCancelamento = new Contribuinte_Model_SolicitacaoCancelamento();
                     $oSolicitacaoCancelamento->solicitar($oNota->getEntity(), $aDados, $oUsuario->getEntity());
                     $sJustificativa = $oSolicitacaoCancelamento->getJustificativa();
                     $sRetornoEmail = $this->enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, TRUE, $sJustificativa);
                     $sMensagemRetorno = "Cancelamento solicitado com sucesso!";
                 } else {
                     $oCancelamentoNota = new Contribuinte_Model_CancelamentoNota();
                     $oCancelamentoNota->setUsuarioCancelamento($oUsuario);
                     $oCancelamentoNota->setNotaCancelada($oNota);
                     $oCancelamentoNota->setJustificativa($aDados['cancelamento_justificativa']);
                     $oCancelamentoNota->setMotivoCancelmento($aDados['cancelamento_motivo']);
                     $oCancelamentoNota->setDataHora($oDataCancelamento);
                     $oCancelamentoNota->salvar();
                     $sRetornoEmail = $this->enviarEmailCancelamento($oNota, $aDados, $aEmailBCC, FALSE);
                     $sMensagemRetorno = "Cancelamento efetuado com sucesso!";
                 }
                 $sMensagemRetorno = is_null($sRetornoEmail) ? $sMensagemRetorno : $sRetornoEmail;
                 $aRetornoJson['status'] = TRUE;
                 $aRetornoJson['success'] = $sMensagemRetorno;
             } else {
                 throw new Exception("Esta nota não pode mais ser cancelada!");
             }
         } catch (Exception $oErro) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $oErro->getMessage();
         }
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }