Example #1
0
        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);
        }