
(function () {
    "use strict";

    angular.module('pos').controller('vendaAddController', controller);
    controller.$inject = ['$confirm', 'shipayService', '$scope', '$state', '$stateParams', '$window', '$q', '$timeout', 'pedidoService', 'entidadeAuxiliarService', 'clienteService', 'produtoService', 'fidelidadeService', '$filter', '$interval', 'caixaService', 'notaFiscalService', '$rootScope', 'valeProdutoService', 'motorPromocaoService', 'configService', 'OMNIService', 'pinCodeService', 'vendedorService'];

    function controller($confirm, shipayService, $scope, $state, $stateParams, $window, $q, $timeout, pedidoService, entidadeAuxiliarService, clienteService, produtoService, fidelidadeService, $filter, $interval, caixaService, notaFiscalService, $rootScope, valeProdutoService, motorPromocaoService, configService, OMNIService, pinCodeService, vendedorService) {

        $scope.auxQtEstoque = 0;
        $scope.tiraTeclado = false;

        $(window).unload(function () {
            if ($scope.state != null) {

                $.ajax({
                    type: 'GET',
                    async: false,
                    url: '/entidadeauxiliar/removerTEF?idTEF=' + $scope.state.TEF.IDSiTef
                });
            }
        });

        setTimeout(function () {
            $scope.$on("$locationChangeStart", function (event, newUrl, oldUrl) {
                if ($scope.state != null) {
                    $.ajax({
                        type: 'GET',
                        async: false,
                        url: '/entidadeauxiliar/removerTEF?idTEF=' + $scope.state.TEF.IDSiTef
                    });
                }
            });

            $scope.$parent.initializeLayout(($scope.$parent.config.UsaPOS == null ? 'Nova Venda' : ($scope.$parent.config.UsaPOS ? 'Nova Venda' : 'Novo Pedido')));
            $scope.carregandoReenvio = false;
            $scope.imprimeDanfe = false;
            $scope.imprimirDanfe = false;
            $scope.alteracaoAcrescimo = false;
            $scope.totalCreditoCampanha = 0;
            $scope.itensProcessadoRemoveStorage = false;
            $scope.statusvalidavendedoradd = false;
            $scope.ValidaCampo = false;
            $scope.modalCreditoDetalhado = false;
            $scope.itensOmni = [];
            $scope.OMNILoad = false;
            $scope.PosicaoGradeOMNI = "1";
            $scope.tiposFrete = [
                { Tipo: 0, Descricao: "Por conta do emitente" },
                { Tipo: 1, Descricao: "Por conta do destinatário" },
                { Tipo: 2, Descricao: "Por conta de terceiros" },
                { Tipo: 9, Descricao: "Sem frete" }
            ];
            $scope.boletaValidada = true;
            $scope.backupAcrescimoPercentual = 0;
            $scope.backupValorAbsoluto = 0;
            $scope.permiteValorAbsoluto = false;
            $scope.permiteValorPercentual = false;
            $scope.permiteValorAbsolutoPedido = false;
            $scope.permiteValorPercentualPedido = false;
            $scope.initCustomer = null;
            $scope.carregandoMotor = false;
            $scope.msgStatusMotor = "Não há promoções disponíveis";
            $scope.valorLimiteNota = -1;
            //$scope.items.data = {};
            $scope.getSendInitialValue = function () {
                $timeout(function () {

                    if ($scope.$parent.config.ItemReserva == 1 || $scope.$parent.config.ItemReserva == 3) {

                        $scope.state.NFE.send = true;
                    }
                    else
                        if ($scope.$parent.config.UsaSAD && ($scope.$parent.config.ItemReserva == 1 || $scope.$parent.config.ItemReserva == 3))
                            $scope.state.NFE.send = true;
                        else
                            $scope.state.NFE.send = false;
                });

            }
            //Pin Code
            $scope.PinCode =
            {
                Consulta: {
                    PinCode: "",
                    CPF: "",
                    Marca: ""
                },
                Aplicar: function () {

                    pedidoService.UpdateDescontoPinCode($scope.state.data, $scope.PinCode.PinCode).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                console.error(response.Exception);
                                $scope.state.data.ItensValidos = 0;
                            } else {
                                angular.copy(response.Data, $scope.state.data);
                                $scope.$parent.toastr.success("Desconto aplicados com sucesso.", "Descontos");
                                $scope.PinCode.toogleModalPinCode();
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
                },
                PinCode: {},
                PinCodeEncontrado: false,
                modalPinCode: false,
                carregandoPinCode: false,
                toogleModalPinCode: function () {

                    if ($scope.PinCode.modalPinCode == false) {
                        $scope.PinCode.PinCodeEncontrado = false;
                    }
                    $scope.PinCode.modalPinCode = !$scope.PinCode.modalPinCode;
                },
                ConsultaPinCode: function () {

                    if ($scope.state.data.PinCode != null && $scope.state.data.PinCode != "") {
                        $scope.$parent.toastr.error("PinCode ja utilizado neste pedido", "Serviço");
                        return;
                    }
                    var args = { consultaPinCode: $scope.PinCode.Consulta, pedido: $scope.state.data };
                    pinCodeService.ConsultaPinCode(args).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                console.error(response.Exception);
                                $scope.state.data.ItensValidos = 0;
                            } else {
                                $scope.PinCode.PinCode = response.Data;
                                $scope.PinCode.PinCodeEncontrado = true;
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
                }
            }

            $scope.administradoras = { debito: [], credito: [], carteiraDigital: [] };
            var intervalPromiseNotification;
            var intervalPromise;
            function guid() {
                function s4() {
                    return Math.floor((1 + Math.random()) * 0x10000)
                        .toString(16)
                        .substring(1);
                }
                return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
                    s4() + '-' + s4() + s4() + s4();
            }

            function arredondar(str, casas) {
                if (str.indexOf(',') != -1) str = str.replace(',', '.');
                if (!casas) casas = 0;
                casas = Math.pow(10, casas);
                str = parseFloat(str) * casas;
                return Math.floor(str) / casas;
            }

            $scope.showScanBarcode = function () {
                //document.getElementById('codigo-barras').focus()
                window.ReactNativeWebView.postMessage('');
                window.postMessage('hello react-native!!');
            }



            function CountValidItens() {
                pedidoService
                    .countValidItemPedido($scope.state.data.Numero)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                console.error(response.Exception);
                                $scope.state.data.ItensValidos = 0;
                            } else {
                                $scope.state.itensValidos = response.Data;
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }


            $scope.getNewProdutoPreco = function (data) {


                if (!data.PrecoPorCor) {
                    return data.PrecoLiquido;
                }
                else {

                    return data.PrecoPorCor;

                }
            }

            $scope.ValidaPagamentoTEF = function () {
                if ($scope.state.data.Pagamentos != null)
                    for (var i = 0; i < $scope.state.data.Pagamentos.length; i++) {
                        if (!$scope.state.data.Pagamentos)
                            continue;
                        if ($scope.state.data.Pagamentos[i].TEFID && $scope.state.data.Pagamentos[i].Valor > 0) {
                            $scope.$parent.toastr.warning('Voce deve cancelar todos os itens tef para efetuar este processo!', '');
                            return true;
                        }
                    }
                return false;
            }

            $scope.ExisteTroca = function () {
                var existetroca = false;
                if (typeof ($scope.state.data !== 'undefined')) {
                    var listaitens = angular.copy($scope.state.data.Itens);
                    for (var i = 0; i < listaitens.length; i++) {
                        var item = listaitens[i];
                        if (item.Troca)
                            existetroca = true;
                    }
                }
                return existetroca;
            };
            //[Inicializa objetos]
            $scope.computardescontototal = function () {
                var listaitens = angular.copy($scope.state.data.Itens);
                var auxtotal = 0;
                angular.forEach(listaitens, function (item) {
                    if (!item.Cancelado)
                        auxtotal = item.DescontoUnitario + auxtotal * item.Quantidade;
                });
                return auxtotal;
            };
            $scope.statusTabcampanha = false
            $scope.regraDesconto = { statusready: false };

            $scope.state = {
                carregandoModal: false,
                indicaPresencial: true,
                carregandoClose: false,
                imprimirDanfe: false,
                InfoAdicionais: false,
                caixaAberto: true,
                transportadoras: [],
                valeProduto: { NumeroCartao: '', Valor: 0 },
                modalValeProduto: false,
                carregandoVale: false,
                GerarNFE: 0,
                troco: false,
                MotorDesconto: { DescontoPedido: '', Descricoes: '', DescontoProdutos: [] },
                selectCPFCNPJ: 1,
                data: {
                    Numero: $stateParams.id
                },
                checkoutoficial: false,
                checkoutabatido: false,
                modalNotificacao: false,
                removeNotificacao: false,
                Desconto: {
                    statusmodaldescontopedido: -1,
                    acrescimoemporcentagem: 0,
                    descontovaloritens: 0,
                    statuscalculofidelidade: true,
                    descontovalorpedido: 0,
                    acrescimovalorpedido: 0,
                    descontofidelidade: 0,
                    descontomaximofidelidade: 0,
                    descontoemporcentagem: 0,
                },
                statusmsgselecionevendeor: false,
                permiteinserir: true,
                Itens: [],
                erro: {
                    ativo: false,
                    mensagem: ""
                },
                isNew: false,
                validacaoCliente: {
                    confirmacadastroCPF: false,
                    cpf: "",
                    nome: "",
                    incluir: false,
                    alterar: false
                },
                codigoBarras: "",
                ProcessoTroca: {
                    ticket: '',
                    codigoFilial: '',
                    cpfCliente: ''
                },
                modalProcessoTroca: false,
                mostranfe: true,
                lastProdutoIndex: 0,
                itensValidos: 0,
                ImprimeTroca: (!angular.isUndefined($scope.$parent.config) && !angular.isUndefined($scope.$parent.config.ImprimeTroca) && $scope.$parent.config.ImprimeTroca == 1) ? true : false,
                ImprimePorItem: (!angular.isUndefined($scope.$parent.config) && !angular.isUndefined($scope.$parent.config.ImprimeTroca) && $scope.$parent.config.ImprimeTroca == 2) ? true : false,
                ProdutoBipado: { data: [] },
                troca: { ativo: false },
                valorTroco: 0,
                creditoTroco: false,
                consulta: { ativo: false, filtro: "", bipado: false },
                consultaOMNI: { filtro: "" },
                currentIndexOMNI: -1,
                tipoEntregaOMNI: 0,
                PosicaoOMNI: "",
                EnderecosClienteOMNI: [],
                EnderecoSelecionadoOMNI: { CodigoContato: "" },
                itemOMNISelecionado: { ativo: false },
                addProduto: { ativo: false, filtro: "" },
                ModalProdutoOMNI: false,
                ModalPedidoOMNI: false,
                FretesOMNI: [],
                FreteSelecionado: { ativo: true },
                vendaSuspensa: { ativo: false },
                opcaoVenda: { ativo: false },
                newCliente: { ativo: false },
                credito: { total: 0 },
                ultimoProduto: {},
                NFE:
                {
                    send: false,
                    enableCPF: !$scope.getSendInitialValue(),
                },
                pagamento: {
                    currentIndex: -1,
                    step: { fidelidade: 0, condicao: 1, parcelas: 2, conclusao: 3, checkout: 4, checkoutopgto: 5 },
                    steps: [
                        { titulo: "Goflash Benefícios", descricao: "Cliente participa do GOFLASH, programa de fidelidade da empresa. Com isto ele pode resgatar seus créditos para utilizar como parte de pagamento da venda." },
                        { titulo: "Forma de Pagamento", descricao: "escolha abaixo a forma de pagamento desejada." },
                        { titulo: "Parcelas", descricao: "Entre com as informações adicionais das parcelas abaixo de acordo com os tipos de pagamentos escolhidos pelo cliente." },
                        { titulo: "Pronto!", descricao: "Todas as etapas " + ($scope.$parent.config.UsaPOS ? "da venda" : "do pedido") + " foram concluídas com êxito." },
                        { titulo: "Check-Out", descricao: "Coloque a porcentagem que será a base da conversão de sua venda." },
                        { titulo: "Valor oficial e valor abatido", descricao: "Selecione o pagamento para ambos" },
                        { titulo: "Promoções e Beneficios!", descricao: "Campanhas de descontos ativas que atendem ao pedido." }
                    ],
                    livre: { currentTipoPagamento: "" },
                },
                fidelidade: { resgatar: false, token: '', info: {}, valorResgate: 0, carregando: false, ativo: false },
                TEF: {
                    modalTEF: false,
                    TEFProcessamento: false,
                    IDSiTef: '',
                    TipoCartao: 'D',
                    NumeroParcelas: 1,
                    ValorPagamento: 0,
                    Status: '',
                    Processado: 0,
                    pergunta: '',
                    resposta: '',
                    respostaok: false,
                    DescontoOperacao: 0,
                },
                Shipay: {
                    modalShipay: false,
                    aguardandoValidacao: false,
                    ValorPagamento: 0,
                    orderIdShipay: '',
                    timeOutVerificStatus: null,
                    timeModalTime: null,
                    indicaProcessoShipay: false,
                    HabilitarOpcaoAbort: true,
                    indicaConexãoInternet: true,
                    indicaMostrarLink: false,
                    indicaWalletSelecionada: false,
                    countToleranciaSemInternet: 0,
                    indicaModalConexãoInternet: false,
                    obtendoQrCode: '',
                    walletSelected: '',
                    qrCode: '',
                    linkPagamento: ''
                },
                ClienteTroca: {
                    ConfirmaCadastroTroca: false,
                },
                estoques: [],
                TEFCancel: {
                    modalTEF: false,
                    TEFProcessamento: false,
                    IDSiTef: '',
                    IDTefRelated: '',
                    Status: '',
                    Processado: 0,
                },
                notificacoes: [],
                carregandoVendedores: false,
                consultaCartao: null,
            };
            $scope.auxiliar = {
                vendedor: { data: [] },
                operacaoVenda: { data: [] },
                condicaoPagamento: { data: [] },
                OperacaoVendaSelecionada: [],
                administradora: { data: [] },
                tipoPagamento: { data: [] },
                consulta: { data: {}, lst: [] },
                Filial: { data: [], selecionada: "" },
                newCliente: { data: {} },
                estado: { data: [] },
                tabelaPreco: { data: [] },
                ticketorigem: '',
                vendaSuspensa: {
                    data: [],
                    carregando: true,
                    vazio: false,
                    count: 0,
                    filtro: {
                        ativo: false,
                        chaves: "",
                        cpf: "",
                        status: 4,
                        emissao: { de: "", ate: "" },
                        total: { de: "", ate: "" },
                        sortexpression: "",
                        skip: 0,
                        take: 999,

                    },

                },
                VendaGrade: { carregando: false },
                vendaCancelada: {
                    data: [],
                    carregando: true,
                    vazio: false,
                    count: 0,
                    filtro: {
                        ativo: false,
                        chaves: "",
                        cpf: "",
                        status: 2,
                        //emissao: { de: $scope.$parent.tools.date.toString(new Date()), ate: $scope.$parent.tools.date.toString(new Date()) },
                        emissao: { de: null, ate: null },
                        total: { de: "", ate: "" },
                        sortexpression: "",
                        skip: 0,
                        take: 999
                    }
                },
                newClienteTroca: { data: {} },
                dadosConsulta: { cor: "", tamanho: "" },
                selecionarProduto: { carregando: false },
                modalVendedores: false,
                modalEnderecoFreteOMNI: false,
                ehCartaoCredito: false,
                ehCartaoDebito: false,
                ehPagamentoTipoCartao: false,
                tipoPagamentoSelected: {},
                tipoPagamentoDigiteAsParcelasSelected: {}
            };

            //OMNI
            $scope.SelecionarFrete = function (frete) {

                $scope.state.FreteSelecionado = frete;
                $scope.NextWizardOMNI();
            }

            $scope.GetDados = function () {
                clienteService.getTokenDataBusca().then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {

                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
            }

            $scope.GetFretesOMNI = function () {
                OMNIService.GetFrete($scope.state.data, $scope.state.data.Cliente.Endereco.CEP).then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {

                            angular.copy(response.Data, $scope.state.FretesOMNI);
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); $scope.state.ModalPedidoOMNI = -1; }
                );
            }

            $scope.NextWizardOMNI = function () {
                if ($scope.state.currentIndexOMNI == -1) {
                    $scope.getEnderecosCliente();
                    $scope.state.currentIndexOMNI = 1;
                    return;
                }
                if ($scope.state.currentIndexOMNI == 1) {
                    $scope.GetFretesOMNI();
                    $scope.state.currentIndexOMNI = 2;
                    return;
                }
                if ($scope.state.currentIndexOMNI == 2) {
                    $scope.auxiliar.modalEnderecoFreteOMNI = true;
                    $scope.state.currentIndexOMNI = -1;
                    $scope.state.ModalProdutoOMNI = false;
                    $scope.gotoNextPagamento();
                }
            }
            $scope.AdicionarEnderecoOMNI = function (item) {
                $scope.state.EnderecoSelecionadoOMNI = item;
                NextWizardOMNI();
            }

            $scope.EditarEnderecoOMNI = function (item) {

                if (item == null)
                    $scope.prepareNewEnderecoOMNI();
                else
                    $scope.state.EnderecoSelecionadoOMNI = item;
                $scope.state.currentIndexOMNI = 8;
            }

            $scope.prepareNewEnderecoOMNI = function () {

                OMNIService.PrepareNew().then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {

                            angular.copy(response.Data, $scope.state.EnderecoSelecionadoOMNI);

                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
            }

            $scope.SalvarContatoEnderecoOMNI = function () {

                $scope.state.EnderecoSelecionadoOMNI.CodigoContato = $scope.state.data.Cliente.Codigo;
                OMNIService.SaveEnderecoCliente($scope.state.EnderecoSelecionadoOMNI).then
                    (
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {

                                $scope.getEnderecosCliente();
                                $scope.state.currentIndexOMNI = 1;
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }

            $scope.getEnderecosCliente = function () {
                OMNIService.GetEnderecosCliente($scope.state.data.Cliente).then
                    (
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {

                                angular.copy(response.Data, $scope.state.EnderecosClienteOMNI);
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }

            $scope.ToogleModalProdutoOMNI = function () {

                if ($scope.state.ModalProdutoOMNI == false) {
                    $scope.itensOmni = [];
                    $scope.state.consultaOMNI.filtro = "";
                }
                $scope.state.ModalProdutoOMNI = !$scope.state.ModalProdutoOMNI;
            }
            $scope.ToogleModalPedidoOMNI = function () {
                $scope.state.ModalPedidoOMNI = !$scope.state.ModalPedidoOMNI;
            }
            $scope.GetItensOMNI = function () {
                $scope.OMNILoad = true;

                OMNIService.GetProductItensFilial($scope.state.consultaOMNI.filtro, $scope.auxiliar.Filial.selecionada, $scope.state.data).then
                    (

                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                if (!response.Data) {
                                    $scope.$parent.toastr.error("Item Nao encontrado!", '');
                                }
                                angular.copy(response.Data, $scope.itensOmni);

                            }
                            $scope.OMNILoad = false;
                        },
                        function (err) { $scope.OMNILoad = false; $scope.$parent.toastr.error(err); }
                    );
            }
            $scope.SetPosicaoOMNI = function (item, tamanho) {

                $scope.state.itemOMNISelecionado = item;
                $scope.PosicaoOMNI = tamanho;
            }
            $scope.IncluirItensOMNI = function (item, tamanho) {
                $scope.OMNILoad = true;

                pedidoService.SaveItensPorGradeOMNI($scope.state.data, item, tamanho, $scope.state.troca.ativo, $scope.auxiliar.Filial.selecionada).then(
                    function (response) {
                        ;
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            console.error(response.Exception);
                            $scope.state.codigoBarras = '';
                            $scope.state.addProduto.ativo = false;
                            $scope.auxiliar.VendaGrade.carregando = false;

                        } else {
                            angular.copy(response.Data, $scope.state.data);
                            if ($scope.state.data.Numero) {
                                //$scope.state.troca.ativo = false;
                                $scope.state.codigoBarras = "";
                                $scope.state.lastProdutoIndex = $scope.state.data.Itens.length - 1;
                                $timeout(function () {
                                    $("#codigo-barras").focus();
                                });
                            } else
                                $state.go("state-venda-add", {
                                    id: response.Data.Numero
                                }, {
                                    location: "replace"
                                }); //não grava no histórico

                            $scope.state.addProduto.ativo = false;
                            CountValidItens();
                            $scope.prepareRegrasDesconto($scope.state.data.Cliente);

                        }
                        $scope.auxiliar.VendaGrade.carregando = false;

                        $scope.OMNILoad = false;
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
                $scope.ToogleModalProdutoOMNI();
            };
            $scope.getAllFilial = function () {
                entidadeAuxiliarService
                    .getAllFilial().then(
                        function (response) {

                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {

                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.Filial.data);
                                $scope.auxiliar.Filial.data = $scope.auxiliar.Filial.data.filter(a => a.Codigo == "000005" || a.Codigo == "000001");
                                for (var i = 0; i < $scope.auxiliar.Filial.data.length; i++) {
                                    $scope.auxiliar.Filial.data[i].Grupo = "Lojas Fisicas";
                                }

                                var filialEcommerce = {};
                                angular.copy($scope.auxiliar.Filial.data[0], filialEcommerce);
                                filialEcommerce.Nome = "Loja Virtual (Ambiente Indisponível)";
                                filialEcommerce.Codigo = "9999";
                                filialEcommerce.Grupo = "Ecommerce";
                                $scope.auxiliar.Filial.data.unshift(filialEcommerce);

                            }

                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }

            $scope.getAllEstado = function () {
                entidadeAuxiliarService
                    .getAllEstado()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.estado.data);
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.ValidaVendaSuspensa = function () {
                if (!$scope.state.data.Numero) {
                    var resp = pedidoService.ValidaVendaSuspensa().then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                                console.error(response.Exception);
                            } else {
                                if (response.Data) {
                                    if ($scope.state.data)
                                        $scope.state.data = [];
                                    $scope.state.data.Numero = response.Data;
                                    $scope.state.data.Status = response.Status;
                                    $state.go("state-venda-add", { id: response.Data })
                                }
                                else {
                                    EscolherVendedorComModal();
                                    $scope.state.data.Status = -1;
                                }
                            }

                        }
                    );
                }

                $scope.refresh();
            };
            $scope.valida = true;
            $scope.regradesconto = true;
            $scope.mostraErro = false;
            $scope.erroCliente = "";


            $scope.$on("$destroy", function () {

                if ($scope.itensProcessadoRemoveStorage)
                    localStorage.removeItem("itensConsulta");
            });


            $scope.toggleMensagemSelecionarItrmVendedor = function () {
                $scope.state.statusmsgselecionevendeor = false;
            }

            $scope.$watch('auxiliar.Filial.selecionada', function (value) {

                $scope.itensOmni = [];
            });

            $scope.$watch('state.data.Vendedor', function (value) {

                if ($scope.state.data.Status != 0 && !angular.isUndefined(value) && localStorage.getItem("itensConsulta") != null
                    && !angular.isUndefined($scope.state.data) && !angular.isUndefined($scope.state.data.Vendedor) && $scope.state.data.Vendedor != null
                    && !angular.isUndefined($scope.state.data.Cliente) && $scope.state.data.Cliente != null
                ) {

                    var listProdutos = JSON.parse(localStorage.getItem("itensConsulta"));
                    var listCodigoBarra = [];


                    angular.forEach(listProdutos, function (item, key) {

                        if (!angular.isUndefined(item.Barra)
                            && !angular.isUndefined(item.Barra.Codigo)) {
                            var quantidade = parseInt(item.Quantidade);
                            for (var i = 0; i < quantidade; i++) {
                                listCodigoBarra.push(item.Barra.Codigo)

                            }
                        }
                    });

                    setTimeout(function () {
                        $scope.addItemPedidos(listCodigoBarra);
                        localStorage.removeItem("itensConsulta");
                    }, 1000);
                }

                if ($scope.statusvalidavendedoradd &&
                    $scope.state.codigoBarras !== '' &&
                    $scope.state.data.Cliente != null &&
                    !angular.isUndefined($scope.state.data.Cliente)) {
                    $scope.statusvalidavendedoradd = false;
                    $scope.addItemPedido();
                }
            });


            $scope.initialize = function () {
                if ($scope.$parent.config.TerminalUnico) {
                    $scope.$parent.config.Terminal.Codigo = $scope.$parent.config.TerminalCorrente;
                }
                if ($scope.$parent.config.OperacaoVenda.Codigo
                    != null && $scope.state.data != null && $scope.state.data.Numero == '') {
                    $scope.auxiliar.OperacaoVendaSelecionada = $scope.$parent.config.OperacaoVenda;
                    $scope.saveOperacaoVendaOnSession(false);
                }

                $scope.ValidaVendaSuspensa();
                $scope.getAllNotificacao();
                initializeCliente();
                $scope.getTabelaPreco();
                $scope.getSendInitialValue();

                //quando  for redirecionado através da tela de consulta , deve pedir selecão de vendedor e cliente 
                if (localStorage.getItem("itensConsulta") != null) {

                    //aguarda itens processado
                    setTimeout(function () {
                        if ($scope.state.data.Status == 0) {
                            $scope.state.statusmsgselecionevendeor = false;
                            var listProdutos = JSON.parse(localStorage.getItem("itensConsulta"));
                            var listCodigoBarra = [];


                            angular.forEach(listProdutos, function (item, key) {

                                var quantidade = parseInt(item.Quantidade);

                                for (var i = 0; i < quantidade; i++) {
                                    listCodigoBarra.push(item.Barra.Codigo)
                                }
                            });

                            setTimeout(function () {
                                $scope.addItemPedidos(listCodigoBarra);
                                localStorage.removeItem("itensConsulta");
                            }, 50);
                        } else {
                            $scope.state.statusmsgselecionevendeor = true;
                            $scope.itensProcessadoRemoveStorage = true;
                        }
                    }, 2000);
                }
            };

            var VerificaClientePadrao = function () {

                if (!$scope.state.data.Numero) {
                    clienteService.GetClientePadraoVenda().then(
                        function (response) {
                            setTimeout(function () {
                                if (!angular.isUndefined($scope.$parent.config) && $scope.$parent.config.ClientePadrao == true)
                                    $scope.state.data.Cliente = response.Data;
                            }, 100)
                        },
                        function (err) {
                            console.log(err);
                        });
                }
            }
            $scope.selectVendedor = function (vendedor) {

                vendedorService.get(vendedor).then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                            console.error(response.Exception);
                        } else {
                            if (angular.isUndefined($scope.state.data.Vendedor))
                                $scope.state.data.Vendedor = {};
                            angular.copy(angular.fromJson(response.Data), $scope.state.data.Vendedor);

                            if ($stateParams.boleta != null && $stateParams.boleta != "")
                                $scope.state.data.Numero = $stateParams.boleta;
                        }
                    },
                    function () {
                    }
                )
            }
            var initializeCliente = function () {

                if ((!$stateParams.id || $stateParams.id == '') && ($stateParams.cliente || $stateParams.cliente != '') && ($stateParams.cliente != undefined)) {

                    $scope.selectVendedor($stateParams.vendedor);

                    clienteService.get($stateParams.cliente).then(
                        function (response) {
                            $scope.selectCliente(response.Data);

                        },
                        function () {
                        }
                    )
                }
                else {
                    VerificaClientePadrao();
                }
            }



            $scope.limparCPFCNPJ = function () {
                $scope.state.cpf = '';
                //if ($scope.state.selectCPFCNPJ == 2)
                //    $scope.state.selectCPFCNPJ = 1;
                //else
                //    $scope.state.selectCPFCNPJ = 2;

            }

            $scope.selectedCNPJ = function () {
                var novoCPF = $scope.state.cpf.trim().replace(/[\.\-\/]/g, "");

                if (novoCPF.length > 11) {
                    $scope.state.selectCPFCNPJ = 2;
                }
                if ($scope.$parent.config.EmiteNfeNfce && ((!$scope.state.data.Cliente.PessoaFisica) && ($scope.state.selectCPFCNPJ == 2 && $scope.state.data.Cliente.Codigo != ''))) {
                    $scope.state.GerarNFE = 2;
                }

            }

            var EscolherVendedorComModal = function () {
                if ($scope.$parent.config.VendedorModal)
                    toggleModalVendedores();
            }

            $scope.onExit = function (evt) {

                if (!$scope.state.data.Pagamentos) return;

                for (var i = 0; i < $scope.state.data.Pagamentos.length; i++)
                    if ($scope.state.data.Pagamentos[i].TEFID != "00000000-0000-0000-0000-000000000000" && $scope.state.data.Pagamentos[i].TEFID != null) {
                        $scope.$parent.toastr.warning("Para sair desta página, é necessário cancelar o pagamento com TEF");
                        return false;
                    }
            };

            $window.onbeforeunload = $scope.onExit;

            $scope.historyBack = function () {
                $window.history.back();
            };
            $scope.get = function () {

                $scope.state.erro.ativo = false;
                $scope.state.erro.mensagem = "";
                if ($scope.state.data.Numero != 0)
                    pedidoService
                        .prepareNew($scope.state.data.Numero)
                        .then(
                            function (response) {
                                if (response.Status < 0) {
                                    $scope.$parent.toastr.error(response.Message, "Serviço");
                                    console.error(response.Exception);
                                } else {
                                    angular.copy(response.Data, $scope.state.data);
                                }

                                if ($scope.state.data != null) {
                                    $scope.$parent.config.OperacaoVenda = $scope.state.data.OperacaoVenda;
                                    $scope.auxiliar.OperacaoVendaSelecionada = $scope.$parent.config.OperacaoVenda;
                                    $scope.saveOperacaoVendaOnSession(false);
                                    $scope.prepareRegrasDescontoreopen($scope.state.data.Cliente);
                                    if ($scope.state.data.Itens != null) {

                                        $scope.state.lastProdutoIndex = $scope.state.data.Itens.length - 1;
                                        $scope.state.itensValidos = $scope.state.data.Itens.length;

                                    }


                                    VerificaExisteTef();

                                    /*verifica se existe pay pendentes*/
                                    // verificaPayPendente();

                                    $timeout(function () {
                                        $("#codigo-barras").focus();
                                    });
                                } else {
                                    $scope.getNewItem();
                                }
                            },
                            function (error) {
                                $scope.$parent.toastr.error("Ao carregar a pré-venda.", "Comunicação com o servidor");
                                console.error(error);
                            }
                        );
            };
            $scope.$watch("state.data.Cliente", function (newvalue, oldvalue) {
                // alimentar variavel auxiliar de validacao de troca quando cliente do pedido for atualizado 
                if (newvalue != null) {
                    angular.copy(newvalue, $scope.auxiliar.newClienteTroca.data);
                }
            });

            var VerificaExisteTef = function () {


                angular.forEach($scope.state.data.Pagamentos, function (value, key) {

                    if ((!(value.TEFID == null || value.TEFID == '')) || (value.Tipo.Codigo == "Q") || (value.Tipo.Codigo == "11")) {
                        pedidoService
                            .reOpenOrder($scope.state.data)
                            .then(
                                function (response) {
                                    if (response.Status < 0) {
                                        $scope.$parent.toastr.error(response.Message, "Serviço");
                                        console.error(response.Exception);
                                    } else {
                                        $scope.state.pagamento.currentIndex = 2;
                                        //$scope.gotoNextPagamento();
                                    }
                                },
                                function (err) { $scope.$parent.toastr.error(err); }
                            );
                        return;
                    }
                });
            }

            $scope.getAllNotificacao = function () {

                $scope.getNotifications();


            }

            $scope.toggleModalNotificacoes = function () {
                $scope.state.modalNotificacao = !$scope.state.modalNotificacao;
                if ($scope.state.modalNotificacao)
                    $scope.getNotifications();
            }

            $scope.getNotifications = function () {
                notaFiscalService.getAllNotificacaoNotaFiscal().then(function (data) {
                    $scope.state.notificacoes = data;
                });

                notaFiscalService.getAllNotificacaoNotaSat().then(function (data) {
                    if (data === null) { } else {
                        $scope.statusNotificacaoSatOk = true;
                    }
                });
            }
            $scope.notificacaoSatOk = function () {
                notaFiscalService.saveNotificacaoNotaSat().then(function () {
                    $scope.statusNotificacaoSatOk = false;
                }, function () {
                    $scope.statusNotificacaoSatOk = false;
                });
            }
            $scope.removerNotificacao = function (index, id) {
                notaFiscalService.setVisualizada(id).then(function () {
                    $scope.getNotifications();
                });
            }
            $scope.marcarTodasComoLidas = function () {
                notaFiscalService.setVisualizadas().then(function () {
                    $scope.getNotifications();
                    $scope.state.notificacoes.length = 0;
                });
            }

            $scope.resendNotaRejeitada = function (nota) {
                notaFiscalService
                    .resendNotaRejeitada(nota.NotaFiscal.Numero, nota.NotaFiscal.Serie.Codigo)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                $scope.getNotifications();
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.resendAllNotaRejeitada = function () {
                notaFiscalService
                    .resendAllNotaRejeitada()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else
                                $scope.state.notificacoes.length = 0;
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.urlQrcode = "";
            //Qr Code Pix
            {
                $scope.modalQrCode = false;
                $scope.carregandoQrCode = false;

                $scope.contentQrcode = "";
                $scope.copiarQRCode = function () {
                    navigator.clipboard.writeText($scope.contentQrcode);
                    $scope.$parent.toastr.success("QR Code copiado com sucesso.");
                }
                $scope.toggleModalQrCore = function () {
                    $scope.modalQrCode = !$scope.modalQrCode;
                }
                $scope.getQRCode = function (valor) {
                    $scope.carregandoQrCode = true;
                    $scope.toggleModalQrCore();
                    pedidoService
                        .GetQRCode($scope.state.data.Numero, valor)
                        .then(
                            function (response) {
                                if (response.Status < 0) {
                                    $scope.$parent.toastr.error("Falha ao gerar qrcode", "Serviço");
                                    $scope.carregandoQrCode = false;
                                    $scope.toggleModalQrCore();
                                }
                                else {

                                    $scope.contentQrcode = response.Data;
                                    $scope.urlQrcode = "https://chart.googleapis.com/chart?cht=qr&chl=" + response.Data + "&chs=200x200&chld=L|0";
                                    $scope.carregandoQrCode = false;
                                }
                            },
                            function (err) {
                                $scope.$parent.toastr.error("Falha ao gerar qr code");
                                $scope.carregandoQrCode = false;
                                $scope.toggleModalQrCore();
                            }
                        );
                }
            }

            $scope.getNewItem = function () {
                pedidoService
                    .getNewItem()
                    .then(
                        function (response) {

                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {
                                angular.copy(response.Data, $scope.state.data);
                            }

                            //Dados padrões
                            //Criar  para corrigir esse erro.
                            if (!$scope.$parent.config) {
                                $scope.$parent.toastr.error("Erro no serviço", "Serviço");
                                return;
                            }
                            //$scope.state.data.Vendedor = $scope.$parent.config.Vendedor;
                            $scope.state.data.TabelaPreco = $scope.$parent.config.TabelaPreco;
                            $scope.state.data.Filial = $scope.$parent.config.Filial;
                            $scope.state.data.OperacaoVenda = $scope.$parent.config.OperacaoVenda;
                            $scope.state.data.Status = -1;
                            $("#cliente").focus();

                            CountValidItens();
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getAllVendedor = function () {
                $scope.state.carregandoVendedores = true;
                entidadeAuxiliarService
                    .getAllVendedor()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.vendedor.data);
                            $scope.state.carregandoVendedores = false;
                        },
                        function (err) {
                            $scope.$parent.toastr.error(err);
                            $scope.state.carregandoVendedores = false;
                        }
                    );
            };
            $scope.getAllOperacaoVenda = function () {
                entidadeAuxiliarService
                    //.getAllOperacaoVenda()
                    .getOperacoesVendaValida()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.operacaoVenda.data);
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getAllCondicaoPagamento = function () {
                entidadeAuxiliarService
                    .getAllCondicaoPagamento()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.condicaoPagamento.data);
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getAllAdministradora = function () {
                entidadeAuxiliarService
                    .getAllAdministradora()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {
                                angular.copy(angular.fromJson(response.Data.filter(obj => !obj.IndicaCarteiraDigital)), $scope.auxiliar.administradora.data);
                                $scope.administradoras.debito = filtrarArray($scope.auxiliar.administradora.data, 'Credito', 1);
                                $scope.administradoras.credito = filtrarArray($scope.auxiliar.administradora.data, 'Credito', 0);
                                $scope.administradoras.carteiraDigital = angular.fromJson(response.Data.filter(obj => obj.IndicaCarteiraDigital && obj.IndicaAtiva));
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };

            var filtrarArray = function (array, atrributo, valor) {
                var item = [];

                item = $.grep(array, function (item) {
                    return item[atrributo] == valor || item[atrributo] == 3;
                });

                return item;
            }
            $scope.getAllTipoPagamento = function () {
                entidadeAuxiliarService
                    .getAllTipoPagamento()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.tipoPagamento.data);
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };

            $scope.getConsulta = function () {
                if ($scope.state.consulta.filtro.length > 0) {
                    if ($scope.state.consulta.filtro.split(':').length > 1) {
                        $scope.state.consulta.filtro = ($scope.state.consulta.filtro.split(':')[1]).trim();
                    }
                }

                $scope.auxiliar.selecionarProduto.carregando = true;
                $scope.auxiliar.selecionarProduto.statudetalheproduto = false;
                $scope.auxiliar.selecionarProduto.statuslistaproduto = false;
                $scope.auxiliar.selecionarProduto.statusprodutoencontrado = false;
                $scope.auxiliar.consulta.lst = [];
                $scope.auxiliar.consulta.data = {};

                produtoService
                    .getConsultaByTabelaPrecoWithReferencia($scope.state.consulta.filtro,
                        $scope.$parent.config.OperacaoVenda.TabelaPadrao.Codigo)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                $scope.auxiliar.selecionarProduto.carregando = false;
                            }
                            else {

                                var isarray = Array.isArray(response.Data);
                                if (!isarray) {
                                    angular.copy(angular.fromJson(response.Data), $scope.auxiliar.consulta.data);
                                    $timeout(function () {
                                        $scope.auxiliar.selecionarProduto.statudetalheproduto = true;
                                        $scope.auxiliar.selecionarProduto.carregando = false;
                                    }, 600);
                                }
                                else {

                                    angular.copy(angular.fromJson(response.Data), $scope.auxiliar.consulta.lst);
                                    $timeout(function () {
                                        $scope.auxiliar.selecionarProduto.statuslistaproduto = true;
                                        $scope.auxiliar.selecionarProduto.carregando = false;
                                    }, 600);
                                }
                            }
                            $('[ng-model$="consulta.filtro"]').focus();
                            $scope.state.consulta.filtro = '';
                            $scope.state.consulta.bipado = true;
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getVendaSuspensa = function () {
                $scope.auxiliar.vendaSuspensa.carregando = true;
                $scope.auxiliar.vendaSuspensa.vazio = false;
                pedidoService
                    .GetVendasSuspensas()
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.vendaSuspensa.data);

                            $scope.auxiliar.vendaSuspensa.carregando = false;
                            $scope.auxiliar.vendaSuspensa.vazio = ($scope.auxiliar.vendaSuspensa.data.length == 0);
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getCreditoCalculado = function () {
                $scope.state.credito.total = ($scope.state.data.Total * 10 / 100);
            };

            $scope.isNumeric = function (val) {
                var er = /^[0-9]+$/;
                return (er.test(val));
            }

            $scope.boletaSubmit = function (event) {

                if (event.which === 13 || event.keyCode === 13) {
                    $(".imputCliente")[0].focus();
                }

            }

            $scope.lookupCliente = function (val) {

                if (val == null || val == "") {
                    $scope.cpfValido = false;
                    return;
                }
                return $q.when(
                    clienteService
                        .GetTopCliente(val)
                        .then(function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {
                                if ($scope.isNumeric(val)) {
                                    clienteService
                                        .validaCpf(val)
                                        .then(function (response) {

                                            if (response.Status < 0)
                                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                            else if (response.Data == true && $scope.noResults && val.length == 11) {

                                                $scope.cpfValido = true;
                                            }
                                            else
                                                $scope.cpfValido = false;
                                        });
                                }
                                console.log(2)
                                return response.Data;
                            }
                        }));
            };

            $scope.lookupProduto = function (val) {
                return $q.when(
                    produtoService
                        .getByReferencia(val)
                        .then(function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {
                                return response.Data;
                            }
                        }));
            };

            $scope.alteracaoVendedor = function () {

                if ($scope.$parent.config.TicketPersonalizado) {
                    $timeout(function () {
                        $(".boleta")[0].focus();
                    }, 1000);

                }
                else {
                    $timeout(function () {
                        $(".imputCliente")[0].focus();
                    }, 1000);

                }
            }
            $scope.selectCliente = function (val) {
                if (val != null) {
                    $scope.erroCliente = "";
                    if (val && val.Nome.trim().toLowerCase() != 'consumidor') {
                        if (val.Nome.trim().length <= 3 && val.NomeCompleto.trim().length <= 3) {
                            $scope.erroCliente = "Nome do cliente tem menos de 3 caracteres.";
                        }
                    }

                    if (val && val.PessoaFisica && val.CPF.trim().replace('.', '').replace('.', '').replace('-', '').length != 11)
                        $scope.erroCliente = "CPF do cliente não está correto.";
                    else if (val && !val.PessoaFisica && val.CPF.trim().replace('.', '').replace('.', '').replace('-', '').replace('/', '').length != 14)
                        $scope.erroCliente = "CNPJ do cliente não está correto.";



                    var validaCliente = true;
                    if ($scope.erroCliente != "")
                        validaCliente = false;

                    if (!validaCliente) {
                        $scope.mostraErro = true;
                        $scope.state.data.Cliente = null;
                        return false;
                    }

                    $scope.state.data.Cliente = val;

                    var verificarClienteCadCompleto = $scope.$parent.config.NotificarCadIncompleto;
                    var clientePossuiCadastroCompleto = clienteService.validarCadastroCompletoCliente(val);

                    if (verificarClienteCadCompleto && !clientePossuiCadastroCompleto) {
                        $scope.clientePesquisadoIncompleto = true;
                        $scope.$parent.toastr.error('O cliente não possuí todos os campos cadastrados. Se possível, atualize-o');
                    }
                    else { $scope.clientePesquisadoIncompleto = false; }


                    if (val && val.CPF) {


                        clienteService.validaCpf(val.CPF).then(
                            function (response) {
                                if ($scope.state.data.Status != 0 &&
                                    !$scope.statusvalidavendedoradd &&
                                    localStorage.getItem("itensConsulta") != null &&
                                    !angular.isUndefined($scope.state.data) &&
                                    $scope.state.data.Vendedor != null
                                    && !angular.isUndefined($scope.state.data.Vendedor)) {

                                    var listProdutos = JSON.parse(localStorage.getItem("itensConsulta"));
                                    var listCodigoBarra = [];

                                    angular.forEach(listProdutos, function (item, key) {

                                        if (!angular.isUndefined(item.Barra)
                                            && !angular.isUndefined(item.Barra.Codigo)) {
                                            var quantidade = parseInt(item.Quantidade);
                                            for (var i = 0; i < quantidade; i++) {
                                                listCodigoBarra.push(item.Barra.Codigo)
                                            }
                                        }
                                    });

                                    setTimeout(function () {
                                        $scope.addItemPedidos(listCodigoBarra);
                                        localStorage.removeItem("itensConsulta");
                                    }, 1000);
                                } else if ($scope.statusvalidavendedoradd &&
                                    $scope.state.codigoBarras !== '' &&
                                    $scope.state.data.Vendedor != null &&
                                    !angular.isUndefined($scope.state.data.Vendedor) &&
                                    $scope.state.data.Cliente != null) {

                                    $scope.statusvalidavendedoradd = false;
                                    $scope.addItemPedido();
                                }


                                $scope.state.data.Cliente.CPF = (response.Data ? $scope.state.data.Cliente.CPF : "");
                            });
                    };

                    $timeout(function () {
                        $('.openBarCode')[0].focus();
                    }, 1000);

                }
            };


            $scope.enterCliente = function (event) {

                if (event.keyCode == 13) {
                    $timeout(function () {
                        $('.openBarCode')[0].focus();
                    }, 1000);
                }

            }

            $scope.campoInvalido = function (campo) {

                var isInvalid = function (value) {
                    var invalid = (value == null || value == "");
                    return invalid;
                }

                if (!$scope.$parent.config.NotificarCadIncompleto)
                    return false;

                switch (campo) {
                    case 'email':
                        var value = clienteForm.email.value;
                        return isInvalid(value);
                        break;
                    case 'telefoneDDD':
                        var value = clienteForm.telefoneDDD.value;
                        return isInvalid(value);
                        break;
                    case 'telefoneNumero':
                        var value = clienteForm.telefoneNumero.value;
                        return isInvalid(value);
                        break;
                    case 'celularDDD':
                        var value = clienteForm.celularDDD.value;
                        return isInvalid(value);
                        break;
                    case 'celularNumero':
                        var value = clienteForm.celularNumero.value;
                        return isInvalid(value);
                        break;
                    case 'aniversario':
                        var value = clienteForm.aniversario.value;
                        return isInvalid(value) && $scope.$parent.config.TrocaAniversarioCliente;
                        break;
                    case 'genero':
                        var value = clienteForm.genero.value;
                        return isInvalid(value);
                        break;
                    case 'cep':
                        var value = clienteForm.cep.value;
                        return isInvalid(value);
                        break;
                    case 'endereco':
                        var value = clienteForm.endereco.value;
                        return isInvalid(value);
                        break;
                    case 'numero':
                        var value = clienteForm.numero.value;
                        return isInvalid(value);
                        break;
                    case 'complemento':
                        var value = clienteForm.complemento.value;
                        return isInvalid(value);
                        break;
                    case 'bairro':
                        var value = clienteForm.bairro.value;
                        return isInvalid(value);
                        break;
                    case 'cidade':
                        var value = clienteForm.cidade.value;
                        return isInvalid(value);
                        break;
                    case 'estado':
                        if (clienteForm.estado.selectedOptions[0]) {
                            var value = clienteForm.estado.value.replace('?', '');
                            return isInvalid(value);
                        }
                        else {
                            return false;
                        }
                        break;
                    default:
                        return false;
                }
            }


            $scope.escondeErro = function () { $scope.mostraErro = false; }
            $scope.getTokenFidelidade = function (success) {
                fidelidadeService
                    .getToken()
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                console.error(response.Exception);
                            } else {
                                $scope.state.fidelidade.token = response.Data;
                                if (success)
                                    success();
                            }
                        },
                        function (error) {
                            //$scope.$parent.toastr.error('Requisição de token', 'Comunicação com o servidor');
                            console.error(error);
                        }
                    );
            };
            $scope.showMessageClienteNaoParticipa = false;
            $scope.getInfoFidelidade = function () {
                $scope.state.fidelidade.carregando = true;
                $scope.state.fidelidade.ativo = false;
                fidelidadeService
                    .getInfo($scope.state.fidelidade.token, $scope.state.data.Cliente.CPF)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.state.fidelidade.info = response.Status;
                                //$scope.$parent.toastr.error(response.Message, 'Requisição de informações de crédito');
                                console.error(response.Exception);
                            }
                            else {
                                $scope.state.fidelidade.info = response.Data;

                                if ($scope.state.fidelidade.info == 0 || ($scope.state.fidelidade.info == 2)) {//&& $scope.state.data.Cliente.Fidelidade == true)) {
                                    $scope.state.fidelidade.ativo = false;
                                    $scope.state.data.Cliente.Fidelidade = false;
                                    $scope.showMessageClienteNaoParticipa = true;
                                } else {
                                    if ($scope.state.fidelidade.info.Fidelidade != $scope.state.data.Cliente.Fidelidade) {
                                        $scope.state.data.Cliente.Fidelidade = $scope.state.fidelidade.info.Fidelidade;
                                        $scope.SetParticipaFidelidade($scope.state.data.Cliente.Codigo, $scope.state.data.Cliente.Fidelidade);
                                    }
                                    $scope.state.fidelidade.ativo = true;
                                }
                            }
                            $scope.state.fidelidade.carregando = false;
                        },
                        function (error) {
                            //$scope.$parent.toastr.error('Requisição de informações de crédito', 'Comunicação com o servidor');
                            console.error(error);
                            $scope.state.fidelidade.carregando = false;
                        }
                    );
            };

            $scope.SetParticipaFidelidade = function (codigo, participa) {
                clienteService
                    .SetParticipaFidelidade(codigo, participa)
                    .then(
                        function (response) {

                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Resgate de créditos');


                            } else {
                            }
                        },
                        function (error) {
                            //$scope.$parent.toastr.error('Ao resgatar de créditos.', 'Comunicação com o servidor');
                            console.error(error);
                        }
                    );
            };
            $scope.setResgateFidelidade = function (success, error) {
                fidelidadeService
                    .setResgate($scope.state.fidelidade.token, $scope.state.data.Cliente.CPF, $scope.state.data.Numero, $scope.state.data.DescontoFidelidade, ($scope.state.data.Total + $scope.state.data.DescontoFidelidade))
                    .then(
                        function (response) {

                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Resgate de créditos');
                                console.error(response.Exception);
                                if (error)
                                    error(response);
                            } else {
                                $scope.state.fidelidade.info = response.Data;
                                if (success)
                                    success();
                            }
                        },
                        function (error) {
                            //$scope.$parent.toastr.error('Ao resgatar de créditos.', 'Comunicação com o servidor');
                            console.error(error);
                        }
                    );
            };
            $scope.getMaximoParaResgate = function () {
                return Math.min($scope.state.fidelidade.info.Saldo, $scope.state.data.Total);
            };

            $scope.refresh = function () {
                $scope.get();
                $scope.getAllVendedor();
                $scope.getAllOperacaoVenda();
                $scope.getAllCondicaoPagamento();
                $scope.getAllAdministradora();
                $scope.getAllTipoPagamento();
                $scope.getAllEstado();
                $scope.getAllFilial();
                $scope.buscarTransportadoras();

                if ($scope.state.data.Pedido == null) {
                    initializeCliente();
                    
                    if ($scope.$parent.config.UtilizaVendedorUsuario) {
                        aguardarPerfil(100);
                        //$scope.selectVendedor($scope.$parent.environment.perfil.Codigo);
                    }
                }

                if ($scope.$parent.config.Fidelidade.Ativo)
                    $scope.getTokenFidelidade();
                

            };
            function aguardarPerfil(tentativas) {
                
                if (tentativas > 0) {
                    tentativas--
                    if ($scope.$parent.environment?.perfil?.Codigo) {
                        $scope.selectVendedor($scope.$parent.environment.perfil.Codigo);
                    } else {
                        $timeout(aguardarPerfil(tentativas), 200);
                    }
                }
            }
            $scope.save = function () {
                $scope.state.data.Vendedor = $scope.state.data.Vendedor;
                //$scope.state.data.Vendedor = $scope.$parent.config.Vendedor;

                pedidoService
                    .save($scope.state.data)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(response.Data, $scope.state.data);
                        },
                        function (error) { $scope.$parent.toastr.error(error, "Salvando Pedido"); }
                    );
            };
            $scope.prepareNewItem = function (codigobarra) {
                var pedido = {};
                angular.copy($scope.state.data, pedido);
                pedido.Itens = null;
                pedidoService
                    .prepareNewItem(pedido, codigobarra)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Preparando item de saída");
                            else {
                                $scope.state.Itens = response.Data.CodBipado;
                                $scope.state.ultimoProduto = response.Data.Produto;
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Sem comunicação com o servidor.");
                        }
                    );
            };

            $scope.togglemodalCreditoDetalhado = function () {


                $scope.totalCreditoCampanha = 0;
                angular.forEach($scope.state.fidelidade.info.Campanhas, function (item) {

                    $scope.totalCreditoCampanha = (($scope.state.data.Total * item.Percentual) / 100) + $scope.totalCreditoCampanha;
                });


                $scope.modalCreditoDetalhado = !($scope.modalCreditoDetalhado);
            }

            $scope.togglemodalProcessoTroca = function () {
                if ($scope.state.modalProcessoTroca == false)
                    $scope.state.data.processoTroca = {};
                $scope.state.modalProcessoTroca = !$scope.state.modalProcessoTroca;
            }

            $scope.addItemPedido1 = function (param) {
                if (!$scope.state.data.processoTroca) {
                    $scope.state.data.processoTroca = { ticket: "Processo3" };
                }

                $scope.addItemPedido();
            }


            $scope.addItemPedidoByConsulta = function () {

                var vendedor = $("#vendedor").val();
                $("#codigo-barras").val($scope.auxiliar.consulta.data.Barra.Codigo);
                $scope.state.codigoBarras = $scope.auxiliar.consulta.data.Barra.Codigo;

                if (vendedor == "" || vendedor == "?" || $scope.state.data.Cliente == null || $scope.state.data.Vendedor == null ||
                    !$scope.state.data.Vendedor || !$scope.state.data.Vendedor.Codigo
                    || ($scope.state.data.Vendedor.DesativadoEm && $scope.state.data.Vendedor.DesativadoEm < new Date())) {

                    $scope.state.statusmsgselecionevendeor = true;
                    $scope.statusvalidavendedoradd = true;

                } else {

                    $scope.state.statusmsgselecionevendeor = false;
                    $scope.statusvalidavendedoradd = false;
                    $scope.addItemPedido();

                }

                $timeout(function () {
                    $scope.toggleConsulta();
                }, 1000);
            }

            $scope.addItemPedidos = function (listCodigoBarra) {

                var vendedor = $("#vendedor").val();
                if (vendedor == "" || vendedor == "?" || !$scope.state.data.Vendedor || !$scope.state.data.Vendedor.Codigo || ($scope.state.data.Vendedor.DesativadoEm && $scope.state.data.Vendedor.DesativadoEm < new Date())) {
                    $scope.$parent.toastr.error("Informe o vendedor da Venda ou selecione um vendedor ativo.", "Atenção");
                    $scope.carregandoBipagem = false;
                    $scope.state.codigoBarras = "";
                    $timeout(function () {
                        $("#codigo-barras").focus();
                    });
                    return;
                }
                if ($scope.$parent.config.TicketPersonalizado) {
                    if ($scope.$parent.config.BoletaObrigatoria) {
                        if (!$scope.state.data.Numero) {
                            $scope.$parent.toastr.error("O número da boleta é obrigatório", "Atenção");
                            $scope.carregandoBipagem = false;
                            $scope.state.codigoBarras = "";
                            return;
                        }
                    }
                    if (!$scope.boletaValidada && $scope.state.data.Numero && $scope.state.data.Numero != "") {
                        $scope.$parent.toastr.error("O número da boleta já está sendo utilizado", "Atenção");
                        $scope.carregandoBipagem = false;
                        $scope.state.codigoBarras = "";
                        return;
                    }

                }


                //if ($scope.state.permiteinserir || $scope.state.modalProcessoTroca == true) {
                // if ($scope.state.data.Status == -1 && $scope.state.modalProcessoTroca == false)
                //$scope.state.permiteinserir = false;

                pedidoService
                    .addItemPedidos($scope.state.data, listCodigoBarra, $scope.state.troca.ativo)
                    .then(
                        function (response) {
                            $scope.carregandoBipagem = false;
                            if (response.Data == "") {
                                $scope.state.modalProcessoTroca = true;
                                //$scope.state.data.processoTroca.ticket = "";
                                //$scope.state.data.processoTroca.codigoFilial = "";
                                //$scope.state.data.processoTroca.cpfCliente = "";
                                return;
                            }
                            if (response.Status < 0) {

                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                console.error(response.Exception);
                                $scope.state.codigoBarras = "";
                                $timeout(function () {
                                    $("#codigo-barras").focus();
                                });
                                $scope.state.data.processoTroca = null;
                                $scope.state.modalProcessoTroca = false;
                            } else {
                                if (!response.Data) {

                                    $scope.state.addProduto.ativo = true;
                                    $scope.prepareNewItem($scope.state.codigoBarras);
                                    $scope.state.codigoBarras = "";

                                }
                                else {
                                    var vendedor = $scope.state.data.Vendedor;
                                    angular.copy(response.Data, $scope.state.data);
                                    $scope.state.modalProcessoTroca = false;

                                    $scope.prepareRegrasDesconto($scope.state.data.Cliente);
                                    //atualizar vendedor selecionado anteriormente
                                    if ($scope.state.data.Vendedor.Codigo != vendedor.Codigo)
                                        $scope.state.data.Vendedor = vendedor;

                                    if ($scope.state.data.Numero) {
                                        //$scope.state.troca.ativo = false;

                                        $scope.state.codigoBarras = "";
                                        if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                            $scope.TrocaOperacaoVenda($scope.state.data);
                                        }
                                        $scope.state.lastProdutoIndex = $scope.state.data.Itens.length - 1;
                                        $timeout(function () {
                                            $("#codigo-barras").focus();
                                        });
                                    } else
                                        $state.go("state-venda-add", { id: response.Data.Numero }, { location: "replace" }); //não grava no histórico

                                    CountValidItens();
                                }
                                $scope.state.data.processoTroca = null;
                                $scope.state.modalProcessoTroca = false;
                            }
                            $scope.state.permiteinserir = true;
                        },
                        function (err) {
                            $scope.carregandoBipagem = false;
                            $scope.$parent.toastr.error(err);
                            $scope.state.permiteinserir = true;
                        }
                    );
                //  }

            };


            $scope.addItemPedido = function () {
                if ($scope.carregandoBipagem)
                    return;

                $scope.carregandoBipagem = true;

                var vendedor = $("#vendedor").val();
                if (vendedor == "" || vendedor == "?" || !$scope.state.data.Vendedor || !$scope.state.data.Vendedor.Codigo || ($scope.state.data.Vendedor.DesativadoEm && $scope.state.data.Vendedor.DesativadoEm < new Date())) {
                    $scope.$parent.toastr.error("Informe o vendedor da Venda ou selecione um vendedor ativo.", "Atenção");
                    $scope.carregandoBipagem = false;
                    $scope.state.codigoBarras = "";
                    $timeout(function () {
                        $("#codigo-barras").focus();
                    });
                    return;
                }
                if ($scope.$parent.config.TicketPersonalizado) {
                    if ($scope.$parent.config.BoletaObrigatoria) {
                        if (!$scope.state.data.Numero) {
                            $scope.$parent.toastr.error("O número da boleta é obrigatório", "Atenção");
                            $scope.carregandoBipagem = false;
                            $scope.state.codigoBarras = "";
                            return;
                        }
                    }
                    if (!$scope.boletaValidada && $scope.state.data.Numero && $scope.state.data.Numero != "") {
                        $scope.$parent.toastr.error("O número da boleta já está sendo utilizado", "Atenção");
                        $scope.carregandoBipagem = false;
                        $scope.state.codigoBarras = "";
                        return;
                    }
                }

                if (!$scope.state.codigoBarras) {
                    $scope.$parent.toastr.error("Informe o código de barras para adicionar o produto à Venda", "Atenção");
                    $scope.carregandoBipagem = false;
                    $timeout(function () {
                        $("#codigo-barras").focus();
                    });
                    return;
                }

                //if ($scope.state.permiteinserir || $scope.state.modalProcessoTroca == true) {
                // if ($scope.state.data.Status == -1 && $scope.state.modalProcessoTroca == false)
                //$scope.state.permiteinserir = false;

                var pedido = {};
                angular.copy($scope.state.data, pedido)

                pedido.Itens = null;
                $timeout(function () {


                }, 500);
                pedidoService
                    .addItemPedido(pedido, $scope.state.codigoBarras, $scope.state.troca.ativo)
                    .then(
                        function (response) {
                            $scope.carregandoBipagem = false;
                            if (response.Data == "") {
                                $scope.state.modalProcessoTroca = true;
                                //$scope.state.data.processoTroca.ticket = "";
                                //$scope.state.data.processoTroca.codigoFilial = "";
                                //$scope.state.data.processoTroca.cpfCliente = "";
                                return;
                            }
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                console.error(response.Exception);
                                $scope.state.codigoBarras = "";

                                $timeout(function () {
                                    $("#codigo-barras").focus();
                                });
                                $scope.state.data.processoTroca = null;
                                $scope.state.modalProcessoTroca = false;
                            } else {
                                if (!response.Data) {

                                    $scope.state.addProduto.ativo = true;
                                    $scope.prepareNewItem($scope.state.codigoBarras);
                                    $scope.state.codigoBarras = "";

                                }
                                else {
                                    var vendedor = $scope.state.data.Vendedor;
                                    angular.copy(response.Data, $scope.state.data);
                                    $scope.state.modalProcessoTroca = false;

                                    $scope.prepareRegrasDesconto($scope.state.data.Cliente);
                                    //atualizar vendedor selecionado anteriormente
                                    if ($scope.state.data.Vendedor.Codigo != vendedor.Codigo)
                                        $scope.state.data.Vendedor = vendedor;

                                    if ($scope.state.data.Numero) {
                                        //$scope.state.troca.ativo = false;
                                        $scope.state.codigoBarras = "";
                                        if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                            var pedido = {};
                                            angular.copy($scope.state.data, pedido)

                                            pedido.Itens = null;
                                            $scope.TrocaOperacaoVenda(pedido);
                                        }
                                        $scope.state.codigoBarras = "";
                                        $scope.state.lastProdutoIndex = $scope.state.data.Itens.length - 1;
                                        $timeout(function () {
                                            $("#codigo-barras").focus();

                                            // document.getElementById("codigo-barras").focus()
                                        });
                                    } else
                                        $state.go("state-venda-add", { id: response.Data.Numero }, { location: "replace" }); //não grava no histórico

                                    CountValidItens();
                                }
                                $scope.state.data.processoTroca = null;
                                $scope.state.modalProcessoTroca = false;
                            }
                            $scope.state.permiteinserir = true;
                        },
                        function (err) {
                            $scope.carregandoBipagem = false;
                            $scope.$parent.toastr.error(err);
                            $scope.state.permiteinserir = true;
                        }
                    );
                //  }

            };

            $scope.getNewQuantidadeCorTamanho = function (size, color, itemProduto) {

                if (itemProduto == null) {
                    if (!size || size == "" || !color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Produto.Estoques.length; i++) {
                        var item = itemProduto.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTamanho(item.EstoqueTamanhos, size);
                    }
                }
                else {
                    if (!size || size == "" || !color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Produto.Estoques.length; i++) {
                        var item = itemProduto.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTamanho(item.EstoqueTamanhos, size, itemProduto);
                    }
                }
                return 0;
            }
            $scope.getnewQuantidadeCor = function (color, itemProduto) {
                if (itemProduto == null) {
                    if (!color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Produto.Estoques.length; i++) {
                        var item = itemProduto.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTodosTamanho(item.EstoqueTamanhos);
                    }
                }
                else {
                    if (!color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Produto.Estoques.length; i++) {
                        var item = itemProduto.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTodosTamanho(item.EstoqueTamanhos);
                    }
                }
                return 0;
            }

            $scope.validateBoleta = function (pBoleta) {
                pedidoService.validateBoleta(pBoleta).then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            $scope.boletaValidada = false;
                        }
                        else
                            $scope.boletaValidada = true;
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                    }
                );

            }


            $scope.saveOperacaoVendaOnSession = function (message) {

                $scope.$parent.config.OperacaoVenda = $scope.auxiliar.OperacaoVendaSelecionada;
                var operacaoVenda = $scope.$parent.config.OperacaoVenda;
                configService.saveOperacaoVendaOnSession(operacaoVenda)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Erro ao salvar a operação de venda.");
                            else {
                                $scope.$parent.config = response.Data;

                                $scope.getAllTipoPagamento();
                                $scope.getAllOperacaoVenda();
                                $scope.getAllCondicaoPagamento();
                                $scope.getAllAdministradora();
                                if (message)
                                    $scope.$parent.toastr.success("Operação de Venda alterada com sucesso.");
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Sem comunicação com o servidor.");
                        }
                    );
            };
            $scope.saveVendedorOnSession = function () {
                var vendedor = $scope.$parent.config.Vendedor;
                configService.saveVendedorOnSession(vendedor)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Erro ao salvar o vendedor sugerido.");
                            else {
                                $scope.$parent.toastr.success("Vendedor sugerido alterado com sucesso.");
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Sem comunicação com o servidor.");
                        }
                    );
            };

            $scope.saveOpcoesVendaOnSession = function () {
                $scope.saveOperacaoVendaOnSession(true);
                //  $scope.saveVendedorOnSession();
                $scope.toggleOpcaoVenda();
            }

            $scope.repeatItemPedido = function () {
                $scope.state.codigoBarras = $scope.state.data.Itens[$scope.state.lastProdutoIndex].CodigoBarras;
                $scope.addItemPedido();
            };

   
            $scope.prepareNewPagamento = function () {

                $scope.disableParcel = true;
                // $scope.closeShipay();
                //$scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].DisableParcel = true;
                pedidoService
                    .prepareNewPagamento($scope.state.data, $scope.state.checkoutoficial, $scope.state.checkoutabatido)
                    .then(
                        function (response) {

                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {

                                angular.copy(response.Data, $scope.state.data);
                                $scope.getDiscount();

                                //if ($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.length > 0) {
                                //    if ($scope.state.data.Pagamentos != null && $scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].DisableParcel) {
                                //        $scope.$parent.toastr.error("O valor da parcela não ser inferior ao mínimo de " + $scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].ValorParcelaMinima + " reais");
                                //        $scope.disableParcel = true;

                                //    }    
                                //    else
                                //        $scope.disableParcel = false;
                                //        //$scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].DisableParcel = false;
                                //}

                            }
                        },
                        function (error) { $scope.$parent.toastr.error(error, "Preparando Nova Parcela"); }

                    );
            };
            $scope.prepareNewPagamentoLivre = function () {

                if (($scope.state.pagamento.livre.currentTipoPagamento.Codigo == "I" || $scope.state.pagamento.livre.currentTipoPagamento.Codigo == "K" || $scope.state.pagamento.livre.currentTipoPagamento.Codigo == 9 || $scope.state.pagamento.livre.currentTipoPagamento.Codigo == 10) && $scope.state.TEF.IDSiTef == "") {
                    $scope.$parent.toastr.error("Necessário iniciar o processo de TEF para essa forma de pagamento");
                    return;
                }
                pedidoService
                    .prepareNewPagamentoLivre($scope.state.data, $scope.state.pagamento.livre.currentTipoPagamento, $scope.state.checkoutoficial, $scope.state.checkoutabatido)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                angular.copy(response.Data, $scope.state.data);
                                $scope.getDiscount();
                            }

                        },
                        function (error) { $scope.$parent.toastr.error(error, "Preparando Nova Parcela"); }
                    );
            };

            $scope.GetClass = function (size, color, itemProduto) {


                if ($scope.$parent.config.ExibeEstoqueCor || ($parent.config.ExibeQtdeEstoqueVenda != null && $parent.config.ExibeQtdeEstoqueVenda && $scope.$parent.config.ExibeEstoqueCor)) {
                    var result = $scope.getNewQuantidadeCorTamanho(size, color, itemProduto);
                    if (result > 0)
                        return 'radio-green';
                    else
                        return 'radio-red';
                }
            }

            $scope.GetClassConsulta = function (size, color, itemProduto) {

                if ($scope.$parent.config.ExibeEstoqueCor || ($scope.$parent.config.ExibeQtdeEstoqueVenda && $scope.$parent.config.ExibeEstoqueCor)) {
                    var result = $scope.getQuantidadeCorTamanho(size, color, itemProduto);
                    if (result > 0)
                        return 'radio-green';
                    else
                        return 'radio-red';
                }
            }


            var getParcelas = function () {
                var parcelas = 0;
                $scope.state.data.Pagamentos.forEach(function (item, key) {
                    parcelas += item.Valor * (item.Valor > 0 ? -1 : 1);
                });
                return parcelas;
            }
            $scope.calculaTroco = function (valor) {
                var parcelas = 0;
                $scope.state.data.Pagamentos.forEach(function (item, key) {
                    item.Troco = 0;
                });

                // if ($scope.state.data.Pagamentos.length > 1) {
                $scope.state.data.Pagamentos.forEach(function (item, key) {
                    parcelas = parcelas + item.Valor;
                });

                var valorTotal = $scope.state.data.Total;
                var discontoOperacaoVenda = $scope.DescontoPgto;

                if (discontoOperacaoVenda && !discontoOperacaoVenda.contains('null')) {
                    discontoOperacaoVenda = discontoOperacaoVenda.replace('%', '');
                }
                else {
                    discontoOperacaoVenda = 0;
                }

                //valorTotal = valorTotal - ((valorTotal * discontoOperacaoVenda) / 100);

                if (parcelas > valorTotal && valorTotal > 0) {
                    $scope.state.valorTroco = parcelas - valorTotal;
                } else {
                    $scope.state.valorTroco = 0;
                }
            };
            $scope.updatePercentualDescontoTotalPedido = function () {

                $scope.updateTrocoTotalPedido();
            };
            $scope.abrirmodaldesconto = function () {

                if (!$scope.regraDesconto.permitirdesconto) return;

                if ($scope.regraDesconto.tipo === "C") return;


                var pedido = {
                    Desconto: 0,
                    Numero: $scope.state.data.Numero,
                    Total: 0,
                    Acrescimo: 0,
                    PercentualDesconto: 0
                };

                pedido.Acrescimo = $scope.state.data.Acrescimo;
                pedido.PercentualAcrescimo = $scope.state.data.PercentualAcrescimo;

                pedido.PercentualDesconto = (($scope.state.data.Desconto - $scope.state.data.DescontoFidelidade) / $scope.state.data.Subtotal) * 100;
                pedido.Desconto = $scope.state.Desconto.descontovalorpedido;

                //$scope.verificarDescontoAcrescimoCabecalho(pedido);
                $scope.verificarDescontoAcrescimoCabecalho($scope.state.data);

                $scope.state.Desconto.descontovaloritens = $scope.computardescontototal();
                //$scope.state.data.Total = $scope.state.data.Total + $scope.state.data.Desconto;
                $scope.state.Desconto.auxtotal = $scope.state.data.Total - $scope.state.data.Desconto;
                $scope.state.Desconto.descontovalorpedido = $scope.state.data.Desconto - $scope.state.data.DescontoFidelidade;
                $scope.state.Desconto.descontoemporcentagem = pedido.PercentualDesconto;
                $scope.state.Desconto.statusmodaldescontopedido = 1;
            };
            $scope.fecharmodalmodaldesconto = function () {
                $scope.state.Desconto.statusmodaldescontopedido = 0;
            };

            $scope.endprocesso = false;
            $scope.erroprocesso = false;
            $scope.countitens = 0;
            $scope.countitensChildren = 0;

            $scope.aplicarDescontoCabecaGerente = function () {

                var descontoProcentagem = Number(Math.round($scope.state.Desconto.descontoemporcentagem).toFixed(2));
                var limiteDescontoGerente = Number(Math.round($scope.regraDesconto.limitedescontogerente).toFixed(2));

                if (descontoProcentagem > limiteDescontoGerente && $scope.regraDesconto.limitedescontogerente !== 0) {
                    $scope.$parent.toastr.error("Não é possivel aplicar o desconto porque o limite permitido é de " + $scope.regraDesconto.limitedescontogerente + "%.");
                    $scope.descartarDescontoCabeca();
                    return;
                }
                var pedido = {
                    Desconto: 0,
                    Numero: $scope.state.data.Numero,
                    Total: 0,
                    Acrescimo: 0,
                    PercentualDesconto: 0
                };

                pedido.Acrescimo = $scope.state.data.Acrescimo;
                pedido.PercentualAcrescimo = $scope.state.data.PercentualAcrescimo;

                pedido.PercentualDesconto = $scope.state.Desconto.descontoemporcentagem;
                pedido.Desconto = $scope.state.Desconto.descontovalorpedido;

                pedido.Total = $scope.state.data.Total;

                pedidoService
                    .updateDescontoNoPedido(pedido)
                    .then(
                        function (response) {
                            angular.copy(response.Data, $scope.state.data);
                            $scope.state.Desconto.descontoemporcentagem = response.Data.PercentualDesconto;
                            $scope.state.Desconto.descontovalorpedido = response.Data.Desconto - response.Data.DescontoFidelidade;


                            var mensagem = $scope.verificarDescontoAcrescimoCabecalho($scope.state.data);
                            if (mensagem) {
                                $scope.$parent.toastr.error(mensagem);
                                return;
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            $scope.descartarDescontoCabeca();
                            console.error(error);
                        }
                    );
            }
            $scope.descartarDescontoCabeca = function () {

                $scope.state.Desconto.descontoemporcentagem = $scope.state.data.PercentualDesconto;
                $scope.state.Desconto.descontovalorpedido = $scope.state.data.Desconto;
            };

            $scope.aplicarDescontoItemGerente = function () {

                var operacaoVenda = $scope.$parent.config.OperacaoVenda;
                var limiteDescontoItem = operacaoVenda.LimiteDescontoItem;
                var limiteDescontoItemGerente = operacaoVenda.LimiteDescontoItemGerente;
                var item = $scope.state.data.Itens[$scope.state.currentItem];

                if (item.PercentualDesconto > limiteDescontoItemGerente && limiteDescontoItemGerente !== 0) {
                    $scope.$parent.toastr.error("Não é possivel aplicar o desconto porque o limite de desconto permitido para o item é de " + limiteDescontoItemGerente + "%.");
                    $scope.descartarDescontoItemGerente();
                    return;
                }

                if (!$scope.valida) return;
                $scope.valida = false;

                pedidoService
                    .updateItemPedidoComAutenticacao($scope.state.data, $scope.state.data.Itens[$scope.state.currentItem].Item, true)
                    .then(
                        function (response) {
                            $scope.valida = true;
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            }
                            /* mesmo que der alguma mensagem o servidor retorna os dados atualizados anteriores */
                            angular.copy(response.Data, $scope.state.data);

                            var item = $scope.state.data.Itens[$scope.state.currentItem];
                            $scope.verificarDescontoAcrescimoItem(item);

                            $scope.prepareRegrasDesconto($scope.state.data.Cliente);

                            if ($scope.endprocesso && $scope.state.MotorDesconto.DescontoProdutos.length === $scope.countitens) {
                                $scope.endprocesso = false;
                            }
                            if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                $scope.TrocaOperacaoVenda($scope.state.data);
                            }
                            $scope.state.ItemDescontoPercentualBackup = 0;
                            $scope.state.ItemDescontoUnitarioBackup = 0;
                        },
                        function (error) {
                            $scope.endprocesso = false;
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            console.error(error);
                            $scope.descartarDescontoItemGerente();
                        });
            }

            $scope.descartarDescontoItemGerente = function () {
                ;
                $scope.get();
                //$scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto = $scope.state.ItemDescontoPercentualBackup;
                //$scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario =  $scope.state.ItemDescontoUnitarioBackup;
                $scope.state.ItemDescontoPercentualBackup = 0;
                $scope.state.ItemDescontoUnitarioBackup = 0;
            };

            $scope.aplicarAcrescimoItemGerente = function () {
                pedidoService
                    .updateItemPedidoComAutenticacao($scope.state.data, $scope.state.data.Itens[$scope.state.currentItem].Item, true)
                    .then(
                        function (response) {
                            $scope.valida = true;
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            }
                            /* mesmo que der alguma mensagem o servidor retorna os dados atualizados anteriores */
                            angular.copy(response.Data, $scope.state.data);

                            var item = $scope.state.data.Itens[$scope.state.currentItem];
                            //$scope.verificarDescontoAcrescimoItem(item);
                            $scope.state.ItemAcrescimoPercentualBackup = 0;
                            $scope.state.ItemAcrescimoUnitarioBackup = 0;
                            if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                $scope.TrocaOperacaoVenda($scope.state.data);
                            }
                        },
                        function (error) {
                            $scope.endprocesso = false;
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            console.error(error);
                            $scope.descartarAcrescimoItemGerente();
                        });
            };

            $scope.descartarAcrescimoItemGerente = function () {
                $scope.get();
                //$scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto = $scope.state.ItemDescontoPercentualBackup;
                //$scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario =  $scope.state.ItemDescontoUnitarioBackup;
                $scope.state.ItemAcrescimoPercentualBackup = 0;
                $scope.state.ItemAcrescimoUnitarioBackup = 0;
            };

            $scope.UpdateSlipDesconto = function () {
                if ($scope.state.MotorDesconto.Descricoes.length <= 0)
                    return;
                var desc = $scope.state.MotorDesconto.Descricoes.join('\n');
                desc += "\n\n Desconto no pedido: " + $scope.state.MotorDesconto.DescontoPedido;
                desc += "\n";
                for (var i = 0; i < $scope.state.MotorDesconto.DescontoProdutos.length; i++) {
                    var currentitem = $scope.state.MotorDesconto.DescontoProdutos[i];
                    desc += "\n Produto: " + currentitem.Produto + " Valor Desconto: " + currentitem.Valor;
                }

                $scope.state.SlipDesconto = desc;

                pedidoService
                    .UpdateSlipDesconto($scope.state.data)
                    .then(
                        function (response) {


                        },
                        function (error) {
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");

                            console.error(error);
                        }
                    );

            }

            $scope.SetDescontoMotorPromocao = function () {
                $scope.state.SlipDesconto = "1";
                if ($scope.state.MotorDesconto == null)
                    return;
                pedidoService
                    .UpdateMotorPromocaoPedido($scope.state.data, $scope.state.MotorDesconto)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Descontos");
                            }
                            else {
                                angular.copy(response.Data, $scope.state.data);
                                $scope.state.SlipDesconto = "desconto aplicado";
                                /// teste.aldo;
                                $scope.$parent.toastr.success("Desconto aplicados com sucesso.", "Descontos");

                            }
                        },
                        function (error) {
                            $scope.state.SlipDesconto = null;
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores na atualização do desconto do pedido. Tente novamente.", "Comunicação");
                            console.error(error);
                        }
                    );
            }

            $scope.updateDescontoTotalPedido = function (input) {


                if (!$scope.regraDesconto.permitirdesconto) {
                    $scope.$parent.toastr.error("Não é possível aplicar desconto de gerente.");
                    return;
                }
                var descPorcentagemInicial = 0;
                if (input == "$")
                    descPorcentagemInicial = $scope.state.Desconto.descontoemporcentagem;
                //if (input == "%")
                //    $scope.state.Desconto.descontovalorpedido = Number(($scope.state.data.Subtotal * $scope.state.Desconto.descontoemporcentagem / 100).toFixed(2));
                if ($scope.state.data.Subtotal > 0 && input == "$")
                    $scope.state.Desconto.descontoemporcentagem = $scope.state.Desconto.descontovalorpedido / $scope.state.data.Subtotal * 100;
                if ($scope.alteracaoAcrescimo == false) {
                    //regra do desconto, se não permitir valor ilimitado e valor for  mais que o desconto
                    if (($scope.regraDesconto.tipo === "O" || $scope.regraDesconto.tipo === "M") && $scope.state.Desconto.descontoemporcentagem != 0 &&
                        ($scope.state.Desconto.descontoemporcentagem > $scope.regraDesconto.limitedesconto)) {
                        //abrir tela de gerencia e usar seguinte regra para validar

                        var descontoProcentagem = Number($scope.state.Desconto.descontoemporcentagem.toFixed(2));
                        var limiteDescontoGerente = Number($scope.regraDesconto.limitedescontogerente.toFixed(2));
                        //if (input == "$")
                        //    descontoProcentagem =   Number(($scope.state.data.Subtotal * $scope.state.Desconto.descontoemporcentagem / 100).toFixed(2));
                        if (descontoProcentagem <= limiteDescontoGerente || $scope.regraDesconto.limitedescontogerente === 0) {

                            if ($scope.state.Desconto.descontoemporcentagem > $scope.regraDesconto.limitedesconto) {

                                $scope.$parent.autorizacaoGerente.ativo = true;
                                $scope.$parent.autorizacaoGerente.reason = "";
                                $scope.$parent.autorizacaoGerente.request = "Desconto de " + descontoProcentagem.toFixed(4) + "% aplicado para o pedido #" + $scope.state.data.Numero;
                                $scope.$parent.autorizacaoGerente.pin = "";
                                $scope.$parent.autorizacaoGerente.callback = $scope.aplicarDescontoCabecaGerente;
                                $scope.$parent.autorizacaoGerente.callbackReturn = $scope.descartarDescontoCabeca;
                                return;
                            }
                        } else {
                            $scope.$parent.toastr.error("Não é possivel aplicar o desconto porque o limite permitido é de " + $scope.regraDesconto.limitedescontogerente + "%.");
                            $scope.descartarDescontoCabeca();
                        }
                        return;
                    }
                }
                if (input == "$")
                    $scope.state.Desconto.descontoemporcentagem = descPorcentagemInicial;


                $scope.alteracaoAcrescimo = false;
                var pedido = {
                    Desconto: 0,
                    DescontoFidelidade: 0,
                    Numero: $scope.state.data.Numero,
                    Total: 0,
                    Acrescimo: 0,
                    PercentualDesconto: 0
                };

                pedido.Acrescimo = $scope.state.data.Acrescimo;
                pedido.PercentualAcrescimo = $scope.state.data.PercentualAcrescimo;

                pedido.PercentualDesconto = $scope.state.Desconto.descontoemporcentagem;
                pedido.Desconto = $scope.state.Desconto.descontovalorpedido + $scope.state.data.DescontoFidelidade;

                pedido.Total = $scope.state.data.Total;
                pedido.DescontoFidelidade = $scope.state.data.DescontoFidelidade;


                var mensagem = $scope.verificarDescontoAcrescimoCabecalho(pedido);
                if (mensagem) {
                    $scope.$parent.toastr.error(mensagem);
                    return;
                }

                pedidoService
                    .updateDescontoNoPedido(pedido)
                    .then(
                        function (response) {
                            angular.copy(response.Data, $scope.state.data);

                            $scope.verificarDescontoAcrescimoCabecalho($scope.state.data);
                            if (input == "%") {
                                $scope.state.Desconto.descontovalorpedido = response.Data.Desconto - response.Data.DescontoFidelidade;
                                $scope.state.Desconto.descontoemporcentagem = response.Data.PercentualDesconto;//- ((response.Data.DescontoFidelidade / response.Data.Subtotal) * 100) ;
                            } else {
                                $scope.state.Desconto.descontoemporcentagem = response.Data.PercentualDesconto; //- ((response.Data.DescontoFidelidade / response.Data.Subtotal) * 100);
                                $scope.state.Desconto.descontovalorpedido = response.Data.Desconto - response.Data.DescontoFidelidade;
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            if (input == "%") {
                                $scope.state.Desconto.descontovalorpedido = response.Data.Desconto;
                                $scope.state.Desconto.descontoemporcentagem = $scope.state.Desconto.descontoemporcentagem;
                            } else {
                                $scope.state.Desconto.descontoemporcentagem = response.Data.PercentualDesconto;
                                $scope.state.Desconto.descontovalorpedido = response.Data.Desconto;
                            }
                            $scope.state.Desconto.statusmodaldescontopedido = 0;
                            console.error(error);
                        }
                    );
            };

            var aplicardescontosugerido = function (valor) {

                $scope.state.Desconto.descontoemporcentagem = valor;

                var pedido = {
                    Desconto: 0,
                    PercentualDesconto: 0,
                    Numero: $scope.state.data.Numero,
                    Total: 0
                };

                $scope.state.Desconto.descontovalorpedido = $scope.state.data.Subtotal * ($scope.state.Desconto.descontoemporcentagem / 100);
                pedido.Desconto = $scope.state.Desconto.descontovalorpedido + ($scope.state.data.DescontoFidelidade || 0);
                pedido.PercentualDesconto = pedido.Desconto / $scope.state.data.Subtotal * 100;
                pedido.Total = $scope.state.data.Subtotal - pedido.Desconto;

                pedidoService
                    .updateDescontoPedido(pedido)
                    .then(
                        function (response) {

                            $scope.state.data.Desconto = pedido.Desconto;
                            $scope.state.data.Total = pedido.Total;
                            $scope.state.data.PercentualDesconto = pedido.PercentualDesconto;

                            $scope.state.Desconto.descontovalorpedido = pedido.Desconto;

                            $scope.state.Desconto.descontoemporcentagem - pedido.PercentualDesconto;

                            $scope.state.Desconto.statusmodaldescontopedido = 0;

                        },
                        function (error) {
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            $scope.state.Desconto.statusmodaldescontopedido = 0;
                            console.error(error);
                        }
                    );



            }
            $scope.prepareRegrasDesconto = function (cliente) {

                var tipo = '';
                if (cliente.Tipo != null) tipo = cliente.Tipo.Nome.trim();

                pedidoService.getregraspedido(tipo).then(
                    function (result) {
                        angular.copy(result.Data, $scope.regraDesconto);
                        if (angular.isUndefined($scope.regraDesconto)) {
                            $scope.regraDesconto.statusready = false;
                            $scope.regraDesconto.permitirdesconto = false;
                            console.error("erro na regra do desconto");
                            return;
                        }

                        if (!$scope.regraDesconto.permitirdesconto) {
                            $scope.regraDesconto.statusready = false;
                            //$scope.regraDesconto.permitirdesconto = false;
                            //return;
                        };

                        //if (($scope.regraDesconto.tipo === "O" || $scope.regraDesconto.tipo === "M")) {
                        //    if ($scope.regraDesconto.descontosugestar > 0) {
                        //        aplicardescontosugerido($scope.regraDesconto.descontosugestar);
                        //    }
                        //} else if ($scope.regraDesconto.tipo === "C" && $scope.regraDesconto.valordesconto > 0) {
                        //    aplicardescontosugerido($scope.regraDesconto.valordesconto);
                        //    $scope.regraDesconto.permitirdesconto = false;
                        //}
                    });
            };
            $scope.prepareRegrasDescontoreopen = function (cliente) {
                var tipo = '';
                if (cliente.Tipo != null) tipo = cliente.Tipo.Nome.trim();

                pedidoService.getregraspedido(tipo).then(
                    function (result) {
                        angular.copy(result.Data, $scope.regraDesconto);
                        if (angular.isUndefined($scope.regraDesconto)) {
                            $scope.regraDesconto.statusready = false;
                            $scope.regraDesconto.permitirdesconto = false;
                            console.error("erro na regra do desconto");
                            return;
                        }

                        if (!$scope.regraDesconto.permitirdesconto) {
                            $scope.regraDesconto.statusready = false;
                            //$scope.regraDesconto.permitirdesconto = false;
                            //return;
                        };

                        if (($scope.regraDesconto.tipo === "C" && $scope.regraDesconto.valordesconto > 0)) {
                            $scope.regraDesconto.permitirdesconto = false;
                        }
                    });
            };
            $scope.statusResgate = function () {

                $scope.state.descontoQTValorMinimoResgate = false;
                $scope.state.descontoValorMinimovalid = false;
                $scope.state.descontofidelidadevalid = false;
                $scope.state.descontofidelidadevalidcompra = false;
                if (!$scope.state.fidelidade.resgatar) {

                    var pedido = {
                        Numero: $scope.state.data.Numero,
                        DescontoFidelidade: 0,
                        Total: 0
                    };

                    pedido.Desconto = Math.abs(($scope.state.data.Desconto - $scope.state.data.DescontoFidelidade));
                    pedido.Total = ($scope.state.data.Total + $scope.state.data.DescontoFidelidade);

                    if (isNaN(parseInt(pedido.Total)) || pedido.Total === 0) return;

                    pedidoService
                        .updateDescontoFidelidade(pedido)
                        .then(
                            function (response) {
                                $scope.state.Desconto.statuscalculofidelidade = false;
                                $scope.state.data.DescontoFidelidade = 0;
                                $scope.state.data.Desconto = pedido.Desconto;
                                $scope.state.data.Total = pedido.Total;
                                $scope.state.Desconto.descontofidelidade = 0;
                            },
                            function (error) {
                                $scope.$parent.toastr.error(error, "Sem comunicação com o servidor.");
                            }
                        );
                }
            };
            $scope.$watch("state.Desconto.descontofidelidade", function (newvalue, oldvalue) {

                $scope.state.descontoQTValorMinimoResgate = false;
                $scope.state.descontoValorMinimovalid = false;
                $scope.state.descontofidelidadevalid = false;
                $scope.state.descontofidelidadevalidcompra = false;
                if (newvalue !== oldvalue && $scope.state.Desconto.statuscalculofidelidade) {

                    var valorcalculado = (newvalue * 100.00) / ($scope.state.data.Total + oldvalue);

                    if (newvalue > $scope.state.fidelidade.info.Saldo) {
                        $scope.state.descontofidelidadevalidcompra = true;
                        return;
                    }


                    if (newvalue < $scope.state.fidelidade.info.ValorMinimoResgateCompra) {

                        $scope.state.descontoValorMinimovalid = true;
                        return;
                    }

                    if ($scope.state.fidelidade.info.Saldo < $scope.state.fidelidade.info.QTSaldoParaResgateMinimo) {

                        $scope.state.descontoQTValorMinimoResgate = true;
                        return;
                    }


                    if (valorcalculado > $scope.regraDesconto.maximodesconto) {
                        var valormaximocalculado = ($scope.state.data.Total + oldvalue) * ($scope.regraDesconto.maximodesconto / 100.00);
                        $scope.state.data.descontomaximofidelidade = valormaximocalculado;
                        $scope.state.descontofidelidadevalid = true;
                        $scope.state.data.DescontoFidelidade = oldvalue;
                        return;
                    } else {

                        $timeout(function () {

                            var pedido = {
                                Desconto: 0,
                                Numero: $scope.state.data.Numero,
                                Total: 0,
                                DescontoFidelidade: newvalue
                            };

                            pedido.Desconto = ($scope.state.data.Desconto - $scope.state.data.DescontoFidelidade) + newvalue;
                            pedido.Total = ($scope.state.data.Total + $scope.state.data.Desconto) - pedido.Desconto;

                            if (isNaN(parseInt(pedido.Total)) || pedido.Total == 0) return;

                            $scope.state.fidelidade.valorResgate = newvalue;
                            pedidoService.updateDescontoFidelidade(pedido).then(function (result) {
                                $scope.state.data.DescontoFidelidade = newvalue;
                                $scope.state.data.Desconto = pedido.Desconto;
                                $scope.state.data.Total = pedido.Total;
                            });
                        }, 100);
                    }
                } else {
                    $scope.state.Desconto.statuscalculofidelidade = true;
                }
            });
            $scope.confirmarpagamentoTroco = function () {
                if ($scope.state.creditoTroco) {
                    $confirm({ text: "Tem certeza que deseja usar o Troco como crédito para o cliente no programa de fidelidade?" })
                        .then(function () {
                            $scope.confirmPagamento();
                        });
                } else {
                    $scope.confirmPagamento();
                }
            };


            var confirmParcelaClick = false;
            $scope.confirmPagamento = function () {

                if (confirmParcelaClick) return;
                confirmParcelaClick = true;

                /* validações */
                var parcela = $scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1];
                $scope.state.data.Troco = $scope.state.valorTroco;

                var valorParcelas = getParcelas();
                if ($scope.state.data.Total < 0 && valorParcelas < $scope.state.data.Total) {
                    $scope.$parent.toastr.error("A devolução não pode exceder o total.");
                    confirmParcelaClick = false;
                    return false;
                }

                if (parcela.Valor == 0 && !$scope.state.data.Total == 0) {
                    $scope.$parent.toastr.error("O valor deve ser informado.");
                    confirmParcelaClick = false;
                    return false;
                }
                if (parcela.Valor < 0 && $scope.state.data.Total > 0) {
                    $scope.$parent.toastr.error("O valor não pode ser menor que zero.");
                    confirmParcelaClick = false;
                    return false;
                }
                if (!parcela.Vencimento) {
                    $scope.$parent.toastr.error("O valor não pode ser menor que zero.");
                    confirmParcelaClick = false;
                    return false;
                }

                if (['A', 'E', 'I', 'B', 'K', '¨', '3', '4', '9', '10'].indexOf(parcela.Tipo.Codigo) >= 0) {
                    if (!parcela.Cartao.Administradora || !parcela.Cartao.Administradora.Codigo) {
                        $scope.$parent.toastr.error("A administradora de cartões deve ser informada.");
                        confirmParcelaClick = false;
                        return false;
                    }
                    if (!parcela.Cartao.NumeroParcelas) {
                        $scope.$parent.toastr.error("O número de parcelas do cartão deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }

                    if (!parcela.Cartao.Codigo && $scope.$parent.config.DocAutoObrigatorio) {
                        $scope.$parent.toastr.error("O código DOC do cartão deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }

                    if (!parcela.Cartao.Autorizacao && $scope.$parent.config.DocAutoObrigatorio) {
                        $scope.$parent.toastr.error("O código de autorização do cartão deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }

                } else if (['C', 'P', '1', '2'].indexOf(parcela.Tipo.Codigo) >= 0) {
                    if (!parcela.Cheque.Banco) {
                        $scope.$parent.toastr.error("O banco do cheque deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                    if (!parcela.Cheque.Agencia) {
                        $scope.$parent.toastr.error("A agência do cheque deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                    if (!parcela.Cheque.ContaCorrente) {
                        $scope.$parent.toastr.error("A conta corrente do cheque deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                    if (!parcela.Cheque.Numero) {
                        $scope.$parent.toastr.error("O número do cheque deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                } else if (['R', '6'].indexOf(parcela.Tipo.Codigo) >= 0) {
                    if (!parcela.Titulo.Identificador && parcela.Valor > 0) {
                        $scope.$parent.toastr.error("O número da chave deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                } else if (['|', 'Q'].indexOf(parcela.Tipo.Codigo) == 0) {
                    if (!parcela.Titulo.Numero) {
                        $scope.$parent.toastr.error("O número do título deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                } else if (("J").indexOf(parcela.Tipo.Codigo) >= 0) {
                    if (!parcela.Duplicata.Numero) {
                        $scope.$parent.toastr.error("O número da duplicata deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                    if (!parcela.Vencimento) {
                        $scope.$parent.toastr.error("O vencimento da duplicata deve ser informado.");
                        confirmParcelaClick = false;
                        return false;
                    }
                }

                if ($scope.state.data.Total < 0) {
                    for (var i = 0; i < $scope.state.data.Pagamentos.length; i++) {
                        $scope.state.data.Pagamentos[i].Valor = ($scope.state.data.Pagamentos[i].Valor > 0 ? $scope.state.data.Pagamentos[i].Valor * -1 : $scope.state.data.Pagamentos[i].Valor);
                    }
                }

                pedidoService
                    .confirmPagamento($scope.state.data)
                    .then(
                        function (response) {
                            confirmParcelaClick = false;

                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                angular.copy(response.Data, $scope.state.data);
                                //if (response.Data.Pagamentos[0].Troco > 0) {
                                //    response.Data.Pagamentos[0].Valor = (response.Data.Pagamentos[0].Valor + response.Data.Pagamentos[0].Troco);
                                //}
                                if ($scope.state.data.CondicaoPagamento.Codigo != "##")
                                    $scope.prepareNewPagamento();

                            }
                        },
                        function (error) {
                            confirmParcelaClick = false;
                            $scope.$parent.toastr.error(error, "Gravando Parcela");
                        }
                    );
            };
            $scope.clearPagamento = function () {

                $scope.state.valorTroco = 0;
                if ($scope.ValidaPagamentoTEF())
                    return;

                if ($scope.state.data && $scope.state.data.Pagamentos != null && $scope.state.data.Pagamentos.find(obj => obj.Tipo.Codigo == "Q" || obj.Tipo.Codigo == "11"))
                    return;
                var pedido = {};
                angular.copy($scope.state.data, pedido)

                pedido.Itens = null;
                pedidoService
                    .clearPagamento(pedido)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else {
                                angular.copy(response.Data, $scope.state.data);
                                if ($scope.state.data.CondicaoPagamento.Codigo != "##" && $scope.state.data.Pagamentos.length == 0 && $scope.state.pagamento.currentIndex > 1)
                                    $scope.prepareNewPagamento();
                            }
                        },
                        function (error) { $scope.$parent.toastr.error(error, "Limpando Parcelas"); }
                    );
                $scope.state.data.Pagamentos = [];
            };

            $scope.TrocaOperacaoVenda = function (pedido) {
                pedidoService
                    .TrocaOperacaoVenda(pedido).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            }
                            angular.copy(response.Data, $scope.state.data);
                            if (response.Message != null && response.Message != '') {
                                $scope.$parent.toastr.success(response.Message);
                            }
                            $scope.clearPagamento();
                        },
                        function (error) {
                            $scope.endprocesso = false;
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            console.error(error);
                        }
                    );
            }

            $scope.updateItemPedido = function () {
                if (!$scope.valida) return;
                $scope.valida = false;

                pedidoService
                    .updateItemPedido($scope.state.data, $scope.state.data.Itens[$scope.state.currentItem].Item)
                    .then(
                        function (response) {
                            $scope.valida = true;
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            }

                            /* mesmo que der alguma mensagem o servidor retorna os dados atualizados anteriores */
                            angular.copy(response.Data, $scope.state.data);

                            var item = $scope.state.data.Itens[$scope.state.currentItem];
                            $scope.verificarDescontoAcrescimoItem(item);

                            $scope.state.Desconto.descontovalorpedido = response.Data.Desconto;
                            $scope.state.Desconto.descontoemporcentagem = response.Data.PercentualDesconto;
                            //$scope.prepareRegrasDesconto($scope.state.data.Cliente);
                            if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                $scope.TrocaOperacaoVenda($scope.state.data);
                            }
                            if ($scope.endprocesso && $scope.state.MotorDesconto.DescontoProdutos.length === $scope.countitens) {
                                $scope.endprocesso = false;
                            }

                        },
                        function (error) {
                            $scope.endprocesso = false;
                            $scope.$parent.toastr.error("Problemas com a comunicação com os servidores.", "Comunicação");
                            console.error(error);
                        }
                    );
            };

            $scope.cancelItemPedido = function () {
                pedidoService
                    .cancelItemPedido($scope.state.data, $scope.state.data.Itens[$scope.state.currentItem].Item)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Mensagem, "Serviço");
                            else {
                                CountValidItens();
                                angular.copy(response.Data, $scope.state.data);
                                $scope.prepareRegrasDesconto($scope.state.data.Cliente);
                                $scope.$parent.toastr.info("Item da venda cancelado.");
                                if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                    $scope.TrocaOperacaoVenda($scope.state.data);
                                }
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Problemas na comunicação com os servidores.", "Comunicação com o servidor");
                            console.error(error);
                        }
                    );
            };
            $scope.prepareNewCliente = function () {

                clienteService
                    .prepareNew()
                    .then(function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                        else
                            $scope.auxiliar.newCliente.data = response.Data;
                    });
            };

            $scope.confirmFidelidade = function () {

                if (!$scope.auxiliar.newCliente.data.Fidelidade) {
                    $scope.auxiliar.newCliente.data.Fidelidade = true;
                    $confirm({ text: "Ao desmarcar esta opção o cliente NÃO participará do programa de fidelidade, Deseja Confirmar?", title: "Desabilitar Fidelidade", ok: "Sim", cancel: "Não" })
                        .then(function () {
                            $scope.auxiliar.newCliente.data.Fidelidade = false;
                        });
                } else if ($scope.auxiliar.newCliente.data.Fidelidade) {
                    $scope.auxiliar.newCliente.data.Fidelidade = false;
                    $confirm({ text: "Ao marcar esta opção o cliente passará a fazer parte do programa de fidelidade, Deseja Confirmar?", title: "Habilitar Fidelidade", ok: "Sim", cancel: "Não" })
                        .then(function () {
                            $scope.auxiliar.newCliente.data.Fidelidade = true;
                        });
                }
            }
            $scope.validacaoFidelidadeCelular = function (celular, fidelidade) {

                if ($scope.$parent.config.ObrigaCelularFidelidade && $scope.$parent.config.LancamentoFidelidade && celular == null && fidelidade == true)
                    $scope.$parent.toastr.error("Obrigatório preencher esse campo quando o cliente participar do programa de fidelidade");
            };
            $scope.validacaoFidelidadeAniversario = function (aniversario, fidelidade) {

                if ($scope.$parent.config.ObrigaCelularFidelidade && $scope.$parent.config.LancamentoFidelidade && aniversario == null && fidelidade == true)
                    $scope.$parent.toastr.error("Obrigatório preencher esse campo quando o cliente participar do programa de fidelidade");
            };

            //Modal Confirma fidelidade
            {
                $scope.modalConfirmaFidelidade = false;
                $scope.aceitaFidelidade = false;
                $scope.aceitaContato = false;
                $scope.cancelaFidelidade = function () {
                    //$scope.items.data.Fidelidade = false;
                    $scope.modalConfirmaFidelidade = false;
                }
                $scope.confirmaFidelidade = function () {

                    if ($scope.aceitaFidelidade == false || $scope.aceitaContato == false) {
                        $scope.$parent.toastr.error("Voce deve aceitar os termos para que o cliente possa ser fidelizado!", 'Serviço');
                        return;
                    }
                    $scope.modalConfirmaFidelidade = false;
                    insertCustomer();
                    //$scope.items.data.Fidelidade = true;

                }
                $scope.ToogleFidelidade = function () {

                    $scope.aceitaFidelidade = !$scope.aceitaFidelidade;
                }

                $scope.ToogleContato = function () {

                    $scope.aceitaContato = !$scope.aceitaContato;
                }
            }
            $scope.saveNewCliente = function () {

                /* diretiva ui-date-mask e format-data já garantem a data válida */
                //var aniversarioValido = true;
                //if ($scope.$parent.config.AniversarioObrigatorio || $scope.auxiliar.newCliente.data.Aniversario != null)
                //    aniversarioValido = formataDataAniversario();
                //else
                //    formataDataAniversario();

                //if (!aniversarioValido) {
                //    $scope.$parent.toastr.error("Data de nascimento invalida!");
                //    return;
                //}

                /* coloca 1900 se a data foi preenchida parcialmente */
                formataDataAniversario();
                $scope.cpfValido = false;

                // Validação de endereço para quando o cliente participar do programa de fidelidade
                //var arr = [];
                //var enderecoIncompleto = '';

                //if ($scope.$parent.config.ObrigaCelularFidelidade && $scope.$parent.config.LancamentoFidelidade && $scope.auxiliar.newCliente.data.Fidelidade) {
                //    if ($scope.auxiliar.newCliente.data.Endereco != null) {
                //        if ($scope.auxiliar.newCliente.data.Endereco.Linha1 == null || $scope.auxiliar.newCliente.data.Endereco.Linha1 == "")
                //            arr.push('Endereço')
                //        if ($scope.auxiliar.newCliente.data.Endereco.Linha2 == null || $scope.auxiliar.newCliente.data.Endereco.Linha2 == "")
                //            arr.push('Numero')
                //        if ($scope.auxiliar.newCliente.data.Endereco.Bairro == null || $scope.auxiliar.newCliente.data.Endereco.Bairro == "")
                //            arr.push('Bairro')
                //        if ($scope.auxiliar.newCliente.data.Endereco.Cidade == null || ($scope.auxiliar.newCliente.data.Endereco.Cidade.Nome == null || $scope.auxiliar.newCliente.data.Endereco.Cidade.Nome == ""))
                //            arr.push('Cidade')
                //        if ($scope.auxiliar.newCliente.data.Endereco.Estado == null || ($scope.auxiliar.newCliente.data.Endereco.Estado.Sigla == null || $scope.auxiliar.newCliente.data.Endereco.Estado.Sigla == ""))
                //            arr.push('Estado')
                //    }
                //    else {
                //        $scope.$parent.toastr.error("Obrigatório preencher o endereço completo quando o cliente participar do programa de fidelidade");
                //        return;
                //    }

                //    arr.forEach(function (item) {
                //        enderecoIncompleto += item + ', ';
                //    });

                //    if (enderecoIncompleto != '') {
                //        enderecoIncompleto = enderecoIncompleto.substring(0, enderecoIncompleto.length - 2);
                //        $scope.$parent.toastr.error("Obrigatório preencher os campos ' " + enderecoIncompleto + " ' quando o cliente participar do programa de fidelidade");
                //        return;
                //    }
                if ($scope.$parent.config.ObrigaCelularFidelidade && $scope.$parent.config.LancamentoFidelidade && $scope.auxiliar.newCliente.data.Fidelidade) {
                    if ($scope.auxiliar.newCliente.data.Aniversario == null || $scope.auxiliar.newCliente.data.Aniversario == "") {
                        $scope.$parent.toastr.error("Obrigatório preencher a Data de Nascimento quando o cliente participar do programa de fidelidade");
                        return;
                    }

                    if ($scope.auxiliar.newCliente.data.Celular == null || ($scope.auxiliar.newCliente.data.Celular.Numero == null || $scope.auxiliar.newCliente.data.Celular.Numero == "")) {
                        $scope.$parent.toastr.error("Obrigatório preencher o número de celular quando o cliente participar do programa de fidelidade");
                        return;
                    }

                    if ($scope.auxiliar.newCliente.data.Celular == null || (($scope.auxiliar.newCliente.data.Celular.Numero != null || $scope.auxiliar.newCliente.data.Celular.Numero != "") && ($scope.auxiliar.newCliente.data.Celular.DDD == "" || $scope.auxiliar.newCliente.data.Celular.DDD == null))) {
                        $scope.$parent.toastr.error("Preencha o DDD");
                        return;
                    }
                }


                if ($scope.auxiliar.newCliente.data.PessoaFisica) {
                    clienteService.validaCpf($scope.auxiliar.newCliente.data.CPF).then(
                        function (response) {
                            if (response.Data) {
                                if ($scope.auxiliar.newCliente.data.Fidelidade) {
                                    $scope.aceitaFidelidade = false;
                                    $scope.aceitaContato = false;
                                    $scope.modalConfirmaFidelidade = true;
                                }
                                else
                                    insertCustomer();


                            } else {
                                $scope.$parent.toastr.error("CPF inválido");
                            }
                        });
                } else {
                    if ($scope.auxiliar.newCliente.data.Fidelidade) {
                        $scope.aceitaFidelidade = false;
                        $scope.aceitaContato = false;
                        $scope.modalConfirmaFidelidade = true;
                    }
                    else
                        insertCustomer();
                }

            };

            var formataDataAniversario = function () {
                if (angular.isDate($scope.auxiliar.newCliente.data.Aniversario))
                    return true;

                var inputValue = $('[ng-model="auxiliar.newCliente.data.Aniversario"]').val();
                /* se a data não foi completamente preenchida */
                if (!inputValue) {
                    return true;
                }

                /* se foi apenas parcialmente preenchida */
                var error = false;

                var digitado = inputValue.split('/');
                var dayPart = digitado[0];
                var monthPart = digitado[1];

                if (dayPart == null || monthPart == null)
                    var error = true;
                else if (dayPart > 31)
                    error = true;
                else if (monthPart > 12)
                    error = true;

                if (inputValue.length == 5) {
                    var d = new Date(Date.UTC(0, monthPart - 1, dayPart, 3, 0, 0, 0));

                    if (d.getDate() != dayPart || d.getMonth() != (monthPart - 1)) {
                        error = true;
                    }

                } else if (inputValue.length == 10) {
                    var yearPart = digitado[2];
                    var d = new Date(Date.UTC(yearPart, monthPart - 1, dayPart, 3, 0, 0, 0));

                    if (d.getDate() != dayPart || d.getMonth() != (monthPart - 1) || d.getFullYear() != yearPart) {
                        error = true;
                    }
                }

                if (error == true) {
                    $scope.auxiliar.newCliente.data.Aniversario = null;
                    return false;
                }

                $scope.auxiliar.newCliente.data.Aniversario = d;
                return true;
            }
            $scope.carregandoSaveCliente = false;
            var insertCustomer = function () {
                $scope.carregandoSaveCliente = true;
                clienteService
                    .save($scope.auxiliar.newCliente.data)
                    .then(function (response) {
                        if (response.Status < 0) {
                            $scope.carregandoSaveCliente = false;
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                        }
                        else {
                            $scope.carregandoSaveCliente = false;
                            $scope.auxiliar.newCliente.data = response.Data;
                            $scope.selectCliente($scope.auxiliar.newCliente.data);
                            $scope.cpfValido = true;
                            $scope.noResults = false;

                            if (response.Message)
                                $scope.$parent.toastr.warning(response.Message, 'Serviço');
                            $scope.toggleNewCliente();
                        }
                    });
            }

            $scope.getEndereco = function () {
                entidadeAuxiliarService
                    .getEndereco($scope.auxiliar.newCliente.data.Endereco.CEP)
                    .then(
                        function (endereco) {
                            if (endereco) {
                                $scope.auxiliar.newCliente.data.Endereco.CEP = endereco.cep.replace('-', '');
                                $scope.auxiliar.newCliente.data.Endereco.Linha1 = endereco.logradouro;
                                $scope.auxiliar.newCliente.data.Endereco.Linha3 = endereco.complemento;
                                $scope.auxiliar.newCliente.data.Endereco.Bairro = endereco.bairro;
                                $scope.auxiliar.newCliente.data.Endereco.Estado = { Nome: endereco.uf, CodigoIBGE: endereco.ibge.substring(0, 2), Sigla: endereco.uf };
                                $scope.auxiliar.newCliente.data.Endereco.Cidade = { Nome: endereco.localidade, CodigoIBGE: endereco.ibge };

                                $('[ng-model$=Linha2]').focus();
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.getEnderecoTroca = function () {
                entidadeAuxiliarService
                    .getEndereco($scope.auxiliar.newClienteTroca.data.Endereco.CEP)
                    .then(
                        function (endereco) {
                            if (endereco) {
                                $scope.auxiliar.newClienteTroca.data.Endereco.CEP = endereco.cep.replace('-', '');
                                $scope.auxiliar.newClienteTroca.data.Endereco.Linha1 = endereco.logradouro;
                                $scope.auxiliar.newClienteTroca.data.Endereco.Linha3 = endereco.complemento;
                                $scope.auxiliar.newClienteTroca.data.Endereco.Bairro = endereco.bairro;
                                $scope.auxiliar.newClienteTroca.data.Endereco.Estado = { Nome: endereco.uf, CodigoIBGE: endereco.ibge.substring(0, 2), Sigla: endereco.uf };
                                $scope.auxiliar.newClienteTroca.data.Endereco.Cidade = { Nome: endereco.localidade, CodigoIBGE: endereco.ibge };

                                $('#validaClienteTroca [ng-model$=Linha2]').focus();
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            };
            $scope.UpdateTerminal = function (numero) {
                if ($scope.$parent.config.BloqueiaReabertura) {
                    $scope.$parent.toastr.error("O sistema esta configurado para não permitir reabertura de pedidos suspensos", "Serviço");
                    return;
                }
                pedidoService.UpdateTerminal(numero);
                $state.go("state-venda-add", { id: numero }, { location: "replace" });
            };
            $scope.BuscaCliente = function () {
                var resp = pedidoService.ValidaCliente($scope.state.validacaoCliente.cpf).then(function (response) {
                    if (response.Status < 0)
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    else {
                        if (response.Data) {
                            $scope.state.validacaoCliente.alterar = true;
                        } else {
                            $scope.state.validacaoCliente.incluir = true;
                        }
                    }
                });
            };
            $scope.Change = function () {
                var resp = pedidoService.ChangeCliente($scope.state.validacaoCliente.cpf, $scope.state.data.Numero).then(function (response) {
                    if (response.Status < 0)
                        $scope.$parent.toastr.error(response.Message, "Serviço");
                    else {
                        $scope.state.troca.ativo = !$scope.state.troca.ativo;
                        $("#codigo-barras").focus();
                        $scope.state.validacaoCliente.confirmacadastroCPF = false;
                        $scope.selectCliente(response.Data);
                    }
                });
            };
            $scope.SaveCliente = function () {
                $scope.state.validacaoCliente.cpf = $scope.auxiliar.newCliente.data.CPF;
                clienteService
                    .save($scope.auxiliar.newCliente.data)
                    .then(function (response) {


                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                        else {
                            $scope.auxiliar.newCliente.data = response.Data;
                            $scope.selectCliente($scope.auxiliar.newCliente.data);
                            $scope.Change();
                        }
                    });

            };
            $scope.UpdateClienteTroca = function () {
                if ($scope.auxiliar.newClienteTroca.data.PessoaFisica) {
                    clienteService.validaCpf($scope.auxiliar.newClienteTroca.data.CPF).then(
                        function (response) {
                            if (response.Data) {
                                updateCustomer();
                            } else {
                                $scope.$parent.toastr.error("CPF inválido");
                            }
                        });
                } else {
                    updateCustomer();
                }

            }

            var updateCustomer = function () {
                clienteService
                    .saveUpdate($scope.auxiliar.newClienteTroca.data)
                    .then(function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Serviço");
                        else {
                            $scope.state.data.Cliente = response.Data;
                            $scope.toogleConfirmaCadastroTroca();
                            $scope.state.troca.ativo = !$scope.state.troca.ativo;
                            $("#codigo-barras").focus();
                        }
                    });
            }

            $scope.toogleConfirmaCadastroCPF = function () {
                $scope.state.validacaoCliente.cpf = "",
                    $scope.state.validacaoCliente.nome = "";
                $scope.state.validacaoCliente.incluir = false,
                    $scope.state.validacaoCliente.alterar = false;
                $scope.state.validacaoCliente.confirmacadastroCPF = !$scope.state.validacaoCliente.confirmacadastroCPF;
            };

            var hasCustomer = function () {
                if (!$scope.auxiliar.newClienteTroca.data.CPF && $scope.state.data.Cliente && $scope.state.data.Cliente.CPF) {
                    $scope.auxiliar.newClienteTroca.data = $scope.state.data.Cliente;
                    return true
                }
                else if ((!$scope.state.data.Cliente || !$scope.state.data.Cliente.CPF) && !$scope.auxiliar.newClienteTroca.data.CPF)
                    return false;
                return true;
            }
            $scope.toggleTroca = function () {

                if (!hasCustomer()) {
                    $scope.$parent.toastr.error("Não é possível realizar troca sem cliente");
                    return null;
                }

                if ($scope.auxiliar.newClienteTroca.data.Endereco.Linha1 &&
                    $scope.auxiliar.newClienteTroca.data.Endereco.Linha2 &&
                    $scope.auxiliar.newClienteTroca.data.Endereco.CEP &&
                    $scope.auxiliar.newClienteTroca.data.Endereco.Bairro &&
                    $scope.auxiliar.newClienteTroca.data.Endereco.Cidade.Nome &&
                    $scope.auxiliar.newClienteTroca.data.Endereco.Estado.Sigla &&
                    $scope.auxiliar.newClienteTroca.data.Nome &&
                    $scope.auxiliar.newClienteTroca.data.CPF
                ) {

                    $scope.state.troca.ativo = !$scope.state.troca.ativo;
                    $("#codigo-barras").focus();
                }
                else {
                    $scope.toogleConfirmaCadastroTroca();
                }
            };
            $scope.toggleaddProduto = function () {
                $scope.state.addProduto.ativo = !$scope.state.addProduto.ativo;

            };
            $scope.toggleConsulta = function () {
                ;

                $scope.auxiliar.consulta.lst = [];
                $scope.state.consulta.bipado = false;
                $scope.auxiliar.selecionarProduto.statudetalheproduto = false;
                $scope.auxiliar.selecionarProduto.statuslistaproduto = false;
                $scope.auxiliar.consulta.data = {};
                $scope.state.consulta.ativo = !$scope.state.consulta.ativo;
                if ($scope.state.consulta.ativo)
                    $timeout(function () { $('[ng-model$="consulta.filtro"]').focus() });
            };
            $scope.IncluirItensPorGrade = function (item, tamanho) {

                $scope.auxiliar.VendaGrade.carregando = true;
                var pedido = {};
                angular.copy($scope.state.data, pedido)

                pedido.Itens = null;
                pedidoService.SaveItensPorGrade(pedido, item, tamanho, $scope.state.troca.ativo).then(
                    function (response) {

                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            console.error(response.Exception);
                            $scope.state.codigoBarras = '';
                            $scope.state.addProduto.ativo = false;
                            $scope.auxiliar.VendaGrade.carregando = false;

                        } else {

                            if (!response.Data) {
                                $scope.state.modalProcessoTroca = true;
                                $scope.state.addProduto.ativo = false;
                                $scope.auxiliar.VendaGrade.carregando = false;
                                pedidoService.GetCodigoBarra(tamanho, item.Cor, item.Produto.Codigo).then(

                                    function (response) {
                                        $scope.state.codigoBarras = response.Data;
                                    }
                                );
                                //$scope.state.data.processoTroca.ticket = "";
                                //$scope.state.data.processoTroca.codigoFilial = "";
                                //$scope.state.data.processoTroca.cpfCliente = "";
                                return;
                            }

                            angular.copy(response.Data, $scope.state.data);
                            if ($scope.state.data.Numero) {
                                //$scope.state.troca.ativo = false;
                                $scope.state.codigoBarras = "";
                                $scope.state.lastProdutoIndex = $scope.state.data.Itens.length - 1;
                                if ($scope.$parent.config.ValorTrocaOperacaoVenda != null && $scope.$parent.config.ValorTrocaOperacaoVenda != 0) {
                                    var pedido = {};
                                    angular.copy($scope.state.data, pedido);
                                    pedido.Itens = null;
                                    $scope.TrocaOperacaoVenda(pedido);
                                }
                                $timeout(function () {
                                    $("#codigo-barras").focus();
                                });
                            } else
                                $state.go("state-venda-add", { id: response.Data.Numero }, { location: "replace" }); //não grava no histórico

                            $scope.state.addProduto.ativo = false;
                            CountValidItens();
                            $scope.prepareRegrasDesconto($scope.state.data.Cliente);

                        }

                        $scope.auxiliar.VendaGrade.carregando = false;
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
            };
            $scope.toggleVendaSuspensa = function () {
                $scope.state.vendaSuspensa.ativo = !$scope.state.vendaSuspensa.ativo;
                if ($scope.state.vendaSuspensa.ativo)
                    $scope.getVendaSuspensa();
            };
            $scope.toggleOpcaoVenda = function () {
                $scope.state.opcaoVenda.ativo = !$scope.state.opcaoVenda.ativo;
            };

            $scope.toggleNewCliente = function () {

                $scope.state.newCliente.ativo = !$scope.state.newCliente.ativo;
                if ($scope.state.newCliente.ativo) {
                    $scope.prepareNewCliente();
                    $timeout(function () { $('[ng-model$="newCliente.data.NomeCompleto"]').focus() });
                }
            };

            $scope.NewClienteClick = function () {
                var cpf = $scope.state.data.Cliente.NomeCompleto;
                $scope.toggleNewCliente();
                if ($scope.$parent.config.BuscaClienteMarca) {
                    //clienteService.GetClienteMarca(cpf).then(
                    //    function (response) {
                    //        if (response.Status < 0)
                    //            $scope.$parent.toastr.error(response.Message, "Serviço");
                    //        else {
                    //            if (response.Data != null)
                    //                $scope.auxiliar.newCliente.data = response.Data;
                    //        }

                    //    });
                }
                $timeout(function () {
                    cpf = cpf.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})/, "$1.$2.$3-$4");
                    $scope.auxiliar.newCliente.data.CPF = cpf;
                }, 500);
            };

            $scope.newPedido = function () {
                $state.go("state-venda-add", { 'id': null }, { 'reload': true, 'location': "replace" });
            };
            $scope.suspendPedido = function () {
                if ($scope.ValidaPagamentoTEF())
                    return;
                pedidoService.updateStatus($scope.state.data.Numero, 4)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                $scope.newPedido();
                        });
            };
            $scope.cancelPedido = function () {
                if ($scope.ValidaPagamentoTEF()) {
                    return;
                }
                pedidoService
                    .cancel($scope.state.data.Numero)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                            else
                                angular.copy(response.Data, $scope.state.data);

                            $scope.newPedido();
                        },
                        function (error) { $scope.$parent.toastr.error(error); }
                    );
            };
            $scope.getTokenFidelidadeTroco = function (success) {

                fidelidadeService
                    .getToken()
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Requisição de token');
                                console.error(response.Exception);
                            } else {
                                $scope.state.fidelidade.token = response.Data;
                                if (success)
                                    success();
                            }
                        },
                        function (error) {
                            //$scope.$parent.toastr.error('Requisição de token', 'Comunicação com o servidor');
                            console.error(error);
                        }
                    );
            };

            var devolucaoCredito = function () {
                var isDevolucaoCredito = false;
                for (var i = 0; i < $scope.state.data.Pagamentos.length; i++)
                    if ($scope.state.data.Pagamentos[i].Tipo.Credito == true)
                        isDevolucaoCredito = true;
                return isDevolucaoCredito;
            }

            $scope.createCredito = function () {
                if ($scope.state.data.Total > 0)
                    return;

                var credito = 0;
                for (var i = 0; i < $scope.state.data.Pagamentos.length; i++) {
                    if ($scope.state.data.Pagamentos[i].Tipo.Credito == true)
                        credito += $scope.state.data.Pagamentos[i].Valor;
                }
                credito = Number(credito.toFixed(2)) * -1;

                if (credito != 0)
                    $scope.generateCreditoMensagem(credito);
            }

            var createTrocoCredito = function () {
                var credito = 0;

                for (var i = 0; i < $scope.state.data.Pagamentos.length; i++)
                    credito += $scope.state.data.Pagamentos[i].Troco;

                credito = Number(credito.toFixed(2));
                $scope.generateCredito(credito);
            }
            $scope.generateCreditoMensagem = function (credito) {
                if (credito == 0)
                    return;
                fidelidadeService
                    .setCredito($scope.state.fidelidade.token, $scope.state.data.Cliente.CPF, $scope.state.data.Numero, credito)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Resgate de créditos');
                                console.error(response.Exception);
                                $scope.$parent.toastr.error("Ao registrar crédito.", "Erro no processo de geração de crédito.");
                            } else {
                                $scope.state.valorTroco = 0;
                                $scope.$parent.toastr.success("Crédito registrado.", "Sucesso.");
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Ao resgatar de créditos.", "Comunicação com o servidor");
                            console.error(error);
                        }
                    );
            }
            $scope.generateCredito = function (credito) {
                if (credito == 0)
                    return;
                fidelidadeService
                    .setCreditoTroco($scope.state.fidelidade.token, $scope.state.data.Cliente.CPF, $scope.state.data.Numero, credito)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Resgate de créditos');
                                console.error(response.Exception);
                                $scope.$parent.toastr.error("Ao registrar crédito.", "Erro no processo de geração de crédito.");
                            } else {
                                $scope.state.valorTroco = 0;
                                $scope.$parent.toastr.success("Crédito registrado.", "Sucesso.");
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Ao resgatar de créditos.", "Comunicação com o servidor");
                            console.error(error);
                        }
                    );
            }
            $scope.setCreditoTroco = function () {

                fidelidadeService
                    .setCreditoTroco($scope.state.fidelidade.token, $scope.state.data.Cliente.CPF, $scope.state.data.Numero, $scope.state.valorTroco)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                //$scope.$parent.toastr.error(response.Message, 'Resgate de créditos');
                                console.error(response.Exception);
                                $scope.$parent.toastr.error("Ao registrar crédito de  Troco.", "Erro no processo de geração de crédito para tipo Troco.");
                            } else {
                                $scope.state.valorTroco = 0;
                                $scope.$parent.toastr.success("Crédito de Troco registrado.", "Sucesso.");
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error("Ao resgatar de créditos.", "Comunicação com o servidor");
                            console.error(error);
                        }
                    );
            };
            $scope.finishPedido = function (imprimirDanfe) {

                $scope.state.imprimirDanfe;
                if (!$scope.state.fidelidade.carregando && $scope.state.fidelidade.ativo && devolucaoCredito()) {
                    $confirm({
                        text: "Esta opção de pagamento adiciona o valor como créditos do programa  de fidelidade"
                            + " para o cliente utilizar nas próximas compras."
                            + " Deseja realmente confirmar?"
                    }).then(function () {
                        finishPedido();
                    }, function () {
                        $scope.state.pagamento.currentIndex = 2;
                    });
                }
                else
                    finishPedido();
            }


            var closePedido = function (impressaotroca) {


                if (!$scope.state.NFE.enableCPF)
                    $scope.state.data.Cliente.CPF = "";

                pedidoService
                    .close($scope.state.data.Numero, $scope.state.data.Cliente.CPF, impressaotroca, $scope.state.troco, $scope.state.GerarNFE, $scope.state.NFE.send)
                    .then(
                        function (response) {

                            if (response.Status < 0) {
                                if (response.Message.includes('Para vendas')) {
                                    //$confirm({ text: "aaa <br>", title: "Atenção ! Cadastro do cliente obrigatório !", ok: "Ok" });
                                    $confirm({ text: response.Message, title: "Atenção ! Cadastro do cliente obrigatório !", ok: "Ok" });
                                    $scope.state.carregandoClose = false;
                                }
                                else {
                                    $scope.$parent.toastr.error(response.Message, "Serviço");
                                    $scope.state.carregandoClose = false;
                                }
                            }
                            else {

                                //$scope.state.carregandoClose = false;
                                if (!$scope.state.NFE.send) {
                                    $timeout(function () {
                                        var impressaotroca = 0;
                                        if ($scope.state.ImprimePorItem && $scope.state.ImprimeTroca) {
                                            impressaotroca = 2;
                                        }
                                        else
                                            if (!$scope.state.ImprimePorItem && $scope.state.ImprimeTroca) {
                                                impressaotroca = 1;
                                            }
                                            else
                                                impressaotroca = 0;
                                        $scope.state.data.EmiteNFE = $scope.state.GerarNFE;

                                        $scope.generateTicket(impressaotroca);

                                        //   $scope.state.data = response.Data;
                                    });
                                }
                                if ($scope.state.NFE.send) {
                                    $scope.newPedido();
                                }
                            }
                        },
                        function (error) {
                            $scope.state.carregandoClose = false;
                            $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                        }
                    );
            }
            var finishPedido = function () {

                if (!$scope.state.fidelidade.carregando && $scope.state.fidelidade.ativo)
                    $scope.createCredito();

                if ($scope.state.troco && !$scope.state.fidelidade.carregando && $scope.state.fidelidade.ativo)
                    createTrocoCredito();


                if ($scope.state.data.Total !== $scope.state.data.Pago) {
                    $scope.$parent.toastr.error("A venda ainda não pode ser finalizado.");
                    return false;
                }

                if ($scope.state.creditoTroco && $scope.state.valorTroco > 0) {
                    $scope.getTokenFidelidadeTroco($scope.setCreditoTroco());
                }


                if ($scope.state.fidelidade.resgatar)
                    $scope.getTokenFidelidade($scope.setResgateFidelidade());
                var impressaotroca = 0;

                debugger
                if ($scope.state.NFE.enableCPF && $scope.state.cpf == "") {
                    $scope.$parent.toastr.error("Digite um CPF/CNPJ válido");
                    return false;
                }


                if ($scope.state.NFE.enableCPF || !$scope.state.data.Cliente.PessoaFisica)
                    $scope.state.data.Cliente.CPF = $scope.state.cpf;
                //else {

                //    $scope.state.data.Cliente.CPF = "";
                //}

                if ($scope.state.NFE.send && $scope.state.ImprimePorItem && $scope.state.ImprimeTroca) {
                    impressaotroca = 2;
                }
                if ($scope.state.NFE.send && !$scope.state.ImprimePorItem && $scope.state.ImprimeTroca) {
                    impressaotroca = 1;
                }
                $scope.state.carregandoClose = true;
                impressaotroca = (!impressaotroca || impressaotroca == null ? 0 : impressaotroca);
                if ($scope.auxiliar.ticketorigem) {
                    pedidoService.close
                        ($scope.auxiliar.ticketorigem, $scope.state.data.codigoFilial)
                        .then(function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                $scope.state.carregandoClose = false;
                            }
                            else {
                                if (response.Data == "1")
                                    closePedido(impressaotroca)
                                else {
                                    $scope.state.carregandoClose = false;
                                    $scope.$parent.toastr.error("Ticket utilizado como referencia de troca não encontrado ou cancelado!", "");
                                }
                            }
                        },
                            function (error) {
                                $scope.state.carregandoClose = false;
                                $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                            }
                        );

                } else {
                    closePedido(impressaotroca);
                }
            };

            $scope.buscarTransportadoras = function () {
                entidadeAuxiliarService.getAllTransportadora().then(
                    function (response) {
                        $scope.state.transportadoras = response.Data;
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, "Serviço");
                    }
                );
            }
            $scope.auxiliar.vouchers = [];
            $scope.ConsultarEnviarSefazVenda = function (pedido) {
                $scope.carregandoReenvio = true;
                pedidoService
                    .ConsultarEnviarSefazVenda(pedido)
                    .then(

                    );
            }
            $scope.generateTicket = function (impressaotroca) {
                $scope.state.carregandoClose = true;

                $scope.state.data.EmiteNFE = $scope.state.GerarNFE;
                if (!$scope.$parent.config.UsaPOS) {
                    $scope.newPedido();
                    return;
                }
                /*
                Caso não esteja configurado como número sequencia, está sendo utilizado um número de boleta
                Nesses casos, atribui o mesmo número da boleta ao Ticket. 
                */
                if (!$scope.state.data.Sequencial)
                    $scope.state.Ticket = $scope.state.data.Numero;

                pedidoService
                    .generateTicket($scope.state.data, impressaotroca, $scope.state.Ticket, $scope.state.indicaPresencial, true)
                    .then(
                        function (response) {
                            $scope.state.carregandoClose = false;
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, "Serviço");
                                $scope.state.data = response.Data;
                            }
                            else {

                                pedidoService.SetTicketTroca($scope.auxiliar.ticketorigem, response.Data.Venda.Ticket, response.Data.Filial.Codigo);
                                if ($scope.state.imprimirDanfe) {
                                    $state.go("state-ticket-detail-danfe", {
                                        'id': response.Data.Venda.Ticket, 'emissao': response.Data.Venda.Emissao, 'danfe': 1
                                    }, {
                                        location: "replace"
                                    }); //não grava no histórico
                                    $scope.$parent.toastr.success("Ticket gerado com êxito");

                                }
                                else {
                                    $scope.state.carregandoClose = true;
                                    if ($scope.$parent.config.UsaCredev && $scope.state.data.Itens.filter(a => a.Quantidade < 0).length > 0) {
                                        pedidoService.GetVoucher($scope.state.data)
                                            .then(
                                                function (response) {
                                                    if (response.Status < 0)
                                                        $scope.$parent.toastr.error("Erro ao calcular voucher", "Atenção!");
                                                    else {
                                                        angular.copy(angular.fromJson(response.Data), $scope.auxiliar.vouchers);
                                                        $timeout(function () {
                                                            window.print()
                                                        }, 500);
                                                        $timeout(function () {
                                                            $scope.state.carregandoClose = false;
                                                            $scope.newPedido();
                                                        }, 5000);

                                                    }
                                                },
                                                function (err) {
                                                    $scope.$parent.toastr.error(err);
                                                }
                                            );
                                    }
                                    else
                                        $scope.newPedido();
                                }
                                if ($scope.$parent.toastr)
                                    $scope.$parent.toastr.success("Ticket gerado com êxito");
                            }

                            // $scope.ConsultarEnviarSefazVenda(response.Data);
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                            $scope.state.carregandoClose = true;
                        }
                    );
            };

            $scope.gotoPriorPagamento = function () {



                //if ($scope.state.pagamento.currentIndex == 5) {
                //    $scope.state.pagamento.currentIndex = 4;
                //    return;
                //}

                if ($scope.state.data.Pagamentos.length > 0 && $scope.state.data.Pagamentos.find(obj =>
                    obj.CarteiraDigital &&
                    obj.Confirmado &&
                    obj.CarteiraDigital.IDORDER != '' &&
                    $scope.state.pagamento.currentIndex == 2)) {

                    $scope.$parent.toastr.warning("Para voltar a etapa anterior, é necessário cancelar o pagamento com carteira digital .");
                    return;

                };



                for (var i = 0; i < $scope.state.data.Pagamentos.length; i++)
                    if ($scope.state.data.Pagamentos[i].TEFID != "00000000-0000-0000-0000-000000000000" && $scope.state.data.Pagamentos[i].TEFID != null) {
                        if ($scope.state.pagamento.currentIndex != 3) {
                            $scope.$parent.toastr.warning("Para voltar a etapa anterior, é necessário cancelar o TEF");
                            return;
                        }
                    }


                $scope.$parent.toastr.clear();
                $scope.state.pagamento.currentIndex = $scope.GetNextPrior($scope.state.pagamento.currentIndex);   // $scope.state.pagamento.currentIndex--;


                if ($scope.state.pagamento.currentIndex == 1) {
                    $scope.clearPagamento();
                    if ($scope.state.data.ValorTotalOMNI > 0)
                        $scope.state.pagamento.currentIndex = 0;
                }
                //$scope.state.data.CondicaoPagamento.Codigo = "##";
            };
            $scope.testeVouch = function () {
                pedidoService.GetVoucher($scope.state.data)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error("Erro ao calcular voucher", "Atenção!");
                            else {
                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.vouchers);
                                $timeout(function () {
                                    window.print()
                                }, 500);
                                $timeout(function () {
                                    $scope.newPedido();
                                }, 10000);

                            }
                        },
                        function (err) {
                            $scope.$parent.toastr.error(err);
                        }
                    );
            }
            var hasDevolucao = function () {

                if ($scope.state.data.Total < 0) {
                    var isDevolucao = false;
                    for (var i = 0; i < $scope.auxiliar.condicaoPagamento.data.length; i++) {

                        if (!isDevolucao && $scope.auxiliar.condicaoPagamento.data[i].Devolucao == 1) {
                            $scope.state.data.CondicaoPagamento = $scope.auxiliar.condicaoPagamento.data[i];
                            isDevolucao = true;
                        }
                    }
                }
                //if ($scope.state.data.Total > 0) {
                //    var isDevolucao = false;
                //    for (var i = 0; i < $scope.auxiliar.condicaoPagamento.data.length; i++) {
                //        if (!isDevolucao && $scope.auxiliar.condicaoPagamento.data[i].Devolucao == 0) {
                //            $scope.state.data.CondicaoPagamento = $scope.auxiliar.condicaoPagamento.data[i];
                //            isDevolucao = true;
                //        }
                //    }
                //}
            }

            var hasValeProduto = function (itens) {
                var returnValue = false;
                for (var i = 0; i < itens.length; i++)
                    if (itens[i].ValeProduto)
                        returnValue = true;
                return returnValue;
            }

            $scope.GetMotorDesconto = function (prev) {

                $scope.carregandoMotor = true;
                $scope.msgStatusMotor = "Não há promoções disponíveis";
                if ($scope.$parent.config.UtilizaMotorPromocao) {

                    motorPromocaoService.get($scope.state.data).then(function (response) {
                        ;
                        if (response.Data != null) {
                            angular.copy(response.Data, $scope.state.MotorDesconto);
                            if ($scope.state.MotorDesconto == null || $scope.state.MotorDesconto.Descricoes.length == 0) {
                                if (prev == false) {
                                    $scope.state.pagamento.currentIndex = 0.5;
                                    $scope.gotoNextPagamento();
                                    return;
                                }
                                else {
                                    $scope.state.pagamento.currentIndex = 0.5;
                                    $scope.gotoPriorPagamento();
                                    return;
                                }
                            }

                            $scope.carregandoMotor = false;
                        }
                        else {
                            $scope.msgStatusMotor = "Serviço de promoções indisponível no momento";
                            $scope.carregandoMotor = false;
                        }

                    }, function (error) { $scope.msgStatusMotor = "Serviço de promoções indisponível no momento"; });

                }
                else {
                    $scope.state.pagamento.currentIndex = 0.5;
                    $scope.gotoNextPagamento();
                }
            }

            $scope.GetNextPagamento = function (index, cliente, checkoutOficial, checkoutAbatido) {

                if (index == 1 && ($scope.state.data.SlipDesconto != null || $scope.state.data.SlipDesconto != "")) {
                    if ($scope.$parent.config.UtilizaMotorPromocao && !$scope.$parent.config.CheckOutPedidos) {
                        $scope.GetMotorDesconto(false);
                        return 0.5;
                    }
                    else {
                        return 2;
                    }
                }
                if (index == -1 && cliente.Codigo == "") {
                    return 1;
                }

                if (index == 0.5)
                    return 2;

                //if (index == 0 && $scope.$parent.config.CheckOutPedidos)
                //    return 4;

                //if (index == 4 && $scope.$parent.config.CheckOutPedidos) {
                //    if ($scope.state.data.percentualConversao != 0)
                //        return 5;
                //    else
                //        return 1;
                //}

                //if (index == 5 && $scope.$parent.config.CheckOutPedidos) {
                //    return 1;
                //}

                return index + 1;
            }

            $scope.GetNextPrior = function (index) {
                if (index == 0.5)
                    return 1;
                if (index == 2) {
                    if ($scope.$parent.config.UtilizaMotorPromocao) {
                        $scope.GetMotorDesconto(true);
                        return 0.5;
                    }
                    else {
                        return 1;
                    }
                }
                //if (index == 1 && $scope.$parent.config.CheckOutPedidos)
                //    return 4;

                if (index == 4 && $scope.$parent.config.CheckOutPedidos)
                    return 0;

                return index - 1;
            }
            $scope.validaLimite = null;
            $scope.ValidaLimiteNota = function () {
                pedidoService.ValidaLimiteNotaMessage($scope.state.data).then(
                    function (response) {

                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                            $scope.validaLimite = false;
                        }
                        else {
                            if (response.Message != null && response.Message != "") {
                                $scope.validaLimite = true;
                                debugger
                                
                                if ($scope.state.data.Cliente.Codigo == "")
                                    $scope.state.pagamento.currentIndex = -1
                                $confirm({ text: response.Message, title: "Atenção ! Cadastro do cliente obrigatório !", ok: "Ok" });
                                return;
                            }
                            $scope.validaLimite = false;
                        }
                    },
                    function (error) {
                        $scope.validaLimite = false;
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');

                    }
                );
            }

            $scope.gotoNextPagamento =  function (checkoutOficial, checkoutAbatido) {

                $scope.state.data.CondicaoPagamento.NFe;
                $scope.$parent.toastr.clear();
                //atualiza a variavel auxiliar do credito de fidelidade
                $scope.state.Desconto.descontofidelidade = $scope.state.data.DescontoFidelidade || 0;
                $scope.state.fidelidade.resgatar = ($scope.state.Desconto.descontofidelidade > 0);

                //$scope.state.Desconto.Acrescimo = $scope.data.Acrescimo;
                var valeProduto = hasValeProduto($scope.state.data.Itens);
                if ($scope.state.itensValidos <= 0 && valeProduto == false)
                    $scope.$parent.toastr.error("Não é possível finalizar uma venda sem produtos.");
                else {
                    var index = $scope.GetNextPagamento($scope.state.pagamento.currentIndex, $scope.state.data.Cliente, checkoutOficial, checkoutAbatido);  // $scope.state.pagamento.currentIndex + 1;
                    //if (index == 1 && $scope.state.data.Pagamentos.length > 0)
                    //    index = 2;
                    debugger
                    if (index == 0 || index == 1) {
                        $scope.clearPagamento();
                        if (index == 0 || (index == 1 && $scope.state.data.Cliente.Codigo == "")) {
                            $scope.ValidaLimiteNota();
                            //var response =  pedidoService.ValidaLimiteNotaMessage($scope.state.data);
                            //if (response.Message != null && response.Message != "") {
                            //    $confirm({ text: response.Message, title: "Atenção ! Cadastro do cliente obrigatório !", ok: "Ok" });
                            //    if ((index == 1 && $scope.state.data.Cliente.Codigo == "")) {
                            //        return;
                            //    }
                            //}
                        } 

                    }
                    if (index == 1)
                        hasDevolucao();
                    if (index == 1) {
                        if ($scope.$parent.config.UsaCredev)
                            pedidoService.SetPagamentoVale($scope.state.data).then(
                                function (response) {

                                    if (response.Status < 0)
                                        $scope.$parent.toastr.error(response.Message, 'Serviço');
                                    else {

                                        angular.copy(response.Data, $scope.state.data);
                                        $scope.gotoNextPagamento()
                                        //index = 2;
                                    }
                                },
                                function (error) {
                                    $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                                }
                            );
                        if ($scope.state.data.ValorTotalOMNI > 0 || $scope.state.data.Itens.filter(value => value.ItemOMNI === true).length > 0) {

                            $scope.state.data.CondicaoPagamento.Codigo = "##";
                            pedidoService.SetPagamentoOMNI($scope.state.data, $scope.state.FreteSelecionado).then(
                                function (response) {

                                    if (response.Status < 0)
                                        $scope.$parent.toastr.error(response.Message, 'Serviço');
                                    else {

                                        angular.copy(response.Data, $scope.state.data);
                                        index = 2;
                                    }
                                },
                                function (error) {
                                    $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                                }
                            );
                        }
                    }

                    if (index == 1 && ($scope.state.data.ValorTotalOMNI > 0 || $scope.state.data.Itens.filter(value => value.ItemOMNI == true).length > 0)) {
                        $scope.state.pagamento.step.condicao = "##";
                        index = 2;
                    }


                    switch (index) {
                        case $scope.state.pagamento.step.fidelidade:
                            //  $scope.save();
                            if ($scope.$parent.config.Fidelidade.Ativo) //&& $scope.state.data.Cliente.Fidelidade == true)
                                $scope.getTokenFidelidade($scope.getInfoFidelidade());

                            break;
                        case $scope.state.pagamento.step.condicao:
                            if ($scope.state.data.DescontoFidelidade > $scope.state.fidelidade.info.Saldo) {
                                $scope.$parent.toartr.info('O valor do resgate não pode ser superior ao seu saldo.');
                                return false;
                            }

                            break;
                        case $scope.state.pagamento.step.parcelas:

                            if ($.isEmptyObject($scope.state.data.CondicaoPagamento))
                                return;
                            pedidoService.containsTroca($scope.state.data.Numero)
                                .then(
                                    function (response) {
                                        if (response.Status < 0)
                                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                                        else {
                                            if (response.Data == true) {
                                                $scope.state.NFE.send = false;
                                                $scope.state.mostranfe = false;
                                                $scope.state.NFE.enableCPF = false;
                                            }
                                            else {
                                                //entidadeAuxiliarService
                                                //    .getAllCondicaoPagamento()
                                                //    .then(
                                                //        function (response) {
                                                //            if (response.Status < 0)
                                                //                $scope.$parent.toastr.error(response.Message, "Serviço");
                                                //            else {
                                                //                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.condicaoPagamento.data);

                                                //            }
                                                //        },
                                                //        function (err) { $scope.$parent.toastr.error(err); }
                                                //    );
                                                var condAtual = $scope.auxiliar.condicaoPagamento.data.filter(a => a.Codigo == $scope.state.data.CondicaoPagamento.Codigo);

                                                $timeout(function () {
                                                    if (condAtual != null && condAtual[0] != null && condAtual[0].NFe == true) {

                                                        //if ($scope.$parent.config.ItemReserva != 2)
                                                        $scope.state.NFE.send = $scope.state.data.CondicaoPagamento.NFe;
                                                        //  $scope.state.mostranfe = !$scope.state.data.CondicaoPagamento.NFe;
                                                        $scope.state.mostranfe = $scope.$parent.config.AlteraFormaFaturamento;
                                                        $scope.state.NFE.enableCPF = (!$scope.state.mostranfe ? false : $scope.state.NFE.enableCPF);
                                                    }
                                                    else {
                                                        $scope.state.NFE.send = $scope.getSendInitialValue();
                                                        $scope.state.mostranfe = true;
                                                    }
                                                }, 700)

                                            }
                                        }
                                    },
                                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                                );


                            if ($.isEmptyObject($scope.state.data.CondicaoPagamento.Codigo !== "##")) {
                                if ($scope.state.data.CondicaoPagamento.Codigo !== "##")
                                    $scope.prepareNewPagamento(); else {
                                    pedidoService.updateTipoLojaPedido($scope.state.data.Numero).then(function () { });
                                }
                            }
                            break;
                        case $scope.state.pagamento.step.conclusao:
                            var hasPagamentoTEFSemAdministradora = $scope.PossuiPagamentoTEFSemAdministradora();
                            if (hasPagamentoTEFSemAdministradora) {
                                $confirm({ text: 'Administradora não encontrada, selecione a administradora' });
                                $scope.state.currentIndex = $scope.state.pagamento.step.parcelas;
                                return;
                            }

                            //if ($scope.state.data.Total >= 10000)
                            //    $scope.state.GerarNFE = 2;
                            //else
                            $scope.state.GerarNFE = 0;
                            if (!$scope.$parent.config.TrazerCpfCliente)
                                $scope.state.NFE.enableCPF = false;
                            else
                                $scope.state.mostranfe = true;

                            $scope.state.cpf = angular.copy($scope.state.data.Cliente.CPF);
                            $scope.getCreditoCalculado();

                            if (!$scope.$parent.config.Migrate.SAT.Ativo && !$scope.$parent.config.PrioridadeSAT && ($scope.state.GerarNFE == 1 || $scope.state.GerarNFE == 0)) {
                                pedidoService
                                    .validaLimiteNota($scope.state.data.Filial.Endereco.Estado.Sigla)
                                    .then(
                                        function (response) {
                                            if (response.Status < 0)
                                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                                            else
                                                $scope.valorLimiteNota = response.Data;

                                        },
                                        function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                                    );
                            }


                            break;
                    }

                    $scope.state.pagamento.currentIndex = index;
                    if (checkoutOficial == true || checkoutOficial == false)
                        $scope.state.checkoutoficial = checkoutOficial;


                    if (checkoutAbatido == true || checkoutAbatido == false)
                        $scope.state.checkoutabatido = checkoutAbatido;

                }
                //$scope.$digest();
            }

            $scope.cancelItemPagamento = function (index) {


                if ($scope.state.data.Pagamentos.length == 0 || ($scope.state.data.Pagamentos[index].TEFID != null || ($scope.state.data.Pagamentos[index].CarteiraDigital.IDSHIPAY != null && $scope.state.data.Pagamentos[index].CarteiraDigital.IDSHIPAY != '')))
                    return;

                var pag = {};
                angular.copy($scope.state.data, pag);

                pag.Pagamentos = [];
                pag.Pagamentos.push($scope.state.data.Pagamentos[index]);
                var troco = $scope.state.data.Pagamentos[index].Troco;

                pedidoService
                    .cancelItemPagamento(pag)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                angular.copy(response.Data, $scope.state.data);
                                //$scope.state.valorTroco = $scope.state.valorTroco - troco;
                                // if ($scope.state.valorTroco < 0)
                                $scope.state.valorTroco = 0.00;

                                $scope.calculaTroco();
                                //if ($scope.state.data.CondicaoPagamento.Codigo != "##")
                                //    $scope.prepareNewPagamento();
                            }
                        },
                        function (error) { $scope.$parent.toastr.error(error, "Limpando Parcelas"); }
                    );
            }
            $scope.discardPagamento = function () {

                $scope.state.pagamento.currentIndex = -1;

                $scope.clearPagamento();
            };
            $scope.cancelCurrentItem = function () {

                $q.when($scope.cancelItemPedido());
                $scope.state.currentItem = -1;
            };

            $scope.fechaModal = function (item, indice) {
                $scope.state.carregandoModal = !$scope.state.carregandoModal;
                $scope.updateQuantity(item, indice);
                //$scope.updateQuantity(item, indice).then(res >= (state.currentItem = -1));
                //$scope.updateQuantity(item, indice).then(function () {
                //    
                //    $scope.state.currentItem = -1;
                //});

                $timeout(function () {
                    $scope.state.carregandoModal = !$scope.state.carregandoModal;
                    $scope.state.currentItem = -1;
                }, 7000);
            };


            $scope.updateQuantity = function (item, indice) {
                if (item.Quantidade == 0 || item.Quantidade == null) {
                    $scope.state.data.Itens[indice].Quantidade = 1; state.currentItem = -1
                    item.Quantidade = 1;
                    $scope.$parent.toastr.error("Um produto não pode ter quantidade igual a zero ou vazia")
                    if (item.Troca && item.Quantidade > 0)
                        item.Quantidade = item.Quantidade * -1;

                }

                var qt = item.Quantidade - $scope.auxQtEstoque;

                if (qt > 0) {
                    pedidoService.validaEstoque(item.CodigoBarras, qt).then(function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if (response.Data) {
                                $scope.auxQtEstoque = item.Quantidade;
                                $scope.updateCurrentItem(item);
                            } else {
                                $scope.state.data.Itens[indice].Quantidade = $scope.auxQtEstoque;
                                $scope.$parent.toastr.error('Produto sem quantidade disponível para venda!', 'Serviço');
                            }
                        }
                    });
                } else {
                    $scope.auxQtEstoque = item.Quantidade;
                    $scope.updateCurrentItem(item, null, null, null, false);
                }
                //$scope.fechaModal();
            };


            $scope.focusValorAbsoluto = function (item) {

                $scope.permiteValorPercentualPedido = true;
                $scope.focusAcrescimo()
            }

            $scope.focusValorPercentual = function (item) {

                $scope.permiteValorAbsolutoPedido = true;
                $scope.focusAcrescimo()
            }

            $scope.focusAcrescimo = function (index) {

                $scope.backupAcrescimoPercentual = $scope.state.data.PercentualAcrescimo;
                $scope.backupValorAbsoluto = $scope.state.data.Acrescimo;
            }

            $scope.focoAcrescimoItem = function (index) {

                $scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual = $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo;
                $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto = $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario;
            }
            $scope.PedidoOmni = function () {
                return $scope.state.data.Itens.filter(value => value.ItemOMNI == true).length > 0;
            }
            $scope.focoAcrescimoItemPercentual = function (index) {

                $scope.permiteValorAbsoluto = true;
                $scope.focoAcrescimoItem(index);
            }

            $scope.focoAcrescimoItemAbsoluto = function (index) {
                ;
                $scope.permiteValorPercentual = true;
                $scope.focoAcrescimoItem(index);
            }

            $scope.voltarAcrescimoItem = function (index) {

                $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo = $scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual;
                $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario = $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto;
            }

            $scope.callUpdateCurrentItem = function (item) {

                $timeout(function () {
                    $scope.permiteValorAbsoluto = false;
                    $scope.permiteValorPercentual = false;
                    if ((((!$scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual && $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo == 0) || $scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual == $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo) && ((!$scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto && $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario == 0) || $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto == $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario)))
                        return;
                    angular.element('#callUpdateItem').triggerHandler('click');
                });
            }

            $scope.verificarDescontoAcrescimoItem = function (item) {
                var possuiDescontoItem = (item.PercentualDesconto != undefined && item.PercentualDesconto > 0) || item.DescontoUnitario != undefined && item.DescontoUnitario > 0 || item.PrecoLiquido < item.PrecoOriginal;
                var possuiAcrescimoItem = (item.PercentualAcrescimo != undefined && item.PercentualAcrescimo > 0) || item.AcrescimoUnitario != undefined && item.AcrescimoUnitario > 0 || item.PrecoLiquido > item.PrecoOriginal;

                if (possuiDescontoItem && possuiAcrescimoItem) {
                    $scope.$parent.toastr.error("Não é permitido adicionar no mesmo item de venda um valor de desconto e um valor de acréscimo.");
                }
                if (possuiDescontoItem || (item.PrecoOriginal > item.PrecoLiquido)) {
                    $scope.state.Desconto.bloquearDescontoItem = false;
                    $scope.state.Desconto.bloquearAcrescimoItem = true;
                }
                else if (possuiAcrescimoItem || (item.PrecoOriginal < item.PrecoLiquido)) {
                    $scope.state.Desconto.bloquearDescontoItem = true;
                    $scope.state.Desconto.bloquearAcrescimoItem = false;
                }
                else {
                    $scope.state.Desconto.bloquearDescontoItem = false;
                    $scope.state.Desconto.bloquearAcrescimoItem = false;
                }
            }

            $scope.verificarDescontoAcrescimoCabecalho = function (pedido) {
                var possuiDesconto = (pedido.PercentualDesconto != undefined && pedido.PercentualDesconto > 0) || (pedido.Desconto != undefined && pedido.Desconto > 0);
                var possuiAcrescimo = (pedido.PercentualAcrescimo != undefined && pedido.PercentualAcrescimo > 0) || (pedido.Acrescimo != undefined && pedido.Acrescimo > 0);

                if (possuiDesconto && possuiAcrescimo) {
                    return "Não é permitido adicionar no pedido de venda um valor de desconto e um valor de acréscimo.";
                }

                if (possuiDesconto) {
                    $scope.state.Desconto.bloquearDescontoCabecalho = false;
                    $scope.state.Desconto.bloquearAcrescimoCabecalho = true;
                }
                else if (possuiAcrescimo) {
                    $scope.state.Desconto.bloquearDescontoCabecalho = true;
                    $scope.state.Desconto.bloquearAcrescimoCabecalho = false;
                }
                else {
                    $scope.state.Desconto.bloquearDescontoCabecalho = false;
                    $scope.state.Desconto.bloquearAcrescimoCabecalho = false;
                }
            }

            $scope.callUpdateDescontoTotalPedido = function (item) {
                $timeout(function () {
                    $scope.permiteValorPercentualPedido = false;
                    $scope.permiteValorAbsolutoPedido = false;
                    var acrescimoValido = !$scope.backupAcrescimoPercentual && $scope.state.data.PercentualAcrescimo == 0;
                    var acrescimoIgual = $scope.backupAcrescimoPercentual == $scope.state.data.PercentualAcrescimo;
                    var naoValorAbsolutoAcrescimoZerado = !$scope.backupValorAbsoluto && $scope.state.data.Acrescimo == 0;
                    var valorAbsolutoIgualAcrescimo = $scope.backupValorAbsoluto == $scope.state.data.Acrescimo;
                    if ((((acrescimoValido) || acrescimoIgual) && ((naoValorAbsolutoAcrescimoZerado) || valorAbsolutoIgualAcrescimo))) {
                        return;
                    }
                    $scope.alteracaoAcrescimo = true;
                    angular.element('#descontoNoPedido').triggerHandler('click');
                });
            }

            $scope.updateCurrentItem = function (item, alteraValorBruto, aplicaDescontoUnitario, tipo, validaDesconto = true) {

                if (item.Troca && item.Quantidade > 0)
                    item.Quantidade = item.Quantidade * -1;

                var permiteDescontoItemTroca = $scope.$parent.config.DescontoItemTroca;
                var itemDescontoTabelaPreco = ($scope.state.currentItemDescontoTabelaPreco == undefined) ? 0 : $scope.state.currentItemDescontoTabelaPreco;

                //Valida se o valor líquido está diferente do original e bloqueia o campo que não foi afetado. EX: Se adicionado o acréscimo, bloqueia o campo de desconto.
                if (item.PrecoOriginal != item.PrecoLiquido) {

                    //Caso a porcentagem de desconto ou de acréscimo seja zerada, ele também irá zerar o unitário.
                    if ($scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto == 0 && $scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario != 0) {
                        $scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario = 0;
                        item.PrecoLiquido = item.PrecoOriginal;
                    }

                    if ($scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo == 0 && $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario != 0) {
                        $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario = 0;
                        item.PrecoLiquido = item.PrecoOriginal;
                    }

                    //Verifica se os campos de acréscimo ou de desconto foram mudados para 0. Caso sim, o valor líquido retorna para o valor original
                    if (($scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo == 0) && (item.backupAcrescimoPercentual != 0 && item.backupAcrescimoPercentual != undefined))
                        item.PrecoLiquido = item.PrecoOriginal;

                    if (($scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto == 0 || $scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario == 0) && (item.backupAcrescimoPercentual != undefined))
                        item.PrecoLiquido = item.PrecoOriginal;

                    //Limpa os valores que estavam no campo caso tiverem algum valor anteriormente. EX: Se o valor líquido é maior que o original, ele limpa o campo de desconto.
                    if (item.PrecoLiquido < item.PrecoOriginal) {
                        $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo = 0;
                        $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario = 0;
                    }
                    else {
                        $scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto = 0;
                        $scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario = 0;
                    }

                }


                if ($scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual == undefined && $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto == undefined) {

                    $scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual = 0;
                    $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto = 0;

                }

                if ($scope.state.data.Itens[$scope.state.currentItem].ItemDescontoPercentualBackup == undefined && $scope.state.data.Itens[$scope.state.currentItem].ItemDescontoUnitarioBackup == undefined) {
                    $scope.state.data.Itens[$scope.state.currentItem].ItemDescontoPercentualBackup = 0;
                    $scope.state.data.Itens[$scope.state.currentItem].ItemDescontoUnitarioBackup = 0;
                }

                if ($scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo != 0 && $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario != 0) {

                    $scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto = 0;
                    $scope.state.data.Itens[$scope.state.currentItem].AcrescimoDesconto = 0;
                }

                if ($scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto != 0 && $scope.state.data.Itens[$scope.state.currentItem].AcrescimoDesconto != 0) {

                    $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo = 0;
                    $scope.state.data.Itens[$scope.state.currentItem].AcrescimoAcrescimo = 0;
                }



                if (validaDesconto)
                    if ($scope.$parent.config.GerenteAcrescimoItem && $scope.$parent.config.AplicaAcrescimoItem && ($scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual != $scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo || $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto != $scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario) || item.PrecoLiquido > item.PrecoOriginal) {

                        if (($scope.state.data.Itens[$scope.state.currentItem].PercentualAcrescimo == 0 && $scope.state.data.Itens[$scope.state.currentItem].backupAcrescimoPercentual) || ($scope.state.data.Itens[$scope.state.currentItem].AcrescimoUnitario == 0 && $scope.state.data.Itens[$scope.state.currentItem].backupValorAbsoluto)) {
                            $scope.$parent.autorizacaoGerente.ativo = false;
                        } else {
                            $scope.$parent.autorizacaoGerente.ativo = true;
                            $scope.$parent.autorizacaoGerente.reason = "";
                            $scope.$parent.autorizacaoGerente.pin = "";
                            $scope.$parent.autorizacaoGerente.request = "Acrescimo de R$ " + (item.PrecoLiquido - item.PrecoOriginal).toFixed(2) + " aplicado para o pedido #" + $scope.state.data.Numero;
                            $scope.$parent.autorizacaoGerente.callback = $scope.aplicarAcrescimoItemGerente;
                            $scope.$parent.autorizacaoGerente.callbackReturn = $scope.descartarAcrescimoItemGerente;
                            $scope.verificarDescontoAcrescimoItem(item);
                            return;
                        }
                    }

                if ($scope.state.currentItemDescontoTabelaPreco)
                    if (item.Troca && !permiteDescontoItemTroca && ((item.PercentualDesconto > 0 || item.DescontoUnitario > 0 || item.PrecoLiquido < item.PrecoOriginal) && !alteraValorBruto)) {
                        $scope.state.data.Itens[$scope.state.currentItem].PercentualDesconto = 0;
                        $scope.state.data.Itens[$scope.state.currentItem].DescontoUnitario = 0;
                        $scope.state.data.Itens[$scope.state.currentItem].PrecoLiquido = item.PrecoOriginal;
                        $scope.verificarDescontoAcrescimoItem(item);
                        $scope.$parent.toastr.error("Não é possível aplicar descontos para itens de troca");
                        return;
                    }
                if (item.GerenteAcrescimo) {
                    $scope.$parent.toastr.error("Não é possível aplicar descontos negativos");
                }

                var operacaoVenda = $scope.$parent.config.OperacaoVenda;
                var limiteDescontoItem = operacaoVenda.LimiteDescontoItem;
                var limiteDescontoItemGerente = operacaoVenda.LimiteDescontoItemGerente;


                //Utilizado para poder validar de acordo com a regra de limite dos descontos. EX: Preço liquido for menor que o preço original e dentro do limite de desconto selecionado, chama o modal para validação de gerente.
                //if (item.PrecoLiquido < item.PrecoOriginal) {
                //    item.DescontoUnitario = item.PrecoOriginal - item.PrecoLiquido;
                //    item.PercentualDesconto = (item.DescontoUnitario / item.PrecoOriginal) * 100;
                //}
                //else {
                //    item.AcrescimoUnitario = item.PrecoLiquido - item.PrecoOriginal;
                //    item.PercentualAcrescimo = (item.AcrescimoUnitario / item.PrecoOriginal) * 100;
                //}

                $scope.state.ItemDescontoPercentualBackup = item.PercentualDesconto;
                $scope.state.ItemDescontoUnitarioBackup = item.DescontoUnitario;
                $scope.state.ItemAcrescimoPercentualBackup = item.PercentualAcrescimo;
                var descontoPorcentagem = item.PercentualDesconto;
                if (aplicaDescontoUnitario)
                    descontoPorcentagem = (item.DescontoUnitario / item.PrecoOriginal) * 100;

                if (($scope.regraDesconto.tipo === "O" || $scope.regraDesconto.tipo === "M") && descontoPorcentagem != 0 && (descontoPorcentagem >= limiteDescontoItem)) {
                    //abrir tela de gerencia e usar seguinte regra para validar

                    if (descontoPorcentagem > 100) {
                        $scope.$parent.toastr.error("Desconto não pode ser maior do que o valor do item!");
                        $scope.descartarDescontoItemGerente();
                        return;
                    }
                    if (descontoPorcentagem > itemDescontoTabelaPreco && itemDescontoTabelaPreco != 0) {
                        $scope.$parent.toastr.error("Não é possível aplicar o desconto porque o limite máximo permitido para o item pela tabela de preço é de " + itemDescontoTabelaPreco + "%.");
                        $scope.descartarDescontoItemGerente();
                        return;
                    }

                    if (validaDesconto)
                        if (descontoPorcentagem <= limiteDescontoItemGerente || limiteDescontoItemGerente === 0) {
                            if (descontoPorcentagem > limiteDescontoItem) {

                                $scope.$parent.autorizacaoGerente.ativo = true;
                                $scope.$parent.autorizacaoGerente.reason = "";
                                $scope.$parent.autorizacaoGerente.pin = "";
                                $scope.$parent.autorizacaoGerente.callback = $scope.aplicarDescontoItemGerente;
                                $scope.$parent.autorizacaoGerente.request = "Desconto de " + descontoPorcentagem.toFixed(4) + "% aplicado para o item " + ($scope.state.currentItem + 1) + " do pedido #" + $scope.state.data.Numero;
                                $scope.verificarDescontoAcrescimoItem(item);
                                $scope.$parent.autorizacaoGerente.callbackReturn = $scope.descartarDescontoItemGerente;
                            }
                            else {
                                $q.when($scope.updateItemPedido());
                                return;
                            }
                        } else {
                            $scope.$parent.toastr.error("Não é possível aplicar o desconto porque o limite permitido para o item é de " + limiteDescontoItemGerente + "%.");
                            $scope.descartarDescontoItemGerente();
                            $scope.verificarDescontoAcrescimoItem(item);
                        }
                    return;
                }
                $q.when($scope.updateItemPedido());
            }

            $scope.selecionarVendedor = function (index) {
                var id = $scope.state.data.Itens[index].Vendedor.Codigo;
                $scope.state.data.Itens[index].Vendedor = $.grep($scope.auxiliar.vendedor.data, function (item) {
                    return item.Codigo == id;
                })[0];
            }
            $scope.savePedido = function (itemPedido) {
                pedidoService.saveItens($scope.state.data, itemPedido)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else
                                angular.copy(response.Data, $scope.state.data);
                        },
                        function (error) { $scope.$parent.toastr.error(error, 'Salvando Pedido'); }
                    );
            }
            $scope.toggleTEF = function () {
                var descontoPagamento = 0.00;
                entidadeAuxiliarService.getPaymentOperationDiscount($scope.state.data.CondicaoPagamento.Codigo, $scope.state.pagamento.livre.currentTipoPagamento.Codigo, $scope.state.data.OperacaoVenda.Codigo).then(
                    function (data) {
                        $scope.state.TEF.DescontoOperacao = data.Data;
                        $scope.state.TEF.ValorPagamento = $scope.state.data.Total - ($scope.state.data.Total * data.Data / 100) - $scope.state.data.Pago;

                        if ($scope.state.TEF.ValorPagamento == 0) {
                            $scope.state.TEF.modalTEF = false;
                            /* $scope.$parent.toastr.error('Não existem valores pendentes para prosseguir processo de TEF.', 'Atenção!');*/
                        }
                        else {

                            $scope.state.TEF.modalTEF = !$scope.state.TEF.modalTEF;


                            if ($scope.state.TEF.ValorPagamento < 0) $scope.state.TEF.ValorPagamento = 0;

                            if (!$scope.state.TEF.modalTEF) {
                                $scope.state.TEF.TEFProcessamento = false;
                                $interval.cancel(intervalPromise);

                                //cancelar todas as requisicoes pendentes de TEF para o terminal
                                var terminal = $scope.$parent.config.Terminal.Codigo;
                                pedidoService.CancelarRequisicaoTEF(terminal).then(
                                    function (response) {
                                        if (response.Status < 0)
                                            $scope.$parent.toastr.error(response.Message, 'Não foi possível cancelar as transações pendentes. Cancele a transação no PINPAD e tente novamente.');
                                    },
                                    function (error) {
                                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                                    }
                                );
                            }
                        }
                    }
                );

            };
            //Pix Rede


            {
                $scope.PixRede = {
                    ModalPixRede: false,
                    Processando: false,
                    ValorPagamento: 0,
                    IDPixProcessando: '',
                    Toggle: function () {
                        $scope.PixRede.ModalPixRede = !$scope.PixRede.ModalPixRede
                    },
                    IniciarModalPagamento: function (valor) {
                        $scope.PixRede.Toggle();
                        $scope.PixRede.ValorPagamento = valor;
                    },
                    IniciarPagamento: function (valor) {
                        $scope.InserirPix(valor
                        );
                    },
                }


                $scope.InserirPix = function (valor) {

                    $scope.PixRede.IDPixProcessando = guid();
                    $scope.PixRede.Processando = true;
                    pedidoService.InserirTEF($scope.PixRede.IDPixProcessando, $scope.state.data.Numero, '+', 1, valor).then(
                        function (response) {
                            if (response.Status < 0) {
                                // $scope.$parent.toastr.error(response.Message, 'Erro ao Inserir processamento de TEF');
                                $confirm({ text: response.Message });
                                $scope.PixRede.Processando = false;
                                $scope.continue = false;
                            }
                            else {
                                $scope.continue = true;
                                $scope.StatusPix();
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, 'Erro de comunicação com o servidor');
                            $scope.PixRede.Processando = false;
                            $scope.continue = false;
                        }
                    );
                };

                $scope.ContinuaPix = function () {
                    intervalPromise = $interval(function () {
                        $scope.StatusPix();
                    }, 500);
                }

                $scope.StatusPix = function () {
                    $interval.cancel(intervalPromise);
                    pedidoService.GetStatusTEF($scope.PixRede.IDPixProcessando).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.PixRede.Processando = false;
                                $confirm({
                                    text: response.Message
                                });
                                //$scope.$parent.toastr.error(response.Message, 'Serviço');
                            }
                            else {
                                if (response.Data) {

                                    var codigo_processamento = response.Data.substring(0, 2).trim();
                                    var mensagem_processamento = response.Data.substring(4);
                                    $scope.state.TEF.Status = mensagem_processamento;

                                    if (codigo_processamento == "1" && $scope.continue) {


                                        $timeout(function () {
                                            pedidoService.get($scope.state.data.Numero).then(
                                                function (response) {
                                                    $scope.state.data = response.Data;
                                                    $scope.continue = false;
                                                    $interval.cancel(intervalPromise);
                                                    $scope.PixRede.ModalPixRede = false;
                                                    $scope.PixRede.Processando = false;
                                                    $scope.$parent.toastr.success('Pagamento Pix Concluido. Finalize o pedido!');
                                                    return;

                                                });
                                        }, 500);
                                    }
                                    else {
                                        if (codigo_processamento == "-1" && $scope.continue) {
                                            $scope.$parent.toastr.error('Não foi possivel concluir o Pagamento!' + mensagem_processamento);
                                            $scope.PixRede.ModalPixRede = false;
                                            $scope.PixRede.Processando = false;
                                            $scope.continue = false;
                                            $interval.cancel(intervalPromise);
                                            return;
                                        }

                                        // $scope.toggleTEF();

                                    }

                                }
                            }

                            if ($scope.continue)
                                $scope.ContinuaPix();
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                            $scope.PixRede.Processando = false;
                            if ($scope.continue)
                                $scope.ContinuaPix();
                        }
                    );
                };

            }
            $scope.iniciarTEF = function () {
                intervalPromise = $interval(function () {
                    $scope.StatusTEF();
                }, 500);
            };
            $scope.AbreModalTEF = function () {

                if ($scope.state.state != undefined && $scope.state.state.TEF != undefined && $scope.state.state.TEF.NumeroParcelas != undefined)
                    $scope.state.state.TEF.NumeroParcelas = 1;
                $scope.state.TEF.TEFStatusAbort = false;
                $scope.toggleTEF();
            }

            $scope.PossuiPagamentoTEFSemAdministradora = function () {

                var pagamentosSemAdministradora = $scope.getPagamentosTEFSemAdministradora();
                if (pagamentosSemAdministradora == null)
                    return false;
                return (pagamentosSemAdministradora.length > 0);
            }

            $scope.ProcessarTEFClick = function () {

                if ($scope.state.TEF.TEFProcessamento) {
                    $.ajax({
                        type: 'GET',
                        async: false,
                        url: '/entidadeauxiliar/removerTEF?idTEF=' + $scope.state.TEF.IDSiTef
                    });
                    $scope.state.TEF.TEFProcessamento = false;
                    $scope.continue = false;
                    return;
                }//se ja inicou processamento, nao iniciar novamente.
                var valorapagar = ($scope.state.data.Total - ($scope.state.data.Total * $scope.state.TEF.DescontoOperacao / 100) - $scope.state.data.Pago);

                if ($scope.state.TEF.ValorPagamento <= 0) {
                    $scope.$parent.toastr.error('Informar o valor do pagamento em Cartão.', 'Valor inválido');
                    return;
                }
                if ($scope.state.TEF.ValorPagamento > valorapagar) {
                    $scope.$parent.toastr.error('Valor do pagamento é maior que o valor do saldo a pagar.', 'Valor inválido');
                    return;
                }

                $scope.state.TEF.TEFProcessamento = true;
                $scope.state.TEF.pergunta = '';
                $scope.state.TEF.IDSiTef = guid(); // new id
                pedidoService.InserirTEF($scope.state.TEF.IDSiTef, $scope.state.data.Numero, $scope.state.TEF.TipoCartao, $scope.state.TEF.NumeroParcelas, $scope.state.TEF.ValorPagamento).then(
                    function (response) {
                        if (response.Status < 0) {
                            // $scope.$parent.toastr.error(response.Message, 'Erro ao Inserir processamento de TEF');
                            $confirm({ text: response.Message });
                            $scope.state.TEF.TEFProcessamento = false;
                            $scope.continue = false;
                        }
                        else {
                            $scope.continue = true;
                            $scope.StatusTEF();
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Erro de comunicação com o servidor');
                        $scope.state.TEF.TEFProcessamento = false;
                        $scope.continue = false;
                    }
                );
            };


            $scope.StatusTEF = function () {
                $interval.cancel(intervalPromise);
                pedidoService.GetStatusTEF($scope.state.TEF.IDSiTef).then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.state.TEF.TEFProcessamento = false;
                            $confirm({
                                text: response.Message
                            });
                            //$scope.$parent.toastr.error(response.Message, 'Serviço');
                        }
                        else {
                            if (response.Data) {


                                if (
                                    response.Data === '0 - Processado com sucesso.' ||
                                    response.Data === '1 - Processado com sucesso.' || response.Data === '0 - transacao aprov.' || response.Data === '0 - retire o cartao da leitora') {

                                    $scope.state.TEF.TEFStatusAbort = true;
                                } else {
                                    $scope.state.TEF.TEFStatusAbort = false;
                                }

                                var codigo_processamento = response.Data.substring(0, 2).trim();
                                var mensagem_processamento = response.Data.substring(4);

                                if (codigo_processamento == "0" && mensagem_processamento.substring(0, 1) == "?") {

                                    $scope.state.TEF.respostaok = false;
                                    $scope.state.TEF.resposta = "";
                                    $scope.state.TEF.pergunta = mensagem_processamento.substring(1);
                                    $scope.continue = false;
                                    $interval.cancel(intervalPromise);
                                    $scope.state.TEF.TEFProcessamento = false;
                                    return;
                                }

                                $scope.state.TEF.Status = mensagem_processamento;

                                if (codigo_processamento == "1" && $scope.continue) {


                                    $timeout(function () {
                                        pedidoService.get($scope.state.data.Numero).then(
                                            function (response) {
                                                $scope.state.data = response.Data;
                                                var hasPagamentoTEFSemAdministradora = $scope.PossuiPagamentoTEFSemAdministradora();
                                                if (hasPagamentoTEFSemAdministradora) {
                                                    $scope.$parent.toastr.warning('Administradora não encontrada, selecione a administradora');
                                                    $scope.state.TEF.modalTEF = false;
                                                    $scope.continue = false;
                                                    $interval.cancel(intervalPromise);
                                                    $scope.state.TEF.TEFProcessamento = false;
                                                    return;
                                                }

                                                $scope.state.TEF.modalTEF = false;
                                                $scope.continue = false;
                                                $interval.cancel(intervalPromise);
                                                $scope.state.TEF.TEFProcessamento = false;
                                                $scope.$parent.toastr.success('Processamento TEF concluído. Finalize o pedido!');
                                                return;

                                            });
                                    }, 500);
                                }
                                else {
                                    if (codigo_processamento == "-1" && $scope.continue) {
                                        $scope.$parent.toastr.error('Não foi possivel concluir o TEF!' + mensagem_processamento);
                                        $scope.state.TEF.modalTEF = false;
                                        $scope.continue = false;
                                        $interval.cancel(intervalPromise);
                                        $scope.state.TEF.TEFProcessamento = false;
                                        return;
                                    }

                                    // $scope.toggleTEF();

                                }

                            }
                        }

                        if ($scope.continue)
                            $scope.iniciarTEF();
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.state.TEF.TEFProcessamento = false;
                        if ($scope.continue)
                            $scope.iniciarTEF();
                    }
                );
            };

            $scope.RespostaOK = function () {
                event.preventDefault();

                pedidoService.SetRespostaTEF($scope.state.TEF.IDSiTef, $scope.state.TEF.resposta);

                $scope.state.TEF.pergunta = "";
                $scope.state.TEF.resposta = "";
                $scope.state.TEF.respostaok = true;

                $scope.continue = true;
                $scope.iniciarTEF();
            }

            $scope.toogleConfirmaCadastroTroca = function () {
                $scope.state.ClienteTroca.ConfirmaCadastroTroca = !$scope.state.ClienteTroca.ConfirmaCadastroTroca;
            };

            var getEstoques = function () {
                var array = [];
                for (var i = 0; i < $scope.auxiliar.consulta.data.Barra.Produto.Estoques.length; i++) {
                    array = getTamanhos($scope.auxiliar.consulta.data.Barra.Produto.Estoques[i], array);
                }
                $scope.state.estoques = array;
            }

            var getPrecoCores = function () {
                var precoCores = [];

                produtoService.getPrecoCoresByTabelaPreco($scope.auxiliar.consulta.data.Barra.Produto.Codigo, $scope.$parent.config.OperacaoVenda.TabelaPadrao.Codigo)
                    .then(
                        function (response) {
                            if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Serviço'); }
                            else {
                                precoCores = response.Data;
                                $scope.auxiliar.consulta.precoCores = precoCores;
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }

            $scope.getProdutoPreco = function (cor, itemProduto) {
                if (itemProduto == null) {
                    if (!$scope.auxiliar.consulta.data.Barra.Produto.PrecoPorCor) {
                        return $scope.auxiliar.consulta.data.PrecoLiquido;
                    }
                    else {
                        if ($scope.auxiliar.consulta.precoCores == undefined)
                            return 0;
                        else {
                            var preco = $scope.auxiliar.consulta.precoCores[cor];
                            return preco;
                        }
                    }
                }

            }

            var getTamanhos = function (estoques, array) {
                for (var i = 0; i < estoques.EstoqueTamanhos.length; i++) {
                    if (array.indexOf(estoques.EstoqueTamanhos[i].Tamanho.Nome.trim()) == -1)
                        array.push(estoques.EstoqueTamanhos[i].Tamanho.Nome.trim());
                }
                return array;
            }

            $scope.isPreVenda = function () {

                for (var i = 0; i < $scope.config.Terminal.TiposTerminal.length; i++) {
                    if ($scope.config.Terminal.TiposTerminal[i].Cod == "PreVenda")
                        return true;
                }
                return false;
            }

            $scope.caixaAberto = function () {
                if ((!$scope.state.caixaAberto && $scope.config.AbreCaixa)) {
                    $scope.state.modalVendedores = false;
                }

                return !$scope.state.caixaAberto && $scope.config.AbreCaixa && ($scope.$parent.config.Terminal.TiposTerminal.length == 0 ? true : $scope.$parent.config.Terminal.TiposTerminal[0].Cod != "PreVenda");
            }

            $scope.filterPayments = function (item) {

                return ((item.Devolucao == 1 && $scope.state.data.Total < 0) || (item.Devolucao == 0 && $scope.state.data.Total >= 0) || item.Devolucao == 2);
            }

            $scope.getLabel = function () {

                var label = ($scope.state.data.Total < 0 ? "Devolvido" : "Recebido");;
                return label;
            }

            $scope.CancelTEF = function (tefid, index) {


                $scope.state.TEFCancel.IDSiTef = guid(); // new id
                $scope.state.TEFCancel.IDTefRelated = tefid;
                $scope.state.TEFCancel.IndexParcela = index;
                $scope.state.TEFCancel.TEFProcessamento = true;

                pedidoService.InserirTEFCancel($scope.state.TEFCancel.IDSiTef, $scope.state.TEFCancel.IDTefRelated).then(
                    function (response) {
                        if (response.Status < 0) {
                            $confirm({
                                text: response.Message
                            });
                        }
                        else {
                            $scope.toggleTEFCancel();
                            intervalPromise = $interval(function () {
                                $scope.StatusTEFCancel();
                            }, 500);
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.state.TEFCancel.TEFProcessamento = false;
                    }
                );
            }

            $scope.toggleTEFCancel = function () {
                $scope.state.TEFCancel.modalTEF = !$scope.state.TEFCancel.modalTEF;
                if (!$scope.state.TEFCancel.modalTEF) {
                    if ($scope.state.TEFCancel.TEFProcessamento) {
                        //tef está em processamento, nao foi concluido o cancelamento, 
                        //avisar que precisa cancelar no pinpad
                        $scope.$parent.toastr.error('Não esqueça de cancelar o processamento no PINPAD.', 'ATENÇÃO', {
                            timeOut: 7500
                        });
                    }
                    $scope.state.TEFCancel.TEFProcessamento = false;
                    $interval.cancel(intervalPromise);
                }
            };


            $scope.GetTextTefCancel = function () {
                if ($scope.state.data.Pagamentos.length > 0) {
                    var pix = $scope.state.data.Pagamentos[$scope.state.TEFCancel.IndexParcela].Tipo.Codigo == "+";
                    if (pix)
                        return "PIX"
                    else
                        return "TEF"
                }
                else
                    return "";
            }
            $scope.StatusTEFCancel = function () {
                $interval.cancel(intervalPromise);
                pedidoService.GetStatusTEFCancel($scope.state.TEFCancel.IDSiTef).then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if (response.Data) {
                                var codigo_processamento = response.Data.substring(0, 1);
                                var mensagem_processamento = response.Data.substring(4);

                                $scope.state.TEFCancel.Status = mensagem_processamento;

                                var pix = $scope.state.data.Pagamentos[$scope.state.TEFCancel.IndexParcela].Tipo.Codigo == "+";
                                if (codigo_processamento == "1") {

                                    pedidoService.ConfirmaCancelamentoTEF($scope.state.TEFCancel.IDSiTef, $scope.state.data.Numero).then(
                                        function (response) {
                                            angular.copy(response.Data, $scope.state.data);

                                            if (pix)
                                                $scope.$parent.toastr.success('Cancelamento de Pix concluído.');
                                            else
                                                $scope.$parent.toastr.success('Cancelamento de TEF concluído.');
                                            $scope.state.TEFCancel.TEFProcessamento = false;
                                            $scope.cancelItemPagamento($scope.state.TEFCancel.IndexParcela);
                                            $scope.toggleTEFCancel();
                                            return;
                                        });
                                    return;
                                }
                                else {
                                    if (codigo_processamento == "-1" || codigo_processamento == "-") {
                                        if (pix)
                                            $scope.$parent.toastr.error('Não foi possivel cancelar o Pix!' + mensagem_processamento);
                                        else
                                            $scope.$parent.toastr.error('Não foi possivel cancelar o TEF!' + mensagem_processamento);
                                        $scope.state.TEFCancel.TEFProcessamento = false;
                                        return;
                                    }
                                }

                                intervalPromise = $interval(function () {
                                    $scope.StatusTEFCancel();
                                }, 500);
                            }
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.state.TEFCancel.TEFProcessamento = false;
                    }
                );
            };

            $scope.PrintTEF = function (tefid) {
                pedidoService.InserirReimpressaoTEF(tefid).then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.$parent.toastr.success('Comprovante reenviado para a fila de impressão', 'Reimpressão TEF');
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                    }
                );

            }

            $scope.SaveAdministradoraTEF = function (pagamento) {

                var hasTEFID = pagamento.TEFID != null && pagamento.TEFID != "";
                if (!hasTEFID)
                    return;

                var response = pedidoService.SaveAdministradoraTEF(pagamento);
                response.then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.$parent.toastr.success('Administradora de cartão alterada com sucesso.');
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                    }
                );
            }

            $scope.SaveVencimentoTEF = function (pagamento) {

                var hasTEFID = pagamento.TEFID != null && pagamento.TEFID != "";
                if (!hasTEFID)
                    return;

                var response = pedidoService.SaveVencimentoTEF(pagamento);
                response.then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.$parent.toastr.success('Data de vencimento alterado com sucesso.');
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                    }
                );
            };

            $scope.getPagamentosTEFSemAdministradora = function () {
                if ($scope.state.data.Pagamentos != null) {

                    var pagamentosSemAdministradora = $scope.state.data.Pagamentos.filter(function (pagamento) {
                        var adminCodigo = pagamento.Cartao.Administradora.Codigo;
                        var hasAdministradora = false;
                        if ((adminCodigo || "").trim() != "" && adminCodigo != "00")
                            hasAdministradora = true;
                        if (pagamento.Tipo.Codigo == '+')
                            hasAdministradora = true;
                        var hasTEFID = pagamento.TEFID != null && pagamento.TEFID != "";

                        return !hasAdministradora && hasTEFID;
                    });

                    return pagamentosSemAdministradora;
                }

            }

            $scope.gerarValeProduto = function () {
                var vendedor = $("#vendedor").val();
                if (vendedor == "" || vendedor == "?" || !$scope.state.data.Vendedor || !$scope.state.data.Vendedor.Codigo || ($scope.state.data.Vendedor.DesativadoEm && $scope.state.data.Vendedor.DesativadoEm < new Date())) {
                    $scope.$parent.toastr.error("Informe o vendedor da Venda ou selecione um vendedor ativo.", "Atenção");
                    $scope.state.codigoBarras = "";
                    $timeout(function () {
                        $("#codigo-barras").focus();
                    });
                    return;
                }

                $scope.state.modalValeProduto = !$scope.state.modalValeProduto;
            }

            $scope.submterValeProduto = function () {
                if (validacaoValeProduto())
                    return;

                $scope.state.carregandoVale = true;
                pedidoService.AddValeProdutoprePedido($scope.state.data, $scope.state.valeProduto).then(function (response) {
                    if (response.Status < 0) {
                        $scope.state.carregandoVale = false;
                        $scope.state.valeProduto.NumeroCartao = '';
                        $scope.$parent.toastr.error(response.Message);
                        return;
                    }
                    $scope.state.carregandoVale = false;
                    angular.copy(response.Data, $scope.state.data);
                    $scope.state.valeProduto = {
                        NumeroCartao: '', Valor: 0
                    };
                    $scope.gerarValeProduto();
                    $scope.$parent.toastr.success("Vale presente gerado com sucesso");
                }, function (error) {
                    $scope.state.carregandoVale = false;
                    $scope.$parent.toastr.error(error, "Erro");
                });
            }

            var validacaoValeProduto = function () {
                if ($scope.state.valeProduto.NumeroCartao == "") {
                    $scope.$parent.toastr.error("O número do vale produto não foi preenchido");
                    return true;
                }
                if (!$scope.state.valeProduto.ValorOriginal || $scope.state.valeProduto.ValorOriginal == "" || $scope.state.valeProduto.ValorOriginal == 0) {
                    $scope.$parent.toastr.error("O valor do vale produto não foi preenchido");
                    return true;
                }
                return false;
            }

            $scope.selecionarProduto = function (item, index) {
                $scope.state.currentItem = item.Cancelado || item.ValeProduto || item.ItemOMNI == true ? -1 : index;


                $scope.auxQtEstoque = item.Quantidade;

                if ($scope.state.currentItem >= 0) {
                    $scope.verificarDescontoAcrescimoItem(item);
                    var pedido = $scope.state.data;
                    pedidoService.getItemPedidoDescontoTabelaPreco(pedido, ($scope.state.currentItem + 1)).then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.toastr.error(response.Message, "Serviço");
                            else {
                                $scope.state.currentItemDescontoTabelaPreco = response.Data;
                            }
                        },
                        function (error) {
                            $scope.toastr.error(error, 'Serviço');
                        }
                    );
                }

                $scope.selecionarVendedor(index);
            };

            $scope.getDiscount = function () {

                entidadeAuxiliarService.getPaymentOperationDiscount($scope.state.data.CondicaoPagamento.Codigo, $scope.state.pagamento.livre.currentTipoPagamento.Codigo, $scope.state.data.OperacaoVenda.Codigo).then(
                    function (data) {
                        $scope.DescontoPgto = data.Data + "%";
                        if ($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.length > 0) {
                            $scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].DescontoPgto = $scope.DescontoPgto;
                        }
                    });
            }

            $scope.checkCaixaAberto = function () {
                if ((!$scope.$parent.config.Terminal || !$scope.$parent.config.Terminal.Codigo) && !$scope.$parent.config.TerminalUnico) {
                    $scope.toastr.error("Configure o terminal");
                    $state.go("state-config");
                }
                if ($scope.$parent.config.TerminalUnico) {
                    $scope.$parent.config.Terminal.Codigo = $scope.$parent.config.TerminalCorrente;
                }
                caixaService
                    .checkCaixaAberto($scope.$parent.config.Terminal.Codigo.trim(), null)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.toastr.error(response.Message, "Serviço");
                            else {

                                $scope.state.caixaAberto = response.Data;
                            }

                        },
                        function (error) {

                            $scope.toastr.error(error, 'Serviço');
                        }
                    );
            }

            $scope.checkCaixaAberto();

            $scope.direcionarCaixa = function () {
                $scope.state.caixaAberto = true;
                $state.go("state-caixa");
            }

            $scope.reenviarNota = function (nota) {
                $scope.carregandoReenvio = true;
                notaFiscalService
                    .EnviaNotaSefaz(nota.NotaFiscal.Numero, nota.NotaFiscal.Serie.Codigo, $scope.$parent.config.Filial.Nome)
                    .then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message);
                                $scope.carregandoReenvio = false;
                            }

                            else {
                                //$scope.state.data = response.Data;
                                $scope.$parent.toastr.clear();
                                $scope.setNotificacaoVisualizada();
                                $scope.$parent.toastr.success("NF Gerada com sucesso.");
                                $scope.carregandoReenvio = false;
                                $scope.initialize();
                            }
                        },
                        function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                    );
            }

            $scope.recarregar = function () {
                location.reload();
            }

            $scope.validaCpf = function (cpf) {
                clienteService.validaCpf(cpf).then(
                    function (response) {
                        if ($scope.auxiliar != null && $scope.auxiliar.newClienteTroca != null && $scope.auxiliar.newClienteTroca.data != null) {
                            $scope.auxiliar.newClienteTroca.data.CpfInvalido = !response.Data;
                        }
                        if ($scope.items != null && $scope.items.data != null) {
                            $scope.items.data.CpfInvalido = !response.Data;
                        }
                        if ($scope.auxiliar != null && $scope.auxiliar.newCliente != null && $scope.auxiliar.newCliente.data != null) {
                            $scope.auxiliar.newCliente.data.CpfInvalido = !response.Data;
                        }


                        if (!response.Data) {
                            $scope.$parent.toastr.error("CPF inválido");
                        }
                    });
            }


            $scope.getQuantidadeCorTamanho = function (size, color, itemProduto) {

                if (itemProduto == null) {
                    if (!size || size == "" || !color || color == "")
                        return 0;
                    for (var i = 0; i < $scope.auxiliar.consulta.data.Barra.Produto.Estoques.length; i++) {
                        var item = $scope.auxiliar.consulta.data.Barra.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTamanho(item.EstoqueTamanhos, size);
                    }
                }
                else {
                    if (!size || size == "" || !color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Barra.Produto.Estoques.length; i++) {
                        var item = itemProduto.Barra.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTamanho(item.EstoqueTamanhos, size, itemProduto);
                    }
                }
                return 0;
            }

            $scope.getQuantidadeCor = function (color, itemProduto) {
                if (itemProduto == null) {
                    if (!color || color == "")
                        return 0;
                    for (var i = 0; i < $scope.auxiliar.consulta.data.Barra.Produto.Estoques.length; i++) {
                        var item = $scope.auxiliar.consulta.data.Barra.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTodosTamanho(item.EstoqueTamanhos);
                    }
                }
                else {
                    if (!color || color == "")
                        return 0;
                    for (var i = 0; i < itemProduto.Barra.Produto.Estoques.length; i++) {
                        var item = itemProduto.Barra.Produto.Estoques[i];
                        if (item.CorProduto == color)
                            return getQuantidadeTodosTamanho(item.EstoqueTamanhos);
                    }
                }
                return 0;
            }

            var getQuantidadeTodosTamanho = function (array) {
                var total = 0;
                if (array == null)
                    array = [];
                for (var i = 0; i < array.length; i++)
                    total += array[i].Quantidade;
                return total;
            }

            $scope.voltarAcrescimo = function () {

                $scope.state.data.PercentualAcrescimo = $scope.backupAcrescimoPercentual;
                $scope.state.data.Acrescimo = $scope.backupValorAbsoluto;
            }

            $scope.SelecionarProduto = function (tamanho, cor, referencia) {
                $scope.auxiliar.selecionarProduto.carregando = true;
                $scope.state.vazio = false;
                produtoService
                    .getCodigosBarrasByTabelaPreco(tamanho, cor, referencia, $scope.$parent.config.OperacaoVenda.TabelaPadrao.Codigo)
                    .then(
                        function (response) {
                            $scope.auxiliar.selecionarProduto.statuslistaproduto = false;

                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                                $scope.auxiliar.selecionarProduto.carregando = false;
                            }
                            else {

                                angular.copy(angular.fromJson(response.Data), $scope.auxiliar.consulta.data);

                                getEstoques();
                                $timeout(function () {
                                    $scope.auxiliar.selecionarProduto.statudetalheproduto = true;
                                    $scope.auxiliar.selecionarProduto.carregando = false;
                                }, 200);
                            }
                        },
                        function (err) {
                            $scope.auxiliar.selecionarProduto.carregando = false;
                            $scope.$parent.toastr.error(err);
                        }
                    );
            }

            $scope.consultarCartao = function () {
                valeProdutoService.getAll(new Date((new Date()).setHours(0, 0, 0, 0)), null, $scope.state.valeProduto.NumeroCartao, null, null, null, null).then(
                    function (response) {
                        $scope.state.consultaCartao = {
                        };
                        if (response.Data && response.Data.length > 0)
                            $scope.state.consultaCartao = response.Data[0];
                        else {
                            $scope.$parent.toastr.error("Vale Presente não encontrado.");
                            $scope.voltarConsultaCartao();
                        }

                    },
                    function (error) {
                        $scope.$parent.toastr.error(error);
                    });
            }

            var getQuantidadeTamanho = function (array, size) {
                for (var i = 0; i < array.length; i++)
                    if (array[i].Tamanho.Posicao == size)
                        return array[i].Quantidade;
            }

            $scope.selecionarVendedorModal = function (vendedor) {
                $scope.state.data.Vendedor = vendedor;
                toggleModalVendedores();
            }

            $scope.filterVendors = function (item) {
                return ($scope.state.FiltroVendedor == "" || !$scope.state.FiltroVendedor || item.Nome.toUpperCase().indexOf($scope.state.FiltroVendedor.toUpperCase()) >= 0)
            }

            var toggleModalVendedores = function () {
                $scope.state.modalVendedores = !$scope.state.modalVendedores;
            }

            $scope.verificaPagamentosConfirmados = function () {
                if ($scope.state.data.Pagamentos[$scope.state.data.Pagamentos.length - 1].Confirmado) {
                    $scope.gotoNextPagamento()
                }
            }

            $scope.voltarConsultaCartao = function () {
                $scope.state.consultaCartao = null;
                $scope.state.valeProduto.NumeroCartao = "";
                $scope.state.valeProduto.ValorOriginal = "";
            }

            $scope.editarCliente = function (cliente) {
                if ((!$scope.initCustomer || !$scope.initCustomer.Nome || $scope.initCustomer.Nome == "") && (!$stateParams.id || $stateParams.id != '')) {
                    $scope.initCustomer = cliente;
                    return;
                }
                if (!cliente)
                    return;

                $state.go("state-cliente-edit-venda", {
                    id: cliente.Codigo,
                    boleta: $scope.state.data.Numero == null ? "" : $scope.state.data.Numero,
                    vendedor: $scope.state.data.Vendedor == null ? "" : $scope.state.data.Vendedor.Codigo
                });
            }

            $scope.limparCliente = function () {
                $scope.state.data.Cliente = null;
                $scope.initCustomer = null;
                $scope.clientePesquisadoIncompleto = false;

            }

            $scope.buscaCartaoPresente = function (cartao, index) {

                if (!cartao) {
                    $("input[ng-model='item.Titulo.Numero']").focus();
                    return false;
                }

                if ($scope.$parent.config.ValeProduto.Ativo) {
                    var valorRestante = $scope.state.data.Subtotal - $scope.state.data.Pago;
                    consultarCartaoPresente(cartao, index, valorRestante);
                } else {
                    $scope.$parent.toastr.warning("Consulta de cartão indisponível", "O parâmetro de vale produto está desabilitado.");
                }

            }

            var consultarCartaoPresente = function (cartao, index, valorRestante) {
                valeProdutoService.consultarCartao(cartao, index).then(
                    function (response) {

                        if (response.Status < 0) {
                            $scope.state.data.Pagamentos[index].Titulo.Numero = null;
                            $scope.state.data.Pagamentos[index].Titulo.Identificador = null;
                            $scope.$parent.toastr.error(response.Message);
                        } else {
                            $scope.state.data.Pagamentos[index].Titulo.Identificador = response.Data.Id;

                            if (valorRestante > response.Data.ValorEmAberto) {
                                if ($scope.state.data.CondicaoPagamento.Codigo == "##") {
                                    $scope.state.data.Pagamentos[index].Valor = response.Data.ValorEmAberto;
                                } else {
                                    $scope.$parent.toastr.error("Saldo Insuficiente: O vale produto " + cartao + " tem apenas " + response.Data.ValorEmAberto + " reais de crédito");
                                }
                            }
                        }
                    }
                );
            }


            $scope.buscaCartaoPresenteTrigger = function (event, cartao, index) {
                if (event.keyCode == 13)
                    $scope.buscaCartaoPresente(cartao, index);
            }

            $scope.autoClickPinCode = function (event) {
                if (event.keyCode == 13)
                    $scope.PinCode.ConsultaPinCode();
            }

            $scope.changeCheckReserva = function () {

                if ($scope.state.NFE.send == true) {
                    $scope.state.NFE.enableCPF = false;
                }
            }

            $scope.changeCheckCPF = function () {

                if ($scope.state.NFE.enableCPF == true) {
                    $scope.state.NFE.send = false;
                }
            }

            $scope.getTabelaPreco = function () {
                entidadeAuxiliarService.getAllTabelaPreco()
                    .then(function (data) {
                        if (data.Status < 0) {
                            $scope.$parent.toastr.error("Erro ao obter tabela de preços.");
                        }
                        else {
                            $scope.auxiliar.tabelaPreco = data.Data;
                        }
                    });
            }

            $scope.setCodigoTabelaPrecoChecked = function (tabelaPreco) {
                if ($scope.auxiliar.OperacaoVendaSelecionada) {
                    $scope.auxiliar.OperacaoVendaSelecionada.TabelaPadrao.Codigo = tabelaPreco.Codigo;
                    $scope.auxiliar.OperacaoVendaSelecionada.TabelaPadrao.Nome = tabelaPreco.Nome;
                    $scope.auxiliar.OperacaoVendaSelecionada.TabelaPadrao.Moeda = tabelaPreco.Moeda;
                }
            }

            $scope.checkedTabelaPrecoDefault = function (codigo) {
                return $scope.auxiliar.OperacaoVendaSelecionada.TabelaPadrao.Codigo == codigo;
            }

            $scope.permiteAlterarTabelaPreco = function () {
                return !$scope.auxiliar.OperacaoVendaSelecionada.PermiteAlterarTabelaPreco;
            }

            $scope.totalEstoqueProduto = function (item) {
                var result = 0;
                for (var i = 0; i < item.Produto.Estoques.length; i++) {
                    if (item.Produto.Estoques[i].CorProduto == item.Cor) {
                        for (var x = 0; x < item.Produto.Estoques[i].EstoqueTamanhos.length; x++) {
                            result += item.Produto.Estoques[i].EstoqueTamanhos[x].Quantidade;
                        }
                    }
                }
                return result;
            }

            $scope.obterEstoqueTamanho = function (item, tamanho) {
                var result = 0;
                for (var i = 0; i < item.Produto.Estoques.length; i++) {
                    if (item.Produto.Estoques[i].CorProduto == item.Cor) {
                        for (var x = 0; x < item.Produto.Estoques[i].EstoqueTamanhos.length; x++) {
                            if (item.Produto.Estoques[i].EstoqueTamanhos[x].Tamanho.Posicao == tamanho.Tamanho.Posicao) {
                                result = item.Produto.Estoques[i].EstoqueTamanhos[x].Quantidade;
                            }
                        }
                    }
                }
                return result;
            }

            $scope.$watch(
                function () {
                    return $scope.state.data.Pagamentos;
                },
                function (newValue, oldValue) {
                    if ($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.length > 0) {
                        if ($scope.state.data.Pagamentos[0].Tipo) {
                            setTipoCartao($scope.state.data.Pagamentos[0].Tipo.Codigo);
                            $scope.checkTipoPagamentoTEF();
                        }
                    }
                });

            $scope.$watch(
                function () {
                    return $scope.state.TEF.TipoCartao;
                },
                function (newValue, oldValue) {
                    if ($scope.state.TEF.TipoCartao) {
                        $scope.checkTipoPagamentoTEF();
                    }
                });

            $scope.checkTipoPagamentoTEF = function () {

                if (($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.length > 0) || $scope.ehFormaDePagamentoDigiteAsParcelas()) {
                    if ($scope.ehFormaDePagamentoDigiteAsParcelas()) {
                        if ($scope.state.TEF.TipoCartao == 'D' && ($scope.state.pagamento.livre.currentTipoPagamento.Codigo != 'Q' ||
                            $scope.state.pagamento.livre.currentTipoPagamento.Codigo != 11)) {
                            var tipoPagamentoDebito = $scope.$parent.config.TipoDebitoTef;
                            if ($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.Cartao && $scope.state.data.Pagamentos.Cartao.NumeroParcelas)
                                $scope.state.data.Pagamentos.Cartao.NumeroParcelas = 1;
                            for (var i = 0; i <= $scope.auxiliar.tipoPagamento.data.length; i++) {

                                if ($scope.auxiliar.tipoPagamento.data[i] != null && $scope.auxiliar.tipoPagamento.data[i].Codigo == tipoPagamentoDebito) {
                                    $scope.auxiliar.tipoPagamentoSelected = $scope.auxiliar.tipoPagamento.data[i].Nome;

                                    break;
                                }
                            }
                        } else if ($scope.state.TEF.TipoCartao == 'C') {

                            var tipoPagamentoCredito = $scope.$parent.config.TipoCreditoTef;
                            for (var i = 0; i <= $scope.auxiliar.tipoPagamento.data.length; i++) {
                                if ($scope.auxiliar.tipoPagamento.data[i].Codigo == tipoPagamentoCredito) {
                                    $scope.auxiliar.tipoPagamentoSelected = $scope.auxiliar.tipoPagamento.data[i].Nome;
                                    break;
                                }
                            }
                        }
                    } else {
                        if ($scope.state.data.Pagamentos && $scope.state.data.Pagamentos.length > 0) {
                            $scope.auxiliar.tipoPagamentoSelected = $scope.state.data.Pagamentos[0].Tipo.Nome;
                        }
                    }
                }
            }

            $scope.ehFormaDePagamentoDigiteAsParcelas = function () {
                if ($scope.state.data.CondicaoPagamento) {
                    return $scope.state.data.CondicaoPagamento.Codigo == '##';
                }
            }

            $scope.showDadosCartao = function (item) {

                var indicaPagamentoCartao = ['I', 'K', '9', '10'].indexOf(item.Tipo.Codigo) >= 0;
                var indicaProcessoTEFHabilitado = $scope.auxiliar.ehPagamentoTipoCartao;
                var indicaPagamentoTEFConcluido = item.TEFID != null;
                if (item.TEFID != null && ['A', 'B', 'E', 'K', 'I', '¨', '3', '4'].indexOf(item.Tipo.Codigo) >= 0)
                    return true;
                else {

                    if (['A', 'B', 'E', '¨', '3', '4'].indexOf(item.Tipo.Codigo) >= 0)
                        return true
                    else
                        return false;
                }
                //if(item.TEFID == null && (item.Tipo.Codigo == "I" || item.Tipo.Codigo == "K"))
                //{
                //   // $scope.$parent.toastr.error("Para está forma de pagamento, selecione o TEF");
                //    return false;
                //}
                //else
                //    return true;

                //if (indicaPagamentoCartao) {
                //    if (indicaProcessoTEFHabilitado && indicaPagamentoTEFConcluido) {
                //        return true;
                //    }
                //    else if (!indicaProcessoTEFHabilitado) {
                //        return true;
                //    }
                //    else {
                //        return false;
                //    }
                //}
                //else {
                //    if()
                //        return true;
                //    else
                //        return false;
                //}
            }

            var setTipoCartao = function (codigoPagamento) {
                if (['I', '9'].indexOf(codigoPagamento) >= 0) {
                    $scope.auxiliar.ehPagamentoTipoCartao = true;
                    $scope.auxiliar.ehCartaoDebito = false;
                    $scope.auxiliar.ehCartaoCredito = true;
                    $scope.state.TEF.TipoCartao = 'C';
                } else if (['K', '10'].indexOf(codigoPagamento) >= 0) {
                    $scope.auxiliar.ehPagamentoTipoCartao = true;
                    $scope.auxiliar.ehCartaoDebito = true;
                    $scope.auxiliar.ehCartaoCredito = false;
                    $scope.state.TEF.TipoCartao = 'D';
                } else {
                    $scope.auxiliar.ehCartaoDebito = false;
                    $scope.auxiliar.ehCartaoCredito = false;
                    $scope.auxiliar.ehPagamentoTipoCartao = false;
                }

            }

            /*Inicializa funções*/
            $scope.initialize();
        }, 100);

    }

})()