Esempio n. 1
0
        public void GerarRemessa(blCobranca ACobranca, string Path_remessa)  //{Gerar arquivo remessa para enviar ao banco}
        {
            StringBuilder Remessa = new StringBuilder();

            switch (ACobranca.LayoutArquivo)
            {
            case TLayoutArquivo.laCNAB240:
                throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET.");

            case TLayoutArquivo.laCNAB400:
            {
                GerarRemessaCNAB400(ACobranca, Remessa);
                break;
            }
            }
            //Salvar arquivo de remessa na pasta configurada
            if (!System.IO.Directory.Exists(Path_remessa))
            {
                throw new Exception("Path salvar arquivo remessa invalido.");
            }
            if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString())
            {
                Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString();
            }
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Path_remessa + "C" + DateTime.Now.ToString("ddMMyy") + ".TXT"))
            {
                sw.Write(Remessa.ToString());
                sw.Flush();
                sw.Close();
            }
        }
Esempio n. 2
0
        public bool LerRetorno(blCobranca ACobranca, string[] arq)  //{Lê o arquivo retorno recebido do banco}
        {
            try
            {
                if (arq.Length <= 0)
                {
                    throw new Exception("O retorno está vazio. Não há dados para processar");
                }

                switch (ACobranca.LayoutArquivo)
                {
                case TLayoutArquivo.laCNAB240: return(LerRetornoCNAB240(ACobranca, arq));

                case TLayoutArquivo.laCNAB400: throw new Exception("Esse layout não é implementado");

                default: throw new Exception("Tamanho de registro inválido: " + arq[0].Length);
                }
            }
            catch (Exception ex)
            {
                return(false);

                throw new Exception(ex.Message);
            }
        }
Esempio n. 3
0
        public bool LerRetorno(blCobranca ACobranca, string[] arq)
        {
            try
            {
                if (arq.Length <= 0)
                {
                    throw new Exception("O retorno está vazio. Não há dados para processar");
                }

                switch (ACobranca.LayoutArquivo)
                {
                case TLayoutArquivo.laCNAB240:
                    throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET.");

                case TLayoutArquivo.laCNAB400:
                    return(LerRetornoCNAB400(ACobranca, arq));

                default:
                    throw new Exception("Tamanho de registro inválido: " + arq[0].Length);
                }
            }
            catch (Exception ex)
            {
                return(false);

                throw new Exception(ex.Message);
            }
        }
Esempio n. 4
0
        public void GerarRemessa(blCobranca cobranca, string Path_remessa)
        {
            StringBuilder remessa = new StringBuilder();

            switch (cobranca.LayoutArquivo)
            {
            case TLayoutArquivo.laCNAB240:
            {
                GerarRemessaCNAB240(cobranca, remessa);
                break;
            }

            case TLayoutArquivo.laCNAB400:
            {
                GerarRemessaCNAB400(cobranca, remessa);
                break;
            }
            }
            //Salvar arquivo de remessa na pasta configurada
            if (!Directory.Exists(Path_remessa))
            {
                throw new Exception("Path salvar arquivo remessa invalido.");
            }
            if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != Path.DirectorySeparatorChar.ToString())
            {
                Path_remessa += Path.DirectorySeparatorChar.ToString();
            }
            using (StreamWriter sw = new StreamWriter(Path_remessa + ("CBR" +
                                                                      cobranca.DataArquivo.ToString("yyyyMMdd").Substring(0, 4) +
                                                                      cobranca.DataArquivo.ToString("yyyyMMdd").Substring(4, 2) +
                                                                      cobranca.DataArquivo.ToString("yyyyMMdd").Substring(6, 2) +
                                                                      cobranca.SequencialArq.ToString().FormatStringEsquerda(2, '0') +
                                                                      ".REM"),
                                                      false,
                                                      Encoding.GetEncoding("iso-8859-1")))
            {
                sw.Write(remessa.ToString());
                sw.Flush();
                sw.Close();
            }
        }
Esempio n. 5
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Identificacao do Header 001-001
            registros.Append("0");
            //Identificacao do arquivo remessa 002-002
            registros.Append("1");
            //Literal REMESSA 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Codigo servico cobranca 010-011
            registros.Append("01");
            //Literal COBRANCA 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Codigo cedente 027-046
            registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(20, '0'));
            //Nome Empresa 047-076
            registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' '));
            //Numero Banco Camara Compensacao 077-079
            registros.Append(CodigoBanco.Trim());
            //Nome Banco Extenso 080-094
            registros.Append(NomeBanco.FormatStringDireita(15, ' '));
            //Data Arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Brancos 101-108
            registros.Append("".FormatStringDireita(8, ' '));
            //Identificacao sistema 109-110
            registros.Append("MX");
            //Sequencial do arquivo 111-117
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(7, '0'));
            //Brancos 118-394
            registros.Append("".FormatStringDireita(277, ' '));
            //Sequencial do registro
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            #region Registro Detalhe
            aCobranca.Titulos.ForEach(p =>
            {
                #region Detalhe do titulo
                registros = new StringBuilder();
                //Identificao registro 001-001
                registros.Append("1");
                //Agencia do Debito 002-006
                registros.Append("00000");
                //Digito Agencia Debito 007-007
                registros.Append(" ");
                //Razao Conta Corrente Sacado 008-012
                registros.Append("00000");
                //Numero Conta Corrente Sacado 013-019
                registros.Append("0000000");
                //Digito Conta Sacado 020-020
                registros.Append(" ");
                //Identificao Cedente 021-037
                registros.Append("0" +
                                 p.Carteira.FormatStringEsquerda(3, '0') +
                                 p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0') +
                                 p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(7, '0') +
                                 p.Cedente.ContaBancaria.DigitoConta.Trim());
                //Controle Participante 038-062
                registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(25, '0'));
                //Codigo Banco 063-065
                registros.Append("000");

                if ((p.Pc_multa > decimal.Zero) && p.Tp_multa.Trim().ToUpper().Equals("P"))
                {
                    //Multa 066-066
                    registros.Append("2");
                    //Percentual Multa 067-070
                    registros.Append(p.Pc_multa.ToString().SoNumero().FormatStringEsquerda(4, '0'));
                }
                else
                {
                    //Zeros 066-070
                    registros.Append("00000");
                }
                //Nosso Numero 071-081
                registros.Append(p.Nosso_numero.FormatStringEsquerda(11, '0'));
                //Digito Nosso Numero 082-082
                registros.Append(this.CalcularDigitoNossoNumero(p));
                //Valor Desconto/Abatimento dia 083-092
                registros.Append(string.Empty.FormatStringEsquerda(10, '0'));
                //Condicao Emissao 093-093
                registros.Append("2");//Cliente emite e o banco somente processa
                //Ident. se emite boleto para debito automatico 094-094
                registros.Append(" ");
                //Identificao operacao banco 095-104
                registros.Append("".FormatStringDireita(10, ' '));
                //Indicador rateio credito 105-105
                registros.Append(" ");
                //Endereco para aviso debito automatico 106-106
                registros.Append("2");
                //Brancos 107-108
                registros.Append("  ");
                //Identificacao Ocorrencia 109-110
                registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Numero documento 111-120
                registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0'));
                //Data Vencimento 121-126
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                //Valor Titulo 127-139
                registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Banco encarregado cobranca 140-142
                registros.Append("000");
                //Agencia Depositaria 143-147
                registros.Append("00000");
                //Especie Titulo 148-149
                registros.Append(this.ConverterEspecieDoc(p.Especie_documento));
                //Identificacao 150-150
                registros.Append(p.Aceite_SN);
                //Data Emissao Titulo 151-156
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                //Instrucao 1 157-158
                registros.Append(p.St_protestarauto ? "06" : "00");
                //Instrucao 2 159-160
                registros.Append(p.Nr_diasprotestar > decimal.Zero ? p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00");
                //Valor cobrado dias atrazo 161-173
                registros.Append((p.Tp_jurodia.Trim().Equals("P") ? Math.Round(decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100), 2, MidpointRounding.AwayFromZero) : p.Pc_jurodia).ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Data limite desconto 174-179
                registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                //Valor desconto 180-192
                registros.Append((p.Tp_desconto.Trim().Equals("P") ? Math.Round(decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100), 2, MidpointRounding.AwayFromZero) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Valor IOF 193-205
                registros.Append(decimal.Zero.ToString().FormatStringEsquerda(13, '0'));
                //Valor Abatimento 206-218
                registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                //Tipo Inscricao Sacado 219-220
                registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "01" : "02");
                //Numero Inscricao Sacado 221-234
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Nome Sacado 235-274
                registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(40, ' '));
                //Endereco Sacado 275-314
                registros.Append((p.Sacado.Endereco.Rua.RemoverCaracteres().Trim() + p.Sacado.Endereco.Numero.RemoverCaracteres().Trim()).FormatStringDireita(40, ' '));
                //Mensagem 1 315-326
                registros.Append(string.Empty.FormatStringDireita(12, ' '));
                //CEP 327-331
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().Length.Equals(8) ? p.Sacado.Endereco.CEP.SoNumero().Substring(0, 5) : "     ");
                //Sufixo CEP 332-334
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().Length.Equals(8) ? p.Sacado.Endereco.CEP.SoNumero().Substring(5, 3) : "   ");
                //Mensagem 2 Sacador Avalista 335-394
                registros.Append(string.Empty.FormatStringDireita(60, ' '));
                //sequencial do registro 395-400
                registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                Remessa.AppendLine(registros.ToString());
                #endregion
            });
            #endregion

            #region Trailer
            registros = new StringBuilder();
            //Identificacao registro 001-001
            registros.Append("9");
            //Identificacao remessa 002-394
            registros.Append(string.Empty.FormatStringDireita(393, ' '));
            //Sequencial registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 6
0
        public void GerarRemessa(blCobranca ACobranca, string Path_remessa)  //{Gerar arquivo remessa para enviar ao banco}
        {
            StringBuilder Remessa = new StringBuilder();

            switch (ACobranca.LayoutArquivo)
            {
            case TLayoutArquivo.laCNAB240:
                throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET.");

            case TLayoutArquivo.laCNAB400:
            {
                GerarRemessaCNAB400(ACobranca, Remessa);
                break;
            }
            }
            //Salvar arquivo de remessa na pasta configurada
            if (!System.IO.Directory.Exists(Path_remessa))
            {
                throw new Exception("Path salvar arquivo remessa invalido.");
            }
            if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString())
            {
                Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString();
            }
            object obj = new TCD_LoteRemessa().BuscarEscalar(
                new TpBusca[]
            {
                new TpBusca()
                {
                    vNM_Campo = "a.cd_empresa",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.Titulos[0].Cd_empresa.Trim() + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "a.cd_contager",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.Titulos[0].Cd_contager.Trim() + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "convert(datetime, floor(convert(decimal(30,10), a.dt_lote)))",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.DataArquivo.ToString("yyyyMMdd") + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "isnull(a.st_registro, 'A')",
                    vOperador = "=",
                    vVL_Busca = "'P'"
                }
            }, "count(*)");

            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(Path_remessa +
                                                                          "CB" + //Cobranca Bradesco
                                                                          ACobranca.DataArquivo.Day.FormatStringEsquerda(2, '0') +
                                                                          ACobranca.DataArquivo.Month.FormatStringEsquerda(2, '0') +
                                                                          (obj == null ? "01" : decimal.Parse(obj.ToString() + 1).FormatStringEsquerda(2, '0')) +
                                                                          ".REM"))
            {
                sw.Write(Remessa.ToString());
                sw.Flush();
                sw.Close();
            }
        }
Esempio n. 7
0
 public bool LerRetorno(blCobranca ACobranca, StringBuilder Retorno)  //{Lê o arquivo retorno recebido do banco}
 {
     return(false);
 }
Esempio n. 8
0
 public bool GerarRemessa(blCobranca ACobranca, StringBuilder Remessa)  //{Gerar arquivo remessa para enviar ao banco}
 {
     return(false);
 }
Esempio n. 9
0
 private bool GerarRemessaCNAB400(blCobranca ACobranca, StringBuilder Remessa)
 {
     return(false);
 }
Esempio n. 10
0
 private bool LerRetornoCNAB400(blCobranca ACobranca, StringBuilder Retorno)
 {
     return(false);
 }
