private BoletoBancario Gerador(string token) { Contexto db = new Contexto(); //Decriptar o boleto var idBoletoGerado = Convert.ToInt32(Criptografia.Decriptar(token)); BoletoGerado boletoGerado = db.BoletosGerado.Find(idBoletoGerado); boletoGerado.TituloRecorrente = db.TitulosRecorrentes.Find(boletoGerado.TituloRecorrenteId); boletoGerado.Titulo = db.Titulos.Find(boletoGerado.TituloId); //gerar o boleto if (boletoGerado.TituloId != null) { return(Util.GerarBoletoBancario((int)boletoGerado.TituloId, boletoGerado.ModeloBoletoId)); } else { return(Util.GerarBoletoBancario((int)boletoGerado.TituloRecorrenteId, (decimal)boletoGerado.TituloRecorrente.Valor, (DateTime)boletoGerado.DataVencimento, boletoGerado.ModeloBoletoId)); } }
public static Boleto GerarBoleto(int tituloRecorrenteId, decimal valor, DateTime dataVencimento, int modeloBoletoId) { #region Instanciações var db = new Contexto(); //var titulo = new RepositorioTituloRecorrente().BuscarPorId(tituloRecorrenteId); var titulo = db.TitulosRecorrentes.Find(tituloRecorrenteId); var conta = titulo.Conta; var pessoa = titulo.Pessoa; var empresa = titulo.Empresa; int numeroBanco = conta.Banco.Codigo; //var repoModeloBoleto = new RepositorioModeloBoleto(); //var modeloBoleto = repoModeloBoleto.BuscarPorId(modeloBoletoId); var modeloBoleto = db.ModelosBoleto.Find(modeloBoletoId); var dataVencimentoOriginal = dataVencimento; Decimal JurosTotais = 0; if (modeloBoleto == null) { throw new Exception("Modelo de Boleto não definido"); } #endregion #region Gravar Boleto //var repoBoletoGerado = new RepositorioBoletoGerado(); //var boletogerado = repoBoletoGerado.Listar(b => b.TituloRecorrenteId == tituloRecorrenteId && b.DataVencimento == dataVencimento).FirstOrDefault(); var boletoGerado = db.BoletosGerado.Where(b => b.TituloRecorrenteId == tituloRecorrenteId && b.DataVencimento == dataVencimento).FirstOrDefault(); if (boletoGerado == null) { boletoGerado = new BoletoGerado(); boletoGerado.ModeloBoletoId = modeloBoletoId; boletoGerado.TituloId = null; boletoGerado.TituloRecorrenteId = tituloRecorrenteId; boletoGerado.DataVencimento = dataVencimento; boletoGerado.PercentualDesconto = modeloBoleto.PercentualDesconto; boletoGerado.DiasDesconto = modeloBoleto.DiasDesconto; boletoGerado.Juros = modeloBoleto.Juros; boletoGerado.Multa = modeloBoleto.Multa; modeloBoleto.NossoNumero++; //repoModeloBoleto.Alterar(modeloBoleto); db.Entry <ModeloBoleto>(modeloBoleto).State = System.Data.Entity.EntityState.Modified; boletoGerado.NossoNumero = modeloBoleto.NossoNumero; boletoGerado.EmpresaId = titulo.EmpresaId; //repoBoletoGerado.Incluir(boletoGerado); db.BoletosGerado.Add(boletoGerado); db.SaveChanges(); } #endregion #region Cedente var c = new Cedente(empresa.CpfCnpj, empresa.Nome, conta.Agencia, conta.ContaCorrente.Split('-')[0], conta.ContaCorrente.Split('-')[1]); c.Codigo = conta.ContaCorrente; #endregion #region Boleto Boleto boleto = new Boleto(dataVencimento, valor, modeloBoleto.Carteira, boletoGerado.NossoNumero.ToString(), c, new EspecieDocumento(numeroBanco)); boleto.NumeroDocumento = tituloRecorrenteId.ToString(); boleto.Banco = new BoletoNet.Banco(numeroBanco); #endregion #region Instrucoes Instrucao item1 = new Instrucao(conta.Banco.Codigo); item1.Descricao = modeloBoleto.Instrucao; boleto.Instrucoes.Add(item1); #endregion #region Juros if (boletoGerado.Juros > 0) { Instrucao item2 = new Instrucao(conta.Banco.Codigo); boleto.JurosMora = Math.Round(boleto.ValorBoleto * boletoGerado.Juros / 100 / 30, 2); item2.Descricao = "Após o vencimento cobrar juros de R$ " + boleto.JurosMora + " ao dia"; boleto.Instrucoes.Add(item2); if (dataVencimento < DateTime.Today && titulo.Categoria.DirecaoVencimentoDiaNaoUtil == DirecaoVencimento.Antecipado) { boleto.DataVencimento = DateTime.Today; int diasTotais = (int)(DateTime.Today - dataVencimento).TotalDays; JurosTotais = boleto.JurosMora * diasTotais; } else if (dataVencimento < DateTime.Today && titulo.Categoria.DirecaoVencimentoDiaNaoUtil == DirecaoVencimento.Prorrogado) { boleto.DataVencimento = DateTime.Today; int diasTotais = (int)(DateTime.Today - dataVencimento).TotalDays; JurosTotais = boleto.JurosMora * diasTotais; } } #endregion #region Multa if (boletoGerado.Multa > 0) { Instrucao item3 = new Instrucao(conta.Banco.Codigo); decimal multa = boleto.ValorBoleto * boletoGerado.Multa / 100; item3.Descricao = "Após o vencimento cobrar multa de R$ " + Math.Round(multa, 2); boleto.Instrucoes.Add(item3); if (dataVencimento < DateTime.Today) { boleto.DataVencimento = DateTime.Today; boleto.ValorMulta = multa; Instrucao item4 = new Instrucao(conta.Banco.Codigo); item4.Descricao = "Valor original: R$ " + boleto.ValorBoleto; boleto.Instrucoes.Add(item4); } } boleto.ValorBoleto += JurosTotais + boleto.ValorMulta; boleto.DataJurosMora = dataVencimento; boleto.DataMulta = dataVencimento; boleto.PercMulta = boletoGerado.Multa; boleto.PercJurosMora = boletoGerado.Juros; #endregion #region Desconto if (boletoGerado.PercentualDesconto > 0) { boleto.DataDesconto = dataVencimentoOriginal.AddDays(-boletoGerado.DiasDesconto); if (DateTime.Today <= boleto.DataDesconto) { boleto.ValorDesconto = boleto.ValorBoleto * (boletoGerado.PercentualDesconto / 100); Instrucao instrucaoDesconto = new Instrucao(numeroBanco); instrucaoDesconto.Descricao = "Até " + boleto.DataDesconto.GetDateTimeFormats()[0] + " conceder desconto de R$ " + Math.Round(boleto.ValorDesconto, 2); boleto.Instrucoes.Add(instrucaoDesconto); } } #endregion #region Sacado boleto.Sacado = new Sacado(pessoa.Cpf, pessoa.Nome); boleto.Sacado.Endereco = new BoletoNet.Endereco() { Bairro = pessoa.Endereco.Bairro, End = pessoa.Endereco.Logradouro + ", " + pessoa.Endereco.Numero + " " + pessoa.Endereco.Complemento, CEP = pessoa.Endereco.Cep, Cidade = pessoa.Endereco.Cidade, Complemento = pessoa.Endereco.Complemento, Numero = pessoa.Endereco.Numero, UF = pessoa.Endereco.Uf }; #endregion return(boleto); }