Пример #1
0
        public void CampoLivre_Sicoob()
        {
            Boleto blt = new Boleto();
            string cl;

            // Logica Unica!
            // Mas vale lembrar que um dos requisitos no NossoNumero é iniciar sempre em '1'
            cl = Banco_SICOOB.CampoLivre(blt, "1", "1", "2222", "33", "7654321", "1234567");
            Console.WriteLine(
                "Campo Livre: " + cl +
                " Agencia/Conta: " + blt.AgenciaConta +
                " Nosso Número: " + blt.NossoNumeroExibicao);
            Assert.IsTrue(cl == "1222233765432112345670001", "Erro");
        }
Пример #2
0
        /// <summary>
        /// Retorna no layout CNAB240
        /// </summary>
        public override string Remessa()
        {
            // Limpa os objetos de saida/entrada
            Data.Clear();
            Clear();

            string[] cAgenciaDig = Cedente.Agencia.Split('-');
            string[] cContaDig   = Cedente.Conta.Split('-');

            if (cAgenciaDig.Length == 1)
            {
                cAgenciaDig = new string[] { cAgenciaDig[0], "0" }
            }
            ;

            // Header do Arquivo
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.InscricaoTipo]    = Cedente.Tipo;
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.InscricaoNumero]  = Cedente.DocumentoNumeros;
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.Agencia]          = cAgenciaDig[0];
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.AgenciaDAC]       = cAgenciaDig[1];
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.Conta]            = cContaDig[0];
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.ContaDAC]         = cContaDig[1];
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.EmpresaNome]      = Cedente.Cedente;
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.Data]             = DataHoje;
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.NumeroLote]       = NumeroLote;
            regHeaderArquivo[CNAB240HeaderArquivoSicoob.ReservadoEmpresa] = Producao ? "REMESSA-PRODUÇÃO" : "REMESSA-TESTE";
            Add(regHeaderArquivo);

            // Header do lote
            regHeaderLote[CNAB240HeaderLoteSicoob.Lote]                 = SequencialLote;
            regHeaderLote[CNAB240HeaderLoteSicoob.InscricaoTipo]        = Cedente.Tipo;
            regHeaderLote[CNAB240HeaderLoteSicoob.InscricaoNumero]      = Cedente.DocumentoNumeros;
            regHeaderLote[CNAB240HeaderLoteSicoob.Agencia]              = cAgenciaDig[0];
            regHeaderLote[CNAB240HeaderLoteSicoob.AgenciaDAC]           = cAgenciaDig[1];
            regHeaderLote[CNAB240HeaderLoteSicoob.Conta]                = cContaDig[0];
            regHeaderLote[CNAB240HeaderLoteSicoob.ContaDAC]             = cContaDig[1];
            regHeaderLote[CNAB240HeaderLoteSicoob.EmpresaNome]          = Cedente.Cedente;
            regHeaderLote[CNAB240HeaderLoteSicoob.NumeroRemessaRetorno] = NumeroLote;
            regHeaderLote[CNAB240HeaderLoteSicoob.Data]                 = DataHoje;
            Add(regHeaderLote);

            BoletoInfo boleto;
            SacadoInfo sacado;
            Reg <CNAB240SegmentoPSicoob> regP;
            Reg <CNAB240SegmentoQSicoob> regQ;

            SequencialRegistro = 1;
            double ValorTotal = 0;

            string cConvenio   = Cedente.Convenio;
            string cCodCedente = Cedente.CodCedente;
            string cNossoNumero;

            foreach (string n in this.Boletos.NossoNumeros)
            {
                boleto = Boletos[n];
                sacado = boleto.Sacado;

                // Define as informações do segmento P
                regP = new Reg <CNAB240SegmentoPSicoob>();

                regP[CNAB240SegmentoPSicoob.Lote]       = SequencialLote;
                regP[CNAB240SegmentoPSicoob.Nregistro]  = SequencialRegistro++;
                regP[CNAB240SegmentoPSicoob.Agencia]    = cAgenciaDig[0];
                regP[CNAB240SegmentoPSicoob.AgenciaDAC] = cAgenciaDig[1];
                regP[CNAB240SegmentoPSicoob.Conta]      = cContaDig[0];
                regP[CNAB240SegmentoPSicoob.ContaDAC]   = cContaDig[1];
                cNossoNumero = boleto.NossoNumero;
                string cDV = Banco_SICOOB.NossoNumero(ref cConvenio, ref cCodCedente, ref cNossoNumero);
                regP[CNAB240SegmentoPSicoob.NossoNumero]     = cNossoNumero += cDV;
                regP[CNAB240SegmentoPSicoob.Parcela]         = boleto.ParcelaNumero;
                regP[CNAB240SegmentoPSicoob.Modalidade]      = CobUtil.GetInt(Cedente.Modalidade);
                regP[CNAB240SegmentoPSicoob.NumeroDocumento] = boleto.NumeroDocumento;
                regP[CNAB240SegmentoPSicoob.Vencimento]      = boleto.DataVencimento;
                regP[CNAB240SegmentoPSicoob.ValorDocumento]  = boleto.ValorDocumento;
                if (boleto.ValorMora >= 0.01)
                {
                    regP[CNAB240SegmentoPSicoob.Juros]     = 1;
                    regP[CNAB240SegmentoPSicoob.JurosData] = boleto.DataVencimento.AddDays(1);
                    regP[CNAB240SegmentoPSicoob.JurosMora] = boleto.ValorMora;
                }
                else
                {
                    regP[CNAB240SegmentoPSicoob.Juros] = 0; // isento (bug! antes era 3)
                }
                regP[CNAB240SegmentoPSicoob.Especie]           = (int)boleto.Especie;
                regP[CNAB240SegmentoPSicoob.Aceite]            = boleto.Aceite;
                regP[CNAB240SegmentoPSicoob.Emissao]           = boleto.DataDocumento;
                regP[CNAB240SegmentoPSicoob.UsoEmpresaCedente] = boleto.BoletoID;
                int nDiasBaixa;
                if (boleto.DiasProtesto > 1)
                {
                    regP[CNAB240SegmentoPSicoob.ProtestoCodigo]       = 1;
                    regP[CNAB240SegmentoPSicoob.ProtestoPrazo]        = boleto.DiasProtesto;
                    regP[CNAB240SegmentoPSicoob.BaixaDevolucaoCodigo] = 2; // Não Baixar / Não Devolver
                    // Baixar em no minimo 8 dias apos o protesto baseado na data de geração do arquivo
                    nDiasBaixa = 0;                                        // boleto.DataVencimento.AddDays(boleto.DiasProtesto + 8).Subtract(DateTime.Now).Days;
                }
                else
                {
                    regP[CNAB240SegmentoPSicoob.ProtestoCodigo]       = 3;                            // não protestar
                    regP[CNAB240SegmentoPSicoob.BaixaDevolucaoCodigo] = boleto.DiasBaixa > 0 ? 1 : 2; // 1 => Baixar / Devolver
                    if (boleto.DiasBaixa > 0)
                    {
                        nDiasBaixa = boleto.DataVencimento.AddDays(boleto.DiasBaixa).Subtract(DataHoje).Days;
                    }
                    else
                    {
                        nDiasBaixa = 0;
                    }
                }
                if (nDiasBaixa <= 0)
                {
                    nDiasBaixa = 0;
                }
                else if (nDiasBaixa < 5)
                {
                    nDiasBaixa = 5;
                }
                else if (nDiasBaixa > 120)
                {
                    nDiasBaixa = 120;
                }

                if (nDiasBaixa > 0)
                {
                    regP[CNAB240SegmentoPSicoob.BaixaDevolucaoPrazo] = nDiasBaixa.ToString("000");
                }
                ValorTotal += boleto.ValorDocumento;

                // Define as informações do segmento Q
                regQ = new Reg <CNAB240SegmentoQSicoob>();
                regQ[CNAB240SegmentoQSicoob.Lote]          = SequencialLote;
                regQ[CNAB240SegmentoQSicoob.Nregistro]     = SequencialRegistro++;
                regQ[CNAB240SegmentoQSicoob.Sacado_Tipo]   = boleto.Sacado.Tipo;
                regQ[CNAB240SegmentoQSicoob.Sacado_Numero] = CobUtil.GetLong(CobUtil.SoNumeros(boleto.Sacado.DocumentoNumeros));
                regQ[CNAB240SegmentoQSicoob.Nome]          = boleto.Sacado.Sacado;
                regQ[CNAB240SegmentoQSicoob.Endereco]      = boleto.Sacado.Endereco;
                regQ[CNAB240SegmentoQSicoob.Bairro]        = boleto.Sacado.Bairro;
                regQ[CNAB240SegmentoQSicoob.CEP]           = boleto.Sacado.CepNumeros;
                regQ[CNAB240SegmentoQSicoob.Cidade]        = boleto.Sacado.Cidade;
                regQ[CNAB240SegmentoQSicoob.UF]            = boleto.Sacado.UF;
                long avalista = CobUtil.GetLong(boleto.Sacado.AvalistaNumeros);
                if (avalista > 0)
                {
                    regQ[CNAB240SegmentoQSicoob.Avalista_Tipo]   = boleto.Sacado.AvalistaTipo;
                    regQ[CNAB240SegmentoQSicoob.Avalista_Numero] = avalista;
                    regQ[CNAB240SegmentoQSicoob.Avalista_Nome]   = boleto.Sacado.Avalista;
                }

                AddBoleto(regP, boleto);
                AddBoleto(regQ, boleto);

                AddOpcionais(boleto);
            }

            regTrailerLote[CNAB240TrailerLoteSicoob.Lote]          = SequencialLote;
            regTrailerLote[CNAB240TrailerLoteSicoob.QTD]           = SequencialRegistro + 1; // tem que incluir o header
            regTrailerLote[CNAB240TrailerLoteSicoob.CobrancaQTD]   = this.Boletos.Count;
            regTrailerLote[CNAB240TrailerLoteSicoob.CobrancaValor] = ValorTotal;
            Add(regTrailerLote);

            regTrailerArquivo[CNAB240TrailerArquivoSicoob.LotesQTD]     = 1;
            regTrailerArquivo[CNAB240TrailerArquivoSicoob.RegistrosQTD] = itens.Count + 1;
            Add(regTrailerArquivo);

            // Gera o Texto de saida da forma padrão
            return(this.Conteudo);
        }