Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
        }