<commit_before>﻿using System;
using System.Linq;
using System.Web.UI;

[assembly: WebResource("BoletoNet.Imagens.336.jpg", "image/jpg")]

namespace BoletoNet
{
    internal class Banco_C6 : AbstractBanco, IBanco
    {
        #region Construtores

        internal Banco_C6()
        {
            try
            {
                this.Codigo = 336;
                this.Digito = "0";
                this.Nome = "C6 Bank";
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Erro ao instanciar objeto.", ex);
            }
        }

        #endregion Construtores

        #region Métodos de Instância

        /// <summary>
        /// Validações particulares do Banco C6
        /// </summary>
        public override void ValidaBoleto(Boleto boleto)
        {
            var carteirasImplementadas = new int[] { 10, 20, 21, 22, 23, 24 };
            var possiveisModalidadesIdentificadorLayout = new int[] { 3, 4 };

            int carteiraInt;
            int tipoModalidadeInt;

            if (string.IsNullOrEmpty(boleto.Carteira) || !int.TryParse(boleto.Carteira, out carteiraInt))
                throw new ArgumentException("Carteira não informada ou inválida.");

            if (!carteirasImplementadas.Contains(carteiraInt))
                throw new ArgumentException(string.Format("Carteira {0} não implementada (Carteiras disponíveis: {1}).", carteiraInt, string.Join(",", carteirasImplementadas)));

            if (string.IsNullOrEmpty(boleto.TipoModalidade) || !int.TryParse(boleto.TipoModalidade, out tipoModalidadeInt))
                throw new ArgumentException(string.Format("{0} não informada ou inválida para o boleto (Corresponde ao IdentificadorLayout para o C6 Bank).", nameof(boleto.TipoModalidade)));

            if (!possiveisModalidadesIdentificadorLayout.Contains(tipoModalidadeInt))
                throw new ArgumentException(string.Format("Modalidade informada {0} é inválida (Modalidades disponíveis: {1}).", tipoModalidadeInt, string.Join(",", possiveisModalidadesIdentificadorLayout)));

            if (boleto.NossoNumero.Length != 10)
                throw new ArgumentException("Nosso número deve possuir 10 posições");

            if (boleto.Cedente.Codigo.Length != 12)
                throw new NotImplementedException("Código do cedente precisa conter 12 dígitos");

            boleto.LocalPagamento = String.IsNullOrEmpty(boleto.LocalPagamento) ? Nome : boleto.LocalPagamento;

            //Verifica se data do processamento é valida
            if (boleto.DataProcessamento == DateTime.MinValue)
                boleto.DataProcessamento = DateTime.Now;

            //Verifica se data do documento é valida
            if (boleto.DataDocumento == DateTime.MinValue)
                boleto.DataDocumento = DateTime.Now;

            boleto.QuantidadeMoeda = 0;

            FormataCodigoBarra(boleto);
            FormataLinhaDigitavel(boleto);
            FormataNossoNumero(boleto);
        }

        #endregion Métodos de Instância
<commit_msg>refact: remoção de recursos de versões mais recentes do C# devido à falha de build pelo AppVeyor<commit_after>﻿using System;
using System.Linq;
using System.Web.UI;

[assembly: WebResource("BoletoNet.Imagens.336.jpg", "image/jpg")]

namespace BoletoNet
{
    internal class Banco_C6 : AbstractBanco, IBanco
    {
        #region Construtores

        internal Banco_C6()
        {
            try
            {
                this.Codigo = 336;
                this.Digito = "0";
                this.Nome = "C6 Bank";
            }
            catch (Exception ex)
            {
                throw new ArgumentException("Erro ao instanciar objeto.", ex);
            }
        }

        #endregion Construtores

        #region Métodos de Instância

        /// <summary>
        /// Validações particulares do Banco C6
        /// </summary>
        public override void ValidaBoleto(Boleto boleto)
        {
            var carteirasImplementadas = new int[] { 10, 20, 21, 22, 23, 24 };
            var possiveisModalidadesIdentificadorLayout = new int[] { 3, 4 };

            int carteiraInt;
            int tipoModalidadeInt;

            if (string.IsNullOrEmpty(boleto.Carteira) || !int.TryParse(boleto.Carteira, out carteiraInt))
                throw new ArgumentException("Carteira não informada ou inválida.");

            if (!carteirasImplementadas.Contains(carteiraInt))
                throw new ArgumentException(string.Format("Carteira {0} não implementada (Carteiras disponíveis: {1}).", carteiraInt, string.Join(",", carteirasImplementadas)));

            if (string.IsNullOrEmpty(boleto.TipoModalidade) || !int.TryParse(boleto.TipoModalidade, out tipoModalidadeInt))
                throw new ArgumentException("'TipoModalidade' não informada ou inválida para o boleto (Corresponde ao IdentificadorLayout para o C6 Bank).");

            if (!possiveisModalidadesIdentificadorLayout.Contains(tipoModalidadeInt))
                throw new ArgumentException(string.Format("Modalidade informada {0} é inválida (Modalidades disponíveis: {1}).", tipoModalidadeInt, string.Join(",", possiveisModalidadesIdentificadorLayout)));

            if (boleto.NossoNumero.Length != 10)
                throw new ArgumentException("Nosso número deve possuir 10 posições");

            if (boleto.Cedente.Codigo.Length != 12)
                throw new NotImplementedException("Código do cedente precisa conter 12 dígitos");

            boleto.LocalPagamento = String.IsNullOrEmpty(boleto.LocalPagamento) ? Nome : boleto.LocalPagamento;

            //Verifica se data do processamento é valida
            if (boleto.DataProcessamento == DateTime.MinValue)
                boleto.DataProcessamento = DateTime.Now;

            //Verifica se data do documento é valida
            if (boleto.DataDocumento == DateTime.MinValue)
                boleto.DataDocumento = DateTime.Now;

            boleto.QuantidadeMoeda = 0;

            FormataCodigoBarra(boleto);
            FormataLinhaDigitavel(boleto);
            FormataNossoNumero(boleto);
        }

        #endregion Métodos de Instância

{'fraction_non_alphanumeric': 0.0905996758508914, 'fraction_numerical': 0.01280388978930308, 'mean_word_length': 2.3248922413793105, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4801765', 'n_tokens_mistral': 1899, 'n_tokens_neox': 1808, 'n_words': 415}