Esempio n. 11
0
        private bool LerRetornoCNAB240(blCobranca ACobranca, string[] Retorno)
        {
            string   ACodigoBanco;
            string   ACodigoCedente;
            int      NumeroRegistro = 0;
            blTitulo ATitulo        = null;

            try
            {
                #region HEADER
                //Codigo do banco
                ACodigoBanco = Retorno[NumeroRegistro].Substring(0, 3);
                if (ACodigoBanco != CodigoBanco)
                {
                    throw new Exception("Este não é um retorno de cobrança do banco " + CodigoBanco + " " + NomeBanco);
                }
                //Codigo cedente
                ACodigoCedente = Retorno[NumeroRegistro].Substring(32, 20);
                //Data do arquivo
                if (Retorno[NumeroRegistro].Substring(143, 8) != "00000000")
                {
                    ACobranca.DataArquivo = DateTime.Parse(Retorno[NumeroRegistro].Substring(143, 2) + "/" +
                                                           Retorno[NumeroRegistro].Substring(145, 2) + "/" +
                                                           Retorno[NumeroRegistro].Substring(147, 4));
                }
                else
                {
                    ACobranca.DataArquivo = DateTime.Now;
                }
                //Numero arquivo
                ACobranca.SequencialArq = decimal.Parse(Retorno[NumeroRegistro].Substring(157, 6));
                #endregion

                for (NumeroRegistro = 1; NumeroRegistro <= (Retorno.Length - 2); NumeroRegistro++)
                {
                    //Tipo registro é 3
                    if (Retorno[NumeroRegistro].Substring(7, 1) == "3")
                    {
                        ATitulo = new blTitulo();
                        ATitulo.Cedente.ContaBancaria.Banco.Codigo = ACodigoBanco;
                        //Codigo do cedente
                        ATitulo.Cedente.CodigoCedente = ACodigoCedente;
                        //Ocorrencia
                        ATitulo.Cd_ocorrencia = Retorno[NumeroRegistro].Substring(15, 2);
                        //Descricao ocorrencia
                        ATitulo.Ds_ocorrencia = TratarOcorrencia(ATitulo.Cd_ocorrencia);
                        //Nosso numero
                        ATitulo.Nosso_numero = Retorno[NumeroRegistro].Substring(37, 20);
                        //Data de vencimento
                        if (Retorno[NumeroRegistro].Substring(73, 8) != "00000000")
                        {
                            ATitulo.Dt_vencimento = DateTime.Parse(Retorno[NumeroRegistro].Substring(73, 2) + "/" +
                                                                   Retorno[NumeroRegistro].Substring(75, 2) + "/" +
                                                                   Retorno[NumeroRegistro].Substring(77, 4));
                        }
                        else
                        {
                            ATitulo.Dt_vencimento = DateTime.Now;
                        }
                        //Valor do titulo
                        if (Retorno[NumeroRegistro].Substring(81, 13) != "0000000000000")
                        {
                            ATitulo.Vl_documento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(81, 13)) / 100;
                        }
                        else
                        {
                            ATitulo.Vl_documento = decimal.Zero;
                        }
                        //Valor das despesas
                        if (Retorno[NumeroRegistro].Substring(198, 13) != "0000000000000")
                        {
                            ATitulo.Vl_despesa_cobranca = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(198, 13)) / 100;
                        }
                        else
                        {
                            ATitulo.Vl_despesa_cobranca = decimal.Zero;
                        }

                        //Motivo ocorrencia
                        ATitulo.Ds_motivoocorrencia = TratarMotivoOcorrencia(Retorno[NumeroRegistro].Substring(213, 10));

                        if (Retorno[NumeroRegistro + 1].Substring(7, 1).Equals("3") &&
                            Retorno[NumeroRegistro + 1].Substring(13, 1).Equals("U"))
                        {
                            NumeroRegistro++;
                            //Juros
                            if (Retorno[NumeroRegistro].Substring(17, 13) != "0000000000000")
                            {
                                ATitulo.Vl_morajuros = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(17, 13)) / 100;
                            }
                            else
                            {
                                ATitulo.Vl_morajuros = decimal.Zero;
                            }
                            //Desconto
                            if (Retorno[NumeroRegistro].Substring(32, 13) != "0000000000000")
                            {
                                ATitulo.Vl_desconto = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(32, 13)) / 100;
                            }
                            else
                            {
                                ATitulo.Vl_desconto = decimal.Zero;
                            }
                            //Abatimento
                            if (Retorno[NumeroRegistro].Substring(47, 13) != "0000000000000")
                            {
                                ATitulo.Vl_abatimento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(47, 13)) / 100;
                            }
                            else
                            {
                                ATitulo.Vl_abatimento = decimal.Zero;
                            }
                            //Outras despesas
                            if (Retorno[NumeroRegistro].Substring(107, 13) != "0000000000000")
                            {
                                ATitulo.Vl_outras_despesas = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(107, 13)) / 100;
                            }
                            else
                            {
                                ATitulo.Vl_outras_despesas = decimal.Zero;
                            }
                            //Outros creditos
                            if (Retorno[NumeroRegistro].Substring(122, 13) != "0000000000000")
                            {
                                ATitulo.vl_outros_creditos = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(122, 13)) / 100;
                            }
                            else
                            {
                                ATitulo.vl_outros_creditos = decimal.Zero;
                            }
                            //Data ocorrencia
                            if (Retorno[NumeroRegistro].Substring(137, 8) != "00000000")
                            {
                                ATitulo.Dt_ocorrencia = DateTime.Parse(Retorno[NumeroRegistro].Substring(137, 2) + "/" +
                                                                       Retorno[NumeroRegistro].Substring(139, 2) + "/" +
                                                                       Retorno[NumeroRegistro].Substring(141, 4));
                            }
                            else
                            {
                                ATitulo.Dt_ocorrencia = DateTime.Now;
                            }
                            //Data credito
                            if (Retorno[NumeroRegistro].Substring(145, 8) != "00000000")
                            {
                                ATitulo.Dt_credito = DateTime.Parse(Retorno[NumeroRegistro].Substring(145, 2) + "/" +
                                                                    Retorno[NumeroRegistro].Substring(147, 2) + "/" +
                                                                    Retorno[NumeroRegistro].Substring(149, 4));
                            }
                            else
                            {
                                ATitulo.Dt_credito = DateTime.Now;
                            }
                        }
                        ACobranca.Titulos.Add(ATitulo);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            { throw new Exception(ex.Message); }
        }
Esempio n. 12
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Identificacao do Header 001-001
            registros.Append("0");
            //Tipo do arquivo 002-002
            registros.Append("1");
            //Identificação por extenso do tipo de operação 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Identificação tipo serviço 010-011
            registros.Append("01");
            //Literal COBRANCA 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Complemento Registro 027-027
            registros.Append("0");
            //Numero Agencia 028-031
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0'));
            //Sub-conta do cliente 032-033
            registros.Append("55");
            //Numero Conta 034-044
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(11, '0'));
            //Uso Banco 045-046
            registros.Append("  ");
            //Nome Cedente 047-076
            registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' '));
            //Numero Banco 077-079
            registros.Append(CodigoBanco);
            //Nome Banco 080-094
            registros.Append(NomeBanco.ToUpper().FormatStringDireita(15, ' '));
            //Data arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Densidade Gravacao 101-105
            registros.Append("01600");
            //Unidade Densidade 106-108
            registros.Append("BPI");
            //Uso do banco 109-110
            registros.Append("  ");
            //Sigla Layout Tecnico 111-117
            registros.Append("LANCV08");
            //Uso Banco 118-394
            registros.Append("".FormatStringDireita(277, ' '));
            //Sequencial do registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            #region Registro Detalhe
            aCobranca.Titulos.ForEach(p =>
            {
                #region Detalhe do titulo
                registros = new StringBuilder();
                //Identificao Registro 001-001
                registros.Append("1");
                //Tipo inscricao cedente 002-003
                registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02");
                //Numero CPF/CNPJ 004-017
                registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Zero 018-018
                registros.Append("0");
                //Codigo Agencia 019-022
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0'));
                //Sub-conta 023-024
                registros.Append("55");
                //Numero Conta 025-035
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0') +
                                 p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(5, '0') +
                                 p.Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(2, '0'));
                //Brancos 036-037
                registros.Append("  ");
                //Controle Empresa 038-062
                registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(25, ' '));
                //Nosso Numero 063-073
                registros.Append(p.Nosso_numero.FormatStringEsquerda(11, '0'));
                //Data Desconto 074-079
                registros.Append("000000");
                //Valor desconto 080-090
                registros.Append("".FormatStringEsquerda(11, '0'));
                //Data Desconto 091-096
                registros.Append("000000");
                //Valor desconto 097-107
                registros.Append("".FormatStringEsquerda(11, '0'));
                //Carteira 108-108
                registros.Append(p.Carteira.Trim());
                //Codigo Ocorrencia 109-110
                registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Seu numero 111-120
                registros.Append((p.Nr_lancto.Value.ToString() + p.Cd_parcela.Value.ToString()).FormatStringEsquerda(10, '0'));
                //Data vencimento 121-126
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                //Valor titulo 127-139
                registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                //Numero do banco 140-142
                registros.Append(p.Cd_banco.Trim());
                //Agencia depositaria 143-147
                registros.Append("00000");
                //Especie do titulo 148-149
                registros.Append(this.ConverterEspecieDoc(p.Especie_documento));
                //Aceite 150-150
                registros.Append(p.Aceite_documento == TAceiteDocumento.adSim ? "A" : "N");
                //Data emissao 151-156
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                //Instrucao 157-158
                registros.Append("00");
                //Instrucao 159-160
                registros.Append("00");
                //Juros de mora 161-173
                if (p.Pc_jurodia > decimal.Zero)
                {
                    registros.Append("        T" + p.Pc_jurodia.ToString("N2", new System.Globalization.CultureInfo("pt-BR")).SoNumero().FormatStringEsquerda(4, '0'));
                }
                else
                {
                    registros.Append("".FormatStringEsquerda(13, '0'));
                }
                //Data desconto 174-179
                registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                //Valor desconto 180-192
                registros.Append(p.Vl_desconto.SoNumero().FormatStringEsquerda(13, '0'));
                //Valor IOF 193-205
                registros.Append("".FormatStringEsquerda(13, '0'));
                //Valor abatimento 206-218
                registros.Append(p.Vl_abatimento.SoNumero().FormatStringEsquerda(13, '0'));
                //Tipo inscricao pagador 219-220
                registros.Append(p.Sacado.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02");
                //CPF/CNPJ Sacado 221-234
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Nome sacado 235-274
                registros.Append(p.Sacado.Nome.FormatStringDireita(40, ' '));
                //Endereco sacado 275-312
                registros.Append((p.Sacado.Endereco.Rua.Trim() + ", " + p.Sacado.Endereco.Numero).FormatStringDireita(38, ' '));
                //Instrucao de nao recebimento de boleto 313-314
                registros.Append("  ");
                //Bairro sacado 315-326
                registros.Append(p.Sacado.Endereco.Bairro.FormatStringDireita(12, ' '));
                //CEP Sacado 327-334
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                //Cidade Sacado 335-349
                registros.Append(p.Sacado.Endereco.Cidade.FormatStringDireita(15, ' '));
                //UF Sacado 350-351
                registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' '));
                //Sacador Avalista 352-390
                registros.Append("".FormatStringDireita(39, ' '));
                //Tipo boleto 391-391
                registros.Append(" ");
                //Dias Protesto 392-393
                if (p.St_protestarauto)
                {
                    registros.Append(p.Nr_diasprotestar < 5 ? "05" : p.Nr_diasprotestar.FormatStringEsquerda(2, '0'));
                }
                else
                {
                    registros.Append("  ");
                }
                //Moeda 394-394
                registros.Append("9");//Real
                //sequencial do registro 395-400
                registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                Remessa.AppendLine(registros.ToString());
                #endregion
            });
            #endregion

            #region Trailer
            registros = new StringBuilder();
            //Identificacao registro 001-001
            registros.Append("9");
            //Complemento 002-394
            registros.Append(string.Empty.FormatStringDireita(393, ' '));
            //Sequencial registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 13
