示例#1
0
        private decimal GetValorTotalAtualizadoEmReais(Cobranca cobranca, CobrancaParcelamento parcelamento, Parametrizacao parametrizacao)
        {
            var valorPagoAnteriores = new Decimal();
            var parcelamentos       = (new CobrancaParcelamentoDa()).Obter(cobranca.Id);

            if (parcelamentos != null)
            {
                var parcelamentosAnteriores = parcelamentos.Where(x => x.Id != parcelamento.Id);
                foreach (var parcelamentoAnterior in parcelamentosAnteriores)
                {
                    valorPagoAnteriores += parcelamentoAnterior.DUAS.Sum(x => x.ValorPago);
                }
            }

            var prazoDesconto = parametrizacao.PrazoDescontoUnidade * GetPrazoDesconto(parametrizacao.PrazoDescontoDecorrencia);

            if (parcelamento.Data1Vencimento.Data.Value < cobranca.DataIUF.Data.Value.AddDays(prazoDesconto + 1).Date)
            {
                return(parcelamento.ValorMulta - valorPagoAnteriores);
            }

            var multaVRTE = parcelamento.ValorMulta * (Convert.ToDecimal(parametrizacao.MultaPercentual) / 100);
            var jurosVRTE = new Decimal();
            var diasJuros = Convert.ToDecimal(parcelamento.Data1Vencimento.Data.Value.Date.Subtract(cobranca.DataIUF.Data.Value.Date).TotalDays);

            if (diasJuros > 0)
            {
                jurosVRTE = (diasJuros / 30) * (Convert.ToDecimal(parametrizacao.JurosPercentual) / 100);
            }

            return(parcelamento.ValorMulta + multaVRTE + (parcelamento.ValorMulta * jurosVRTE) - valorPagoAnteriores);
        }
示例#2
0
        public bool Salvar(CobrancaParcelamento parcelamento, BancoDeDados banco = null)
        {
            try
            {
                if (_validarParcelamento.Salvar(parcelamento))
                {
                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                    {
                        bancoDeDados.IniciarTransacao();
                        _daParcelamento.Salvar(parcelamento, bancoDeDados);
                        foreach (var dua in parcelamento.DUAS)
                        {
                            dua.ParcelamentoId = parcelamento.Id;
                            this.Salvar(dua, bancoDeDados);
                        }
                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(Validacao.EhValido);
        }
示例#3
0
        public List <CobrancaDUA> GerarParcelas(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            var list = new List <CobrancaDUA>();

            if (!_validar.Calcular(cobranca, parcelamento))
            {
                return(list);
            }

            var parametrizacao  = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);
            var parcelaAnterior = new CobrancaDUA();

            if (parametrizacao != null)
            {
                for (int i = 1; i <= parcelamento.QuantidadeParcelas; i++)
                {
                    var parcela = new CobrancaDUA()
                    {
                        DataEmissao    = parcelamento.DataEmissao,
                        Parcela        = string.Concat(i, '/', parcelamento.QuantidadeParcelas),
                        ParcelamentoId = parcelamento.Id
                    };

                    if (i == 1)
                    {
                        parcela.DataVencimento = new DateTecno()
                        {
                            Data = parcelamento.Data1Vencimento.Data
                        }
                    }
                    ;
                    else if (parcelaAnterior.DataVencimento.IsValido)
                    {
                        var dataVencimento = parcelaAnterior.DataVencimento.Data.Value.AddMonths(1);
                        if (dataVencimento.DayOfWeek == DayOfWeek.Saturday)
                        {
                            dataVencimento.AddDays(2);
                        }
                        else if (dataVencimento.DayOfWeek == DayOfWeek.Monday)
                        {
                            dataVencimento.AddDays(1);
                        }

                        parcela.DataVencimento = new DateTecno()
                        {
                            Data = dataVencimento
                        };
                    }
                    parcela.Situacao = "Em Aberto";

                    parcelaAnterior = parcela;
                    list.Add(parcela);
                }
            }

            return(list);
        }
        public List <CobrancaParcelamento> Obter(int cobrancaId, BancoDeDados banco = null)
        {
            var lista         = new List <CobrancaParcelamento>();
            var cobrancaDUADa = new CobrancaDUADa();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"select  p.id,
											p.cobranca,
											p.valor_multa,
											p.valor_multa_atualizado,
											p.qtdparcelas,
											p.vencimento_data,
											p.dataemissao,
											p.tid
										from {0}tab_fisc_cob_parcelamento p
										where p.cobranca = :cobranca
										order by p.id"                                        , EsquemaBanco);

                comando.AdicionarParametroEntrada("cobranca", cobrancaId, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        var cobrancaParcelamento = new CobrancaParcelamento
                        {
                            Id                   = reader.GetValue <int>("id"),
                            CobrancaId           = reader.GetValue <int>("cobranca"),
                            ValorMulta           = reader.GetValue <decimal>("valor_multa"),
                            ValorMultaAtualizado = reader.GetValue <decimal>("valor_multa_atualizado"),
                            QuantidadeParcelas   = reader.GetValue <int>("qtdparcelas"),
                        };
                        cobrancaParcelamento.Data1Vencimento.Data = reader.GetValue <DateTime>("vencimento_data");
                        cobrancaParcelamento.DataEmissao.Data     = reader.GetValue <DateTime>("dataemissao");
                        if (cobrancaParcelamento.DataEmissao.Data.HasValue && cobrancaParcelamento.DataEmissao.Data.Value.Year == 1)
                        {
                            cobrancaParcelamento.DataEmissao = new DateTecno();
                        }
                        if (cobrancaParcelamento.DataEmissao.Data.HasValue && cobrancaParcelamento.DataEmissao.Data.Value.Year == 1)
                        {
                            cobrancaParcelamento.DataEmissao = new DateTecno();
                        }
                        cobrancaParcelamento.DUAS = cobrancaDUADa.Obter(cobrancaParcelamento.Id);

                        lista.Add(cobrancaParcelamento);
                    }

                    reader.Close();
                }
            }

            return(lista);
        }
