예제 #1
0
        private void btnGerarRemessa_Click(object sender, EventArgs e)
        {
            if (!Validar())
            {
                return;
            }

            try
            {
                var carteira = GetCarteiraSelecionada();
                var sacado   = new SacadoBoleto(edtCedenteNome.EditValue?.ToString(),
                                                edtCedenteCpfCnpj.EditValue?.ToString(), edtCedenteEndereco.EditValue?.ToString(),
                                                edtCedenteComplemento.EditValue?.ToString(), edtCedenteNumero.EditValue?.ToString(),
                                                edtCedenteBairro.EditValue?.ToString(), edtCedenteCidade.EditValue?.ToString(),
                                                edtCedenteUF.EditValue?.ToString(), edtCedenteCEP.EditValue?.ToString());

                var caminhoArquivo =
                    Funcoes.GerarArquivoRemessa(carteira, sacado, Convert.ToDecimal(edtValor.EditValue?.ToString()),
                                                edtDataVencimento.DateTime, edtNumeroDocumento.EditValue?.ToString());

                if (
                    MessageBox.Show(string.Format(@"Remessa gerada com sucesso!
                    {0}Local do arquivo:{0}{1}{0}
                    Deseja abrir a pasta onde o arquivo foi gerado?", Environment.NewLine, caminhoArquivo), "Aviso",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    Process.Start(Path.GetDirectoryName(caminhoArquivo));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #2
0
        private void btnGerarBoleto_Click(object sender, EventArgs e)
        {
            if (!Validar())
            {
                return;
            }

            try
            {
                var carteira = GetCarteiraSelecionada();
                var sacado   = new SacadoBoleto(edtCedenteNome.EditValue?.ToString(),
                                                edtCedenteCpfCnpj.EditValue?.ToString(), edtCedenteEndereco.EditValue?.ToString(),
                                                edtCedenteComplemento.EditValue?.ToString(), edtCedenteNumero.EditValue?.ToString(),
                                                edtCedenteBairro.EditValue?.ToString(), edtCedenteCidade.EditValue?.ToString(),
                                                edtCedenteUF.EditValue?.ToString(), edtCedenteCEP.EditValue?.ToString());

                var boleto = Funcoes.GerarBoleto(carteira, sacado, Convert.ToDecimal(edtValor.EditValue?.ToString()),
                                                 edtDataVencimento.DateTime, edtNumeroDocumento.EditValue?.ToString());

                var modeloUtilizar = Funcoes.RetornaModeloBoletoUtilizar(carteira.ModeloBoleto);

                var objVisualizadorBoleto = new VisualizadorBoleto(modeloUtilizar, new List <Boleto>()
                {
                    boleto
                });
                objVisualizadorBoleto.ExibirNaTela();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #3
0
        private static BoletoBr.Endereco TransformaEnderecoParaEnderecoBoletoBr(SacadoBoleto sacadoBoleto)
        {
            var ret = new BoletoBr.Endereco()
            {
                TipoLogradouro = "",
                Logradouro     = sacadoBoleto.Logradouro,
                Complemento    = sacadoBoleto.Complemento,
                Numero         = sacadoBoleto.Numero,
                Bairro         = sacadoBoleto.Bairro,
                Cidade         = sacadoBoleto.Cidade,
                Cep            = sacadoBoleto.Cep,
                SiglaUf        = sacadoBoleto.Uf
            };

            return(ret);
        }
예제 #4
0
        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;
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        public static string GerarArquivoRemessa(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor,
                                                 DateTime dataVencimento, string numeroDocumento)
        {
            try
            {
                var listaBoletoBrRemessa           = new List <Boleto>();
                var sequenciaRemessaCarteiraBoleto = 1;

                try
                {
                    // Transforma boletos e adiciona lançamentos na lista
                    listaBoletoBrRemessa.Add(TransformaDeFormatoBoletoParaFormatoBoletoBr(carteiraBoleto, sacado,
                                                                                          valor, dataVencimento, numeroDocumento));
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                #region Validações (Banco e Carteira)

                /* Garantir que todos os boletos pertencem a mesmo banco e carteira de boleto */
                var bancosEncontrados = listaBoletoBrRemessa.GroupBy(gb => gb.BancoBoleto.CodigoBanco);
                if (bancosEncontrados.Count() > 1)
                {
                    throw new Exception(
                              "Há mais de 1 banco associado aos boletos que foram informados para geração de remessa.");
                }

                var carteirasCobrancaEncontradas = listaBoletoBrRemessa.GroupBy(gb => gb.CarteiraCobranca.Codigo);
                if (carteirasCobrancaEncontradas.Count() > 1)
                {
                    throw new Exception(
                              "Há mais de 1 tipo de carteira de cobrança associado aos boletos que foram informados para geração de remessa.");
                }

                if (listaBoletoBrRemessa.Any(qry => qry.DataVencimento.Date < DateTime.Now.Date))
                {
                    throw new Exception(
                              "Há boletos com data de vencimento menor que a data atual. Impossível continuar.");
                }

                #endregion

                var carteiraCobrancaPadrao = listaBoletoBrRemessa.First().CarteiraCobranca;
                var boletoPadrao           = listaBoletoBrRemessa.First();

                var fabricaRemessa = new RemessaFactory();

                #region #Criação do Diretório e Arquivo.REM

                var    data         = $"{DateTime.Now.ToString("ddMMyy")}";
                var    dataBradesco = $"{DateTime.Now.ToString("ddMM")}";
                string nomeArquivo  = null;

                // Se for BRADESCO formata nome do arquivo para CBDDMM??.REM
                if (boletoPadrao.BancoBoleto.CodigoBanco == "237")
                {
                    nomeArquivo = $"{"CB"}{dataBradesco}{"TS"}{".REM"}";
                }
                else
                {
                    /*
                     * C -> Cobrança
                     * Data da geração em formato DDMMAA
                     * G -> Geral
                     */
                    nomeArquivo = $"{"C"}{data}{"G"}{".REM"}";
                }

                var dir = Directory.CreateDirectory(Path.Combine(
                                                        AppDomain.CurrentDomain.BaseDirectory,
                                                        boletoPadrao.BancoBoleto.CodigoBanco));

                var caminho = dir.FullName + "\\" + nomeArquivo;

                #endregion

                #region #Informações Essenciais

                /* Usado no Header do Arquivo
                 * Cada arquivo enviado a CAIXA deverá conter um número único.
                 */
                // TODO: Criar tabela para controlar quantidade de arquivos remessa enviados ao banco.
                const int sequencialArquivo = 1;

                /* Usado no Header de Lote
                 * Para cada remessa enviada deverá ser acrescido em 1, se a remessa for recusada a numeração não poderá ser aproveitada.
                 */
                // TODO: Criar tabela para controlar quantidade de arquivos remessa gerados.
                int sequencialRemessa = sequenciaRemessaCarteiraBoleto;

                /* Usado no Trailer de Lote
                 * Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 2 (Header do Lote e Trailer do Lote)
                 */
                // TODO: Atualmente só considera 1 lote de informações no arquivo.
                var qtdRegistrosNoLote = (listaBoletoBrRemessa.Count * 2) + 2;

                /* Usado no Trailer do Arquivo */
                // TODO: Atualmente só gera 1 lote de informações no arquivo.
                const int qtdLotesArquivo = 1;

                // Conta a quantidade de itens na lista  multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 4 (Header do Arquivo, Header do Lote, Trailer do Lote e Trailer do Arquivo)
                var qtdRegistrosNoArquivoCnab240 = (listaBoletoBrRemessa.Count * 2) + 4;

                // Conta a quantidade de itens na lista e adiciona + 2 (Header do Arquivo + Trailer do Arquivo)
                var qtdRegistrosNoArquivoCnab400 = listaBoletoBrRemessa.Count();
                qtdRegistrosNoArquivoCnab400 += 2;

                // Pega número de linhas de instruções de cada boleto
                // No caso do Bradesco desconsiderar a qtd de instruções
                // Itau desconsiderar
                // HSBC desconsiderar
                var qtdRegInstrucoes = 0;
                if (boletoPadrao.BancoBoleto.CodigoBanco != "237" &&
                    boletoPadrao.BancoBoleto.CodigoBanco != "341" &&
                    boletoPadrao.BancoBoleto.CodigoBanco != "399")
                {
                    qtdRegInstrucoes += listaBoletoBrRemessa.Sum(boleto => boleto.InstrucoesDoBoleto.Count);
                }

                Boleto primeiroBoletoDaLista = listaBoletoBrRemessa.First();

                #endregion

                #region CNAB240

                // Gera Remessa Cnab240
                if (carteiraCobrancaPadrao.Tipo == "CNAB240")
                {
                    var remessa = new RemessaCnab240
                    {
                        Header = new HeaderRemessaCnab240(primeiroBoletoDaLista, sequencialRemessa)
                    };

                    var loteRemessa = new LoteRemessaCnab240
                    {
                        HeaderLote  = new HeaderLoteRemessaCnab240(primeiroBoletoDaLista, sequencialRemessa),
                        TrailerLote = new TrailerLoteRemessaCnab240(qtdRegistrosNoLote)
                    };

                    remessa.Trailer = new TrailerRemessaCnab240(qtdLotesArquivo, qtdRegistrosNoArquivoCnab240);

                    var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa);

                    var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote,
                                                                    listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer);

                    var linhasEscrever = escritor.EscreverTexto(remessaPronta);

                    // Escreve em UTF-8
                    File.WriteAllLines(caminho, linhasEscrever.ToArray(), Encoding.GetEncoding(1252));
                }

                #endregion

                #region CNAB400

                // Gera Remessa Cnab400
                if (carteiraCobrancaPadrao.Tipo == "CNAB400")
                {
                    var remessa = new RemessaCnab400
                    {
                        Header           = new HeaderRemessaCnab400(primeiroBoletoDaLista, sequencialRemessa, 1),
                        RegistrosDetalhe = new List <DetalheRemessaCnab400>(),
                        Trailer          = new TrailerRemessaCnab400(listaBoletoBrRemessa.Sum(s => s.ValorBoleto),
                                                                     qtdRegistrosNoArquivoCnab400 + qtdRegInstrucoes)
                    };

                    var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa);

                    var sequencial = 2;
                    DetalheRemessaCnab400 detalhe;

                    foreach (var boletoRemessa400 in listaBoletoBrRemessa)
                    {
                        detalhe = new DetalheRemessaCnab400(boletoRemessa400, sequencial);
                        remessa.RegistrosDetalhe.Add(detalhe);
                        sequencial++;
                    }

                    var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, listaBoletoBrRemessa,
                                                                    remessa.RegistrosDetalhe, remessa.Trailer);
                    var linhasEscrever         = escritor.EscreverTexto(remessaPronta);
                    var linhasTratadasEscrever = new List <string>();
                    foreach (var linha in linhasEscrever)
                    {
                        /*/
                         * -> Codificação ASCII 8-bit (Estendido)
                         * Encoding.GetEncoding(437)
                         *
                         * -> Codificação ASCII 7-bit
                         * Encoding.GetEncoding(1252)
                         *
                         * /*/

                        if (boletoPadrao.BancoBoleto.CodigoBanco == "756")
                        {
                            var bytes           = System.Text.Encoding.Default.GetBytes(linha);
                            var linhaConvertida = System.Text.Encoding.Default.GetString(bytes);

                            var linhaTratada = linhaConvertida;

                            linhasTratadasEscrever.Add(linhaTratada);
                        }
                        else
                        {
                            var bytes           = System.Text.Encoding.GetEncoding("iso-8859-8").GetBytes(linha);
                            var linhaConvertida = System.Text.Encoding.UTF8.GetString(bytes);

                            var linhaTratada = linhaConvertida;

                            linhasTratadasEscrever.Add(linhaTratada);
                        }
                    }

                    if (boletoPadrao.BancoBoleto.CodigoBanco == "756")
                    {
                        File.WriteAllLines(caminho, linhasTratadasEscrever, Encoding.Default);
                    }
                    else
                    {
                        File.WriteAllLines(caminho, linhasTratadasEscrever);
                    }
                }

                #endregion

                return(caminho);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #7
0
        public static string GerarArquivoRemessaPagamento(CarteiraBoleto carteiraBoleto, SacadoBoleto sacado, decimal valor,
                                                          DateTime dataVencimento, string numeroDocumento)
        {
            try
            {
                var listaBoletoBrRemessa           = new List <Pagamento>();
                var sequenciaRemessaCarteiraBoleto = 1;

                try
                {
                    // Transforma boletos e adiciona lançamentos na lista
                    listaBoletoBrRemessa.Add(TransformaDeFormatoPagamentoParaFormatoBoletoBr(carteiraBoleto, sacado,
                                                                                             valor, dataVencimento, numeroDocumento));
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                #region Validações (Banco e Carteira)

                /* Garantir que todos os boletos pertencem a mesmo banco e carteira de boleto */
                var bancosEncontrados = listaBoletoBrRemessa.GroupBy(gb => gb.BancoEmpresa.CodigoBanco);
                if (bancosEncontrados.Count() > 1)
                {
                    throw new Exception(
                              "Há mais de 1 banco associado aos boletos que foram informados para geração de remessa.");
                }


                if (listaBoletoBrRemessa.Any(qry => qry.DataVencimento < DateTime.Now.Date))
                {
                    throw new Exception(
                              "Há boletos com data de vencimento menor que a data atual. Impossível continuar.");
                }

                #endregion

                var boletoPadrao = listaBoletoBrRemessa.First();

                var fabricaRemessa = new RemessaFactory();

                #region #Criação do Diretório e Arquivo.REM

                var    data         = $"{DateTime.Now.ToString("ddMMyy")}";
                var    dataBradesco = $"{DateTime.Now.ToString("ddMM")}";
                string nomeArquivo  = null;

                // Se for BRADESCO formata nome do arquivo para CBDDMM??.REM
                if (boletoPadrao.CodigoBanco == "237")
                {
                    nomeArquivo = $"{"CB"}{dataBradesco}{"TS"}{".REM"}";
                }
                else
                {
                    /*
                     * C -> Cobrança
                     * Data da geração em formato DDMMAA
                     * G -> Geral
                     */
                    nomeArquivo = $"{"C"}{data}{"G"}{".REM"}";
                }

                var dir = Directory.CreateDirectory(Path.Combine(
                                                        AppDomain.CurrentDomain.BaseDirectory,
                                                        boletoPadrao.CodigoBanco));

                var caminho = dir.FullName + "\\" + nomeArquivo;

                #endregion

                #region #Informações Essenciais

                /* Usado no Header do Arquivo
                 * Cada arquivo enviado a CAIXA deverá conter um número único.
                 */
                // TODO: Criar tabela para controlar quantidade de arquivos remessa enviados ao banco.
                //const int sequencialArquivo = 1;

                /* Usado no Header de Lote
                 * Para cada remessa enviada deverá ser acrescido em 1, se a remessa for recusada a numeração não poderá ser aproveitada.
                 */
                // TODO: Criar tabela para controlar quantidade de arquivos remessa gerados.
                int sequencialRemessa = sequenciaRemessaCarteiraBoleto;

                /* Usado no Trailer de Lote
                 * Conta a quantidade de itens na lista multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 2 (Header do Lote e Trailer do Lote)
                 */
                // TODO: Atualmente só considera 1 lote de informações no arquivo.
                var qtdSegmantos       = carteiraBoleto.ValorMulta > 0 && carteiraBoleto.BancoGeraBoleto ? 3 : 2;
                var qtdRegistrosNoLote = (listaBoletoBrRemessa.Count * qtdSegmantos) + 2;

                /* Usado no Trailer do Arquivo */
                // TODO: Atualmente só gera 1 lote de informações no arquivo.
                const int qtdLotesArquivo = 1;

                // Conta a quantidade de itens na lista  multiplica por 2 ( cada boleto terá um detalhe segmento P e um detalhe segmento Q ) e adiciona + 4 (Header do Arquivo, Header do Lote, Trailer do Lote e Trailer do Arquivo)
                var qtdRegistrosNoArquivoCnab240 = (listaBoletoBrRemessa.Count * 2) + 4;

                // Conta a quantidade de itens na lista e adiciona + 2 (Header do Arquivo + Trailer do Arquivo)
                var qtdRegistrosNoArquivoCnab400 = listaBoletoBrRemessa.Count();
                qtdRegistrosNoArquivoCnab400 += 2;

                Pagamento primeiroPagamentoDaLista = listaBoletoBrRemessa.First();

                #endregion

                #region CNAB240

                // Gera Remessa Cnab240

                var remessa = new RemessaCnab240
                {
                    Header = new HeaderRemessaCnab240(primeiroPagamentoDaLista, sequencialRemessa)
                };

                var loteRemessa = new LoteRemessaCnab240
                {
                    HeaderLote  = new HeaderLoteRemessaCnab240(primeiroPagamentoDaLista, sequencialRemessa),
                    TrailerLote = new TrailerLoteRemessaCnab240(qtdRegistrosNoLote)
                };

                remessa.Trailer = new TrailerRemessaCnab240(qtdLotesArquivo, qtdRegistrosNoArquivoCnab240);

                var escritor = EscritorArquivoRemessaFactory.ObterEscritorRemessa(remessa);

                var remessaPronta = fabricaRemessa.GerarRemessa(remessa.Header, loteRemessa.HeaderLote,
                                                                listaBoletoBrRemessa, loteRemessa.TrailerLote, remessa.Trailer);

                var linhasEscrever = escritor.EscreverTexto(remessaPronta);

                // Escreve em UTF-8
                File.WriteAllLines(caminho, linhasEscrever.ToArray(), Encoding.GetEncoding(1252));


                #endregion

                return(caminho);
            }
            catch (Exception)
            {
                throw;
            }
        }
예제 #8
0
        private static BoletoBr.Pagamento TransformaDeFormatoPagamentoParaFormatoBoletoBr(CarteiraBoleto carteiraBoleto,
                                                                                          SacadoBoleto sacado, decimal valor, DateTime dataVencimento, string numeroDocumento)
        {
            var vencimento     = dataVencimento;
            var valorPagamento = 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 pagamento = new BoletoBr.Pagamento();
            var objBanco  = BoletoBr.Fabricas.BancoFactory.ObterBanco(codBanco);

            #region Dados Sacado

            var cpfcnpjSacado = sacado.CpfCnpj;
            var nomeSacado    = sacado.Nome;

            pagamento.Favorecido = new BoletoBr.Sacado(nomeSacado, cpfcnpjSacado,
                                                       TransformaEnderecoParaEnderecoBoletoBr(sacado));

            #endregion

            /* Ajuste */
            pagamento.DataVencimento = vencimento;
            pagamento.Empresa        = cedente;

            pagamento.ValorPagamento = valorPagamento;
            pagamento.ValorJurosMora = carteiraBoleto.ValorJuros;
            pagamento.ValorMulta     = carteiraBoleto.ValorMulta;

            return(pagamento);
        }