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); }
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); }
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); }