public static Boleto GerarBoleto(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor, DateTime dataVencimento, string numeroDocumento) { try { if (carteiraBoleto == null) { throw new Exception("Carteira inválida."); } if (sacado == null) { throw new Exception("Dados do sacado inválido."); } if (valor <= 0) { throw new Exception("Valor deve ser maior que 0."); } if (dataVencimento == DateTime.MinValue) { throw new Exception("Data de vencimento inválida."); } if (numeroDocumento.Trim().Length == 0) { throw new Exception("Número documento inválido."); } /* Geração pelo BoletoBr */ BoletoBr.Boleto boletoBancarioGerado = TransformaDeFormatoBoletoParaFormatoBoletoBr(carteiraBoleto, sacado, valor, dataVencimento, numeroDocumento); if (boletoBancarioGerado == null) { throw new Exception("Os dados do(s) boleto(s) não são válidos!"); } return(boletoBancarioGerado); } catch (Exception ex) { throw ex; } }
private static BoletoBr.Boleto TransformaDeFormatoBoletoParaFormatoBoletoBr(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor, DateTime dataVencimento, string numeroDocumento) { var vencimento = dataVencimento; var valorBoleto = valor; var nroConvenio = carteiraBoleto.NumeroConvenio; var identificadorInternoDocumento = numeroDocumento; #region Dados Cedente var codigoCedente = carteiraBoleto.CodigoCedente.BoletoBrToStringSafe(); var digitoCedente = carteiraBoleto.DigitoCodigoCedente.BoletoBrToInt(); var codTransmissao = carteiraBoleto.CodigoTransmissao.BoletoBrToStringSafe(); var cpfcnpjcedente = carteiraBoleto.CpfCnpjCedente.BoletoBrToStringSafe(); var descricaocedente = carteiraBoleto.NomeCedente.BoletoBrToStringSafe(); var agencia = carteiraBoleto.NumeroAgencia; var digitoAgencia = carteiraBoleto.DigitoAgencia; var conta = carteiraBoleto.NumeroConta; var digitoConta = carteiraBoleto.DigitoConta; var enderecoCedente = carteiraBoleto.EnderecoCedente; var bairroCedente = carteiraBoleto.BairroCedente; var complementoEndCedente = carteiraBoleto.ComplementoCedente; var numeroEnderecoCedente = carteiraBoleto.NumeroCedente; var cepCedente = carteiraBoleto.CepCedente; var cidadeCedente = carteiraBoleto.CidadeCedente; var ufEnderecoCedente = carteiraBoleto.UfCedente; var contaBancariaCedente = new BoletoBr.ContaBancaria(agencia, digitoAgencia, conta, digitoConta); var cedente = new BoletoBr.Cedente(codigoCedente, nroConvenio, digitoCedente, cpfcnpjcedente, descricaocedente, contaBancariaCedente, new Endereco() { Bairro = bairroCedente, Cep = cepCedente, Cidade = cidadeCedente, Complemento = complementoEndCedente, Logradouro = enderecoCedente, Numero = numeroEnderecoCedente, SiglaUf = ufEnderecoCedente, }); #endregion var codBanco = carteiraBoleto.CodigoBanco.PadLeft(3, '0'); var boleto = new BoletoBr.Boleto(); var objBanco = BoletoBr.Fabricas.BancoFactory.ObterBanco(codBanco); boleto.TipoModalidade = ""; boleto.Moeda = objBanco.MoedaBanco; boleto.BancoBoleto = objBanco; boleto.Aceite = "N"; boleto.DataProcessamento = DateTime.Now; boleto.CarteiraCobranca = new CarteiraCobranca(); #region Dados Carteira var numeroCarteira = carteiraBoleto.NumeroCarteira; var variacaoCarteira = ""; #region Variação Carteiras BB /* Banco do Brasil tratar variação carteira (Compor variação sempre com o numero da carteira separado por / ou -) */ if (codBanco == "001") { if (numeroCarteira.Contains("/")) { var carteiraVariacao = numeroCarteira.Split(Convert.ToChar("/")); numeroCarteira = carteiraVariacao[0]; variacaoCarteira = carteiraVariacao[1]; } else if (numeroCarteira.Contains("-")) { var carteiraVariacao = numeroCarteira.Split(Convert.ToChar("-")); numeroCarteira = carteiraVariacao[0]; variacaoCarteira = carteiraVariacao[1]; } } #endregion boleto.CodigoDeTransmissao = codTransmissao; boleto.CarteiraCobranca.Codigo = numeroCarteira; boleto.CarteiraCobranca.Variacao = variacaoCarteira; boleto.CarteiraCobranca.Descricao = carteiraBoleto.DescricaoCarteira; boleto.CarteiraCobranca.BancoEmiteBoleto = carteiraBoleto.BancoGeraBoleto; boleto.CarteiraCobranca.Tipo = carteiraBoleto.TipoArquivoRemessa; if (string.IsNullOrEmpty(descricaocedente)) { throw new Exception( $"Não foi informado o nome do beneficário na carteira de cobrança: {boleto.CarteiraCobranca.Descricao}."); } #endregion #region Instruções/Mensagem var existeMensagem1 = string.IsNullOrEmpty(carteiraBoleto.Instrucao1) == false; var existeMensagem2 = string.IsNullOrEmpty(carteiraBoleto.Instrucao2) == false; var existeMensagem3 = string.IsNullOrEmpty(carteiraBoleto.Instrucao3) == false; var existeMensagem4 = string.IsNullOrEmpty(carteiraBoleto.Instrucao4) == false; var existeMensagem5 = string.IsNullOrEmpty(carteiraBoleto.Instrucao5) == false; var existeMensagem6 = string.IsNullOrEmpty(carteiraBoleto.Instrucao6) == false; if (existeMensagem1) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao1); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } if (existeMensagem2) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao2); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } if (existeMensagem3) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao3); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } if (existeMensagem4) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao4); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } if (existeMensagem5) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao5); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } if (existeMensagem6) { var instrucaoAdd = new InstrucaoCustomizada(carteiraBoleto.Instrucao6); boleto.InstrucoesDoBoleto.Add(instrucaoAdd); } #endregion #region Dados Sacado var cpfcnpjSacado = sacado.CpfCnpj; var nomeSacado = sacado.Nome; boleto.SacadoBoleto = new BoletoBr.Sacado(nomeSacado, cpfcnpjSacado, TransformaEnderecoParaEnderecoBoletoBr(sacado)); #endregion /* Ajuste */ boleto.LocalPagamento = boleto.BancoBoleto.LocalDePagamento; boleto.DataVencimento = vencimento; boleto.CedenteBoleto = cedente; // Padronizado para DM - Duplicata Mercantil boleto.Especie = codBanco == "399" ? new EspecieDocumento(02, "Duplicata Mercantil", "PD") : new EspecieDocumento(02, "Duplicata Mercantil", "DM"); boleto.CodigoOcorrenciaRemessa = objBanco.ObtemCodigoOcorrencia(EnumCodigoOcorrenciaRemessa.Registro, 0, DateTime.Now); if (boleto.DataDocumento <= DateTime.MinValue) { boleto.DataDocumento = DateTime.Now; } boleto.NumeroDocumento = identificadorInternoDocumento; boleto.IdentificadorInternoBoleto = identificadorInternoDocumento; boleto.ValorBoleto = valorBoleto; boleto.PercentualJurosMora = carteiraBoleto.ValorJuros; boleto.InformacoesAdicionais = new List <InformacoesAdicionais>(); objBanco.FormatarBoleto(boleto); return(boleto); }