Esempio n. 1
0
 private void CriarObjetoEstorno(Documento documento, ref VPDEstorno vpdEstorno)
 {
     vpdEstorno.ListaVPDEstorno = new List <ItemVPDEstorno>();
     foreach (var i in documento.ItemVariacaoPatrimonialDiminutiva)
     {
         var itemVPDEstorno = new ItemVPDEstorno();
         itemVPDEstorno.ItemVariacaoPatrimonialDiminutivaID = i.VariacaoPatrimonialDiminutivaItemID;
         itemVPDEstorno.FonteRecursoDescricao          = i.FonteRecursoID.HasValue ? i.IdentificadorUsoCodigo.ToString() + fonteRecursoDA.RetornaNumeroDescricaoFonteRecurso(i.FonteRecursoID.Value) : string.Empty;
         itemVPDEstorno.FonteRecursoID                 = i.FonteRecursoID;
         itemVPDEstorno.NaturezaDespesaID              = i.NaturezaDespesaID;
         itemVPDEstorno.NaturezaDespesaCodigoDescricao = i.NaturezaDespesaID.HasValue ? naturezaDespesaDA.RetornaCodigoDescricaoNaturezaDespesa(i.NaturezaDespesaID.Value, i.Documento.Exercicio) : string.Empty;
         itemVPDEstorno.ValorEstorno  = 0;
         itemVPDEstorno.ValorEmpenhar = itemVariacaoPatrimonialDiminutivaDA.RetornaSaldoDisponivel(i.VariacaoPatrimonialDiminutivaItemID);
         if (itemVPDEstorno.ValorEmpenhar > 0)
         {
             vpdEstorno.ListaVPDEstorno.Add(itemVPDEstorno);
         }
     }
     ViewBag.DataVPDOriginal = documento.DataEmissao;
     vpdEstorno.Numero       = documento.Numero;
     vpdEstorno.DataEmissao  = DateTime.Today;
     if (RetornaDataAtualDocumento() != null)
     {
         vpdEstorno.DataEmissao = DateTime.Today;
     }
     ViewBag.MesesBloqueados = fecharUGDA.RetornaListaMesesBloqueados(documento.UnidadeGestoraCodigoEmitente);
     vpdEstorno.TotalEstorno = vpdEstorno.ListaVPDEstorno.Sum(el => el.ValorEmpenhar);
 }
Esempio n. 2
0
        private Documento MontaObjetoVPDPreviaEstorno(VPDEstorno vpdPreviaEstorno, DateTime now)
        {
            var documentoVPDOriginal = documentoDA.ConsultarTodos().FirstOrDefault(el => el.DocumentoID == vpdPreviaEstorno.DocumentoID);

            var documento = new Documento();

            documento.DocumentoOriginalID                      = documentoVPDOriginal.DocumentoID;
            documento.UnidadeGestoraCodigoEmitente             = documentoVPDOriginal.UnidadeGestoraCodigoEmitente;
            documento.UnidadeGestoraDataInicioVigenciaEmitente = documentoVPDOriginal.UnidadeGestoraDataInicioVigenciaEmitente;
            documento.CredorIdentificacao                      = documentoVPDOriginal.CredorIdentificacao;
            documento.DataContabilizacao   = vpdPreviaEstorno.DataEmissao;
            documento.DataEmissao          = vpdPreviaEstorno.DataEmissao;
            documento.DataInclusaoRegistro = now;
            documento.Situacao             = "A";
            documento.Estorno      = "S";
            documento.ValorEstorno = vpdPreviaEstorno.TotalEstorno;
            documento.DominioIDGrupoDocumentoContabil = dominioDA.RetornaDominioID(DominioCategoriaEnum.GRUPODOCUMENTOCONTABIL, "VPD");
            documento.UsuarioInclusaoRegistro         = UsuarioLogado.GetFullName();
            documento.ValorDocumento                  = vpdPreviaEstorno.TotalEstorno;
            documento.TipoDocumentoContabilID         = documentoVPDOriginal.TipoDocumentoContabilID;
            documento.DominioIDGrupoDocumentoContabil = documentoVPDOriginal.DominioIDGrupoDocumentoContabil;
            documento.Observacao    = vpdPreviaEstorno.Justificativa;
            documento.Justificativa = vpdPreviaEstorno.Justificativa;

            documento.ItemVariacaoPatrimonialDiminutiva = new List <ItemVariacaoPatrimonialDiminutiva>();

            if (vpdPreviaEstorno.TotalEstorno <= 0)
            {
                throw new CFP.Util.SPFException("Informe o valor a ser estornado.");
            }

            foreach (var i in vpdPreviaEstorno.ListaVPDEstorno.Where(el => el.ValorEstorno > 0))
            {
                var itemVPDOriginal = documentoVPDOriginal.ItemVariacaoPatrimonialDiminutiva.FirstOrDefault(el => el.VariacaoPatrimonialDiminutivaItemID == i.ItemVariacaoPatrimonialDiminutivaID);

                if (i.ValorEstorno > itemVariacaoPatrimonialDiminutivaDA.RetornaValorAEmpenhar(i.ItemVariacaoPatrimonialDiminutivaID))
                {
                    throw new CFP.Util.SPFException("Valor informado no estorno é superior ao valor disponível.");
                }

                var itemVPD = new ItemVariacaoPatrimonialDiminutiva();
                itemVPD.TipoVPD         = "A";
                itemVPD.ValorSolicitado = 0;

                itemVPD.ValorEstorno           = i.ValorEstorno;
                itemVPD.NaturezaDespesaID      = itemVPDOriginal.NaturezaDespesaID;
                itemVPD.FonteRecursoID         = itemVPDOriginal.FonteRecursoID;
                itemVPD.IdentificadorUsoCodigo = itemVPDOriginal.IdentificadorUsoCodigo;
                documento.ItemVariacaoPatrimonialDiminutiva.Add(itemVPD);
            }

            return(documento);
        }
