(function () {
    "use strict";

    angular.module('pos').factory('pedidoService', factory);
    factory.$inject = ['$http', '$q'];

    function factory($http, $q) {
        var _getAll = function (filtro) {
            var deferred = $q.defer();
            var args = {
                'chaves': filtro.chaves,
                'cpf': filtro.cpf,
                'status': filtro.status,
                'emissaoDe': filtro.emissao.de,
                'emissaoAte': filtro.emissao.ate,
                'totalDe': filtro.total.de,
                'totalAte': filtro.total.ate,
                'skip': filtro.skip,
                'take': filtro.take,
                'codigoTerminal': filtro.codigoTerminal,
                'statusOmni': filtro.statusOmni,
                'TipoOMNI': filtro.tipoOMNI
            };
            $http.post('/pedido/getall', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });

            return deferred.promise;
        };


        var _updateTipoLojaPedido = function (numeroPedido) {

            var deferred = $q.defer();
            var args = {
                'numeroPedido': numeroPedido

            };
            $http.post('/pedido/updateTipoLojaPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });

            return deferred.promise;

        };

        var _ConsultarEnviarSefazVenda = function (pedido) {
            //if ((typeof serie) != 'string')
            //    serie = serie.Codigo;

            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/ConsultarEnviarSefazVenda', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _validaEstoque = function (codigoBarra, quantidade) {


            var deferred = $q.defer();
            var args = {
                'codigobarra': codigoBarra,
                'quantidade': quantidade
                 
            };
            $http.post('/pedido/ValidaProdutoEstoque', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });

            return deferred.promise;


        }
        var _count = function (filtro) {
            var deferred = $q.defer();
            var args = {
                'chaves': filtro.chaves,
                'cpf': filtro.cpf,
                'status': filtro.status,
                'emissaoDe': filtro.emissao.de,
                'emissaoAte': filtro.emissao.ate,
                'totalDe': filtro.total.de,
                'totalAte': filtro.total.ate,
                'codigoTerminal': filtro.codigoTerminal,
                'StatusOMNI': filtro.statusOmni,
                'TipoOMNI': filtro.tipoOMNI
            };
            $http.post('/pedido/count', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });

            return deferred.promise;
        };

        var _prepareNew = function (numero) {
            var deferred = $q.defer();
            var args = { 'id': numero };
            $http.post('/pedido/prepareNew', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _UpdateDescontoPinCode = function (pedido, pincode) {
            var deferred = $q.defer();
            var args = {
                pedido: pedido,
                pincode: pincode
            };
            $http.post('/pedido/UpdateDescontoPinCode', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _prepareNewItem = function (pedido, codigoProduto) {
            var deferred = $q.defer();
            var args = {
                pedido: pedido,
                codigoProduto: codigoProduto
            };
            $http.post('/pedido/preparenewitem', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        var _saveItens = function (pedido, itemPedido) {
            ;
            var deferred = $q.defer();
            var args = {
                pedido: pedido,
                itemPedido: itemPedido
            };
            $http.post('/pedido/saveitens', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };

        

        var _ValidaLimiteNotaMessage =  function (pedido) {
            ;
            var deferred = $q.defer();
            var args = {
                pedido: pedido
            };
            $http.post('/pedido/ValidaLimiteNotaMessage', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _UpdateSlipDesconto = function (pedido) {
            var deferred = $q.defer();
            var args = {
                pedido: pedido
            };
            $http.post('/pedido/UpdateSlipDesconto', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        }
        var _SaveItensPorGrade = function (pedido, item, tamanho, indicatroca) {
            ;
            var deferred = $q.defer();

            var args = {
                pedido: pedido,
                item: item,
                tamanho: tamanho,
                indicaTroca: indicatroca
            };
            $http.post('/pedido/SaveItensPorGrade', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };
        var _SetPagamentoOMNI = function (pedido, frete) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'frete': frete };
            $http.post('/pedido/SetPagamentoOMNI', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _SetPagamentoVale = function (pedido, frete) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/SetPagamentoVale', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }
        

        var _SaveItensPorGradeOMNI = function (pedido, item, tamanho, indicatroca, filial) {
            var deferred = $q.defer();

            var args = {
                pedido: pedido,
                item: item,
                tamanho: tamanho,
                indicaTroca: indicatroca,
                filial: filial
            };
            $http.post('/pedido/SaveItensPorGradeOMNI', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); });
            return deferred.promise;
        };


        var _get = function (numero) {
            var deferred = $q.defer();
            var args = { 'id': numero };
            $http.post('/pedido/get', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _countValidItemPedido = function (numero) {
            var deferred = $q.defer();
            var args = { 'id': numero };
            $http.post('/pedido/CountPedidoValidItens', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _getNewItem = function () {
            var deferred = $q.defer();

            $http.post('/pedido/getnewitem')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _getMotorDescontos = function () {
            var deferred = $q.defer();

            $http.post('/pedido/GetMotorDesconto')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _getNewItemPedido = function () {
            var deferred = $q.defer();

            $http.post('/pedido/getnewitempedido')
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _save = function (pedido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/save', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _saveVendors = function (pedido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/saveVendors', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _validaLimiteNota = function (uf) {
            var deferred = $q.defer();
            var args = { 'uf': uf};
            $http.post('/pedido/ValidaLimiteNota', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _close = function (id, cpf,tipoimpressao, troco, gerarNFE, faturarPedido) {
            var deferred = $q.defer();
            var args = { 'id': id, 'cpf': cpf, 'tipoimpressao': tipoimpressao, 'troco': troco, 'gerarNFE': gerarNFE, 'faturarPedido':faturarPedido};
            $http.post('/pedido/Close', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _CloseMarket = function (id, cpf, tipoimpressao, troco, gerarNFE, faturarPedido) {
            var deferred = $q.defer();
            debugger
            var args = { 'id': id, 'cpf': cpf, 'tipoimpressao': tipoimpressao, 'troco': troco, 'gerarNFE': gerarNFE, 'faturarPedido': faturarPedido };
            $http.post('/pedido/CloseMarket', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _cancel = function (id) {
            var deferred = $q.defer();
            var args = { 'id': id };
            $http.post('/pedido/cancel', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _ValidaVendaSuspensa = function () {
            var deferred = $q.defer();
            $http.post('/pedido/ValidaVendaSuspensa').success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })
            return deferred.promise;
        }

        var _addItemPedidos = function (pedido, codigoBarras, indicaTroca) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'listCodigoBarra': codigoBarras, 'indicaTroca': indicaTroca };

            $http.post('/pedido/AddItemPedidos', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _addItemPedido = function (pedido, codigoBarras, indicaTroca) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'codigoBarras': codigoBarras, 'indicaTroca': indicaTroca };
            
            $http.post('/pedido/AddItemPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _AddItemPedidoByCatalogo = function (codigoProduto) {

            var deferred = $q.defer();
            var args = { 'codigoProduto': codigoProduto};

            $http.post('/pedido/AddItemPedidoByCatalogo', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _AddValeProdutoPedido = function (pedido, valeProduto) {

            var deferred = $q.defer();
            var args = {
                'pedido': pedido,
                'valeProduto': valeProduto
            };

            $http.post('/pedido/AddValeProdutoPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };



        var _updateItemPedido = function (pedido, item) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'item': item};
            $http.post('/pedido/UpdateItemPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }; 

        var _TrocaOperacaoVenda = function (pedido) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido};
            $http.post('/pedido/TrocaOperacaoVenda', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }; 

        var _getItemPedidoDescontoTabelaPreco = function (pedido, item) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'item': item };
            $http.post('/pedido/GetItemPedidoDescontoTabelaPreco', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _updateItemPedidoComAutenticacao = function (pedido, item, autenticado) {

            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'item': item, 'autenticado': autenticado };
            $http.post('/pedido/UpdateItemPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _updateDescontoPedido = function (pedido) {
            var deferred = $q.defer();
            $http.post('/pedido/UpdateDescontoPedido', pedido)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _updateDescontoNoPedido = function (pedido) {
            var deferred = $q.defer();
            $http.post('/pedido/UpdateDescontoNoPedido', pedido)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _updateDescontoFidelidade = function (pedido) {
            var deferred = $q.defer();
            $http.post('/pedido/UpdateDescontoFidelidadePedido', pedido)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _deleteItemPedido = function (pedido, item) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'item': item };
            $http.post('/pedido/deleteItemPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _prepareNewPagamento = function (pedido, checkoutoficial, checkoutabatido) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido,
                'tipoPagamentoLivre': null,
                'checkoutoficial': checkoutoficial,
                'checkoutabatido': checkoutabatido
            };
            $http.post('/pedido/PrepareNewPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _prepareNewPagamentoLivre = function (pedido, tipoPagamentoLivre, checkoutoficial,checkoutabatido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'tipoPagamentoLivre': tipoPagamentoLivre, 'checkoutoficial': checkoutoficial, 'checkoutabatido': checkoutabatido };
            $http.post('/pedido/PrepareNewPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _confirmPagamento = function (pedido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/ConfirmPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _clearPagamento = function (pedido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/ClearPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _cancelItemPagamento = function (pedido) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido };
            $http.post('/pedido/CancelItemPagamento', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _generateTicket = function (pedido, imprimirtroca, ticketPersonalizado, indicaPresencial, insereCpf) {
            
            if (!imprimirtroca)
                imprimirtroca = 0;
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'imprimirtroca': imprimirtroca, 'ticketPersonalizado': ticketPersonalizado, 'indicaPresencial': indicaPresencial, 'insereCpf':insereCpf};
            $http.post('/pedido/GenerateTicket', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _generateTicketMarket = function (pedido, imprimirtroca, ticketPersonalizado, indicaPresencial, insereCpf) {

            if (!imprimirtroca)
                imprimirtroca = 0;
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'imprimirtroca': imprimirtroca, 'ticketPersonalizado': ticketPersonalizado, 'indicaPresencial': indicaPresencial, 'insereCpf': insereCpf };
            $http.post('/pedido/GenerateTicketMarket', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _generateTicketPedido = function (pedido, imprimirtroca, ticketPersonalizado, indicaPresencial, insereCpf) {

            if (!imprimirtroca)
                imprimirtroca = 0;
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'imprimirtroca': imprimirtroca, 'ticketPersonalizado': ticketPersonalizado, 'indicaPresencial': indicaPresencial, 'insereCpf': insereCpf };
            $http.post('/pedido/GenerateTicketPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _SetTicketTroca = function (tickettroca, ticket, codigofilial) {
            var deferred = $q.defer();
            var args = { 'tickettroca': tickettroca, 'ticket': ticket, 'codigofilial': codigofilial };
            $http.post('/pedido/SetTicketTroca', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _ValidaTicketTroca = function (tickettroca, codigofilial) {
            var deferred = $q.defer();
            var args = { 'tickettroca': tickettroca, 'codigofilial': codigofilial };
            $http.post('/pedido/ValidaTicketTroca', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _ChangeCliente = function (cpf, pedido) {
            var deferred = $q.defer();
            var args = {
                'cpf': cpf,
                'pedido': pedido
            };
            $http.post('/pedido/AlteraCliente', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _ValidaCliente = function (cpf) {
            var deferred = $q.defer();
            var args = { 'cpf': cpf };
            $http.post('/pedido/ValidaCliente', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _updateStatus = function (pedido, status) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido,
                'statuspedido': status
            };
            $http.post('/pedido/UpdateStatus', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _updateMotorPromocaoPedido = function (pedido, motorpromocao) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido,
                'motorpromocao': motorpromocao
            };
            $http.post('/pedido/UpdateMotorPromocaoPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _containsTroca = function (pedido) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido
            };
            $http.post('/pedido/ContainsTroca', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _UpdateTerminal = function (pedido) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido
            };
            $http.post('/pedido/UpdateTerminal', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _getregraspedido = function (tipovarejo) {
            var deferred = $q.defer();
            var args = {
                'tipovarejo': tipovarejo
            };
            $http.post('/pedido/RegrasDescontoItem', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _GetVendasSuspensas = function (pedido) {
            var deferred = $q.defer();
            var args = {
            };
            $http.post('/pedido/GetVendasSuspensas', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _InserirTEF = function (id, pedido, tipocartao, numeroparcelas, valorapagar) {
            var deferred = $q.defer();
            var args = {
                'id': id,
                'pedido': pedido,
                'tipocartao': tipocartao,
                'numeroparcelas': numeroparcelas,
                'valorapagar': valorapagar,
            };
            $http.post('/pedido/InsertTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _InsertTEFNoValidation = function (id, pedido, tipocartao, numeroparcelas, valorapagar) {
            var deferred = $q.defer();
            var args = {
                'id': id,
                'pedido': pedido,
                'tipocartao': tipocartao,
                'numeroparcelas': numeroparcelas,
                'valorapagar': valorapagar,
            };
            $http.post('/pedido/InsertTEFNoValidation', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        

        var _GetStatusTEF = function (idSiTef) {
            var deferred = $q.defer();
            var args = { 'id': idSiTef };
            $http.post('/pedido/GetStatusTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };


        var _ConfirmaPagamentoTEF = function (idSiTef, pedido) {
            var deferred = $q.defer();
            var args = { 'id': idSiTef, 'pedido': pedido };
            $http.post('/pedido/ConfirmaPagamentoTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _SetRespostaTEF = function (idSiTef, resposta) {
            var deferred = $q.defer();
            var args = { 'id': idSiTef, 'resposta': resposta };
            $http.post('/pedido/SetRespostaTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };



        var _InserirTEFCancel = function (id, idTef) {
            var deferred = $q.defer();
            var args = {
                'id': id,
                'idTef': idTef,
            };
            $http.post('/pedido/InsertTEFCancel', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _GetStatusTEFCancel = function (idSiTef) {
            var deferred = $q.defer();
            var args = { 'id': idSiTef };
            $http.post('/pedido/GetStatusTEFCancel', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _cancelItemPedido = function (pedido, item) {
            var deferred = $q.defer();
            var args = { 'pedido': pedido, 'item': item };
            $http.post('/pedido/cancelItemPedido', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _ConfirmaCancelamentoTEF = function (idSiTef, pedido) {
            var deferred = $q.defer();
            var args = { 'id': idSiTef, 'pedido': pedido };
            $http.post('/pedido/ConfirmaCancelamentoTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _InserirReimpressaoTEF = function (id) {
            var deferred = $q.defer();
            var args = {
                'id': id,
            };
            $http.post('/pedido/InsertTEFReimprimir', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _validateBoleta = function (pBoleta) {
            var deferred = $q.defer();
            var args = {
                'pBoleta': pBoleta,
            };

            $http.post('/pedido/ValidateBoleta', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        }

        var _CancelarRequisicaoTEF = function (terminal) {
            var deferred = $q.defer();
            var args = {
                'terminal': terminal,
            };
            $http.post('/pedido/CancelarRequisicaoTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _CancelarRequisicaoTEFCancel = function (terminal) {
            var deferred = $q.defer();
            var args = {
                'terminal': terminal,
            };
            $http.post('/pedido/CancelarRequisicaoTEFCancel', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _SaveAdministradoraTEF = function (pagamento) {
            var deferred = $q.defer();
            var args = {
                'pagamento': pagamento
            };
            $http.post('/pedido/SaveAdministradoraTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _SaveVencimentoTEF = function (pagamento) {
            var deferred = $q.defer();
            var args = {
                'pagamento': pagamento
            };
            $http.post('/pedido/SaveVencimentoTEF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _TEFHasAdministradora = function (tefid) {
            var deferred = $q.defer();
            var args = {
                'tefid': tefid
            };
            $http.post('/pedido/TEFHasAdministradora', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        var _GetCodigoBarra = function (tamanho, cor, produto) {
            var deferred = $q.defer();
            var args = {
                tamanho: tamanho,
                cor: cor,
                produto: produto
            };
            $http.post('/pedido/GetCodBarra', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _GetQRCode = function (pedido, valor) {
            var deferred = $q.defer();
            var args = {
                Valor: valor,
                txID: pedido
            };
            $http.post('/pedido/GetQRCode', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })
            return deferred.promise;
        };
        var _updateCPF = function (pedido, cpf) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido,
                'cpf': cpf
            };


            $http.post('/pedido/UpdateCPF', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _GetVoucher = function (pedido) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido
            };

            $http.post('/pedido/GetVoucher', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };
        var _reOpenOrder = function (pedido) {
            var deferred = $q.defer();
            var args = {
                'pedido': pedido                
            };

            $http.post('/pedido/ReOpenOrder', args)
                .success(function (data) { deferred.resolve(data); })
                .error(function (data, status, headers, config) { deferred.reject(data); })

            return deferred.promise;
        };

        //var _CheckOutPedidos = function (pedido) {
        //    var deferred = $q.defer();
        //    var args = {
        //        'pedido': pedido
        //    };

        //    $http.post('/pedido/CheckOutPedidos', args)
        //    .success(function (data) { deferred.resolve(data); })
        //    .error(function (data, status, headers, config) { deferred.reject(data); })

        //    return deferred.promise;
        //}

        return {
            getAll: _getAll,
            count: _count,
            get: _get,
            GetVoucher: _GetVoucher,
            prepareNew: _prepareNew,
            getNewItem: _getNewItem,
            getNewItemPedido: _getNewItemPedido,
            save: _save,
            validaLimiteNota: _validaLimiteNota,
            close: _close,
            cancel: _cancel,
            deleteItemPedido: _deleteItemPedido,
            addItemPedido: _addItemPedido,
            updateItemPedido: _updateItemPedido,
            updateItemPedidoComAutenticacao: _updateItemPedidoComAutenticacao,
            getItemPedidoDescontoTabelaPreco: _getItemPedidoDescontoTabelaPreco,
            cancelItemPedido: _cancelItemPedido,
            prepareNewPagamento: _prepareNewPagamento,
            prepareNewPagamentoLivre: _prepareNewPagamentoLivre,
            confirmPagamento: _confirmPagamento,
            cancelItemPagamento: _cancelItemPagamento,
            clearPagamento: _clearPagamento,
            generateTicket: _generateTicket,
            generateTicketPedido: _generateTicketPedido,
            countValidItemPedido: _countValidItemPedido,
            ValidaVendaSuspensa: _ValidaVendaSuspensa,
            prepareNewItem: _prepareNewItem,
            saveItens: _saveItens,
            SaveItensPorGrade: _SaveItensPorGrade,
            ValidaCliente: _ValidaCliente,
            ChangeCliente: _ChangeCliente,
            updateStatus: _updateStatus,
            containsTroca: _containsTroca,
            UpdateTerminal: _UpdateTerminal,
            GetVendasSuspensas: _GetVendasSuspensas,
            InserirTEF: _InserirTEF,
            InsertTEFNoValidation: _InsertTEFNoValidation,
            AddItemPedidoByCatalogo: _AddItemPedidoByCatalogo,
            GetStatusTEF: _GetStatusTEF,
            ConfirmaPagamentoTEF: _ConfirmaPagamentoTEF,
            updateDescontoPedido: _updateDescontoPedido,
            updateDescontoFidelidade: _updateDescontoFidelidade,
            getregraspedido: _getregraspedido,
            SetRespostaTEF: _SetRespostaTEF,
            SetTicketTroca: _SetTicketTroca,
            ValidaTicketTroca: _ValidaTicketTroca,
            InserirTEFCancel: _InserirTEFCancel,
            GetStatusTEFCancel: _GetStatusTEFCancel,
            ConfirmaCancelamentoTEF: _ConfirmaCancelamentoTEF,
            InserirReimpressaoTEF: _InserirReimpressaoTEF,
            AddValeProdutoPedido: _AddValeProdutoPedido,
            GetMotorDescontos: _getMotorDescontos,
            UpdateSlipDesconto: _UpdateSlipDesconto,
            UpdateMotorPromocaoPedido: _updateMotorPromocaoPedido,
            SaveItensPorGradeOMNI: _SaveItensPorGradeOMNI,
            saveVendors: _saveVendors,
            addItemPedidos :  _addItemPedidos,
            validateBoleta: _validateBoleta,
            SetPagamentoOMNI: _SetPagamentoOMNI,
            SetPagamentoVale: _SetPagamentoVale,
            CancelarRequisicaoTEF: _CancelarRequisicaoTEF,
            updateCPF: _updateCPF,
            CancelarRequisicaoTEFCancel: _CancelarRequisicaoTEFCancel,
            TEFHasAdministradora: _TEFHasAdministradora,
            SaveAdministradoraTEF: _SaveAdministradoraTEF,
            SaveVencimentoTEF: _SaveVencimentoTEF,
            GetCodigoBarra: _GetCodigoBarra,
            updateDescontoNoPedido: _updateDescontoNoPedido,
            reOpenOrder: _reOpenOrder,
            UpdateDescontoPinCode: _UpdateDescontoPinCode,
            //CheckOutPedidos: _CheckOutPedidos,
            TrocaOperacaoVenda: _TrocaOperacaoVenda,
            validaEstoque: _validaEstoque,
            updateTipoLojaPedido: _updateTipoLojaPedido,
            GetQRCode: _GetQRCode,
            ConsultarEnviarSefazVenda: _ConsultarEnviarSefazVenda,
            ValidaLimiteNotaMessage: _ValidaLimiteNotaMessage,
            generateTicketMarket: _generateTicketMarket,
            closeMarket: _CloseMarket
        };
    }

})();