/**
  * Gera a guia do prestador no eCidade
  *
  * @param                                $oContribuinte
  * @param Contribuinte_Model_Competencia $oCompetencia
  * @param DateTime                       $oDataPagamento
  * @param bool                           $lGerarPdf
  * @return mixed
  */
 public static function gerarGuiaNFSE($oContribuinte, Contribuinte_Model_Competencia $oCompetencia, DateTime $oDataPagamento, $lGerarPdf = TRUE)
 {
     try {
         $iMesCompetencia = $oCompetencia->getMesComp();
         $iAnoCompetencia = $oCompetencia->getAnoComp();
         $aNotas = $oCompetencia->getNotas();
         $sDataPagamento = $oDataPagamento->format('d/m/Y');
         $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
         $oDoctrine = Zend_Registry::get('em');
         $oDoctrine->getConnection()->beginTransaction();
         // Salva guia antes de ser gerada
         $oGuia = new Contribuinte_Model_Guia();
         $oGuia->gerarGuiaPrestador($oContribuinte, $oCompetencia, $oDataPagamento);
         $oGuiaGerar = self::montaDadosGuia($oUsuarioContribuinte, $iAnoCompetencia, $iMesCompetencia, $aNotas, $sDataPagamento, $oGuia->getId());
         $oGuiaGerada = NULL;
         $oGuiaGerada = self::gerarGuia($oGuiaGerar, $sDataPagamento, Contribuinte_Model_GuiaEcidade::TIPO_DEBITO_VARIAVEL);
         // Complementa a guia com os dados retornados do webservice
         $oGuia->complementaGuiaPrestador($oGuiaGerada);
         if ($lGerarPdf) {
             $oGuiaGerada->arquivo_guia = Contribuinte_Model_GuiaEcidade::salvarPdf($oGuiaGerada->debito->dados_boleto->arquivo_guia, 'guia_substituto');
         }
         $oDoctrine->getConnection()->commit();
         return $oGuiaGerada;
     } catch (Exception $oError) {
         $oDoctrine->getConnection()->rollback();
         throw new Exception($oError->getMessage());
     }
 }