Esempio n. 3
0
        public JsonResult Estornar(VPDEstorno vpdEstorno)
        {
            string status   = "OK";
            string mensagem = string.Empty;
            string numeroDocumentoGerado = string.Empty;

            try
            {
                var now = DateTime.Now;
                if (this.UnidadeGestoraEhFechada(ref mensagem, now))
                {
                    throw new CFP.Util.SPFException(mensagem);
                }

                if (string.IsNullOrEmpty(vpdEstorno.DataEmissao.ToString()) || vpdEstorno.DataEmissao.Year == 1)
                {
                    throw new CFP.Util.SPFException("A data de emissão é obrigatória!");
                }

                var documento = MontaObjetoVPDPreviaEstorno(vpdEstorno, now);

                #region Monta Lista de Processos a ser executados ao estornar uma VPD
                List <ProcessosDoLancamentoContabil> processosVPD = new List <ProcessosDoLancamentoContabil>();
                var configVPD = new ConfiguracaoLancamentoContabil()
                {
                    Exercicio                         = ExercicioAnoSessao.Sessao.AnoExercicioCorrente.Value,
                    CodigoDoDocumento                 = "VPD",
                    Evento                            = false,
                    UsarEventoDoDocumento             = false,
                    PermitirInscricaoDoEventoInvalida = true,
                    Estorno                           = true,
                    Atualizar                         = false,
                    NaturezaDespesa                   = true,
                };
                using (SimplesLancamentoContabil contabil = new SimplesLancamentoContabil())
                {
                    contabil.SetDocumento(documento);
                    contabil.SetConfiguracao(configVPD);
                    processosVPD = contabil.MontarProcessos();
                }
                #endregion

                #region Criar VPD
                List <ChaveConta> chaves = new List <ChaveConta>();
                SimplesLancamentoContabil.AdicionarChaves(chaves, processosVPD);

                var move = new MovimentacaoFinanceira();
                move.AdicionarProcesso(processosVPD);
                move.Validar();
                move.LiberarDocumento(documento);
                using (ControleConta cc = new ControleConta(chaves))
                {
                    cc.Validar();
                    using (var ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions {
                        IsolationLevel = ControleConta.IsolationLevelLancamentoContabil
                    }))
                    {
                        using (GenericoSalvarLancamento save = new GenericoSalvarLancamento(documento, configVPD))
                        {
                            save.GerarLancamentos(processosVPD);
                            save.Salvar();
                        }
                        ts.Complete();

                        numeroDocumentoGerado = documento.Numero;
                    }
                }
                #endregion
            }
            catch (CFP.Util.SPFException ex)
            {
                status   = "Erro";
                mensagem = ex.Message;
            }

            return(Json(new { Status = status, Mensagem = mensagem, NumeroDocumentoGerado = numeroDocumentoGerado }, JsonRequestBehavior.AllowGet));

            //return View(vpdEstorno);
        }