/**
  * Fecha a competência para as Notas Fiscais (NFSE)
  */
 public function fechaCompetenciaAction()
 {
     parent::noTemplate();
     $iMes = $this->getRequest()->getParam('mes');
     $iAno = $this->getRequest()->getParam('ano');
     $oContribuinte = $this->_session->contribuinte;
     $oCompetencia = new Contribuinte_Model_Competencia($iAno, $iMes, $oContribuinte);
     $oCompetencia->getNotas();
     $oCompetencia->setTotaisCompetencia();
     $oFormCompetencia = new Contribuinte_Form_GuiaCompetencia();
     $oFormCompetencia->setAction('/contribuinte/guia/fecha-competencia');
     $oFormCompetencia->preenche($oCompetencia, NULL);
     $oFormCompetencia->getElement('data_guia')->setValue(date('d/m/Y'));
     $this->view->competencia = $oCompetencia;
     $this->view->form = $oFormCompetencia;
     if ($this->getRequest()->isPost()) {
         $this->view->arquivo = '';
         $this->view->guia = '';
         try {
             $lTemGuiaEmitida = Contribuinte_Model_Guia::existeGuia($oContribuinte, $oCompetencia->getMesComp(), $oCompetencia->getAnoComp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE);
             if ($lTemGuiaEmitida) {
                 throw new Exception('Guia já emitida.');
             }
             $sDataInvertida = DBSeller_Helper_Date_Date::invertDate($this->getRequest()->getParam('data_guia'));
             $oDataPagamento = new DateTime($sDataInvertida);
             $oGuia = Contribuinte_Model_GuiaEcidade::gerarGuiaNFSE($oContribuinte, $oCompetencia, $oDataPagamento);
             // Verifica se retornou algum erro no processo de geração da guia
             if (is_string($oGuia)) {
                 throw new Exception($oGuia);
             }
             // Verifica se foi gerado o arquivo de emissão da guia
             if (empty($oGuia->arquivo_guia)) {
                 throw new Exception('Ocorreu algum problema na geração da guia de pagamento!');
             }
             $this->view->arquivo = $oGuia->arquivo_guia;
         } catch (Exception $oErro) {
             $this->view->mensagem_erro = $oErro->getMessage();
         }
     }
 }
 /**
  * Gerar as guias em aberto dos contribuintes
  */
 public function gerarAction()
 {
     parent::noLayout();
     $aParametros = $this->getRequest()->getParams();
     /**
      * Parametros de retorno do AJAX
      */
     $aRetornoJson = array('success' => FALSE, 'message' => NULL);
     try {
         /**
          * Verifica competência informada
          */
         if (empty($aParametros['mes_competencia']) || empty($aParametros['ano_competencia'])) {
             throw new Exception('Informe a competência.');
         }
         $iMesCompetencia = str_pad($aParametros['mes_competencia'], 2, '0', STR_PAD_LEFT);
         $iAnoCompetencia = $aParametros['ano_competencia'];
         $iMesCorrente = date('m');
         $iAnoCorrente = date('Y');
         /**
          * Verifica mês e ano corrente
          */
         if ($iMesCompetencia >= $iMesCorrente && $iAnoCompetencia == $iAnoCorrente) {
             throw new Exception('Competência corrente não é gerado guia. <br />Selecione os meses anteriores ao corrente.');
         }
         $oDataPagamento = new DateTime();
         $aGuiasCompetencia = Contribuinte_Model_Competencia::getByGuiasContribuinteAndCompetencia($iMesCompetencia, $iAnoCompetencia);
         /**
          * Verifica se encontro alguma guia em aberto
          */
         if (count($aGuiasCompetencia) == 0) {
             throw new Exception('Nenhum registro encontrado para a competência selecionada.');
         }
         foreach ($aGuiasCompetencia as $oGuiaCompetencia) {
             $oContribuinte = $oGuiaCompetencia->getContribuinte();
             $iMesCompetencia = $oGuiaCompetencia->getMesComp();
             $iAnoCompetencia = $oGuiaCompetencia->getAnoComp();
             $aNotas = $oGuiaCompetencia->getNotas();
             if (empty($iMesCompetencia)) {
                 throw new Exception("O mês de competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             if (empty($iAnoCompetencia)) {
                 throw new Exception("O ano de competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             if (count($aNotas) == 0) {
                 throw new Exception("Não existem notas na competência do contribuinte {$oContribuinte->getInscricaoMunicipal()} não foi informado.");
             }
             $aRetornoGuiaEcidade[] = Contribuinte_Model_GuiaEcidade::gerarGuiaNFSE($oContribuinte, $oGuiaCompetencia, $oDataPagamento, FALSE);
         }
         $aRetornoJson['success'] = TRUE;
         $aRetornoJson['message'] = "Guias de competência {$iMesCompetencia}/{$iAnoCompetencia} geradas com sucesso.";
         /**
          * Para uso como debug de retorno do e-cidade
          */
         //$aRetornoJson['retorno_ecidade'] = $aRetornoGuiaEcidade;
     } catch (Exception $oErro) {
         $aRetornoJson['message'] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }