Beispiel #1
0
        internal override void ConteudoToProperty()
        {
            ValorTotal = 0;
            ImagemComprovante1aVia.Clear();
            ImagemComprovante2aVia.Clear();
            Debito   = false;
            Credito  = false;
            Digitado = false;

            foreach (var linha in Conteudo)
            {
                switch (linha.Identificacao)
                {
                case 29: Digitado = (linha.AsString() == "True"); break;

                case 100:
                    ModalidadePagto = linha.AsString();
                    switch (ModalidadePagto.Substring(0, 2).ToInt32())
                    {
                    case 1: Debito = true; break;

                    case 2: Credito = true; break;
                    }

                    var wTipoOperacao = ModalidadePagto.Substring(2, 2).ToInt32();
                    switch (wTipoOperacao)
                    {
                    case 0: TipoOperacao = RespTipoOperacao.Avista; break;

                    case 1: TipoOperacao = RespTipoOperacao.PreDatado; break;

                    case 2:
                        ParceladoPor = RespParceladoPor.Loja;
                        TipoOperacao = RespTipoOperacao.Parcelado;
                        break;

                    case 3:
                        ParceladoPor = RespParceladoPor.ADM;
                        TipoOperacao = RespTipoOperacao.Parcelado;
                        break;

                    default: TipoOperacao = RespTipoOperacao.Outras; break;
                    }
                    break;

                case 101: ModalidadeExtenso = linha.AsString(); break;

                case 102: ModalidadePagtoDescrita = linha.AsString(); break;

                case 105:
                    DataHoraTransacaoComprovante = linha.AsDateTime();
                    DataHoraTransacaoHost        = DataHoraTransacaoComprovante;
                    DataHoraTransacaoLocal       = DataHoraTransacaoComprovante;
                    break;

                case 120: Autenticacao = linha.AsString(); break;

                case 121: ImagemComprovante1aVia.AddRange(linha.AsString().Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)); break;

                case 122: ImagemComprovante2aVia.AddRange(linha.AsString().Split(new[] { "\r\n", "\n" }, StringSplitOptions.None)); break;

                case 123: TipoTransacao = linha.AsInt32(); break;

                case 130:
                    Saque       = linha.AsDecimal();
                    ValorTotal += Saque;
                    break;

                case 131: Instituicao = linha.AsString(); break;

                case 132: CodigoBandeiraPadrao = linha.AsString(); break;

                case 133: CodigoAutorizacaoTransacao = linha.AsString(); break;

                case 134: NSU = linha.AsString(); break;

                case 136: BIN = linha.AsString(); break;

                case 139: ValorEntradaCDC = linha.AsDecimal(); break;

                case 140: DataEntradaCDC = linha.AsDate(); break;

                case 156: Rede = linha.AsString(); break;

                case 501: TipoPessoa = linha.AsInt32() == 0 ? 'J' : 'F'; break;

                case 502: DocumentoPessoa = linha.AsString(); break;

                case 504: TaxaServico = linha.AsDecimal(); break;

                case 505: QtdParcelas = linha.AsInt32(); break;

                case 506: DataPreDatado = linha.AsDate(); break;

                case 511: QtdParcelas = linha.AsInt32(); break;     // Parcelas CDC - Neste caso o campo 505 não é retornado

                case 515: DataHoraTransacaoCancelada = linha.AsDate(); break;

                case 516: NSUTransacaoCancelada = linha.AsString(); break;

                case 527: DataVencimento = linha.AsDate(); break;

                case 589: CodigoOperadoraCelular = linha.AsString(); break;

                case 590: NomeOperadoraCelular = linha.AsString(); break;

                case 591: ValorRecargaCelular = linha.AsDecimal(); break;

                case 592: NumeroRecargaCelular = linha.AsString(); break;

                case 607:
                    var wNumCb = linha.AsInt32();

                    if (wNumCb == 1)
                    {
                        CorrespBancarios.Clear();
                    }

                    var cb = CorrespBancarios.AddNew();
                    cb.DataVencimento  = LeInformacao(600, wNumCb).AsDate();    // Data Vencimento do título - CB
                    cb.ValorPago       = LeInformacao(601, wNumCb).AsDecimal(); // Valor Pago do título - CB
                    cb.ValorOriginal   = LeInformacao(602, wNumCb).AsDecimal(); // Valor Original do título - CB
                    cb.Acrescimo       = LeInformacao(603, wNumCb).AsDecimal(); // Valor do Acréscimo - CB
                    cb.Desconto        = LeInformacao(604, wNumCb).AsDecimal(); // Valor do Desconto - CB
                    cb.DataPagamento   = LeInformacao(605, wNumCb).AsDate();    // Data contábil do Pagamento - CB
                    cb.NSUTransacaoCB  = LeInformacao(611, wNumCb).AsString();  // NSU da Transação CB
                    cb.TipoDocumento   = LeInformacao(612, wNumCb).AsInt32();   // Tipo Docto CB - 0:Arrecadação / 1:Título / 2:Tributo
                    cb.NSUCancelamento = LeInformacao(623, wNumCb).AsString();  // NSU para cancelamento - CB
                    cb.Documento       = LeInformacao(624, wNumCb).AsString();  // Linha Digitável/ Código de Barras do documento pago
                    break;

                case 609: CorrespBancarios.TotalTitulos = linha.AsDecimal(); break;

                case 610: CorrespBancarios.TotalTitulosNaoPago = linha.AsDecimal(); break;

                case 613:
                    Cheque = linha.AsString().Substring(20, 6);
                    CMC7   = linha.AsString();
                    break;

                case 626: Banco = linha.AsString(); break;

                case 627: Agencia = linha.AsString(); break;

                case 628: AgenciaDC = linha.AsString(); break;

                case 629: Conta = linha.AsString(); break;

                case 630: ContaDC = linha.AsString(); break;

                case 899:     // Tipos de Uso Interno do ACBrTEF
                    switch (linha.Sequencia)
                    {
                    case 1: CNFEnviado = linha.AsString().ToUpper() == "S"; break;

                    case 2: IndicePagamento = linha.AsString(); break;

                    case 3: OrdemPagamento = linha.AsInt32(); break;

                    case 102: DocumentoVinculado = linha.AsString(); break;

                    case 103: ValorTotal += linha.AsDecimal(); break;

                    case 500: IdPagamento = linha.AsInt32(); break;

                    case 501: IdRespostaFiscal = linha.AsInt32(); break;

                    case 502: SerialPOS = linha.AsString(); break;

                    case 503: Estabelecimento = linha.AsString(); break;
                    }
                    break;

                case 950: NFCeSAT.CNPJCredenciadora = linha.AsString(); break;

                case 951: NFCeSAT.Bandeira = linha.AsString(); break;

                case 952: NFCeSAT.Autorizacao = linha.AsString(); break;

                case 953: NFCeSAT.CodCredenciadora = linha.AsString(); break;

                case 1002: NFCeSAT.DataExpiracao = linha.AsString(); break;

                case 1003: NFCeSAT.DonoCartao = linha.AsString(); break;

                case 1190: NFCeSAT.UltimosQuatroDigitos = linha.AsString(); break;

                case 4029:
                    Desconto    = linha.AsDecimal();
                    ValorTotal -= Desconto;
                    break;
                }
            }

            QtdLinhasComprovante = Math.Max(ImagemComprovante1aVia.Count, ImagemComprovante2aVia.Count);

            // leitura de parcelas conforme nova documentação
            // 141 e 142 foram removidos em Setembro de 2014
            Parcelas.Clear();
            if (QtdParcelas < 1)
            {
                return;
            }

            var wValParc   = (ValorTotal / QtdParcelas).RoundABNT();
            var wTotalParc = 0M;

            for (var i = 0; i < QtdParcelas - 1; i++)
            {
                var parcela = Parcelas.AddNew();
                if (i == 1)
                {
                    var vencimento = LeInformacao(140, i).AsDate();
                    if (vencimento == DateTime.MinValue)
                    {
                        vencimento = DataHoraTransacaoHost.Value.AddDays(i * 30);
                    }

                    parcela.Vencimento = vencimento;
                    parcela.Valor      = LeInformacao(524, i).AsDecimal();
                }
                else
                {
                    var vencimento = LeInformacao(140, i).AsDate();
                    vencimento = vencimento == DateTime.MinValue ?
                                 DataHoraTransacaoHost.Value.AddDays(i * 30) :
                                 vencimento.AddDays(LeInformacao(508, i).AsInt32());
                    parcela.Vencimento = vencimento;
                    parcela.Valor      = LeInformacao(525, i).AsDecimal();
                }

                if (parcela.Valor > 0)
                {
                    continue;
                }

                if (i == QtdParcelas)
                {
                    wValParc = ValorTotal - wTotalParc;
                }
                else
                {
                    wTotalParc = wTotalParc + wValParc;
                }

                parcela.Valor = wValParc;
            }
        }
        /// <summary>
        /// Passa o conteudo do arquivo para as propriedades da classe
        /// </summary>
        internal override void ConteudoToProperty()
        {
            DataHoraTransacaoComprovante = null;
            ImagemComprovante1aVia.Clear();
            ImagemComprovante2aVia.Clear();
            var usar711    = false;
            var usar713    = false;
            var usar715    = false;
            var temParcela = false;
            var usar29     = false;

            foreach (var linha in Conteudo.OrderBy(x => x.Chave))
            {
                switch (linha.Identificacao)
                {
                case 0: Header = linha.AsString(); break;

                case 1: Id = linha.AsInt32(); break;

                case 2: DocumentoVinculado = linha.AsString(); break;

                case 3: ValorTotal = linha.AsDecimal(); break;

                case 4: Moeda = linha.AsInt32(); break;

                case 5: CMC7 = linha.AsString(); break;

                case 6: TipoPessoa = linha.AsString()[0]; break;

                case 7: DocumentoPessoa = linha.AsString(); break;

                case 8: DataCheque = linha.AsDate(); break;

                case 9: StatusTransacao = linha.AsString(); break;

                case 10:
                    Rede = linha.AsString();
                    BIN  = linha.AsString();
                    NFCeSAT.UltimosQuatroDigitos = linha.AsString();
                    break;

                case 11: TipoTransacao = linha.AsInt32(); break;

                case 12: NSU = linha.AsString(); break;

                case 13: CodigoAutorizacaoTransacao = linha.AsString(); break;

                case 14: NumeroLoteTransacao = linha.AsInt32(); break;

                case 15: DataHoraTransacaoHost = linha.AsDateTime(); break;

                case 16: DataHoraTransacaoLocal = linha.AsDateTime(); break;

                case 17:
                    TipoParcelamento = linha.AsInt32();
                    switch (TipoParcelamento)
                    {
                    case 0:
                        ParceladoPor = RespParceladoPor.Loja;
                        break;

                    case 1:
                        ParceladoPor = RespParceladoPor.ADM;
                        break;

                    default:
                        ParceladoPor = RespParceladoPor.Nenhum;
                        break;
                    }
                    break;

                case 18: QtdParcelas = linha.AsInt32(); break;

                case 19: temParcela = true; break;

                case 22: DataHoraTransacaoComprovante = linha.AsDate(); break;

                case 23: DataHoraTransacaoComprovante = DataHoraTransacaoComprovante + linha.AsTime(); break;

                case 24: DataPreDatado = linha.AsDate(); break;

                case 25: NSUTransacaoCancelada = linha.AsString(); break;

                case 26: DataHoraTransacaoCancelada = linha.AsDateTime(); break;

                case 27: Finalizacao = linha.AsString(); break;

                case 28:
                    if (!(usar711 || usar713))
                    {
                        ImagemComprovante1aVia.Clear();
                        QtdLinhasComprovante = linha.AsInt32();
                    }

                    if (!usar715)
                    {
                        ImagemComprovante2aVia.Clear();
                    }

                    if (linha.Sequencia == 1)
                    {
                        usar29 = true;
                        ImagemComprovante1aVia.Clear();
                        QtdLinhasComprovante = linha.AsInt32();
                        ImagemComprovante2aVia.Clear();
                    }

                    break;

                case 29:
                    if (usar29)
                    {
                        if (linha.Sequencia <= QtdLinhasComprovante)
                        {
                            ImagemComprovante1aVia.Add(linha.AsLinhaComprovante());
                        }
                        else
                        {
                            ImagemComprovante2aVia.Add(linha.AsLinhaComprovante());
                        }
                    }
                    else
                    {
                        if (!(usar711 || usar713))
                        {
                            ImagemComprovante1aVia.Add(linha.AsLinhaComprovante());
                        }

                        if (!usar715)
                        {
                            ImagemComprovante2aVia.Add(linha.AsLinhaComprovante());
                        }
                    }

                    break;

                case 30: TextoEspecialOperador = linha.AsString(); break;

                case 31: TextoEspecialCliente = linha.AsString(); break;

                case 32: Autenticacao = linha.AsString(); break;

                case 33: Banco = linha.AsString(); break;

                case 34: Agencia = linha.AsString(); break;

                case 35: AgenciaDC = linha.AsString(); break;

                case 36: Conta = linha.AsString(); break;

                case 37: ContaDC = linha.AsString(); break;

                case 38: Cheque = linha.AsString(); break;

                case 39: ChequeDC = linha.AsString(); break;

                case 40: NomeAdministradora = linha.AsString(); break;

                case 131: Instituicao = linha.AsString(); break;

                case 132: CodigoBandeiraPadrao = linha.AsString(); break;

                case 136: BIN = linha.AsString(); break;

                case 300:
                    switch (linha.Sequencia)
                    {
                    case 1: NFCeSAT.DataExpiracao = linha.AsString(); break;

                    case 2: NFCeSAT.DonoCartao = linha.AsString(); break;
                    }
                    break;

                case 600: NFCeSAT.CNPJCredenciadora = linha.AsString(); break;

                case 601: NFCeSAT.Bandeira = linha.AsString(); break;

                case 602: NFCeSAT.Autorizacao = linha.AsString(); break;

                case 603: NFCeSAT.CodCredenciadora = linha.AsString(); break;

                case 707: ValorOriginal = linha.AsDecimal(); break;

                case 708: Saque = linha.AsDecimal(); break;

                case 709: Desconto = linha.AsDecimal(); break;

                case 710:
                    if (linha.AsInt32() > 0 && ViaClienteReduzida)
                    {
                        usar711 = true;
                        ImagemComprovante1aVia.Clear();
                        QtdLinhasComprovante = linha.AsInt32();
                    }
                    break;

                case 711: if (usar711)
                    {
                        ImagemComprovante1aVia.Add(linha.AsLinhaComprovante());
                    }
                    break;

                case 712:
                    if (linha.AsInt32() > 0 && !ViaClienteReduzida)
                    {
                        usar713 = true;
                        ImagemComprovante1aVia.Clear();
                        QtdLinhasComprovante = linha.AsInt32();
                    }
                    break;

                case 713: if (usar713)
                    {
                        ImagemComprovante1aVia.Add(linha.AsLinhaComprovante());
                    }
                    break;

                case 714:
                    if (linha.AsInt32() > 0)
                    {
                        usar715 = true;
                        ImagemComprovante2aVia.Clear();
                    }
                    break;

                case 715: if (usar715)
                    {
                        ImagemComprovante2aVia.Add(linha.AsLinhaComprovante());
                    }
                    break;

                case 899:     // Tipos de Uso Interno do ACBrTEF
                    switch (linha.Sequencia)
                    {
                    case 1: CNFEnviado = linha.AsString().ToUpper() == "S"; break;

                    case 2: IndicePagamento = linha.AsString(); break;

                    case 3: OrdemPagamento = linha.AsInt32(); break;

                    case 103: ValorTotal += linha.AsDecimal(); break;

                    case 500: IdPagamento = linha.AsInt32(); break;

                    case 501: IdRespostaFiscal = linha.AsInt32(); break;

                    case 502: SerialPOS = linha.AsString(); break;

                    case 503: Estabelecimento = linha.AsString(); break;
                    }
                    break;

                case 999: Trailer = linha.AsString(); break;
                }

                Parcelas.Clear();
                if (temParcela)
                {
                    for (var i = 1; i <= QtdParcelas; i++)
                    {
                        var parcela = new RespParcela
                        {
                            Vencimento = LeInformacao(19, i).AsDate(),
                            Valor      = LeInformacao(20, i).AsDecimal(),
                            NSUParcela = LeInformacao(21, i).AsString()
                        };
                        Parcelas.Add(parcela);
                    }
                }

                Debito  = (TipoTransacao >= 20 && TipoTransacao <= 25) || (TipoTransacao == 40);
                Credito = (TipoTransacao >= 10 && TipoTransacao <= 12);

                switch (TipoTransacao)
                {
                case 10:
                case 20:
                case 23:
                    TipoOperacao = RespTipoOperacao.Avista;
                    break;

                case 11:
                case 12:
                case 22:
                    TipoOperacao = RespTipoOperacao.Parcelado;
                    break;

                case 21:
                case 24:
                case 25:
                    TipoOperacao  = RespTipoOperacao.PreDatado;
                    DataPreDatado = LeInformacao(24).AsDate();
                    break;

                case 40:
                    TipoOperacao = RespTipoOperacao.Parcelado;
                    ParceladoPor = RespParceladoPor.ADM;
                    break;

                default:
                    TipoOperacao = RespTipoOperacao.Outras;
                    break;
                }
            }
        }