示例#5
0
        public int GetMaximoParcelas(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            if (cobranca == null || !Convert.ToBoolean(cobranca.DataIUF?.IsValido) || !Convert.ToBoolean(cobranca.DataEmissaoIUF?.IsValido))
            {
                return(0);
            }

            var parametrizacao = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);

            if (parametrizacao == null)
            {
                return(0);
            }

            var vrte = _busConfiguracao.ObterVrte(cobranca.DataIUF.Data.Value.Year);

            if ((vrte?.Id ?? 0) == 0)
            {
                return(0);
            }

            if (parcelamento.ValorMultaAtualizado == 0 && Convert.ToBoolean(parcelamento.Data1Vencimento?.IsValido))
            {
                parcelamento.ValorMultaAtualizado = this.GetValorTotalAtualizadoEmReais(cobranca, parcelamento, parametrizacao);
            }

            var valorAtualizadoVRTE = parcelamento.ValorMultaAtualizado / vrte.VrteEmReais;
            var parcela             = 0;

            if (cobranca.AutuadoPessoa.IsFisica)
            {
                parcela = Decimal.ToInt32(valorAtualizadoVRTE / parametrizacao.ValorMinimoPF);
            }
            else
            {
                parcela = Decimal.ToInt32(valorAtualizadoVRTE / parametrizacao.ValorMinimoPJ);
            }

            var detalhe = parametrizacao.ParametrizacaoDetalhes.FindLast(x => x.ValorInicial < parcelamento.ValorMultaAtualizado && (x.ValorFinal == 0 || x.ValorFinal >= parcelamento.ValorMultaAtualizado));

            if ((detalhe?.Id ?? 0) == 0)
            {
                return(0);
            }

            if (parcela > detalhe.MaximoParcelas)
            {
                return(detalhe.MaximoParcelas);
            }

            return(parcela);
        }
