/**
  * Retora o Cancelamento da nota
  * @return Contribuinte_Model_CancelamentoNota
  */
 public function getCancelamento()
 {
     if ($this->getCancelada()) {
         $oCancelamento = Contribuinte_Model_CancelamentoNota::getByAttribute('nota', $this->getId());
         if (!empty($oCancelamento)) {
             return new Contribuinte_Model_CancelamentoNota($oCancelamento);
         }
     }
 }
 /**
  * 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);
 }
 /**
  * Action que autoriza e efetua o cancelamento solicitado pelo contribuinte
  */
 public function confirmarAction()
 {
     parent::noLayout();
     try {
         $aDados = $this->getRequest()->getParams();
         $aLoginUsuario = Zend_Auth::getInstance()->getIdentity();
         $oUsuario = Administrativo_Model_Usuario::getByAttribute('login', $aLoginUsuario['login']);
         $oSolicitacao = Contribuinte_Model_SolicitacaoCancelamento::getById($aDados['id']);
         $oNota = Contribuinte_Model_Nota::getById($oSolicitacao->getNota()->getId());
         $oDataCancelamento = new DateTime();
         $oCancelamentoNota = new Contribuinte_Model_CancelamentoNota();
         $oCancelamentoNota->setUsuarioCancelamento($oUsuario);
         $oCancelamentoNota->setNotaCancelada($oNota);
         $oCancelamentoNota->setJustificativa($oSolicitacao->getJustificativa());
         $oCancelamentoNota->setMotivoCancelmento($oSolicitacao->getMotivo());
         $oCancelamentoNota->setDataHora($oDataCancelamento);
         $oCancelamentoNota->salvar();
         $sRetornoEmail = $this->enviarEmailCancelamento($oNota, $oSolicitacao);
         $sMensagemRetorno = "Cancelamento efetuado 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);
 }
 /**
  * Cancela a nota
  * @return string
  */
 public function processar()
 {
     try {
         /**
          * Cancela uma nota caso não tiver inconsistencias no processo
          */
         if (count($this->aInconsistencias) == 0) {
             $oDataCancelamento = new DateTime();
             $iCodigoCancelamento = (int) $this->oDadosXML->CodigoCancelamento;
             /**
              * Verifica justificativa do cancelamento
              */
             switch ($iCodigoCancelamento) {
                 case Contribuinte_Model_CancelamentoNota::CANCELAMENTO_ERRO_EMISSAO:
                     $sJustificativa = "Cancelado via WebService. Motivo: Erro na emissão.";
                     break;
                 case Contribuinte_Model_CancelamentoNota::CANCELAMENTO_NOTA_DUPLICADA:
                     $sJustificativa = "Cancelado via WebService. Motivo: Duplicidade da nota.";
                     break;
                 case Contribuinte_Model_CancelamentoNota::CANCELAMENTO_SERVICO_NAO_PRESTADO:
                     $sJustificativa = "Cancelado via WebService. Motivo: Serviço não prestado.";
                     break;
                 default:
                     $sJustificativa = "Cancelado via WebService. Motivo: Outros.";
                     $iCodigoCancelamento = 9;
                     break;
             }
             $oCancelamentoNota = new Contribuinte_Model_CancelamentoNota();
             $oCancelamentoNota->setUsuarioCancelamento($this->oContribuinte->getUsuario());
             $oCancelamentoNota->setNotaCancelada($this->oNota);
             $oCancelamentoNota->setJustificativa($sJustificativa);
             $oCancelamentoNota->setMotivoCancelmento($iCodigoCancelamento);
             $oCancelamentoNota->setDataHora($oDataCancelamento);
             $oCancelamentoNota->salvar();
         }
     } catch (Exception $e) {
         $this->adicionarInconsistencia('E160');
     }
     return $this->retornoWebservice();
 }