/**
  * Página inicial do módulo padrão
  */
 public function indexAction()
 {
     // Verifica se o usuário está logado
     parent::checkIdentity();
     // Zera as permissões do contribuinte
     $oSessao = new Zend_Session_Namespace('nfse');
     $oSessao->contribuinte = NULL;
     $this->view->contribuinte = NULL;
     $this->_session->id = NULL;
     $this->view->iUsuarioEscolhido = $oSessao->iUsuarioEscolhido;
     $aAuth = Zend_Session::namespaceGet('Zend_Auth');
     $oUsuario = Administrativo_Model_Usuario::getById($aAuth['storage']['id']);
     if ($oUsuario->getTipo() == 3) {
         $oBaseUrl = new Zend_View_Helper_BaseUrl();
         // Verifica se possui cadastros eventuais
         $aCadastrosEventuais = Contribuinte_Model_CadastroPessoa::getCadastrosParaLiberacao();
         if (count($aCadastrosEventuais) > 0) {
             $sMensagem = "Hà " . count($aCadastrosEventuais) . " Cadastros Eventuais Pendentes <br/>";
             $sMensagem .= " <a href=" . $oBaseUrl->baseUrl("/fiscal/usuario-eventual/listar-novos-cadastros") . "> Verificar </a>";
             DBSeller_Plugin_Notificacao::addAviso('F001', $sMensagem);
         }
         // Verifica se possui solicitações de cancelamento
         $aSolicitacoesCancelamento = Contribuinte_Model_SolicitacaoCancelamento::getAll();
         if (count($aSolicitacoesCancelamento) > 0) {
             $sMensagem = "Hà " . count($aSolicitacoesCancelamento) . " Solicitações de cancelamento de NFS-e <br/>";
             $sMensagem .= " <a href=" . $oBaseUrl->baseUrl("/fiscal/cancelamento-nfse/consultar") . "> Verificar </a>";
             DBSeller_Plugin_Notificacao::addAviso('F002', $sMensagem);
         }
     }
     // Tiver apenas um módulo redireciona para a default/index
     if (isset($this->view->user) && count($this->view->user->getModulos()) == 1) {
         $aModulos = each($this->view->user->getModulos());
         $sModulo = strtolower($aModulos['value']->getNome());
         $this->_redirector->gotoSimple('index', 'index', $sModulo);
     }
     // Recria as permissões do usuário
     new DBSeller_Acl_Setup(TRUE);
 }
 /**
  * Tela inicial do módulo fiscal
  *
  *  @return void
  */
 public function indexAction()
 {
     $aAuth = Zend_Session::namespaceGet('Zend_Auth');
     $oUsuario = Administrativo_Model_Usuario::getById($aAuth['storage']['id']);
     if ($oUsuario->getTipo() == 3) {
         $oBaseUrl = new Zend_View_Helper_BaseUrl();
         // Verifica se possui cadastros eventuais
         $aCadastrosEventuais = Contribuinte_Model_CadastroPessoa::getCadastrosParaLiberacao();
         if (count($aCadastrosEventuais) > 0) {
             $sMensagem = "Hà " . count($aCadastrosEventuais) . " Cadastros Eventuais Pendentes <br/>";
             $sMensagem .= " <a href=" . $oBaseUrl->baseUrl("/fiscal/usuario-eventual/listar-novos-cadastros") . "> Verificar </a>";
             DBSeller_Plugin_Notificacao::addAviso('F001', $sMensagem);
         }
         // Verifica se possui solicitações de cancelamento
         $aSolicitacoesCancelamento = Contribuinte_Model_SolicitacaoCancelamento::getAll();
         if (count($aSolicitacoesCancelamento) > 0) {
             $sMensagem = "Hà " . count($aSolicitacoesCancelamento) . " Solicitações de cancelamento de NFS-e <br/>";
             $sMensagem .= " <a href=" . $oBaseUrl->baseUrl("/fiscal/cancelamento-nfse/consultar") . "> Verificar </a>";
             DBSeller_Plugin_Notificacao::addAviso('F002', $sMensagem);
         }
     }
     $this->view->oculta_breadcrumbs = TRUE;
 }
 /**
  * Método para ver se a nota pode ser cancelada ou não
  * @param object $oContribuinte Model do contribuinte
  * @return boolean
  */
 public function podeCancelar($oContribuinte)
 {
     $oNota = $this->getEntity();
     $lExisteGuia = Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNota->getMes_comp(), $oNota->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE);
     $oSolicitacaoCancelamento = Contribuinte_Model_SolicitacaoCancelamento::getByAttribute('nota', $oNota);
     $uDataUltimaNota = Contribuinte_Model_Nota::getUltimaNotaEmitidaByContribuinte($oContribuinte->getContribuintes());
     $oDataUltimaNota = new DateTime($uDataUltimaNota);
     $oCompetencia = new Contribuinte_Model_Competencia($oNota->getAno_comp(), $oNota->getMes_comp(), $oContribuinte);
     $aCompetenciaSemMovimento = $oCompetencia->getDeclaracaoSemMovimento();
     if ($oNota->getAno_comp() < $oDataUltimaNota->format('Y')) {
         return FALSE;
     } else {
         if ($oNota->getAno_comp() == $oDataUltimaNota->format('Y') && $oNota->getMes_comp() < $oDataUltimaNota->format('m')) {
             return FALSE;
         } else {
             if ($oNota->getCancelada() || $lExisteGuia || $oNota->getImportada() || !empty($oSolicitacaoCancelamento)) {
                 return FALSE;
             } else {
                 if (isset($aCompetenciaSemMovimento[0]) && $oNota->getAno_comp() < $aCompetenciaSemMovimento[0]->ano) {
                     return FALSE;
                 } else {
                     if (isset($aCompetenciaSemMovimento[0]) && $oNota->getAno_comp() == $aCompetenciaSemMovimento[0]->ano && $oNota->getMes_comp() <= $aCompetenciaSemMovimento[0]->mes) {
                         return FALSE;
                     }
                 }
             }
         }
     }
     return TRUE;
 }
 /**
  * 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);
 }