public void GerarArquivoRemessa(Boletos boletos, Stream stream, bool fecharRemessa = true) { try { int numeroRegistroGeral = 0, numeroRegistroCobrancaSimples = 0, numeroRegistroCobrancaVinculada = 0, numeroRegistroCobrancaCaucionada = 0, numeroRegistroCobrancaDescontada = 0; decimal valorBoletoGeral = 0, valorCobrancaSimples = 0, valorCobrancaVinculada = 0, valorCobrancaCaucionada = 0, valorCobrancaDescontada = 0; int tamanhoRegistro; if (this.TipoArquivo == TipoArquivo.CNAB240) { tamanhoRegistro = 240; } else { tamanhoRegistro = 400; } StreamWriter arquivoRemessa = new StreamWriter(stream, Encoding.GetEncoding("ISO-8859-1")); string strline = String.Empty; // Header do Arquivo strline = Banco.GerarHeaderRemessa(this.TipoArquivo, this.NumeroArquivoRemessa, ref numeroRegistroGeral); if (String.IsNullOrWhiteSpace(strline)) { throw new Exception("Registro HEADER obrigatório."); } strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); foreach (Boleto boleto in boletos) { // Todos os boletos da coleção devem ser do mesmo banco da geração do arquivo remessa // A solução aqui é forçar essa relação, mas talvez seja melhor subir uma exceção detalhando o erro. boleto.Banco = this.Banco; // Detalhe do arquivo strline = boleto.Banco.GerarDetalheRemessa(this.TipoArquivo, boleto, ref numeroRegistroGeral); if (String.IsNullOrWhiteSpace(strline)) { throw new Exception("Registro DETALHE obrigatório."); } strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); // Ajusta Totalizadores valorBoletoGeral += boleto.ValorTitulo; switch (boleto.TipoCarteira) { case TipoCarteira.CarteiraCobrancaSimples: numeroRegistroCobrancaSimples++; valorCobrancaSimples += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaVinculada: numeroRegistroCobrancaVinculada++; valorCobrancaVinculada += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaCaucionada: numeroRegistroCobrancaCaucionada++; valorCobrancaCaucionada += boleto.ValorTitulo; break; case TipoCarteira.CarteiraCobrancaDescontada: numeroRegistroCobrancaDescontada++; valorCobrancaDescontada += boleto.ValorTitulo; break; default: break; } } // Trailler do Arquivo strline = Banco.GerarTrailerRemessa(this.TipoArquivo, this.NumeroArquivoRemessa, ref numeroRegistroGeral, valorBoletoGeral, numeroRegistroCobrancaSimples, valorCobrancaSimples, numeroRegistroCobrancaVinculada, valorCobrancaVinculada, numeroRegistroCobrancaCaucionada, valorCobrancaCaucionada, numeroRegistroCobrancaDescontada, valorCobrancaDescontada); if (!String.IsNullOrWhiteSpace(strline)) { strline = FormataLinhaArquivoCNAB(strline, tamanhoRegistro); arquivoRemessa.WriteLine(strline); } if (fecharRemessa) { arquivoRemessa.Close(); arquivoRemessa.Dispose(); arquivoRemessa = null; } else { arquivoRemessa.Flush(); } } catch (Exception ex) { throw new Exception("Erro ao gerar arquivo remessa.", ex); } }
public bool SetupCobranca(string cnpj, string razaoSocial, string enderecoLogradouro, string enderecoNumero, string enderecoComplemento, string enderecoBairro, string enderecoCidade, string enderecoEstado, string enderecoCep, string observacoes, int numeroBanco, string agencia, string digitoAgencia, string operacaoConta, string conta, string digitoConta, string codigoBeneficiario, string digitoCodigoBeneficiario, string codigoTransmissao, string carteira, string variacaoCarteira, int tipoCarteira, int tipoFormaCadastramento, int tipoImpressaoBoleto, int tipoDocumento, ref string mensagemErro) { mensagemErro = ""; try { if (string.IsNullOrWhiteSpace(cnpj)) { mensagemErro += "Cnpj não informado." + Environment.NewLine; } if (string.IsNullOrWhiteSpace(razaoSocial)) { mensagemErro += "Razão Social não informada." + Environment.NewLine; } if (numeroBanco == 0) { mensagemErro += "Banco não informado." + Environment.NewLine; } if (string.IsNullOrWhiteSpace(agencia)) { mensagemErro += "Agência não informada." + Environment.NewLine; } if (string.IsNullOrWhiteSpace(conta)) { mensagemErro += "Conta não informada." + Environment.NewLine; } if (string.IsNullOrWhiteSpace(carteira)) { mensagemErro += "Carteira não informada." + Environment.NewLine; } if (!string.IsNullOrWhiteSpace(mensagemErro)) { return(false); } if (tipoCarteira < 1 || tipoCarteira > 5) { mensagemErro += "Tipo da Carteira inválida: 1-Simples, 2-Vinculada, 3-Caucionada, 4-Descontada, 5-Vendor" + Environment.NewLine; } if (tipoFormaCadastramento < 1 || tipoFormaCadastramento > 2) { mensagemErro += "Tipo da Forma de Cadastramento inválida: 1-Com Registro, 2-Sem Registro" + Environment.NewLine; } if (tipoImpressaoBoleto < 1 || tipoImpressaoBoleto > 2) { mensagemErro += "Tipo da Impressão do Boleto inválida: 1-Banco, 2-Empresa" + Environment.NewLine; } if (tipoDocumento < 1 || tipoDocumento > 2) { mensagemErro += "Tipo do Documento do Boleto inválido: 1-Tradicional, 2-Escritural" + Environment.NewLine; } // Banco, Beneficiario, Conta Corrente boletos.Banco = Banco.Instancia(numeroBanco); boletos.Banco.Beneficiario = new Beneficiario { CPFCNPJ = cnpj, Nome = razaoSocial, Observacoes = observacoes, ContaBancaria = new ContaBancaria { Agencia = agencia, DigitoAgencia = digitoAgencia, OperacaoConta = operacaoConta, Conta = conta, DigitoConta = digitoConta, CarteiraPadrao = carteira, VariacaoCarteiraPadrao = variacaoCarteira, TipoCarteiraPadrao = (TipoCarteira)tipoCarteira, TipoFormaCadastramento = (TipoFormaCadastramento)tipoFormaCadastramento, TipoImpressaoBoleto = (TipoImpressaoBoleto)tipoImpressaoBoleto, TipoDocumento = (TipoDocumento)tipoDocumento }, Codigo = codigoBeneficiario, CodigoDV = digitoCodigoBeneficiario, CodigoTransmissao = codigoTransmissao, Endereco = new Endereco { LogradouroEndereco = enderecoLogradouro, LogradouroNumero = enderecoNumero, LogradouroComplemento = enderecoComplemento, Bairro = enderecoBairro, Cidade = enderecoCidade, UF = enderecoEstado, CEP = enderecoCep?.Replace(".", "") } }; boletos.Banco.FormataBeneficiario(); setupOk = true; } catch (Exception ex) { while (ex != null) { mensagemErro += ex.Message + Environment.NewLine; ex = ex.InnerException; } return(false); } return(true); }