示例#6
0
        public bool NovoParcelamento(Cobranca cobranca)
        {
            try
            {
                if (_validar.Salvar(cobranca))
                {
                    foreach (var parcela in cobranca.UltimoParcelamento.DUAS)
                    {
                        if (!parcela.DataPagamento.IsValido && parcela.ValorPago == 0)
                        {
                            parcela.DataCancelamento = new DateTecno()
                            {
                                Data = DateTime.Now
                            }
                        }
                        ;
                    }
                    this.Salvar(cobranca.UltimoParcelamento);

                    var parcelamento = new CobrancaParcelamento()
                    {
                        CobrancaId      = cobranca.Id,
                        Data1Vencimento = new DateTecno()
                        {
                            Data = DateTime.Now.AddDays(15)
                        },
                        DataEmissao = new DateTecno()
                        {
                            Data = DateTime.Now
                        },
                        ValorMulta = cobranca.UltimoParcelamento.ValorMulta,
                        DUAS       = new List <CobrancaDUA>()
                    };
                    var parametrizacao = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);
                    parcelamento.ValorMultaAtualizado = Math.Round(this.GetValorTotalAtualizadoEmReais(cobranca, parcelamento, parametrizacao));

                    if (cobranca.AutuadoPessoa == null)
                    {
                        cobranca.AutuadoPessoa = cobranca.AutuadoPessoaId > 0 ? new PessoaBus().Obter(cobranca.AutuadoPessoaId) : new Pessoa();
                    }
                    parcelamento.QuantidadeParcelas = this.GetMaximoParcelas(cobranca, parcelamento);

                    this.Salvar(parcelamento);
                }
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(Validacao.EhValido);
        }
        public CobrancaParcelamento Criar(CobrancaParcelamento cobrancaParcelamento, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"
                                    insert into {0}tab_fisc_cob_parcelamento (id,
											cobranca,
											valor_multa,
											valor_multa_atualizado,
											qtdparcelas,
											vencimento_data,
											dataemissao,
											tid)
                                    values ({0}seq_fisc_cob_parc.nextval,
											:cobranca,
											:valor_multa,
											:valor_multa_atualizado,
											:qtdparcelas,
											:vencimento_data,
											:dataemissao,
                                            :tid)
                                    returning id into :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("cobranca", cobrancaParcelamento.CobrancaId, DbType.Int32);
                comando.AdicionarParametroEntrada("valor_multa", cobrancaParcelamento.ValorMulta, DbType.Decimal);
                comando.AdicionarParametroEntrada("valor_multa_atualizado", cobrancaParcelamento.ValorMultaAtualizado, DbType.Decimal);
                comando.AdicionarParametroEntrada("qtdparcelas", cobrancaParcelamento.QuantidadeParcelas, DbType.Int32);
                comando.AdicionarParametroEntrada("vencimento_data", cobrancaParcelamento.Data1Vencimento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("dataemissao", cobrancaParcelamento.DataEmissao.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroSaida("id", DbType.Int32);

                bancoDeDados.ExecutarNonQuery(comando);

                cobrancaParcelamento.Id = Convert.ToInt32(comando.ObterValorParametro("id"));

                Historico.Gerar(cobrancaParcelamento.CobrancaId, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados);

                //Consulta.Gerar(cobrancaParcelamento.Id, eHistoricoArtefato.cobranca, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(cobrancaParcelamento);
        }
示例#8
0
        private Cobranca GetCobranca(int codigoReceita)
        {
            var cobranca = _bus.Obter(1);

            if (cobranca == null)
            {
                cobranca = new Cobranca()
                {
                    Id             = 1,
                    DataEmissaoIUF = new DateTecno()
                    {
                        Data = DateTime.Now.AddDays(-60)
                    },
                    DataIUF = new DateTecno()
                    {
                        Data = DateTime.Now.AddDays(-60)
                    },
                    CodigoReceitaId = codigoReceita,
                    AutuadoPessoa   = _busPessoa.Obter(2525)
                };
                cobranca.AutuadoPessoaId = cobranca.AutuadoPessoa.Id;

                var parcelamento = new CobrancaParcelamento()
                {
                    Id          = 1,
                    ValorMulta  = 1959.48M,
                    DataEmissao = new DateTecno()
                    {
                        Data = DateTime.Now
                    },
                    Data1Vencimento = new DateTecno()
                    {
                        Data = DateTime.Now.AddDays(30)
                    },
                    CobrancaId = 1
                };

                cobranca.Parcelamentos = new List <CobrancaParcelamento>()
                {
                    parcelamento
                };
            }

            return(cobranca);
        }
        public CobrancaParcelamento Salvar(CobrancaParcelamento cobrancaParcelamento, BancoDeDados banco = null)
        {
            if (cobrancaParcelamento == null)
            {
                throw new Exception("Cobranca é nulo.");
            }

            if (cobrancaParcelamento.Id <= 0)
            {
                cobrancaParcelamento = Criar(cobrancaParcelamento, banco);
            }
            else
            {
                cobrancaParcelamento = Editar(cobrancaParcelamento, banco);
            }

            return(cobrancaParcelamento);
        }
        public bool Salvar(CobrancaParcelamento parcelamento)
        {
            if (parcelamento.QuantidadeParcelas == 0)
            {
                Validacao.Add(Mensagem.CobrancaMsg.QuantidadeParcelasObrigatorio);
            }

            if (!parcelamento.Data1Vencimento.IsValido)
            {
                Validacao.Add(Mensagem.CobrancaMsg.DataVencimentoObrigatoria);
            }

            if (!parcelamento.DataEmissao.IsValido)
            {
                Validacao.Add(Mensagem.CobrancaMsg.DataEmissaoObrigatoria);
            }

            return(Validacao.EhValido);
        }
        public CobrancaParcelamento Editar(CobrancaParcelamento cobrancaParcelamento, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"
                                    update {0}tab_fisc_cob_parcelamento t
                                    set 
										t.cobranca = :cobranca,
										t.valor_multa = :valor_multa,
										t.valor_multa_atualizado = :valor_multa_atualizado,
										t.qtdparcelas = :qtdparcelas,
										t.vencimento_data = :vencimento_data,
										t.dataemissao = :dataemissao,
                                        t.tid = :tid
                                    where t.id = :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("id", cobrancaParcelamento.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("cobranca", cobrancaParcelamento.CobrancaId, DbType.Int32);
                comando.AdicionarParametroEntrada("valor_multa", cobrancaParcelamento.ValorMulta, DbType.Decimal);
                comando.AdicionarParametroEntrada("valor_multa_atualizado", cobrancaParcelamento.ValorMultaAtualizado, DbType.Decimal);
                comando.AdicionarParametroEntrada("qtdparcelas", cobrancaParcelamento.QuantidadeParcelas, DbType.Int32);
                comando.AdicionarParametroEntrada("vencimento_data", cobrancaParcelamento.Data1Vencimento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("dataemissao", cobrancaParcelamento.DataEmissao.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                bancoDeDados.ExecutarNonQuery(comando);

                Historico.Gerar(cobrancaParcelamento.CobrancaId, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados);

                //Consulta.Gerar(cobrancaParcelamento.Id, eHistoricoArtefato.cobranca, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(cobrancaParcelamento);
        }
示例#12
0
        public bool Calcular(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            if (cobranca.CodigoReceitaId == 0)
            {
                return(false);
            }

            if (!cobranca.DataEmissaoIUF.IsValido)
            {
                Validacao.Add(Mensagem.CobrancaMsg.DataEmissaoIUFObrigatorio);
            }

            if (!cobranca.DataIUF.IsValido)
            {
                Validacao.Add(Mensagem.CobrancaMsg.DataIUFObrigatorio);
            }

            if (!parcelamento.Data1Vencimento.IsValido)
            {
                Validacao.Add(Mensagem.CobrancaMsg.DataVencimentoObrigatoria);
            }

            return(Validacao.EhValido);
        }
示例#13
0
        public bool CalcularParcelas(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            var retorno = false;

            if (!_validar.Calcular(cobranca, parcelamento))
            {
                return(retorno);
            }

            var vrte            = _busConfiguracao.ObterVrte(cobranca.DataIUF.Data.Value.Year) ?? new Vrte();
            var parametrizacao  = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);
            var vrte1Vencimento = _busConfiguracao.ObterVrte(parcelamento.Data1Vencimento.Data.Value.Year) ?? new Vrte();

            if (!_validar.CalcularParametrizacao(parametrizacao, vrte, vrte1Vencimento))
            {
                return(retorno);
            }

            var valorMultaAtualizadoEmReais = GetValorTotalAtualizadoEmReais(cobranca, parcelamento, parametrizacao);

            parcelamento.ValorMultaAtualizado = (valorMultaAtualizadoEmReais / vrte.VrteEmReais) * vrte1Vencimento.VrteEmReais;
            var valorAtualizadoVRTE = parcelamento.ValorMultaAtualizado / vrte1Vencimento.VrteEmReais;

            if ((parcelamento.DUAS?.Count ?? 0) == 0)
            {
                if (parcelamento.QuantidadeParcelas == 0)
                {
                    parcelamento.QuantidadeParcelas = this.GetMaximoParcelas(cobranca, parcelamento);
                }
                parcelamento.DUAS = this.GerarParcelas(cobranca, parcelamento);
            }
            var parcelas = parcelamento.DUAS.OrderBy(x => Convert.ToInt32(x.Parcela.Split('/')[0])).ToList();

            if (parcelas.Count == 1 && cobranca.Parcelamentos?.Count <= 1)
            {
                var parcela = parcelas[0];
                if (parcela.ValorDUA == 0)
                {
                    var prazoDesconto = parametrizacao.PrazoDescontoUnidade * GetPrazoDesconto(parametrizacao.PrazoDescontoDecorrencia);
                    var vrteParcela   = _busConfiguracao.ObterVrte(parcela.DataVencimento.Data.Value.Year);

                    if (parcela.DataVencimento.Data < cobranca.DataIUF.Data.Value.AddDays(prazoDesconto + 1).Date)
                    {
                        parcelamento.ValorMultaAtualizado = parcelamento.ValorMulta;
                        valorAtualizadoVRTE = parcelamento.ValorMulta / vrte.VrteEmReais;
                        parcela.VRTE        = valorAtualizadoVRTE * (1 - (Convert.ToDecimal(parametrizacao.DescontoPercentual) / 100));
                        if (vrteParcela.Id > 0)
                        {
                            parcela.ValorDUA = Math.Round(parcela.VRTE * vrteParcela.VrteEmReais, 2);
                            parcelamento.ValorMultaAtualizado = parcela.ValorDUA;
                        }
                    }
                    else
                    {
                        parcela.VRTE = valorAtualizadoVRTE;
                        if (vrteParcela.Id > 0)
                        {
                            parcela.ValorDUA = Math.Round(valorAtualizadoVRTE * vrteParcela.VrteEmReais, 2);
                        }
                    }
                }

                retorno = true;
            }
            else
            {
                var parcelaAnterior = new CobrancaDUA();
                var valorJuros      = 1 + (Convert.ToDecimal(parametrizacao.JurosPercentual) / 100);

                foreach (var parcela in parcelas)
                {
                    if (parcela.ValorDUA == 0)
                    {
                        if (parcela.VRTE == 0)
                        {
                            if ((parcela.Parcela.Split('/')[0]).Equals("1"))
                            {
                                parcela.VRTE = Math.Round(valorAtualizadoVRTE / parcelamento.QuantidadeParcelas, 4);
                            }
                            else
                            {
                                parcela.VRTE = Math.Round(parcelaAnterior.VRTE * valorJuros, 4);
                            }
                        }

                        if (parcela.DataVencimento.IsValido)
                        {
                            var vrteParcela = _busConfiguracao.ObterVrte(parcela.DataVencimento.Data.Value.Year);
                            if (vrteParcela.Id > 0)
                            {
                                parcela.ValorDUA = Math.Round(parcela.VRTE * vrteParcela.VrteEmReais, 2);
                            }
                        }
                    }
                    parcelaAnterior = parcela;
                    retorno         = true;
                }
            }

            return(retorno);
        }