/**
  * Gera a guia de DES-IF no eCidade
  *
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iAnoCompetencia
  * @param                                 $iMesCompetencia
  * @param DateTime                        $oDataPagamento
  * @param                                 $fAliquota
  * @param bool                            $lGerarPdf
  * @return bool
  * @throws Exception
  */
 public static function gerarGuiaDesif(Contribuinte_Model_Contribuinte $oContribuinte, $iAnoCompetencia, $iMesCompetencia, DateTime $oDataPagamento, $fAliquota, $lGerarPdf = TRUE)
 {
     // Verifica se já possui uma guia emitida
     $lTemGuiaEmitida = Contribuinte_Model_Guia::existeGuia($oContribuinte, $iMesCompetencia, $iAnoCompetencia, Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE);
     if ($lTemGuiaEmitida) {
         throw new Exception('Guia já emitida.');
     }
     $aReceitasDesif = Contribuinte_Model_ImportacaoDesif::getTotalReceitasCompetencia($oContribuinte, $iAnoCompetencia, $iMesCompetencia, $fAliquota);
     $sDataPagamento = $oDataPagamento->format('d/m/Y');
     $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oContribuinte->getIdUsuarioContribuinte());
     $oValidateDate = new Zend_Validate_Date();
     $sData = DBSeller_Helper_Date_Date::invertDate($sDataPagamento);
     $sDataValidacao = DBSeller_Helper_Date_Date::invertDate($sDataPagamento, '');
     if ($sDataValidacao < date('Ymd')) {
         throw new Exception('Informe uma data posterior a data atual!');
     }
     if ($oValidateDate->isValid($sDataPagamento)) {
         $oData = new DateTime($sData);
     } else {
         throw new Exception('Informe uma data para pagamento válida!');
     }
     /**
      * Alterado o parametro de envio do cpf_cnpj para o e-cidade pois não estava sendo passado corretamente.
      */
     $iCpfCnpj = $oUsuarioContribuinte->getCnpjCpf();
     $iCpf = strlen($iCpfCnpj) == 11 ? $iCpfCnpj : NULL;
     $iCnpj = strlen($iCpfCnpj) == 14 ? $iCpfCnpj : NULL;
     $oGuiaGerar = new StdClass();
     $oGuiaGerar->id_importacao_desif = $aReceitasDesif->id_importacao_desif;
     $oGuiaGerar->id_importacao_desif_conta = $aReceitasDesif->id_importacao_desif_conta;
     $oGuiaGerar->inscricao_municipal = $oUsuarioContribuinte->getIm();
     $oGuiaGerar->cpf = $iCpf;
     $oGuiaGerar->cnpj = $iCnpj;
     $oGuiaGerar->numcgm = $oUsuarioContribuinte->getCgm();
     $oGuiaGerar->mes_competencia = $iMesCompetencia;
     $oGuiaGerar->ano_competencia = $iAnoCompetencia;
     $aListaReceitas = array();
     foreach ($aReceitasDesif->aliquotas_issqn as $fAliquota => $aDadosReceita) {
         $sNumeroNotaFiscal = date('YmdHs', time()) . $aReceitasDesif->id_importacao_desif . str_replace('.', '', $fAliquota);
         $oReceita = new stdClass();
         $oReceita->numero_nota_fiscal = $sNumeroNotaFiscal;
         $oReceita->codigo_documento = $aReceitasDesif->id_importacao_desif;
         $oReceita->data_nota_fiscal = $aReceitasDesif->data_importacao->format('Y-m-d');
         $oReceita->serie_nota_fiscal = NULL;
         $oReceita->valor_base_calculo = $aDadosReceita['total_receita'];
         $oReceita->valor_deducao = 0;
         $oReceita->valor_imposto_retido = $aDadosReceita['total_iss'];
         $oReceita->valor_servico_prestado = $aDadosReceita['total_receita'];
         $oReceita->aliquota = $fAliquota;
         $oReceita->data_pagamento = $sDataPagamento;
         $oReceita->retido = $aDadosReceita['total_iss'];
         $oReceita->situacao = 1;
         $oReceita->status = 1;
         $oReceita->servico_prestado = 'Receita Importada Desif';
         $oReceita->cnpj_prestador = $oUsuarioContribuinte->getCnpjCpf();
         $oReceita->inscricao_prestador = $oUsuarioContribuinte->getIm();
         $oReceita->nome = $oContribuinte->getNome();
         $oReceita->operacao = 2;
         $aListaReceitas[] = $oReceita;
     }
     $oGuiaGerar->notas = $aListaReceitas;
     $aDados = array('planilha' => $oGuiaGerar, 'data_pagamento' => $oData->format('Y-m-d'), 'tipo_debito' => Contribuinte_Model_GuiaEcidade::TIPO_DEBITO_VARIAVEL);
     $oGuiaGerada = WebService_Model_Ecidade::processar('geraDebitoIssContribribuinte', $aDados);
     $oGuia = new Contribuinte_Model_Guia();
     $oGuia->gerarGuiaDesifPrestador($oContribuinte, $oGuiaGerada, $iAnoCompetencia, $iMesCompetencia, $oDataPagamento);
     $sArquivoGuiaPdf = $oGuiaGerada->debito->dados_boleto->arquivo_guia;
     if ($lGerarPdf) {
         $oGuiaGerada->arquivo_guia = Contribuinte_Model_GuiaEcidade::salvarPdf($sArquivoGuiaPdf, 'guia_substituto');
     }
     return $oGuiaGerada;
 }