public bool Salvar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null) { try { if (_validarDUA.Salvar(cobrancaDUA)) { if (!string.IsNullOrWhiteSpace(cobrancaDUA.NumeroDUA) && cobrancaDUA.NumeroDUA != "0") { var idDua = _daDUA.GetIdDUAByNumero(cobrancaDUA.NumeroDUA, cobrancaDUA.Id); if (idDua > 0) { var dua = _daDUA.ObterDUA(idDua, banco); Validacao.Add(Mensagem.CobrancaMsg.DuaDuplicado(dua.NumeroDUA, dua.Parcela, _da.GetIdFiscalizacaoByParcelamento(dua.ParcelamentoId, banco))); return(Validacao.EhValido); } } GerenciadorTransacao.ObterIDAtual(); using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco)) { bancoDeDados.IniciarTransacao(); _daDUA.Salvar(cobrancaDUA, bancoDeDados); bancoDeDados.Commit(); } } } catch (Exception e) { Validacao.AddErro(e); } return(Validacao.EhValido); }
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 bool Salvar(CobrancaDUA cobrancaDUA) { if (cobrancaDUA.VRTE == 0) { Validacao.Add(Mensagem.CobrancaDUAMsg.VrteObrigatorio); } return(Validacao.EhValido); }
public CobrancaDUA Editar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null) { using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco)) { bancoDeDados.IniciarTransacao(); Comando comando = bancoDeDados.CriarComando(@" update {0}tab_fisc_cob_dua t set t.vencimento_data = :vencimento_data, t.dataemissao = :dataemissao, t.parcela = :parcela, t.numero_dua = :numero_dua, t.valor_dua = :valor_dua, t.valor_pago = :valor_pago, t.vrte = :vrte, t.pagamento_data = :pagamento_data, t.complemento = :complemento, t.pai_dua = :pai_dua, t.cob_parc = :cob_parc, t.cancelamento_data = :cancelamento_data, t.tid = :tid where t.id = :id", EsquemaBanco); comando.AdicionarParametroEntrada("id", cobrancaDUA.Id, DbType.Int32); comando.AdicionarParametroEntrada("vencimento_data", cobrancaDUA.DataVencimento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("dataemissao", cobrancaDUA.DataEmissao.Data, DbType.DateTime); comando.AdicionarParametroEntrada("parcela", cobrancaDUA.Parcela, DbType.String); comando.AdicionarParametroEntrada("numero_dua", cobrancaDUA.NumeroDUA, DbType.String); comando.AdicionarParametroEntrada("valor_dua", cobrancaDUA.ValorDUA, DbType.Decimal); comando.AdicionarParametroEntrada("valor_pago", cobrancaDUA.ValorPago, DbType.Decimal); comando.AdicionarParametroEntrada("vrte", cobrancaDUA.VRTE, DbType.Decimal); comando.AdicionarParametroEntrada("pagamento_data", cobrancaDUA.DataPagamento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("complemento", cobrancaDUA.InformacoesComplementares, DbType.String); comando.AdicionarParametroEntrada("pai_dua", cobrancaDUA.ParcelaPaiId, DbType.Int32); comando.AdicionarParametroEntrada("cob_parc", cobrancaDUA.ParcelamentoId, DbType.Int32); comando.AdicionarParametroEntrada("cancelamento_data", cobrancaDUA.DataCancelamento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual()); bancoDeDados.ExecutarNonQuery(comando); Historico.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados); //Consulta.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, bancoDeDados); bancoDeDados.Commit(); } return(cobrancaDUA); }
public CobrancaDUA Salvar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null) { if (cobrancaDUA == null) { throw new Exception("Cobranca é nulo."); } if (cobrancaDUA.ParcelaPaiId == 0) { cobrancaDUA.ParcelaPaiId = null; } if (cobrancaDUA.Id <= 0) { cobrancaDUA = Criar(cobrancaDUA, banco); } else { cobrancaDUA = Editar(cobrancaDUA, banco); } return(cobrancaDUA); }
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); }
public CobrancaDUA Criar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null) { using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco)) { bancoDeDados.IniciarTransacao(); Comando comando = bancoDeDados.CriarComando(@" insert into {0}tab_fisc_cob_dua (id, vencimento_data, dataemissao, parcela, numero_dua, valor_dua, valor_pago, vrte, pagamento_data, complemento, pai_dua, cob_parc, cancelamento_data, tid) values ({0}seq_fisc_cob_dua.nextval, :vencimento_data, :dataemissao, :parcela, :numero_dua, :valor_dua, :valor_pago, :vrte, :pagamento_data, :complemento, :pai_dua, :cob_parc, :cancelamento_data, :tid) returning id into :id", EsquemaBanco); comando.AdicionarParametroEntrada("vencimento_data", cobrancaDUA.DataVencimento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("dataemissao", cobrancaDUA.DataEmissao.Data, DbType.DateTime); comando.AdicionarParametroEntrada("parcela", cobrancaDUA.Parcela, DbType.String); comando.AdicionarParametroEntrada("numero_dua", cobrancaDUA.NumeroDUA, DbType.String); comando.AdicionarParametroEntrada("valor_dua", cobrancaDUA.ValorDUA, DbType.Decimal); comando.AdicionarParametroEntrada("valor_pago", cobrancaDUA.ValorPago, DbType.Decimal); comando.AdicionarParametroEntrada("vrte", cobrancaDUA.VRTE, DbType.Decimal); comando.AdicionarParametroEntrada("pagamento_data", cobrancaDUA.DataPagamento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("complemento", cobrancaDUA.InformacoesComplementares, DbType.String); comando.AdicionarParametroEntrada("pai_dua", cobrancaDUA.ParcelaPaiId, DbType.Int32); comando.AdicionarParametroEntrada("cob_parc", cobrancaDUA.ParcelamentoId, DbType.Int32); comando.AdicionarParametroEntrada("cancelamento_data", cobrancaDUA.DataCancelamento.Data, DbType.DateTime); comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual()); comando.AdicionarParametroSaida("id", DbType.Int32); bancoDeDados.ExecutarNonQuery(comando); cobrancaDUA.Id = Convert.ToInt32(comando.ObterValorParametro("id")); Historico.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados); //Consulta.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, bancoDeDados); bancoDeDados.Commit(); } return(cobrancaDUA); }
public List <CobrancaDUA> Obter(int parcelamentoId, BancoDeDados banco = null) { var lista = new List <CobrancaDUA>(); using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco)) { Comando comando = bancoDeDados.CriarComando(@"select d.id, d.vencimento_data, d.dataemissao, d.parcela, d.numero_dua, d.valor_dua, d.valor_pago, d.vrte, d.pagamento_data, d.complemento, d.pai_dua, d.cob_parc, d.cancelamento_data, d.tid, case when d.cancelamento_data is not null then 'Cancelado' when d.pagamento_data is null and d.vencimento_data >= sysdate or d.valor_dua is null or d.valor_dua = 0 then 'Em Aberto' when d.pagamento_data is not null and d.valor_pago >= d.valor_dua or exists (select 1 from tab_fisc_cob_dua dc where dc.pai_dua = d.id) then 'Pago' when d.pagamento_data is not null and d.valor_pago < d.valor_dua then 'Pago Parcial' when d.pagamento_data is null and d.vencimento_data < sysdate then 'Atrasado' end as situacao from {0}tab_fisc_cob_dua d where d.cob_parc = :parcelamentoId order by cast(replace(substr(d.parcela, 0, instr(d.parcela, '/')), '/') as number)" , EsquemaBanco); comando.AdicionarParametroEntrada("parcelamentoId", parcelamentoId, DbType.Int32); using (IDataReader reader = bancoDeDados.ExecutarReader(comando)) { while (reader.Read()) { var cobrancaDUA = new CobrancaDUA { Id = reader.GetValue <int>("id"), Parcela = reader.GetValue <string>("parcela"), NumeroDUA = reader.GetValue <string>("numero_dua"), ValorDUA = reader.GetValue <decimal>("valor_dua"), ValorPago = reader.GetValue <decimal>("valor_pago"), VRTE = reader.GetValue <decimal>("vrte"), InformacoesComplementares = reader.GetValue <string>("complemento"), ParcelaPaiId = reader.GetValue <int>("pai_dua"), ParcelamentoId = reader.GetValue <int>("cob_parc"), Tid = reader.GetValue <string>("tid"), Situacao = reader.GetValue <string>("situacao") }; cobrancaDUA.DataVencimento.Data = reader.GetValue <DateTime>("vencimento_data"); cobrancaDUA.DataEmissao.Data = reader.GetValue <DateTime>("dataemissao"); cobrancaDUA.DataPagamento.Data = reader.GetValue <DateTime>("pagamento_data"); cobrancaDUA.DataCancelamento.Data = reader.GetValue <DateTime>("cancelamento_data"); if (cobrancaDUA.DataVencimento.Data.HasValue && cobrancaDUA.DataVencimento.Data.Value.Year == 1) { cobrancaDUA.DataVencimento = new DateTecno(); } if (cobrancaDUA.DataEmissao.Data.HasValue && cobrancaDUA.DataEmissao.Data.Value.Year == 1) { cobrancaDUA.DataEmissao = new DateTecno(); } if (cobrancaDUA.DataPagamento.Data.HasValue && cobrancaDUA.DataPagamento.Data.Value.Year == 1) { cobrancaDUA.DataPagamento = new DateTecno(); } if (cobrancaDUA.DataCancelamento.Data.HasValue && cobrancaDUA.DataCancelamento.Data.Value.Year == 1) { cobrancaDUA.DataCancelamento = new DateTecno(); } if (cobrancaDUA.ParcelaPaiId > 0) { cobrancaDUA.ParcelaPai = this.ObterDUA(cobrancaDUA.ParcelaPaiId.Value); } lista.Add(cobrancaDUA); } reader.Close(); } } return(lista); }
public CobrancaDUA ObterDUA(int cobrancaDUAId, BancoDeDados banco = null) { var cobrancaDUA = new CobrancaDUA(); using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco)) { Comando comando = bancoDeDados.CriarComando(@" select d.id, d.vencimento_data, d.dataemissao, d.parcela, d.numero_dua, d.valor_dua, d.valor_pago, d.vrte, d.pagamento_data, d.complemento, d.pai_dua, d.cob_parc, d.cancelamento_data, d.tid from {0}tab_fisc_cob_dua d where d.id = :id" , EsquemaBanco); comando.AdicionarParametroEntrada("id", cobrancaDUAId, DbType.Int32); using (IDataReader reader = bancoDeDados.ExecutarReader(comando)) { if (reader.Read()) { cobrancaDUA = new CobrancaDUA { Id = reader.GetValue <int>("id"), Parcela = reader.GetValue <string>("parcela"), NumeroDUA = reader.GetValue <string>("numero_dua"), ValorDUA = reader.GetValue <decimal>("valor_dua"), ValorPago = reader.GetValue <decimal>("valor_pago"), VRTE = reader.GetValue <decimal>("vrte"), InformacoesComplementares = reader.GetValue <string>("complemento"), ParcelaPaiId = reader.GetValue <int>("pai_dua"), ParcelamentoId = reader.GetValue <int>("cob_parc"), Tid = reader.GetValue <string>("tid") }; cobrancaDUA.DataVencimento.Data = reader.GetValue <DateTime>("vencimento_data"); cobrancaDUA.DataEmissao.Data = reader.GetValue <DateTime>("dataemissao"); cobrancaDUA.DataPagamento.Data = reader.GetValue <DateTime>("pagamento_data"); cobrancaDUA.DataCancelamento.Data = reader.GetValue <DateTime>("cancelamento_data"); if (cobrancaDUA.DataVencimento.Data.HasValue && cobrancaDUA.DataVencimento.Data.Value.Year == 1) { cobrancaDUA.DataVencimento = new DateTecno(); } if (cobrancaDUA.DataEmissao.Data.HasValue && cobrancaDUA.DataEmissao.Data.Value.Year == 1) { cobrancaDUA.DataEmissao = new DateTecno(); } if (cobrancaDUA.DataPagamento.Data.HasValue && cobrancaDUA.DataPagamento.Data.Value.Year == 1) { cobrancaDUA.DataPagamento = new DateTecno(); } if (cobrancaDUA.DataCancelamento.Data.HasValue && cobrancaDUA.DataCancelamento.Data.Value.Year == 1) { cobrancaDUA.DataCancelamento = new DateTecno(); } } else { cobrancaDUA = null; } reader.Close(); } } return(cobrancaDUA); }