0
        public void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Header
            //Identificação registro 001-001
            registros.Append("0");
            //Tipo Operação 002-002
            registros.Append("1");
            //Identificação 003-009
            registros.Append("REMESSA");
            //Tipo serviço 010-011
            registros.Append("01");
            //Serviço 012-019
            registros.Append("COBRANCA");
            //Brancos 020-026
            registros.Append(string.Empty.FormatStringDireita(7, ' '));
            //Numero Agencia 027-030
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0'));
            //Digito Agencia 031-031
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringDireita(1, ' '));
            //Conta Corrente 032-039
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0'));
            //Digito Conta 040-040
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringDireita(1, ' '));
            //Complemento 041-046
            registros.Append(string.Empty.FormatStringEsquerda(6, '0'));
            //Nome Cedente 047-076
            registros.Append(aCobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' '));
            //Banco 077-094
            registros.Append((CodigoBanco + NomeBanco).FormatStringDireita(18, ' '));
            //Data arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Sequencial arquivo 101-107
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(7, '0'));
            //Complementos 108-149
            registros.Append(string.Empty.FormatStringDireita(42, ' '));
            //Numero Convenio 150-156
            registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(7, '0'));
            //Complementos 157-394
            registros.Append(string.Empty.FormatStringDireita(238, ' '));
            //Sequencia do registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            #region Detalhe
            aCobranca.Titulos.ForEach(p =>
            {
                registros = new StringBuilder();
                //Identificação Registro 001-001
                registros.Append("7");
                //Tipo Inscrição Cedente 002-003
                registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02");
                //Numero doc cedente 004-017
                registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Prefixo Agencia 018-021
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(4, '0'));
                //Digito Agencia 022-022
                registros.Append(p.Cedente.ContaBancaria.DigitoAgencia.FormatStringDireita(1, ' '));
                //Conta Corrente 023-030
                registros.Append(p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0'));
                //Digito Conta 031-031
                registros.Append(p.Cedente.ContaBancaria.DigitoConta.FormatStringDireita(1, ' '));
                //Codigo Cedente 032-038
                registros.Append(p.Cedente.CodigoCedente.FormatStringEsquerda(7, '0'));
                //Codigo controle empresa 039-063
                registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(25, ' '));
                //Nosso numero 064-080
                registros.Append(p.Nosso_numero.FormatStringEsquerda(17, '0'));
                //Zeros 081-084
                registros.Append("0000");
                //Brancos 085-087
                registros.Append("   ");
                //Mensagem ou Avalista 088-088
                registros.Append(string.IsNullOrEmpty(p.Avalista.NumeroCPFCNPJ) ? " " : "A");
                //Brancos 089-091
                registros.Append("   ");
                //Variação Carteira 092-094
                registros.Append("   ");
                //Zeros 095-101
                registros.Append("0000000");
                //Tipo cobrança 102-106
                registros.Append("     ");
                //Carteira 107-108
                registros.Append(p.Carteira.FormatStringEsquerda(2, '0'));
                //Movimento Remessa 109-110
                registros.Append(TratarInstrucaoRemessa(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0')));
                //Seu numero 111-120
                registros.Append((p.Nr_lancto.ToString() + "/" + p.Cd_parcela.ToString()).FormatStringDireita(10, ' '));
                //Vencimento 121-126
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                //Valor Titulo 127-139
                registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                //Codigo Banco 140-142
                registros.Append(CodigoBanco);
                //Prefixo agencia cobradora 143-146
                registros.Append("0000");
                //Digito agencia cobradora 147-147
                registros.Append(" ");
                //Especie titulo 148-149
                registros.Append(ConverterEspecieDoc(p.Especie_documento).FormatStringEsquerda(2, '0'));
                //Aceite titulo 150-150
                registros.Append(p.Aceite_documento == TAceiteDocumento.adSim ? "1" : "0");
                //Data emissão 151-156
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                //Instrução codificada 157-158
                registros.Append(p.St_protestarauto ? "09" : "  ");
                //Instrução codificada 159-160
                registros.Append("  ");
                //Juros de mora 161-173
                if (p.Pc_jurodia > decimal.Zero)
                {
                    registros.Append((p.Tp_jurodia.Trim().ToUpper().Equals("P") ? decimal.Multiply(p.Vl_documento, decimal.Divide(p.Pc_jurodia, 100)) : p.Pc_jurodia).SoNumero().FormatStringEsquerda(13, '0'));
                }
                else
                {
                    registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                }
                //Zeros 174-179
                registros.Append("000000");
                //Valor desconto 180-192
                if (p.Pc_desconto > decimal.Zero)
                {
                    registros.Append((p.Tp_desconto.Trim().ToUpper().Equals("P") ? decimal.Multiply(p.Vl_documento, decimal.Divide(p.Pc_desconto, 100)) : p.Pc_desconto).SoNumero().FormatStringEsquerda(13, '0'));
                }
                else
                {
                    registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                }
                //Zeros 193-205
                registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                //Valor Abatimento 206-218
                registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                //Tipo inscrição sacado 219-220
                registros.Append(p.Sacado.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "01" : "02");
                //Inscrição sacado 221-234
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Nome sacado 235-271
                registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(37, ' '));
                //Brancos 272-274
                registros.Append("   ");
                //Endereço Sacado 275-314
                registros.Append(p.Sacado.Endereco.Rua.RemoverCaracteres().FormatStringDireita(40, ' '));
                //Bairro Sacado 315-326
                registros.Append(p.Sacado.Endereco.Bairro.RemoverCaracteres().FormatStringDireita(12, ' '));
                //CEP Sacado 327-334
                registros.Append(p.Sacado.Endereco.CEP.FormatStringDireita(8, ' '));
                //Cidade Sacado 335-349
                registros.Append(p.Sacado.Endereco.Cidade.RemoverCaracteres().FormatStringDireita(15, ' '));
                //UF Sacado 350-351
                registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' '));
                //Obs/Avalista 352-391
                if (!string.IsNullOrEmpty(p.Avalista.NumeroCPFCNPJ))
                {
                    if (p.Avalista.TipoInscricao == TTipoInscricao.tiPessoaJuridica)
                    {
                        //Nome avalista 352-372
                        registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(21, ' '));
                        //Branco 373-373
                        registros.Append(" ");
                        //CNPJ 374-377
                        registros.Append("CNPJ");
                        //Numero 378-391
                        registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    }
                    else
                    {
                        //Nome avalista 352-376
                        registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(25, ' '));
                        //Branco 377-377
                        registros.Append(" ");
                        //CPJ 378-380
                        registros.Append("CPF");
                        //Numero 381-391
                        registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(11, '0'));
                    }
                }
                else
                {
                    registros.Append(string.Empty.FormatStringDireita(40, ' '));
                }
                //Dias Protesto 392-393
                registros.Append(p.St_protestarauto ?
                                 p.Nr_diasprotestar <= 5 ? "05" :
                                 p.Nr_diasprotestar >= 15 ? "15" :
                                 p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "  ");
                //Branco 394-394
                registros.Append(" ");
                //sequencial do registro 395-400
                registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                Remessa.AppendLine(registros.ToString());
            });
            #endregion

            #region Trailer
            registros = new StringBuilder();
            //Identificação Registro 001-001
            registros.Append("9");
            //Complemento 002-394
            registros.Append(string.Empty.FormatStringDireita(393, ' '));
            //Sequencial registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 14
0
        public void GerarRemessa(blCobranca ACobranca, string Path_remessa)  //{Gerar arquivo remessa para enviar ao banco}
        {
            StringBuilder Remessa = new StringBuilder();

            switch (ACobranca.LayoutArquivo)
            {
            case TLayoutArquivo.laCNAB240:
                throw new Exception("Layout CNAB240 não suportado pelo Aliance.NET.");

            case TLayoutArquivo.laCNAB400:
            {
                GerarRemessaCNAB400(ACobranca, Remessa);
                break;
            }
            }
            //Salvar arquivo de remessa na pasta configurada
            if (!System.IO.Directory.Exists(Path_remessa))
            {
                throw new Exception("Path salvar arquivo remessa invalido.");
            }
            if (Path_remessa.Substring(Path_remessa.Length - 1, 1) != System.IO.Path.DirectorySeparatorChar.ToString())
            {
                Path_remessa += System.IO.Path.DirectorySeparatorChar.ToString();
            }
            string            extensao = ".CRM";
            TList_LoteRemessa lLote    = new TCD_LoteRemessa().Select(
                new TpBusca[]
            {
                new TpBusca()
                {
                    vNM_Campo = "b.cd_empresa",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.Titulos[0].Cd_empresa.Trim() + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "b.cd_contager",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.Titulos[0].Cd_contager.Trim() + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "convert(datetime, floor(convert(decimal(30,10), a.dt_lote)))",
                    vOperador = "=",
                    vVL_Busca = "'" + ACobranca.DataArquivo.ToString("yyyyMMdd") + "'"
                },
                new TpBusca()
                {
                    vNM_Campo = "isnull(a.nr_arqremessa, 0)",
                    vOperador = "<>",
                    vVL_Busca = "0"
                }
            }, 0, string.Empty);

            if (lLote.Count > 0)
            {
                if (lLote.Exists(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq)))
                {
                    if (lLote.OrderBy(p => p.Nr_arqRemessa).ToList().FindIndex(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq)) > 0)
                    {
                        extensao = ".RM" + (lLote.OrderBy(p => p.Nr_arqRemessa).ToList().FindIndex(p => p.Nr_arqRemessa.Equals(ACobranca.SequencialArq)) + 1).ToString();
                    }
                }
                else
                {
                    extensao = ".RM" + (lLote.Count + 1).ToString();
                }
            }
            using (StreamWriter sw = new StreamWriter(Path_remessa +
                                                      ACobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0') +
                                                      this.CodigoMes(ACobranca.DataArquivo.Month) +
                                                      ACobranca.DataArquivo.Day.FormatStringEsquerda(2, '0') +
                                                      extensao))
            {
                sw.Write(Remessa.ToString());
                sw.Flush();
                sw.Close();
            }
        }
