Example #1
0
        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 codigoCedente, string digitoCodigoCedente, 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, Cedente, Conta Corrente
                boletos.Banco         = Banco.Instancia(numeroBanco);
                boletos.Banco.Cedente = new Cedente
                {
                    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            = codigoCedente,
                    CodigoDV          = digitoCodigoCedente,
                    CodigoTransmissao = codigoTransmissao,
                    Endereco          = new Endereco
                    {
                        LogradouroEndereco    = enderecoLogradouro,
                        LogradouroNumero      = enderecoNumero,
                        LogradouroComplemento = enderecoComplemento,
                        Bairro = enderecoBairro,
                        Cidade = enderecoCidade,
                        UF     = enderecoEstado,
                        CEP    = enderecoCep
                    }
                };
                boletos.Banco.FormataCedente();
                setupOk = true;
            }
            catch (Exception ex)
            {
                while (ex != null)
                {
                    mensagemErro += ex.Message + Environment.NewLine;
                    ex            = ex.InnerException;
                }
                return(false);
            }
            return(true);
        }
        private void LerLinhaDoArquivoRetornoCNAB400(string registro)
        {
            // Identifica o tipo do registro (primeira posição da linha)
            var tipoRegistro = registro.Substring(0, 1);

            // Registro HEADER
            if (tipoRegistro == "0")
            {
                Banco.LerHeaderRetornoCNAB400(registro);
                return;
            }

            // Registro TRAILER
            if (tipoRegistro == "9")
            {
                Banco.LerTrailerRetornoCNAB400(registro);
                return;
            }

            // Se o registro não estiver na lista a ser processada pelo banco selecionado, ignora o registro
            if (!Banco.IdsRetornoCnab400RegistroDetalhe.Contains(tipoRegistro))
            {
                return;
            }

            // O primeiro ID da lista, identifica um novo boleto.
            bool novoBoleto = false;

            if (tipoRegistro == Banco.IdsRetornoCnab400RegistroDetalhe.First())
            {
                novoBoleto = true;
            }


            // Se for um novo boleto, cria um novo objeto, caso contrário, seleciona o último boleto
            // Estamos considerando que, quando houver mais de um registro para o mesmo boleto, no arquivo retorno, os registros serão apresentados na sequencia.
            Boleto boleto;

            if (novoBoleto)
            {
                boleto = new Boleto(this.Banco);
            }
            else
            {
                boleto = Boletos.Last();
                // Se não encontrou um boleto válido, ocorreu algum problema, pois deveria ter criado um novo objeto no registro que foi analisado anteriormente.
                if (boleto == null)
                {
                    throw new Exception("Objeto boleto não identificado");
                }
            }


            // Identifica o tipo de registro que deve ser analisado pelo Banco.
            switch (tipoRegistro)
            {
            case "1":
                Banco.LerDetalheRetornoCNAB400Segmento1(ref boleto, registro);
                break;

            case "7":
                Banco.LerDetalheRetornoCNAB400Segmento7(ref boleto, registro);
                break;

            default:
                break;
            }

            // Se for um novo boleto, adiciona na lista de boletos.
            if (novoBoleto)
            {
                Boletos.Add(boleto);
            }
        }
Example #3
0
        public void GerarArquivoRemessa(Boletos boletos, Stream arquivo)
        {
            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(arquivo, 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);
                }

                //arquivoRemessa.Close();
                //arquivoRemessa.Dispose();
                //arquivoRemessa = null;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao gerar arquivo remessa.", ex);
            }
        }