Ejemplo n.º 1
0
        private void CalcCodBar()
        {
            #region "Área comum a todos os bancos"

            string cCodePadrao, cDV, cLivre = "";
            string cBanco         = this.Banco.Split('-')[0];
            string cCalcFat       = CobUtil.CalcFatVenc(this.DataVencimento).ToString();
            string cNossoNumero   = this.NossoNumero.Split('-', '/')[0];
            string cAgenciaNumero = this.Agencia.Split('-', '/')[0];
            string cContaNumero   = this.Conta.Split('-', '/')[0];
            string cCarteira      = this.Carteira;
            string cModalidade    = this.Modalidade;
            string cCodCedente    = this.CodCedente.Split('-', '/')[0];
            string cCedente       = this.Cedente;
            string cConvenio      = this.Convenio.Split('-', '/')[0];
            string cValor         = this.ValorCobrado > 0 ? this.ValorCobrado.ToString() : this.ValorDocumento.ToString();

            cValor = cValor.Replace(".", ",");
            if (cValor.IndexOf(",") != -1)
            {
                cValor += "00";
                int n = cValor.IndexOf(",");
                cValor = cValor.Substring(0, n) + cValor.Substring(n + 1, 2);
            }
            else
            {
                cValor = cValor + "00";
            }

            cCodePadrao = CobUtil.Right(cBanco, 3) +
                          this.Moeda +
                          CobUtil.Right(cCalcFat, 4) +
                          CobUtil.Right(cValor, 10);

            #endregion

            if (onMontaCampoLivre != null)
            {
                #region "Banco/Carteira personalizada - definida pelo usuário"
                string[] cDIG = this.Banco.Split('-');

                if (cDIG.Length > 1)
                {
                    BancoDigito = cDIG[1];
                }

                cLivre = onMontaCampoLivre(this);
                if (cLivre == null ||
                    cLivre.Length != 25)
                {
                    throw new Exception("onMontaCampoLivre é nulo ou não retorna 25 posições");
                }
                else
                {
                    int    n;
                    string cValidChars = "0123456789";
                    for (n = 0; n < 25; n++)
                    {
                        if (cValidChars.IndexOf(cLivre.Substring(n, 1)) == -1)
                        {
                            throw new Exception("Caracter inválido na " + n.ToString() + "º posição da string '" + cLivre + "'");
                        }
                    }
                }
                #endregion
            }
            else
            {
                // Verifica se o banco não foi especificado
                if (cBanco == "")
                {
                    CodBarras = new String('0', 44);
                    return;
                }

                #region Bancos
                //Montegem do campo livre
                switch (Int32.Parse(cBanco))
                {
                case 1:         // BANCO DO BRASIL

                    BancoDigito = Banco_do_Brasil.BancoDigito;
                    cLivre      = Banco_do_Brasil.CampoLivre(this, cAgenciaNumero, cContaNumero, cConvenio, cModalidade, cCarteira, cNossoNumero);
                    break;

                case 21:     // BANESTES

                    BancoDigito = Banco_Banestes.BancoDigito;
                    cLivre      = Banco_Banestes.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero);
                    break;

                case 27:     // BESC

                    BancoDigito = Banco_BESC.BancoDigito;
                    cLivre      = Banco_BESC.CampoLivre(cConvenio, cCarteira, cNossoNumero);
                    break;

                case 33:     // BANESPA SANTANDER

                    BancoDigito = Banco_Banespa.BancoDigito;
                    if (useSantander || (cModalidade != null && cModalidade.ToUpper() == "SANTANDER"))     // Todo: ideal: (cCarteira == "101" || cCarteira == "102" || cCarteira == "201")) //
                    {
                        cLivre = Banco_Santander.CampoLivre(this, cCodCedente, cCarteira, cNossoNumero, cModalidade);
                    }
                    else
                    {
                        cLivre = Banco_Banespa.CampoLivre(this, cCodCedente, cNossoNumero);
                    }

                    break;

                case 41:     // BARINSUL

                    BancoDigito = Banco_Banrisul.BancoDigito;
                    cLivre      = Banco_Banrisul.CampoLivre(this, cAgenciaNumero, cCodCedente, cNossoNumero);
                    break;

                case 47:     // BANESE

                    BancoDigito = Banco_Banese.BancoDigito;
                    cLivre      = Banco_Banese.CampoLivre(this, this.Agencia, cCodCedente, cNossoNumero);
                    break;

                case 70:     // BRB

                    BancoDigito = Banco_BRB.BancoDigito;
                    cLivre      = Banco_BRB.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cNossoNumero);
                    break;

                case 91:     // UNICRED

                    BancoDigito = Banco_UniCred.BancoDigito;
                    cLivre      = Banco_UniCred.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero);
                    break;

                case 104:     // CAIXA ECONOMICA FEDERAL

                    BancoDigito = Banco_Caixa.BancoDigito;
                    cLivre      = Banco_Caixa.CampoLivre(this, cAgenciaNumero, cCodCedente, cConvenio, cCarteira, cNossoNumero);
                    break;

                case 151:     // NOSSA CAIXA

                    BancoDigito = Banco_NossaCaixa.BancoDigito;
                    cLivre      = Banco_NossaCaixa.CampoLivre(this, cAgenciaNumero, cContaNumero, cModalidade, cNossoNumero);
                    break;

                case 237:     // BRADESCO

                    BancoDigito = Banco_Bradesco.BancoDigito;
                    cLivre      = Banco_Bradesco.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cNossoNumero, cModalidade);
                    break;

                case 341:     // ITAU

                    BancoDigito = Banco_Itau.BancoDigito;
                    cLivre      = Banco_Itau.CampoLivre(this, cAgenciaNumero, cContaNumero, cCarteira, cCodCedente, cNossoNumero, NumeroDocumento);
                    break;

                case 347:     // SUDAMERIS

                    BancoDigito = Banco_Sudameris.BancoDigito;
                    cLivre      = Banco_Sudameris.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero);
                    break;

                case 353:     // SANTANDER

                    BancoDigito = Banco_Santander.BancoDigito;
                    cLivre      = Banco_Santander.CampoLivre(this, cCodCedente, cCarteira, cNossoNumero, cModalidade);
                    break;

                case 356:     // REAL

                    BancoDigito = Banco_Real.BancoDigito;
                    cLivre      = Banco_Real.CampoLivre(this, cAgenciaNumero, cContaNumero, cNossoNumero);
                    break;

                case 389:     // MERCANTIL

                    BancoDigito = Banco_Mercantil.BancoDigito;
                    cLivre      = Banco_Mercantil.CampoLivre(this, cAgenciaNumero, cCodCedente, cModalidade, cNossoNumero);
                    break;

                case 399:     // HSBC

                    BancoDigito = Banco_HSBC.BancoDigito;
                    cLivre      = Banco_HSBC.CampoLivre(this, cAgenciaNumero, cContaNumero, cCodCedente, cModalidade, cCarteira, cNossoNumero);
                    break;

                case 409:     // UNIBANCO

                    BancoDigito = Banco_Unibanco.BancoDigito;
                    cLivre      = Banco_Unibanco.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero);
                    break;

                case 422:     // SAFRA

                    BancoDigito = Banco_Safra.BancoDigito;
                    cLivre      = Banco_Safra.CampoLivre(this, cCarteira, cCodCedente, Agencia, Conta, cNossoNumero);
                    break;

                case 745:     // CITIBANK

                    BancoDigito = Banco_CitiBank.BancoDigito;
                    cLivre      = Banco_CitiBank.CampoLivre(this, cCodCedente, cModalidade, cNossoNumero);
                    break;

                case 748:     // SICREDI

                    BancoDigito = Banco_Sicredi.BancoDigito;
                    cLivre      = Banco_Sicredi.CampoLivre(this, cAgenciaNumero, cModalidade, cCodCedente, cNossoNumero, cCarteira);
                    break;

                case 756:     // SICOOB

                    BancoDigito = Banco_SICOOB.BancoDigito;
                    cLivre      = Banco_SICOOB.CampoLivre(this, cCarteira, this.ParcelaNumero.ToString(), cConvenio, cModalidade, cCodCedente, cNossoNumero);
                    break;

                default:
                    // Erro: Banco não implementado
                    throw new Exception("Banco invalido ou ainda não implementado");
                }
                #endregion
            }

            if (cLivre.Length != 25)
            {
                throw new Exception("O Campo Livre deve conter exatamente 25 posições!\n'" + cLivre + "' Length=" + cLivre.Length.ToString());
            }
            if (cBanco == "151") // Caso especial para Nossa Caixa
            {
                cDV = CobUtil.Modulo11Especial(cCodePadrao + cLivre, 9).ToString();
            }
            else
            {
                cDV = CobUtil.Modulo11Padrao(cCodePadrao + cLivre, 9).ToString();
            }

            CodBarras = cCodePadrao.Substring(0, 4) + cDV + cCodePadrao.Substring(4, 14) + cLivre;
        }