Esempio n. 15
0
        private void GerarRemessaCNAB240(blCobranca cobranca, StringBuilder Remessa)
        {
            if (cobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }

            StringBuilder registros = new StringBuilder();

            #region Registro Header Arquivo
            //Codigo do banco 001-003
            registros.Append(CodigoBanco);
            //Lote Servico 004-007
            registros.Append("0000");
            //Tipo Registro 008-008
            registros.Append("0");
            //Brancos 009-017
            registros.Append(string.Empty.FormatStringDireita(9, ' '));
            //Tipo insc. cedente 018-018
            registros.Append(cobranca.Titulos[0].Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "1" : "2");
            //Inscrição cedente 019--032
            registros.Append(cobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
            //Codigo cedente 033-052
            registros.Append(cobranca.Titulos[0].Cedente.CodigoCedente.FormatStringDireita(20, ' '));
            //Agencia cedente 053-057
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0'));
            //Digito agencia 058-058
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0'));
            //Conta corrente 059-070
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0'));
            //Digito Conta 071-071
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0'));
            //Branco 072-072
            registros.Append(" ");
            //Nome cedente 073-102
            registros.Append(cobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' '));
            //Nome cooperativa 103-132
            registros.Append(NomeBanco.FormatStringDireita(30, ' '));
            //Brancos 133-142
            registros.Append(string.Empty.FormatStringDireita(10, ' '));
            //Codigo remessa 143-143
            registros.Append("1");
            //Data arquivo 144-151
            registros.Append(cobranca.DataArquivo.ToString("ddMMyyyy"));
            //Hora arquivo 152-157
            registros.Append(cobranca.DataArquivo.ToString("HHmmss"));
            //Numero Arquivo 158-163
            registros.Append(cobranca.SequencialArq.FormatStringEsquerda(6, '0'));
            //Numero versao 164-166
            registros.Append("087");
            //Densidade gravação 167-171
            registros.Append("01600");
            //Brancos 172-240
            registros.Append(string.Empty.FormatStringDireita(69, ' '));

            Remessa.AppendLine(registros.ToString());
            int tot_registro = 1;
            #endregion

            #region Registro Header Lote
            registros = new StringBuilder();
            //Codigo do banco 001-003
            registros.Append(CodigoBanco.Trim());
            //Lote servico 004-007
            registros.Append("0001");
            //Tipo registro 008-008
            registros.Append("1");
            //Tipo operação 009-009
            registros.Append("R");
            //Tipo serviço 010-011
            registros.Append("01");
            //Brancos 012-013
            registros.Append(string.Empty.FormatStringDireita(2, ' '));
            //Versão do layout 014-016
            registros.Append("045");
            //Branco 017-017
            registros.Append(" ");
            //Tipo Inscrição Empresa 018-018
            registros.Append(cobranca.Titulos[0].Cedente.TipoInscricao == TTipoInscricao.tiPessoaFisica ? "1" : "2");
            //Inscrição Empresa 019-033
            registros.Append(cobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0'));
            //Codigo Cendente 034-053
            registros.Append(cobranca.Titulos[0].Cedente.CodigoCedente.FormatStringDireita(20, ' '));
            //Agencia 054-058
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0'));
            //Digito Agencia 059-059
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0'));
            //Conta Corrente 060-071
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0'));
            //Digito Conta 072-072
            registros.Append(cobranca.Titulos[0].Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0'));
            //Digito Ag/Conta 073-073
            registros.Append(" ");
            //Nome Empresa 074-103
            registros.Append(cobranca.Titulos[0].Cedente.Nome.RemoverCaracteres().FormatStringDireita(30, ' '));
            //Mensagem 1 104-143
            registros.Append(string.Empty.FormatStringDireita(40, ' '));
            //Mensagem 2 144-183
            registros.Append(string.Empty.FormatStringDireita(40, ' '));
            //Numero Arquivo 184-191
            registros.Append(cobranca.SequencialArq.ToString().FormatStringEsquerda(8, '0'));
            //Data arquivo 192-199
            registros.Append(cobranca.DataArquivo.ToString("ddMMyyyy"));
            //Zeros 200-207
            registros.Append("0".FormatStringEsquerda(8, '0'));
            //Filler 208-240
            registros.Append("".FormatStringDireita(33, ' '));

            Remessa.AppendLine(registros.ToString());
            tot_registro += 1;
            #endregion

            #region Detalhes
            int lote = 1;
            cobranca.Titulos.ForEach(p =>
            {
                #region Segmento P
                registros = new StringBuilder();
                //Codigo Banco 001-003
                registros.Append(CodigoBanco);
                //Numero lote 004-007
                registros.Append("0001");
                //Tipo registro 008-008
                registros.Append("3");
                //Numero sequencial lote 009-013
                registros.Append("00001");
                //Codigo segmento 014-014
                registros.Append("P");
                //Brancos 015-015
                registros.Append(" ");
                //Cogido Instrucao 016-017
                registros.Append(cobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Agencia 018-022
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0'));
                //Digito Agencia 023-023
                registros.Append(p.Cedente.ContaBancaria.DigitoAgencia.FormatStringEsquerda(1, '0'));
                //Conta Corrente 024-035
                registros.Append(p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(12, '0'));
                //Digito conta 036-036
                registros.Append(p.Cedente.ContaBancaria.DigitoConta.FormatStringEsquerda(1, '0'));
                //Branco 037-037
                registros.Append(" ");
                //Nosso numero 038-057
                registros.Append(p.Nosso_numero.FormatStringDireita(20, ' '));
                //Carteira 058-058
                registros.Append(p.Carteira.Trim());
                //Forma cadastro banco 059-059
                registros.Append("1");
                //Tipo documento 060-060
                registros.Append("1");
                //Identificação emissão 061-061
                registros.Append("2");
                //Identificação distribuição 062-062
                registros.Append("2");
                //Numero documento 063-077
                registros.Append((p.Nr_lancto.ToString() + p.Cd_parcela.ToString() + p.Id_cobranca.ToString()).FormatStringDireita(15, ' '));
                //Vencimento 078-085
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyyyy"));
                //Valor titulo 086-100
                registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(15, '0'));
                //Agencia cobrança 101-105
                registros.Append("00000");
                //Digito agencia cobrança 106-106
                registros.Append(" ");
                //Especie titulo 107-108
                registros.Append(p.RetornarCodigoEspecieDocumento().FormatStringEsquerda(2, '0'));
                //Tipo aceite 109-109
                registros.Append(p.Aceite_documento.Equals(TAceiteDocumento.adSim) ? "A" : "N");
                //Data emissão 110-117
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyyyy"));
                //Codigo juro 118-118
                registros.Append(p.Pc_jurodia > decimal.Zero ? p.Tp_jurodia.Trim().ToUpper().Equals("P") ? "2" : "1" : "3");
                //Data Juro 119-126
                registros.Append("00000000");
                //Juros valor/% 127-141
                registros.Append((p.Pc_jurodia * (p.Tp_jurodia.Trim().ToUpper().Equals("P") ? 30 : 1)).SoNumero().FormatStringEsquerda(15, '0'));
                //Codigo desconto 142-142
                registros.Append(p.Pc_desconto > decimal.Zero ? "1" : "0");
                //Data desconto 143-150
                registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyyyy") : p.Dt_vencimento.Value.ToString("ddMMyyyy"));
                //Valor desconto 151-165
                registros.Append((p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(15, '0'));
                //IOF 166-180
                registros.Append(decimal.Zero.FormatStringEsquerda(15, '0'));
                //Valor abatimento 181-195
                registros.Append(p.Vl_abatimento.SoNumero().FormatStringEsquerda(15, '0'));
                //Identificação titulo na empresa 196-220
                registros.Append((p.Nosso_numero.Trim() + cobranca.Cd_instrucao.ToString()).FormatStringDireita(25, ' '));
                //Protestar 221-221
                registros.Append(p.St_protestarauto ? "1" : "3");
                //Prazo protesto 222-223
                registros.Append(p.St_protestarauto ? p.Nr_diasprotestar < 5 ? "05" : p.Nr_diasprotestar > 15 ? "15" : p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00");
                //Codigo baixa 224-224
                registros.Append("2");
                //Prazo baixa 225-227
                registros.Append("   ");
                //Codigo moeda 228-229
                registros.Append("09");
                //Numero contrato 230-239
                registros.Append(decimal.Zero.FormatStringEsquerda(10, '0'));
                //Brancos 240-240
                registros.Append(" ");

                Remessa.AppendLine(registros.ToString());
                tot_registro++;
                lote++;
                #endregion

                #region Segmento Q
                registros = new StringBuilder();
                //Zeros 001-003
                registros.Append(CodigoBanco);
                //Lote servico 004-007
                registros.Append("0001");
                //Registro 008-008
                registros.Append("3");
                //numero registro 009-013
                registros.Append("00002");
                //Codigo segmento 014-014
                registros.Append("Q");
                //Brancos 015-015
                registros.Append(" ");
                //Codigo instrucao = igual informado segmento P 016-017
                registros.Append(cobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Tipo inscricao sacado 018-018
                registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : "2");
                //Cnpj/Cpf 019-033
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0'));
                //Nome sacado 034-073
                registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(40, ' '));
                //Endereco sacado 074-113
                registros.Append((p.Sacado.Endereco.Rua.Trim().RemoverCaracteres() + "," + p.Sacado.Endereco.Numero.RemoverCaracteres()).FormatStringDireita(40, ' '));
                //Bairro sacado 114-128
                registros.Append(p.Sacado.Endereco.Bairro.Trim().RemoverCaracteres().FormatStringDireita(15, ' '));
                //CEP 129-133
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().Substring(0, 5));
                //Sufixo CEP 134-136
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().Substring(5, 3));
                //Cidade 137-151
                registros.Append(p.Sacado.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(15, ' '));
                //Sigla Estado 152-153
                registros.Append(p.Sacado.Endereco.Estado.FormatStringDireita(2, ' '));
                //Tipo inscricao avalista 154-154
                registros.Append(p.Avalista.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : p.Avalista.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "2" : "0");
                //Inscricao avalista 155-169
                registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(15, '0'));
                //Nome avalista 170-209
                registros.Append(p.Avalista.Nome.RemoverCaracteres().FormatStringDireita(40, ' '));
                //Filler 210-240
                registros.Append("".FormatStringDireita(31, ' '));

                Remessa.AppendLine(registros.ToString());
                tot_registro++;
                lote++;
                #endregion
            });

            #endregion

            #region Registro Trailer Lote
            registros = new StringBuilder();
            //Codigo Banco 001-003
            registros.Append(CodigoBanco);
            //Lote Servico 004-007
            registros.Append("0001");
            //Tipo registro 008-008
            registros.Append("5");
            //Brancos 009-017
            registros.Append("".FormatStringDireita(9, ' '));
            //Quantidade total registros lote 018-023
            registros.Append((lote + 1).ToString().FormatStringEsquerda(6, '0'));
            //Quantidade titulos 024-029
            registros.Append(cobranca.Titulos.Count.FormatStringEsquerda(6, '0'));
            //Valor titulos 030-046
            registros.Append(cobranca.Titulos.Sum(p => p.Vl_documento).SoNumero().FormatStringEsquerda(17, '0'));
            //Zeros 047-115
            registros.Append("0".FormatStringEsquerda(69, '0'));
            //Filler 116-240
            registros.Append("".FormatStringDireita(125, ' '));

            Remessa.AppendLine(registros.ToString());
            tot_registro++;
            #endregion

            #region Trailer Arquivo
            registros = new StringBuilder();
            //Codigo banco 001-003
            registros.Append(CodigoBanco);
            //Lote servico 004-007
            registros.Append("9999");
            //Tipo registro 008-008
            registros.Append("9");
            //Brancos 009-017
            registros.Append(string.Empty.FormatStringDireita(9, ' '));
            //Quantidade Lotes 018-023
            registros.Append("000001");
            //Quantidade registros 024-029
            registros.Append((tot_registro + 1).FormatStringEsquerda(6, '0'));
            //Qtd contas 030-035
            registros.Append("000000");
            //Brancos 036-240
            registros.Append(string.Empty.FormatStringDireita(205, ' '));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 16
0
        public static void ProcessarRemessa(TRegistro_LoteRemessa val, BancoDados.TObjetoBanco banco)
        {
            bool            st_transacao = false;
            TCD_LoteRemessa qtb_lote     = new TCD_LoteRemessa();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_lote.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_lote.Banco_Dados = banco;
                }
                if (val.lTitulos.Count < 1)
                {
                    throw new Exception("Lote não possui titulos para gerar arquivo remessa.");
                }
                TList_CadCFGBanco lCfgBanco = TCN_CadCFGBanco.Buscar(string.Empty,
                                                                     val.lTitulos[0].Cd_banco,
                                                                     val.Cd_empresa,
                                                                     val.lTitulos[0].Cedente.CodigoCedente,
                                                                     "CR",
                                                                     val.Cd_contager,
                                                                     "A",
                                                                     string.Empty,
                                                                     1,
                                                                     qtb_lote.Banco_Dados);
                if (lCfgBanco.Count < 1)
                {
                    throw new Exception("Não existe configuração para emissão de bloquetos para o banco: " + val.lTitulos[0].Cd_banco);
                }
                //Criar registro cobranca
                blCobranca rCobranca = new blCobranca();
                if (val.Nr_arqRemessa > decimal.Zero)
                {
                    rCobranca.SequencialArq = val.Nr_arqRemessa;
                }
                else
                {
                    //Sequencial do Arquivo
                    object obj = new TCD_LoteRemessa(qtb_lote.Banco_Dados).BuscarEscalar(
                        new Utils.TpBusca[]
                    {
                        new Utils.TpBusca()
                        {
                            vNM_Campo = "a.id_config",
                            vOperador = "=",
                            vVL_Busca = lCfgBanco[0].Id_configstr
                        }
                    }, "isnull(max(a.nr_arqremessa), 0)");
                    rCobranca.SequencialArq = obj == null ? 1 : decimal.Parse(obj.ToString()) + 1;
                    val.Nr_arqRemessa       = rCobranca.SequencialArq;
                }
                rCobranca.Cd_instrucao           = blCobranca.TratarInstrucaoRemessa(val.lTitulos[0].Cd_banco, val.Tp_instrucao);
                rCobranca.DataArquivo            = CamadaDados.UtilData.Data_Servidor(qtb_lote.Banco_Dados);
                rCobranca.LayoutArquivo          = lCfgBanco[0].Tp_layoutremessa.Trim().Equals("2") ? TLayoutArquivo.laCNAB240 : lCfgBanco[0].Tp_layoutremessa.Trim().Equals("4") ? TLayoutArquivo.laCNAB400 : TLayoutArquivo.laOutro;
                rCobranca.TipoMovimento          = TTipoMovimento.tmRemessa;
                rCobranca.Cd_bancocorrespondente = lCfgBanco[0].Cd_bancocorrespondente;
                rCobranca.Titulos = val.lTitulos;
                if (rCobranca.GerarRemessa(val.lTitulos[0].Cd_banco, val.Path_remessa))
                {
                    val.St_registro = "P";//Processado
                    val.Dt_lote     = rCobranca.DataArquivo;
                    Gravar(val, qtb_lote.Banco_Dados);
                }
                if (st_transacao)
                {
                    qtb_lote.Banco_Dados.Commit_Tran();
                }
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_lote.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro gerar arquivo remessa: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_lote.deletarBanco_Dados();
                }
            }
        }
Esempio n. 17
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Identificacao do Header 001-001
            registros.Append("0");
            //Identificacao do arquivo remessa 002-002
            registros.Append("1");
            //Literal REMESSA 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Codigo servico cobranca 010-011
            registros.Append("01");
            //Literal COBRANCA 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Codigo Transmissão 027-046
            registros.Append(aCobranca.Titulos[0].Cedente.ContaBancaria.CodigoAgencia +
                             aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(8, '0') +
                             (aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.Length > 8 ?
                              aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.Substring(0, 8) :
                              aCobranca.Titulos[0].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0')));
            //Nome Empresa 047-076
            registros.Append(aCobranca.Titulos[0].Cedente.Nome.FormatStringDireita(30, ' '));
            //Numero Banco Camara Compensacao 077-079
            registros.Append(CodigoBanco.Trim());
            //Nome Banco Extenso 080-094
            registros.Append(NomeBanco.FormatStringDireita(15, ' '));
            //Data Arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Brancos 101-116
            registros.Append("".FormatStringDireita(16, '0'));
            //Mensagem 1 117-163
            registros.Append("".FormatStringDireita(47, ' '));
            //Mensagem 2 164-210
            registros.Append("".FormatStringDireita(47, ' '));
            //Mensagem 3 211-257
            registros.Append("".FormatStringDireita(47, ' '));
            //Mensagem 4 258-304
            registros.Append("".FormatStringDireita(47, ' '));
            //Mensagem 5 305-351
            registros.Append("".FormatStringDireita(47, ' '));
            //Brancos 352-391
            registros.Append("".FormatStringDireita(40, ' '));
            //Numero versão remessa <opcional> 392-394
            registros.Append("000");
            //Sequencial do registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            #region Registro Detalhe
            aCobranca.Titulos.ForEach(p =>
            {
                #region Detalhe do titulo
                registros = new StringBuilder();
                //Identificao registro 001-001
                registros.Append("1");
                //Tipo Inscrição Beneficiario 002-003
                registros.Append(p.Cedente.TipoInscricao == TTipoInscricao.tiPessoaJuridica ? "02" : "01");
                //CNPJ/CPF 004-017
                registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Agencia Beneficiario 018-021
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia);
                //Codigo Cedente 022-029
                registros.Append(p.Cedente.CodigoCedente.Length > 8 ? p.Cedente.CodigoCedente.Substring(0, 8) : p.Cedente.CodigoCedente.FormatStringEsquerda(8, '0'));
                //Conta Corrente 030-037
                registros.Append(p.Cedente.ContaBancaria.NumeroConta.Length > 8 ? p.Cedente.ContaBancaria.NumeroConta.Substring(0, 8) : p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(8, '0'));
                //Numero controle do participante 038-062
                registros.Append("".FormatStringDireita(25, ' '));
                //Nosso Numero 063-070
                registros.Append(p.Nosso_numero + p.Digito_NossoNumero);
                //Data Segundo Desconto 071-076
                registros.Append("000000");
                //Brancos 077-077
                registros.Append(" ");
                //Multa 078-078
                registros.Append(p.Pc_multa > decimal.Zero ? "4" : "0");
                //% Multa 079-082
                registros.Append(p.Pc_multa.ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(4, '0'));
                //Unidade valor moeda 083-084
                registros.Append("00");
                //Valor titulo outra unidade 085-097
                registros.Append("".FormatStringEsquerda(13, '0'));
                //Brancos 098-101
                registros.Append("".FormatStringDireita(4, ' '));
                //Data Multa 102-107
                registros.Append(p.Nr_diasmulta > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasmulta)).ToString("ddMMyy") : "000000");
                //Carteira 108-108
                registros.Append(p.Carteira);//5-Rapida com Registro(boleto emitido pelo cliente)
                //Instrução 109-110
                registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Seu numero 111-120
                registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0'));
                //Vencimento 121-126
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                //Valor titulo 127-139
                registros.Append(p.Vl_documento.ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0'));
                //Numero banco cobrador 140-142
                registros.Append(CodigoBanco);
                //Agencia cobradora 143-147
                registros.Append(p.Cedente.ContaBancaria.CodigoAgencia + p.Cedente.ContaBancaria.DigitoAgencia);
                //Especie Documento 148-149
                registros.Append(ConverterEspecieDoc(p.Especie_documento));
                //Aceite 150-150
                registros.Append(p.Aceite_SN);
                //Data Emissao 151-156
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                //Primeira instrução cobranca 157-158
                registros.Append("00");
                //Segunda instrução cobrança 159-160
                registros.Append(p.St_protestarauto ? "06" : "00");
                //Valor juro por dia atraso 161-173
                decimal ret = decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100);
                registros.Append((p.Tp_jurodia.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100) : p.Pc_jurodia).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0'));
                //Data limite desconto 174-179
                registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                //Valor desconto 180-192
                registros.Append((p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0'));
                //Valor IOF 193-205
                registros.Append(decimal.Zero.ToString().FormatStringEsquerda(13, '0'));
                //Valor Abatimento 206-218
                registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                //Tipo Inscricao Sacado 219-220
                registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "01" : "02");
                //Numero Inscricao Sacado 221-234
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Nome Sacado 235-274
                registros.Append(p.Sacado.Nome.RemoverCaracteres().FormatStringDireita(40, ' '));
                //Endereco Sacado 275-314
                registros.Append((p.Sacado.Endereco.Rua.RemoverCaracteres().Trim() + p.Sacado.Endereco.Numero.RemoverCaracteres().Trim()).FormatStringDireita(40, ' '));
                //Bairro Sacado 315-326
                registros.Append(p.Sacado.Endereco.Bairro.RemoverCaracteres().FormatStringDireita(12, ' '));
                //CEP Sacado 327-334
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                //Municipio Sacado 335-349
                registros.Append(p.Sacado.Endereco.Cidade.RemoverCaracteres().FormatStringDireita(15, ' '));
                //UF Sacado 350-351
                registros.Append(p.Sacado.Endereco.Estado.RemoverCaracteres().FormatStringDireita(2, ' '));
                //Brancos 352-382
                registros.Append("".FormatStringDireita(31, ' '));
                //Identificador do complemento 383-383
                registros.Append("I");
                //Complemento 384-385
                registros.Append(p.Cedente.ContaBancaria.NumeroConta.Substring(p.Cedente.ContaBancaria.NumeroConta.Length - 1, 1) + p.Cedente.ContaBancaria.DigitoConta);
                //Brancos 386-391
                registros.Append("".FormatStringDireita(6, ' '));
                //Numero dias para protesto 392-393
                registros.Append(p.St_protestarauto ? p.Nr_diasprotestar.FormatStringEsquerda(2, '0') : "00");
                //Brancos 394-394
                registros.Append(" ");
                //sequencial do registro 395-400
                registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                Remessa.AppendLine(registros.ToString());
                #endregion
            });
            #endregion

            #region Trailer
            registros = new StringBuilder();
            //Identificacao registro 001-001
            registros.Append("9");
            //Quantidade Documentos 002-007
            registros.Append(aCobranca.Titulos.Count.FormatStringEsquerda(6, '0'));
            //Valor Documentos 008-020
            registros.Append(aCobranca.Titulos.Sum(p => p.Vl_documento).ToString("N2", new System.Globalization.CultureInfo("pt-BR", true)).SoNumero().FormatStringEsquerda(13, '0'));
            //Zeros 021-394
            registros.Append("".FormatStringEsquerda(374, '0'));
            //Sequencial registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 18
0
        private bool LerRetornoCNAB400(blCobranca ACobranca, string[] Retorno)
        {
            string   ACodigoBanco;
            string   ACodigoCedente;
            int      NumeroRegistro = 0;
            blTitulo ATitulo        = null;

            try
            {
                //{ Lê registro HEADER}
                ACodigoBanco = Retorno[NumeroRegistro].Substring(76, 3);
                if (ACodigoBanco != CodigoBanco)
                {
                    throw new Exception("Este não é um retorno de cobrança do banco " + CodigoBanco + " " + NomeBanco);
                }
                //Buscar codigo cedente
                ACodigoCedente = Convert.ToInt32(Retorno[NumeroRegistro].Substring(26, 20)).ToString();

                if (Retorno[NumeroRegistro].Substring(94, 6).PadLeft(6, '0') != "000000")
                {
                    ACobranca.DataArquivo = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(98, 2)),
                                                         Convert.ToInt32(Retorno[NumeroRegistro].Substring(96, 2)),
                                                         Convert.ToInt32(Retorno[NumeroRegistro].Substring(94, 2)));
                }
                else
                {
                    ACobranca.DataArquivo = DateTime.Now;
                }

                //{Lê os registros DETALHE}
                //{Processa até o penúltimo registro porque o último contém apenas o TRAILLER}
                for (NumeroRegistro = 1; NumeroRegistro <= (Retorno.Length - 2); NumeroRegistro++)
                {
                    //{Confirmar se o tipo do registro é 1}
                    if (Retorno[NumeroRegistro].Substring(0, 1) != "1")
                    {
                        continue; //{Não processa o registro atual}
                    }
                    //Dados Titulo
                    ATitulo = new blTitulo();
                    ATitulo.Cedente.ContaBancaria.Banco.Codigo = ACodigoBanco;
                    ATitulo.Cedente.CodigoCedente = ACodigoCedente;
                    //Nosso numero
                    ATitulo.Nosso_numero = Retorno[NumeroRegistro].Substring(70, 11);
                    //Ocorrencia
                    ATitulo.Cd_ocorrencia = Retorno[NumeroRegistro].Substring(108, 2);
                    //Descricao ocorrencia
                    ATitulo.Ds_ocorrencia = TratarOcorrencia(ATitulo.Cd_ocorrencia);
                    //Data ocorrencia
                    if (Retorno[NumeroRegistro].Substring(110, 6).PadLeft(6, '0') != "000000")
                    {
                        ATitulo.Dt_ocorrencia = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(114, 2)),
                                                             Convert.ToInt32(Retorno[NumeroRegistro].Substring(112, 2)),
                                                             Convert.ToInt32(Retorno[NumeroRegistro].Substring(110, 2)));
                    }
                    else
                    {
                        ATitulo.Dt_ocorrencia = DateTime.Now;
                    }
                    //Data vencimento
                    if (Retorno[NumeroRegistro].Substring(146, 6).PadLeft(6, '0') != "000000")
                    {
                        ATitulo.Dt_vencimento = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(150, 2)),
                                                             Convert.ToInt32(Retorno[NumeroRegistro].Substring(148, 2)),
                                                             Convert.ToInt32(Retorno[NumeroRegistro].Substring(146, 2)));
                    }
                    else
                    {
                        ATitulo.Dt_vencimento = null;
                    }
                    //Valor titulo
                    if (Retorno[NumeroRegistro].Substring(152, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.Vl_documento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(152, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.Vl_documento = decimal.Zero;
                    }
                    //Valor despesas
                    if (Retorno[NumeroRegistro].Substring(175, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.Vl_despesa_cobranca = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(175, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.Vl_despesa_cobranca = decimal.Zero;
                    }
                    //Abatimento
                    if (Retorno[NumeroRegistro].Substring(227, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.Vl_abatimento = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(227, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.Vl_abatimento = decimal.Zero;
                    }
                    //Desconto
                    if (Retorno[NumeroRegistro].Substring(240, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.Vl_desconto = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(240, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.Vl_desconto = decimal.Zero;
                    }
                    //Juro
                    if (Retorno[NumeroRegistro].Substring(266, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.Vl_morajuros = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(266, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.Vl_morajuros = decimal.Zero;
                    }
                    //Outros creditos
                    if (Retorno[NumeroRegistro].Substring(279, 13).PadLeft(13, '0') != "0000000000000")
                    {
                        ATitulo.vl_outros_creditos = Convert.ToDecimal(Retorno[NumeroRegistro].Substring(279, 13)) / 100;
                    }
                    else
                    {
                        ATitulo.vl_outros_creditos = decimal.Zero;
                    }
                    //Motivo ocorrencia
                    string codigo = Retorno[NumeroRegistro].Substring(318, 10);
                    if (!string.IsNullOrEmpty(codigo))
                    {
                        if (codigo.Substring(0, 2) != "00")
                        {
                            ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(0, 2)) + "|";
                        }
                        if (codigo.Substring(2, 2) != "00")
                        {
                            ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(2, 2)) + "|";
                        }
                        if (codigo.Substring(4, 2) != "00")
                        {
                            ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(4, 2)) + "|";
                        }
                        if (codigo.Substring(6, 2) != "00")
                        {
                            ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(6, 2)) + "|";
                        }
                        if (codigo.Substring(8, 2) != "00")
                        {
                            ATitulo.Ds_motivoocorrencia += TratarMotivo(ATitulo.Cd_ocorrencia, codigo.Substring(8, 2)) + "|";
                        }
                    }
                    if (!string.IsNullOrEmpty(ATitulo.Ds_motivoocorrencia))
                    {
                        if (ATitulo.Ds_motivoocorrencia.Substring(ATitulo.Ds_motivoocorrencia.Trim().Length - 1, 1).Equals("|"))
                        {
                            ATitulo.Ds_motivoocorrencia = ATitulo.Ds_motivoocorrencia.Remove(ATitulo.Ds_motivoocorrencia.Trim().Length - 1, 1);
                        }
                    }
                    //Data credito
                    if (Retorno[NumeroRegistro].Substring(295, 6).Trim().PadLeft(6, '0') != "000000")
                    {
                        ATitulo.Dt_credito = new DateTime(2000 + Convert.ToInt32(Retorno[NumeroRegistro].Substring(299, 2)),
                                                          Convert.ToInt32(Retorno[NumeroRegistro].Substring(297, 2)),
                                                          Convert.ToInt32(Retorno[NumeroRegistro].Substring(295, 2)));
                        ATitulo.Dt_creditotaxa = ATitulo.Dt_credito;
                    }
                    else
                    {
                        ATitulo.Dt_credito     = DateTime.Now;
                        ATitulo.Dt_creditotaxa = ATitulo.Dt_credito;
                    }
                    //Inserir titulo na lista
                    ACobranca.Titulos.Add(ATitulo);
                }
                return(true);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Esempio n. 19
0
        private bool GerarRemessaCNAB240(blCobranca ACobranca, StringBuilder Remessa)
        {
            string ACedenteTipoInscricao;
            string ASacadoTipoInscricao;
            string Registro       = "";
            int    NumeroRegistro = 0;
            int    NumeroLote     = 1;


            /*
             * if (ACobranca.Titulos.Count < 1)
             *  throw new Exception("Não há títulos para gerar remessa");
             *
             * //{ GERAR REGISTRO-HEADER DO ARQUIVO }
             * switch ACobranca.Titulos[NumeroRegistro].
             *
             * case Titulos[NumeroRegistro].Cedente.TipoInscricao of
             * tiPessoaFisica  : ACedenteTipoInscricao := '1';
             * tiPessoaJuridica: ACedenteTipoInscricao := '2';
             * tiOutro         : ACedenteTipoInscricao := '3';
             * end;
             *
             * if Formatar(CodigoBanco,3,false,'0') <> Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') then
             * Raise Exception.CreateFmt('O título (Nosso Número: %s) não pertence ao banco %s (%s)',[Titulos[NumeroRegistro].NossoNumero,CodigoBanco,NomeBanco]);
             *
             * Registro := Formatar(CodigoBanco,3,false,'0'); {1 a 3 - Código do banco}
             * Registro := Registro + '0000'; {4 a 7 - Lote de serviço}
             * Registro := Registro + '0'; {8 - Tipo de registro - Registro header de arquivo}
             * Registro := Registro + Formatar('',9); {9 a 17 - Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + ACedenteTipoInscricao; {18 - Tipo de inscrição do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.NumeroCPFCGC,14,false,'0'); {19 a 32 - Número de inscrição do cedente}
             *
             * {CÓDIGO DO CONVÊNIO = AGÊNCIA + NÚMERO CONVÊNIO + DV}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,4,false,'0'); {33 a 36 - Código da agência}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.CodigoCedente,11,false,'0'); {37 a 47 - Código do convênio no banco}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.DigitoCodigoCedente,1,false,'0'); {48 - Dígito do código do convênio no banco}
             *
             * Registro := Registro + Formatar('',4); {49 a 52 - Uso exclusivo CAIXA}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {53 a 57 - Código da agência do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {58 - Dígito do código da agência do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {59 a 70 - Código da conta corrente vinculada à cobrança / não é o número da conta corrente comum}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {71 - Dígito da conta corrente vinculada à cobrança}
             * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {72 - Dígito verificador da agência / conta do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.Nome,30,true,' '); {73 a 102 - Nome do cedente}
             * Registro := Registro + Formatar('CAIXA ECONOMICA FEDERAL',30,true,' '); {103 a 132 - Nome do banco}
             * Registro := Registro + Formatar('',10); {133 a 142 - Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + '1'; {143 - Código de Remessa (1) / Retorno (2)}
             * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {144 a 151 - Data do de geração do arquivo}
             * Registro := Registro + FormatDateTime('hhmmss',DataArquivo);  {152 a 157 - Hora de geração do arquivo}
             * Registro := Registro + Formatar(IntToStr(NumeroArquivo),6,false,'0'); {158 a 163 Número seqüencial do arquivo}
             * Registro := Registro + '030'; {164 a 166 - Número da versão do layout do arquivo}
             * Registro := Registro + Formatar('',5,false,'0'); {167 a 171 - Densidade de gravação do arquivo (BPI)}
             * Registro := Registro + Formatar('',20); {172 a 191 - Uso reservado do banco}
             * if TipoMovimento = tmRemessaTeste then
             * Registro := Registro + Formatar('REMESSA-TESTE',20) {192 a 211 - Deverá conter a literal REMESSA-TESTE para fase de testes}
             * else
             * Registro := Registro + Formatar('',20); {192 a 211 - Deverá conter a literal REMESSA-TESTE para fase de testes}
             * Registro := Registro + Formatar('',29); {212 a 240 - Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * Registro := '';
             *
             * {GERAR REGISTRO HEADER DO LOTE}
             * Registro := Formatar(CodigoBanco,3,false,'0'); {1a 3 - Código do banco}
             * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {4 a 7 - Número do lote de serviço}
             * Registro := Registro + '1'; {8 - Tipo do registro - Registro header de lote}
             * Registro := Registro + 'R'; {9 - Tipo de operação: R (Remessa) ou T (Retorno)}
             * Registro := Registro + '01'; {10 a 11 - Tipo de serviço: 01 (Cobrança)}
             * Registro := Registro + '00'; {12 a 13 - Forma de lançamento: preencher com ZEROS no caso de cobrança}
             * Registro := Registro + '020'; {14 a 16 - Número da versão do layout do lote}
             * Registro := Registro + ' '; {17 - Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + ACedenteTipoInscricao; {18 - Tipo de inscrição do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.NumeroCPFCGC,15,false,'0'); {19 a 33 - Número de inscrição do cedente}
             *
             * {CÓDIGO DO CONVÊNIO = AGÊNCIA + NÚMERO CONVÊNIO + DV}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,4,false,'0'); {34 a 37 - Código da agência}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.CodigoCedente,11,false,'0'); {38 a 48 - Código do convênio no banco}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.DigitoCodigoCedente,1,false,'0'); {49 - Dígito do código do convênio no banco}
             *
             * Registro := Registro + Formatar('',4); {50 a 53 - Uso exclusivo CAIXA}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {54 a 58 - Código da agência do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {59 - Dígito da agência do cedente}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {60 a 71 - Número da conta vinculada à cobrança / não é o número da conta corrente comum}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {72 - Dígito do código do cedente no banco}
             * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {73 - Dígito verificador da agência / conta}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.Nome,30,true,' '); {74 a 103 - Nome do cedente}
             * Registro := Registro + Formatar('',40); {104 a 143 - Mensagem 1 para todos os boletos do lote}
             * Registro := Registro + Formatar('',40); {144 a 183 - Mensagem 2 para todos os boletos do lote}
             * Registro := Registro + Formatar(IntToStr(NumeroArquivo),8,false,'0'); {184 a 191 - Número do arquivo}
             * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {192 a 199 - Data de geração do arquivo}
             * Registro := Registro + FormatDateTime('ddmmyyyy',DataArquivo); {200 a 207 - Data do crédito - Informar a mesma data da gravação do arquivo}
             * Registro := Registro + Formatar('',33); {208 a 240 - Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * Registro := '';
             *
             * { GERAR TODOS OS REGISTROS DETALHE DA REMESSA }
             * while NumeroRegistro <= (Titulos.Count - 1) do
             * begin
             *
             * if Formatar(CodigoBanco,3,false,'0') <> Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') then
             * Raise Exception.CreateFmt('O título (Nosso Número: %s) não pertence ao banco %s (%s)',[Titulos[NumeroRegistro].NossoNumero,CodigoBanco,NomeBanco]);
             *
             * {SEGMENTO P}
             * if Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.Banco.Codigo,3,false,'0') <> Formatar(CodigoBanco,3,false,'0') then
             * Raise Exception.CreateFmt('Titulo não pertence ao banco %s - %s',[CodigoBanco,NomeBanco]);
             *
             * case Titulos[NumeroRegistro].Cedente.TipoInscricao of
             * tiPessoaFisica  : ACedenteTipoInscricao := '1';
             * tiPessoaJuridica: ACedenteTipoInscricao := '2';
             * tiOutro         : ACedenteTipoInscricao := '9';
             * end;
             *
             * Registro := Formatar(CodigoBanco,3,false,'0'); {1 a 3 - Código do banco}
             * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {4 a 7 - Número do lote}
             * Registro := Registro + '3'; {8 - Tipo do registro: Registro detalhe}
             * Registro := Registro + Formatar(IntToStr(2*NumeroRegistro+1),5,false,'0'); {9 a 13 - Número seqüencial do registro no lote - Cada título tem 2 registros (P e Q)}
             * Registro := Registro + 'P'; {14 - Código do segmento do registro detalhe}
             * Registro := Registro + ' '; {15 - Uso exclusivo FEBRABAN/CNAB: Branco}
             * case Titulos[NumeroRegistro].TipoOcorrencia of {16 a 17 - Código de movimento}
             * toRemessaRegistrar                 : Registro := Registro + '01';
             * toRemessaBaixar                    : Registro := Registro + '02';
             * toRemessaConcederAbatimento        : Registro := Registro + '04';
             * toRemessaCancelarAbatimento        : Registro := Registro + '05';
             * toRemessaConcederDesconto          : Registro := Registro + '07';
             * toRemessaCancelarDesconto          : Registro := Registro + '08';
             * toRemessaAlterarVencimento         : Registro := Registro + '06';
             * toRemessaProtestar                 : Registro := Registro + '09';
             * toRemessaCancelarInstrucaoProtesto : Registro := Registro + '10';
             * toRemessaDispensarJuros            : Registro := Registro + '31';
             * toRemessaAlterarNomeEnderecoSacado : Registro := Registro + '31';
             * else
             * Raise Exception.CreateFmt('Ocorrência inválida em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]);
             * end; {case Titulos[NumeroRegistro].TipoOcorrencia}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0'); {18 a 22 - Agência mantenedora da conta}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoAgencia,1,false,'0'); {23 - Dígito verificador da agência}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0'); {24 a 35 - Número da conta vinculada à cobrança / não é o número da conta corrente comum}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.DigitoConta,1,false,'0'); {36 - Dígito da conta vinculada à cobrança}
             * Registro := Registro + Modulo11(Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.CodigoAgencia,5,false,'0')+Formatar(Titulos[NumeroRegistro].Cedente.ContaBancaria.NumeroConta,12,false,'0')); {37 - Dígito verificador da agência / conta}
             * Registro := Registro + Formatar('',9); {38 a 46 - Uso exclusivo CAIXA: Brancos}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].NossoNumero,11,false,'0'); {47 a 57 - Nosso número - identificação do título no banco}
             * Registro := Registro + '1'; {58 - Cobrança Simples}
             * Registro := Registro + '1'; {59 - Forma de cadastramento do título no banco: com cadastramento}
             * Registro := Registro + '2'; {60 - Tipo de documento: Escritural}
             * case Titulos[NumeroRegistro].EmissaoBoleto of {61 a 62 - Quem emite e quem distribui o boleto?}
             * ebBancoEmite      : Registro := Registro + '1' + '1';
             * ebClienteEmite    : Registro := Registro + '2' + '2';
             * ebBancoReemite    : Registro := Registro + '4' + '1';
             * ebBancoNaoReemite : Registro := Registro + '5' + '2';
             * else
             * Raise Exception.CreateFmt('Identificação inválida de emissão de boleto em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]);
             * end; {case Titulos[NumeroRegistro].EmissaoBoleto}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].SeuNumero,11,false,'0'); {63 a 73 - Número que identifica o título na empresa}
             * Registro := Registro + Formatar('',4); {74 a 77 - Uso exclusivo CAIXA: Brancos}
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {78 a 85 - Data de vencimento do título}
             * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorDocumento * 100); {86 a 100 - Valor nominal do título}
             * Registro := Registro + '00000'; {101 a 105 - Agência cobradora. Deixar zerado. A Caixa determinará automaticamente pelo CEP do sacado}
             * Registro := Registro + '0'; {106 - Dígito da agência cobradora}
             * case Titulos[NumeroRegistro].EspecieDocumento of {107 a 108 - Espécie do documento}
             * edApoliceSeguro                : Registro := Registro + '20'; {AP  APÓLICE DE SEGURO}
             * edCheque                       : Registro := Registro + '01'; {CH  CHEQUE}
             * edDuplicataMercantil           : Registro := Registro + '02'; {DM  DUPLICATA MERCANTIL}
             * edDuplicataMercantialIndicacao : Registro := Registro + '03'; {DMI DUPLICATA MERCANTIL P/ INDICAÇÃO}
             * edDuplicataRural               : Registro := Registro + '06'; {DR  DUPLICATA RURAL}
             * edDuplicataServico             : Registro := Registro + '04'; {DS  DUPLICATA DE SERVIÇO}
             * edDuplicataServicoIndicacao    : Registro := Registro + '05'; {DSI DUPLICATA DE SERVIÇO P/ INDICAÇÃO}
             * edFatura                       : Registro := Registro + '18'; {FAT FATURA}
             * edLetraCambio                  : Registro := Registro + '07'; {LC  LETRA DE CÂMBIO}
             * edMensalidadeEscolar           : Registro := Registro + '21'; {ME  MENSALIDADE ESCOLAR}
             * edNotaCreditoComercial         : Registro := Registro + '08'; {NCC NOTA DE CRÉDITO COMERCIAL}
             * edNotaCreditoExportacao        : Registro := Registro + '09'; {NCE NOTA DE CRÉDITO A EXPORTAÇÃO}
             * edNotaCreditoIndustrial        : Registro := Registro + '10'; {NCI NOTA DE CRÉDITO INDUSTRIAL}
             * edNotaCreditoRural             : Registro := Registro + '11'; {NCR NOTA DE CRÉDITO RURAL}
             * edNotaDebito                   : Registro := Registro + '19'; {ND  NOTA DE DÉBITO}
             * edNotaPromissoria              : Registro := Registro + '12'; {NP  NOTA PROMISSÓRIA}
             * edNotaPromissoriaRural         : Registro := Registro + '13'; {NPR NOTA PROMISSÓRIA RURAL}
             * edNotaSeguro                   : Registro := Registro + '16'; {NS  NOTA DE SEGURO}
             * edParcelaConsorcio             : Registro := Registro + '22'; {PC  PARCELA DE CONSORCIO}
             * edRecibo                       : Registro := Registro + '17'; {RC  RECIBO}
             * edTriplicataMercantil          : Registro := Registro + '14'; {TM  TRIPLICATA MERCANTIL}
             * edTriplicataServico            : Registro := Registro + '15' {TS  TRIPLICATA DE SERVIÇO}
             * else
             * Registro := Registro + '99'; {OUTROS}
             * end; {case Titulos[NumeroRegistro].EspecieDocumento}
             * case Titulos[NumeroRegistro].AceiteDocumento of {109 - Identificação de título Aceito / Não aceito}
             * adSim : Registro := Registro + 'A';
             * adNao : Registro := Registro + 'N';
             * end; {case Titulos[NumeroRegistro].AceiteDocumento}
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataDocumento); {110 a 117 - Data da emissão do documento}
             * if Titulos[NumeroRegistro].ValorMoraJuros > 0 then
             * begin
             * Registro := Registro + '1'; {118 - Código de juros de mora: Valor por dia}
             * if Titulos[NumeroRegistro].DataMoraJuros <> null then
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataMoraJuros) {119 a 126 - Data a partir da qual serão cobrados juros}
             * else
             * Registro := Registro + Formatar('',8,false,'0'); {119 a 126 - Data a partir da qual serão cobrados juros}
             * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorMoraJuros * 100); {127 a 141 - Valor de juros de mora por dia}
             * end
             * else
             * begin
             * Registro := Registro + '4'; {118 - Código de juros de mora: Acata cadastramento na CAIXA}
             * Registro := Registro + Formatar('',8,false,'0'); {119 a 126 - Data a partir da qual serão cobrados juros}
             * Registro := Registro + Formatar('',15,false,'0'); {127 a 141 - Valor de juros de mora por dia}
             * end;
             * if Titulos[NumeroRegistro].ValorDesconto > 0 then
             * begin
             * Registro := Registro + '1'; {142 - Código de desconto: Valor fixo até a data informada}
             * if Titulos[NumeroRegistro].DataDesconto <> null then
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataDesconto) {143 a 150 - Data do desconto}
             * else
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {143 a 150 - se não houver desconto, deve ser informada a mesma data do vencimento}
             * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorDesconto * 100); {151 a 165 - Valor do desconto por dia}
             * end
             * else
             * begin
             * Registro := Registro + '0'; {142 - Código de desconto: Sem desconto}
             * Registro := Registro + FormatDateTime('ddmmyyyy',Titulos[NumeroRegistro].DataVencimento); {143 a 150 - se não houver desconto, deve ser informada a mesma data do vencimento}
             * Registro := Registro + Formatar('',15,false,'0'); {151 a 165 - Valor do desconto por dia}
             * end;
             * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorIOF * 100); {166 a 180 - Valor do IOF a ser recolhido}
             * Registro := Registro + FormatCurr('000000000000000',Titulos[NumeroRegistro].ValorAbatimento * 100); {181 a 195 - Valor do abatimento}
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].SeuNumero,25); {196 a 220 - Identificação do título na empresa}
             * if (Titulos[NumeroRegistro].DataProtesto <> null) and (Titulos[NumeroRegistro].DataProtesto > Titulos[NumeroRegistro].DataVencimento) then
             * begin
             * Registro := Registro + '1'; {221 - Código de protesto: Protestar em XX dias corridos}
             * Registro := Registro + Formatar(IntToStr(DaysBetween(Titulos[NumeroRegistro].DataProtesto, Titulos[NumeroRegistro].DataVencimento)),2,false,'0'); {222 a 223 - Prazo para protesto (em dias corridos)}
             * end
             * else
             * begin
             * Registro := Registro + '3'; {221 - Código de protesto: Não protestar}
             * Registro := Registro + Formatar('',2,false,'0'); {222 a 223 - Prazo para protesto (em dias corridos)}
             * end;
             * if (Titulos[NumeroRegistro].DataBaixa <> null) and (Titulos[NumeroRegistro].DataBaixa > Titulos[NumeroRegistro].DataVencimento) then
             * begin
             * Registro := Registro + '1'; {224 - Código para baixa/devolução: Baixar/devolver}
             * Registro := Registro + Formatar(IntToStr(DaysBetween(Titulos[NumeroRegistro].DataBaixa,Titulos[NumeroRegistro].DataVencimento)),3,false,'0'); {225 a 227 - Prazo para baixa/devolução (em dias corridos)}
             * end
             * else
             * begin
             * Registro := Registro + '2'; {224 - Código para baixa/devolução: Não baixar/não devolver}
             * Registro := Registro + Formatar('',3,false,'0'); {Prazo para baixa/devolução (225 a 227 - em dias corridos)}
             * end;
             * Registro := Registro + '09'; {228 a 229 - Código da moeda: Real}
             * Registro := Registro + Formatar('',10); {230 a 239 - Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',1); {240 - Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * Registro := '';
             *
             * {SEGMENTO Q}
             * case Titulos[NumeroRegistro].Sacado.TipoInscricao of
             * tiPessoaFisica  : ASacadoTipoInscricao := '1';
             * tiPessoaJuridica: ASacadoTipoInscricao := '2';
             * tiOutro         : ASacadoTipoInscricao := '9';
             * end;
             *
             * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco}
             * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {Número do lote}
             * Registro := Registro + '3'; {Tipo do registro: Registro detalhe}
             * Registro := Registro + Formatar(IntToStr(2*NumeroRegistro+2),5,false,'0'); {Número seqüencial do registro no lote - Cada título tem 2 registros (P e Q)}
             * Registro := Registro + 'Q'; {Código do segmento do registro detalhe}
             * Registro := Registro + ' '; {Uso exclusivo FEBRABAN/CNAB: Branco}
             * case Titulos[NumeroRegistro].TipoOcorrencia of {Código de movimento}
             * toRemessaRegistrar                 : Registro := Registro + '01';
             * toRemessaBaixar                    : Registro := Registro + '02';
             * toRemessaConcederAbatimento        : Registro := Registro + '04';
             * toRemessaCancelarAbatimento        : Registro := Registro + '05';
             * toRemessaConcederDesconto          : Registro := Registro + '07';
             * toRemessaCancelarDesconto          : Registro := Registro + '08';
             * toRemessaAlterarVencimento         : Registro := Registro + '06';
             * toRemessaProtestar                 : Registro := Registro + '09';
             * toRemessaCancelarInstrucaoProtesto : Registro := Registro + '10';
             * toRemessaDispensarJuros            : Registro := Registro + '31';
             * toRemessaAlterarNomeEnderecoSacado : Registro := Registro + '31';
             * else
             * Raise Exception.CreateFmt('Ocorrência inválida em remessa - Nosso número: %s / Seu número: %s',[Titulos[NumeroRegistro].NossoNumero,Titulos[NumeroRegistro].SeuNumero]);
             * end; {case Titulos[NumeroRegistro].TipoOcorrencia}
             * {Dados do sacado}
             * Registro := Registro + Formatar(ASacadoTipoInscricao,1,false,'0');
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.NumeroCPFCGC,15,false,'0');
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Nome,40);
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Rua+' '+Titulos[NumeroRegistro].Sacado.Endereco.Numero+' '+Titulos[NumeroRegistro].Sacado.Endereco.Complemento,40);
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Bairro,15);
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.CEP,8,true,'0');
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Cidade,15,true);
             * Registro := Registro + Formatar(Titulos[NumeroRegistro].Sacado.Endereco.Estado,2,false);
             * {Dados do sacador/avalista}
             * Registro := Registro + '0'; {Tipo de inscrição: Não informado}
             * Registro := Registro + Formatar('',15,false,'0'); {Número de inscrição}
             * Registro := Registro + Formatar('',40); {Nome do sacador/avalista}
             *
             * Registro := Registro + Formatar('',3); {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',20); {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',8); {Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * NumeroRegistro := NumeroRegistro + 1;
             * end; {GERAR TODOS OS REGISTROS DETALHE DA REMESSA}
             *
             * {REGISTRO TRAILER DO LOTE}
             * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco}
             * Registro := Registro + Formatar(IntToStr(NumeroLote),4,false,'0'); {Número do lote}
             * Registro := Registro + '5'; {Tipo do registro: Registro trailer do lote}
             * Registro := Registro + Formatar('',9); {Uso exclusivo FEBRABAN/CNAB}
             * {Quantidade de registros do lote, incluindo header e trailer do lote.
             * Até este momento Remessa contém:
             * 1 registro header de arquivo - É preciso excluí-lo desta contagem
             * 1 registro header de lote
             * Diversos registros detalhe
             * Falta incluir 1 registro trailer de lote
             * Ou seja Quantidade = Remessa.Count - 1 header de arquivo + 1 trailer de lote = Remessa.Count}
             * Registro := Registro + Formatar(IntToStr(Remessa.Count),6,false,'0');
             * {Totalização da cobrança simples - Só é usado no arquivo retorno}
             * Registro := Registro + Formatar('',6,false,'0'); {Quantidade títulos em cobrança}
             * Registro := Registro + Formatar('',17,false,'0'); {Valor dos títulos em carteiras}
             * {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',23); {Uso exclusivo FEBRABAN/CNAB}
             * {Totalização da cobrança caucionada - Só é usado no arquivo retorno}
             * Registro := Registro + Formatar('',6,false,'0'); {Quantidade títulos em cobrança}
             * Registro := Registro + Formatar('',17,false,'0'); {Valor dos títulos em carteiras}
             * {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',31); {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',117); {Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * Registro := '';
             *
             * {GERAR REGISTRO TRAILER DO ARQUIVO}
             * Registro := Formatar(CodigoBanco,3,false,'0'); {Código do banco}
             * Registro := Registro + '9999'; {Lote de serviço}
             * Registro := Registro + '9'; {Tipo do registro: Registro trailer do arquivo}
             * Registro := Registro + Formatar('',9); {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar(IntToStr(NumeroLote),6,false,'0'); {Quantidade de lotes do arquivo}
             * Registro := Registro + Formatar(IntToStr(Remessa.Count + 1),6,false,'0'); {Quantidade de registros do arquivo, inclusive este registro que está sendo criado agora}
             * Registro := Registro + Formatar('',6); {Uso exclusivo FEBRABAN/CNAB}
             * Registro := Registro + Formatar('',205); {Uso exclusivo FEBRABAN/CNAB}
             *
             * Remessa.Add(Registro);
             * end;
             *
             * Result := TRUE;
             */
            return(false);
        }
Esempio n. 20
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Identificacao do Header 001-001
            registros.Append("0");
            //Identificacao do arquivo remessa 002-002
            registros.Append("1");
            //Literal REMESSA 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Codigo servico cobranca 010-011
            registros.Append("01");
            //Literal COBRANCA 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Codigo cedente 027-031
            registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0'));
            //CNPJ cedente 032-045
            registros.Append(aCobranca.Titulos[0].Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
            //Filler 046-076
            registros.Append(string.Empty.FormatStringDireita(31, ' '));
            //Numero Sicredi 077-079
            registros.Append("748");
            //Literal SICREDI 080-094
            registros.Append("SICREDI".FormatStringDireita(15, ' '));
            //Data arquivo 095-102
            registros.Append(aCobranca.DataArquivo.ToString("yyyyMMdd"));
            //Filler 103-110
            registros.Append(string.Empty.FormatStringDireita(8, ' '));
            //Numero remessa 111-117
            registros.Append(aCobranca.SequencialArq.ToString().FormatStringEsquerda(7, '0'));
            //Filler 118-390
            registros.Append(string.Empty.FormatStringDireita(273, ' '));
            //Versao Sistema 391-394
            registros.Append("2.00");
            //Numero sequencia registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            #region Registro Detalhe
            aCobranca.Titulos.ForEach(p =>
            {
                #region Detalhe do titulo
                registros = new StringBuilder();
                //Identificao titulo 001-001
                registros.Append("1");
                //Tipo cobranca 002-002
                registros.Append("A");    //Com Registro
                //Tipo carteira 003-003
                registros.Append("A");    //Simples
                //Tipo impressao 004-004
                registros.Append("A");    //Normal
                //Filler 005-016
                registros.Append(string.Empty.FormatStringDireita(12, ' '));
                //Tipo moeda 017-017
                registros.Append("A");    //Real
                //Tipo desconto 018-018
                registros.Append(p.Tp_desconto.Trim().Equals("P") ? "B" : "A");
                //Tipo juro 019-019
                registros.Append(p.Tp_jurodia.Trim().Equals("P") ? "B" : "A");
                //Filler 020-047
                registros.Append(string.Empty.FormatStringDireita(28, ' '));
                //Nosso numero 048-056
                registros.Append(p.Nosso_numero.SoNumero().FormatStringEsquerda(8, '0') +
                                 p.Digito_nossonumero.Trim());
                //Filler 057-062
                registros.Append(string.Empty.FormatStringDireita(6, ' '));
                //Data instrucao 063-070
                registros.Append(aCobranca.DataArquivo.ToString("yyyyMMdd"));
                //Campo alterado, quando instrucao 31 071-071
                registros.Append(string.Empty.FormatStringDireita(1, ' '));
                //Postagem titulo 072-072
                registros.Append("N");    //Nao Postar
                //Filler 073-073
                registros.Append(string.Empty.FormatStringDireita(1, ' '));
                //Emissao boleto 074-074
                registros.Append("B");    //Impressao Cedente
                //Numero parcela carne 075-076
                registros.Append("00");
                //Numero total parcelas carne 077-078
                registros.Append("00");
                //Filler 079-082
                registros.Append(string.Empty.FormatStringDireita(4, ' '));
                //valor desconto por dia de antecipacao 083-092
                registros.Append((p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(10, '0'));
                //% multa por atrazo 093-096
                if (p.Tp_multa.Trim().Equals("V"))
                {
                    throw new Exception("Banco não permite multa em PERCENTUAL.");
                }
                registros.Append(p.Pc_multa.ToString().SoNumero().FormatStringEsquerda(4, '0'));
                //Filler 097-108
                registros.Append(string.Empty.FormatStringDireita(12, ' '));
                //Instrucao 109-110
                registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                //Seu numero 111-120
                registros.Append((p.Nr_lancto.ToString() + p.Cd_parcela.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0'));
                //Data vencimento 121-126
                registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                //valor titulo 127-139
                registros.Append(p.Vl_documento.ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Filler 140-148
                registros.Append(string.Empty.FormatStringDireita(9, ' '));
                //Especie documento 149-149
                registros.Append(this.ConverterEspecieDoc(p.Especie_documento));
                //Aceite titulo 150-150
                registros.Append(p.Aceite_SN.Trim());
                //Data emissao 151-156
                registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                //Instrucao Protesto 157-158
                registros.Append(p.St_protestarauto ? "06" : "00");
                //Numero dias protesto 159-160
                registros.Append(p.St_protestarauto ? p.Nr_diasprotestar < 3 ? "03" : p.Nr_diasprotestar > 99 ? "99" : p.Nr_diasprotestar.ToString().FormatStringEsquerda(2, '0') : "00");
                //Valor/% juro dia atrazo 161-173
                registros.Append(p.Pc_jurodia.ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Data limite desconto 174-179
                registros.Append(p.Pc_desconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                //Valor/% Desconto 180-192
                registros.Append((p.Pc_desconto > decimal.Zero ? p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto : decimal.Zero).ToString().SoNumero().FormatStringEsquerda(13, '0'));
                //Filler 193-205
                registros.Append(string.Empty.FormatStringDireita(13, '0'));
                //Valor abatimento 206-218
                registros.Append(string.Empty.FormatStringEsquerda(13, '0'));
                //Tipo pessoa sacado 219-219
                registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaFisica) ? "1" : "2");
                //Filler 220-220
                registros.Append(string.Empty.FormatStringDireita(1, '0'));
                //CPF/CNPJ Sacado 221-234
                registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                //Nome sacado 235-274
                registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(40, ' '));
                //endereco sacado 275-314
                registros.Append(p.Sacado.Endereco.Rua.Trim().RemoverCaracteres().FormatStringDireita(40, ' '));
                //Codigo sacado na cooperativa cedente 315-319
                registros.Append(string.Empty.FormatStringEsquerda(5, '0'));
                //Filler 320-325
                registros.Append(string.Empty.FormatStringEsquerda(6, '0'));
                //Filler 326-326
                registros.Append(string.Empty.FormatStringDireita(1, ' '));
                //CEP sacado 327-334
                registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                //Codigo sacado junto ao cliente 335-339
                registros.Append(string.Empty.FormatStringEsquerda(5, '0'));
                //CPF/CNPJ avalista 340-353
                registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, ' '));
                //Nome avalista 354-394
                registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringEsquerda(41, ' '));
                //sequencial do registro 395-400
                registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                Remessa.AppendLine(registros.ToString());
                #endregion

                #region Avalista
                if (!string.IsNullOrEmpty(p.Avalista.Nome))
                {
                    registros = new StringBuilder();
                    //Identificacao registro 001-001
                    registros.Append("6");
                    //Nosso numero 002-016
                    registros.Append((p.Nosso_numero.SoNumero().FormatStringEsquerda(8, '0') +
                                      p.Digito_nossonumero.Trim()).FormatStringDireita(15, ' '));
                    //Seu numero 017-026
                    registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringEsquerda(10, '0'));
                    //Codigo sacado 027-031
                    registros.Append(string.Empty.FormatStringEsquerda(5, '0'));
                    //CPF/CNPJ Avalista 032-045
                    registros.Append(p.Avalista.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    //Nome avalista 046-086
                    registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringDireita(41, ' '));
                    //Endereco avalista 087-131
                    registros.Append((p.Avalista.Endereco.Rua.Trim() + "," + p.Avalista.Endereco.Numero.Trim()).RemoverCaracteres().FormatStringDireita(45, ' '));
                    //Cidade 132-151
                    registros.Append(p.Avalista.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(20, ' '));
                    //CEP 152-159
                    registros.Append(p.Avalista.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                    //Estado 160-161
                    registros.Append(p.Avalista.Endereco.Estado.Trim().FormatStringDireita(2, ' '));
                    //Filler 162-394
                    registros.Append(string.Empty.FormatStringDireita(233, ' '));
                    //Sequencial registro 395-400
                    registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

                    Remessa.AppendLine(registros.ToString());
                }
                #endregion
            });
            #endregion

            #region Trailer
            registros = new StringBuilder();
            //Identificacao registro 001-001
            registros.Append("9");
            //Identificacao remessa 002-002
            registros.Append("1");
            //Numero sicredi 003-005
            registros.Append("748");
            //Codigo cedente 006-010
            registros.Append(aCobranca.Titulos[0].Cedente.CodigoCedente.FormatStringEsquerda(5, '0'));
            //Filler 011-394
            registros.Append(string.Empty.FormatStringDireita(384, ' '));
            //Sequencial registro
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }
Esempio n. 21
0
        private void GerarRemessaCNAB400(blCobranca aCobranca, StringBuilder Remessa)
        {
            if (aCobranca.Titulos.Count.Equals(0))
            {
                throw new Exception("Não há titulos para gerar remessa.");
            }
            StringBuilder registros     = new StringBuilder();
            int           tot_registros = 0;

            #region Registro Header
            //Tipo registro 001-001
            registros.Append("0");
            //Tipo operacao 002-002
            registros.Append("1");//Remessa
            //Literal remessa 003-009
            registros.Append("REMESSA".FormatStringDireita(7, ' '));
            //Codigo servico 010-011
            registros.Append("01");
            //Literal servico 012-026
            registros.Append("COBRANCA".FormatStringDireita(15, ' '));
            //Agencia 027-031
            registros.Append(aCobranca.Titulos[tot_registros].Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0'));
            //Conta 032-040
            registros.Append(aCobranca.Titulos[tot_registros].Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(9, '0'));
            //Brancos 041-046
            registros.Append(string.Empty.FormatStringDireita(6, ' '));
            //Nome empresa 047-076
            registros.Append(aCobranca.Titulos[tot_registros].Nm_cedente.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
            //Codigo banco 077-079
            registros.Append(CodigoBanco);
            //Nome banco 080-094
            registros.Append(NomeBanco.Trim().FormatStringDireita(15, ' '));
            //Data arquivo 095-100
            registros.Append(aCobranca.DataArquivo.ToString("ddMMyy"));
            //Brancos 101-391
            registros.Append("".FormatStringDireita(291, ' '));
            //Numero do arquivo 392-394
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
            //Numero registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion

            aCobranca.Titulos.ForEach(p =>
            {
                #region Registro Detalhe
                registros = new StringBuilder();
                if (aCobranca.Cd_instrucao.Equals(2) ||
                    aCobranca.Cd_instrucao.Equals(6))//Pedido de baixa ou alterar vencimento
                {
                    //Tipo registro 001-001
                    registros.Append("1");
                    //Tipo inscricao 002-003
                    registros.Append("".FormatStringDireita(2, '0'));
                    //Numero inscricao 004-017
                    registros.Append("".FormatStringEsquerda(14, '0'));
                    //Agencia conta 018-021
                    registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.Trim());
                    //Zeros 022-023
                    registros.Append("00");
                    //Conta 024-028
                    registros.Append(p.Cedente.ContaBancaria.NumeroConta.Trim());
                    //DAC Agencia/Conta 029-029
                    registros.Append(Estruturas.Mod10(p.Cedente.ContaBancaria.CodigoAgencia.Trim() + p.Cedente.ContaBancaria.NumeroConta.Trim()));
                    //Brancos 030-033
                    registros.Append("".FormatStringDireita(4, ' '));
                    //Codigo Instrucao/Alegacao 034-037
                    registros.Append("0000");
                    //Identificao titulo empresa 038-062
                    registros.Append("".FormatStringDireita(25, ' '));
                    //Nosso numero 063-070
                    registros.Append(p.Nosso_numero.FormatStringEsquerda(8, '0'));
                    //Qtde moeda 071-083
                    registros.Append("".FormatStringDireita(13, '0'));
                    //Carteira 084-086
                    registros.Append(p.Carteira.Trim());
                    //Brancos 087-107
                    registros.Append("".FormatStringDireita(21, ' '));
                    //Codigo carteira 108-108
                    registros.Append("I");
                    //Codigo instrucao 109-110
                    registros.Append(aCobranca.Cd_instrucao.FormatStringEsquerda(2, '0'));
                    //Nº documento cobranca 111-120
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Vencimento 121-126
                    registros.Append(aCobranca.Cd_instrucao.Equals(6) ? p.Dt_vencimento.Value.ToString("ddMMyy") : "".FormatStringEsquerda(6, '0'));
                    //Valor documento 127-139
                    registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Codigo banco 140-142
                    registros.Append("000");
                    //Agencia cobradora 143-147
                    registros.Append("00000");
                    //Especie titulo 148-149
                    registros.Append("  ");
                    //Aceite 150-150
                    registros.Append(" ");
                    //Data emissao 151-156
                    registros.Append("".FormatStringEsquerda(6, '0'));
                    //Instrucao cobranca 1 157-158
                    registros.Append("00");
                    //Instrucao cobranca 2 159-160
                    registros.Append("00");
                    //Juro 161-173
                    registros.Append((p.Tp_jurodia.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_jurodia), 100) : p.Pc_jurodia).FormatStringEsquerda(13, '0'));
                    //Data Limite concessao desconto 174-179
                    registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : p.Dt_vencimento.Value.ToString("ddMMyy"));
                    //Valor desconto 180-192
                    registros.Append((p.Tp_desconto.Trim().Equals("P") ? decimal.Divide(decimal.Multiply(p.Vl_documento, p.Pc_desconto), 100) : p.Pc_desconto).ToString().SoNumero().FormatStringEsquerda(13, '0'));
                    //Valor IOF 193-205
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Valor abatimento 206-218
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Tipo inscricao sacado 219-220
                    registros.Append("00");
                    //Inscricao sacado 221-234
                    registros.Append("".FormatStringEsquerda(14, '0'));
                    //Nome sacado 235-264
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Brancos 265-274
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Endereco 275-314
                    registros.Append("".FormatStringDireita(40, ' '));
                    //Bairro 315-326
                    registros.Append("".FormatStringDireita(12, ' '));
                    //CEP 327-334
                    registros.Append("".FormatStringEsquerda(8, '0'));
                    //Cidade 335-349
                    registros.Append("".FormatStringDireita(15, ' '));
                    //Estado 350-351
                    registros.Append("  ");
                    //Sacador avalista 352-381
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Brancos 382-385
                    registros.Append("".FormatStringDireita(4, ' '));
                    //Data mora 386-391
                    registros.Append("000000");
                    //Prazo dias 392-393
                    registros.Append("00");
                    //Brancos 394-394
                    registros.Append(" ");
                    //Numero registro 395-400
                    registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));
                }
                else
                {
                    //Tipo registro 001-001
                    registros.Append("1");
                    //Tipo inscricao 002-003
                    registros.Append(p.Cedente.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "02" : "01");
                    //Numero inscricao 004-017
                    registros.Append(p.Cedente.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    //Agencia/conta 018-031
                    registros.Append(p.Cedente.ContaBancaria.CodigoAgencia.FormatStringEsquerda(5, '0') +
                                     p.Cedente.ContaBancaria.NumeroConta.FormatStringEsquerda(9, '0'));

                    //Brancos 032-062
                    registros.Append("".FormatStringDireita(31, ' '));
                    //Nosso numero 063-071
                    registros.Append(p.Nosso_numero.FormatStringEsquerda(8, '0') + p.Digito_nossonumero);
                    //Brancos 072-101
                    registros.Append("".FormatStringDireita(30, ' '));
                    //Codigo IOF 102-102
                    registros.Append("0");  //Isento
                    //Identificação Moeda 103-104
                    registros.Append("00"); //Real
                    //Branco 105-105
                    registros.Append(" ");
                    //Zeros 106-107
                    registros.Append("00");
                    //Tipo cobrança 108-108
                    registros.Append(p.Carteira); //1-Cobrança Simples 2-Cobrança Vinculada
                    //Identificação Ocorrencia 109-110
                    registros.Append("01");       //Remessa Titulo
                    //Identificação Titulo Empresa 111-120
                    registros.Append((p.Nr_lancto.ToString() + p.Id_cobranca.ToString()).FormatStringDireita(10, ' '));
                    //Vencimento 121-126
                    registros.Append(p.Dt_vencimento.Value.ToString("ddMMyy"));
                    //Valor documento 127-139
                    registros.Append(p.Vl_documento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Codigo banco 140-142
                    registros.Append(CodigoBanco);
                    //Agencia cobradora 143-147
                    registros.Append("00000");
                    //Especie titulo 148-149
                    registros.Append(ConverterEspecieDoc(p.Especie_documento));
                    //Aceite 150-150
                    registros.Append(p.Aceite_SN.Trim().ToUpper().Equals("S") ? "A" : "N");
                    //Data emissao 151-156
                    registros.Append(p.Dt_emissaobloqueto.Value.ToString("ddMMyy"));
                    //Instrucao cobranca 1 157-158
                    registros.Append("00");
                    //Instrucao cobranca 2 159-160
                    registros.Append("00");
                    //Juro 161-173
                    registros.Append(p.Vl_morajuros.SoNumero().FormatStringEsquerda(13, '0'));
                    //Data desconto 174-179
                    registros.Append(p.Nr_diasdesconto > decimal.Zero ? p.Dt_vencimento.Value.AddDays(Convert.ToDouble(p.Nr_diasdesconto) * -1).ToString("ddMMyy") : "000000");
                    //Valor desconto 180-192
                    registros.Append(p.Vl_desconto.SoNumero().FormatStringEsquerda(13, '0'));
                    //Valor IOF 193-205
                    registros.Append("".FormatStringEsquerda(13, '0'));
                    //Valor abatimento 206-218
                    registros.Append(p.Vl_abatimento.SoNumero().FormatStringEsquerda(13, '0'));
                    //Tipo inscricao sacado 219-220
                    registros.Append(p.Sacado.TipoInscricao.Equals(TTipoInscricao.tiPessoaJuridica) ? "02" : "01");
                    //Inscricao sacado 221-234
                    registros.Append(p.Sacado.NumeroCPFCNPJ.SoNumero().FormatStringEsquerda(14, '0'));
                    //Nome sacado 235-264
                    registros.Append(p.Sacado.Nome.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
                    //Brancos 265-274
                    registros.Append("".FormatStringDireita(10, ' '));
                    //Endereco 275-314
                    registros.Append((p.Sacado.Endereco.Rua.Trim() + "," + p.Sacado.Endereco.Numero.Trim()).RemoverCaracteres().FormatStringDireita(40, ' '));
                    //Bairro 315-324
                    registros.Append(p.Sacado.Endereco.Bairro.Trim().RemoverCaracteres().FormatStringDireita(10, ' '));
                    //Brancos 325-326
                    registros.Append("  ");
                    //CEP 327-334
                    registros.Append(p.Sacado.Endereco.CEP.SoNumero().FormatStringEsquerda(8, '0'));
                    //Cidade 335-349
                    registros.Append(p.Sacado.Endereco.Cidade.Trim().RemoverCaracteres().FormatStringDireita(15, ' '));
                    //Estado 350-351
                    registros.Append(p.Sacado.Endereco.Estado.Trim());
                    //Sacador avalista 352-381
                    registros.Append(p.Avalista.Nome.Trim().RemoverCaracteres().FormatStringDireita(30, ' '));
                    //Brancos 382-388
                    registros.Append("".FormatStringDireita(7, ' '));
                    //Banco 389-391
                    registros.Append(CodigoBanco);
                    //Sequencial do arquivo 392-394
                    registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
                    //Numero registro 395-400
                    registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));
                }

                Remessa.AppendLine(registros.ToString());

                #endregion
            });

            #region Trailer
            registros = new StringBuilder();
            //Tipo registro 001-001
            registros.Append("9");
            //Brancos 002-368
            registros.Append("".FormatStringDireita(367, ' '));
            //Quantidade Boletos 369-376
            registros.Append(aCobranca.Titulos.Count().FormatStringEsquerda(8, '0'));
            //Valor Boletos 377-391
            registros.Append(aCobranca.Titulos.Sum(x => x.Vl_documento).SoNumero().FormatStringEsquerda(15, '0'));
            //Sequencial do arquivo 392-394
            registros.Append(aCobranca.SequencialArq.FormatStringEsquerda(3, '0'));
            //Numero registro 395-400
            registros.Append((++tot_registros).ToString().FormatStringEsquerda(6, '0'));

            Remessa.AppendLine(registros.ToString());
            #endregion
        }