(function () {
    "use strict";

    angular.module('pos').controller('entradaAddController', controller);
    controller.$inject = ['$scope', '$state', '$stateParams', '$window', '$timeout', '$q', '$filter', 'entradaService', 'entidadeAuxiliarService', 'transitoService', 'terceiroService', 'compraService', 'notaFiscalService', '$http', 'vendedorService'];

    function controller($scope, $state, $stateParams, $window, $timeout, $q, $filter, entradaService, entidadeAuxiliarService, transitoService, terceiroService, compraService, notaFiscalService, $http, vendedorService) {
        $scope.$parent.initializeLayout('Nova Entrada');
        
        //[Inicializa objetos]
        $scope.state = {            
            quantidade: 0,
            data: {},
            carregando: false,
            tipoEntrada: 0,
            tipoPreenchimento: 0,
            transito: null,
            itemTransito: { data: [], dataAux: [], filtro: { codigo: '' } },
            especieSerie: null,
            itemPedido: { data: [], filtro: { numero: '' }, todos: false },
            xml: false,
            chave: "",
            novaSerie: {},
            seriesEntrada: [],
            modal: false,
            modalSerie: false,
            searchProdutoTransito: "",
            filtro: { nome: "" },
        };
        $scope.myFile;
        $scope.produto = {};
        $scope.wizard = {
            index: 0,
            steps: {
                opcoesTipoEntrada: 0,
                pesquisarTransito: 1,
                opcoesTipoPreenchimento: 2,
                pesquisarPedido: 3,
                uploadArquivo: 4,
                detalhes: 5,
                ajustarPedidos: 6,
                ajustarTransito: 7,
            },
        }
        $scope.auxiliar = {
            tipoEntrada: { transferencia: 0, compra: 1 },
            tipoPreenchimento: { pedido: 0, manual: 1, coletor: 2 },
            transito: { data: [], carregando: false, vazio: true },
            itemPedido: { data: [], carregando: false, vazio: true },
            itemCompra: { data: [], carregando: false, vazio: true },
            fornecedorPedido: { data: [], carregando: false, vazio: true },
            especieSerie: { data: [] },
            serie: { data: [] },
            tabelaPreco: { data: [] },
            tipoMovimentacao: { data: [] },
            chaveNFE: { data: [] },            
        };

        //[Inicializa funcões]
        $scope.initialize = function () {
            $scope.prepareNew();
            $scope.refresh();
        };
        $scope.historyBack = function () {
            $window.history.back();
        }

        $scope.showModal = function () {
            $scope.state.modal = !$scope.state.modal;
        }

        $scope.associarSerie = function () {
            console.log($scope.state.data.NotaFiscal.Serie);
        }

        $scope.CheckXmlFile = function () {
            $scope.getAllFornecedorPendente();
            entradaService
                .CheckXmlFile($scope.state.data.NotaFiscal.NFE.Chave)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error("Xml não encontrado!", 'Serviço');
                        else {

                            //    $scope.state.data.NotaFiscal.Serie.Especie.Codigo = 3;
                            //$scope.getAllSerie()
                            $scope.state.data.NotaFiscal.Serie.Codigo = response.Data.serie;

                            $scope.state.data.Terceiro = angular.copy(response.Data.fonecedor);

                            $scope.state.data.NotaFiscal.Numero = response.Data.nnf;
                            switch ($scope.state.tipoPreenchimento) {
                                case $scope.auxiliar.tipoPreenchimento.pedido:
                                    // $scope.wizard.index = $scope.wizard.steps.pesquisarPedido;
                                    $scope.getAllItemPedido();
                                    break;
                                case $scope.auxiliar.tipoPreenchimento.manual:
                                    //  $scope.saveItens(response.Data.itens);
                                    break;
                                case $scope.auxiliar.tipoPreenchimento.coletor:

                                    break;
                            };
                            $scope.state.xml = true;
                        }


                        $scope.state.carregando = false;
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                        $scope.state.carregando = false;
                    }
                );
        }

        $scope.prepareNew = function () {
            $scope.state.carregando = true;
            $scope.state.vazio = false;
            entradaService
                .prepareNew()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            $scope.state.data = response.Data;
                        $scope.state.carregando = false;
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                        $scope.state.carregando = false;
                    }
                );
        };
        $scope.save = function () {
            $scope.state.data.Responsavel = $scope.$parent.environment.perfil.Nome;
            entradaService
                .save($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.state.data = response.Data;
                            $state.go("state-entrada-edit", { codigo: response.Data.Codigo }, { reload: false, location: 'replace' });
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }
        $scope.saveItens = function (itens) {
            entradaService
                .saveItens($scope.state.data, itens)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.state.data = response.Data;
                            $state.go("state-entrada-edit", { codigo: response.Data.Codigo }, { reload: false, location: 'replace' });
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }
        $scope.saveNewTransferencia = function () {
            entradaService
                .saveNewTransferencia($scope.state.transito.Codigo, $scope.state.itemTransito.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.state.data = response.Data;
                            $state.go("state-entrada-detail", { codigo: response.Data.Codigo }, { reload: false, location: 'replace' });
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        };
        $scope.saveNewCompras = function () {
            entradaService
                .saveNewCompras($scope.state.data.NotaFiscal, $scope.state.itemPedido.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            $scope.state.data = response.Data;
                            $state.go("state-entrada-detail", { codigo: response.Data.Codigo }, { reload: false, location: 'replace' });
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        };

        $scope.getAllEspecieSerie = function () {
            entidadeAuxiliarService
                .getAllEspecieSerie()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Data, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.especieSerie.data);
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        }
        $scope.getAllTipoMovimentacao = function () {
            entidadeAuxiliarService
                .getAllTipoMovimentacaoEntrada()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Data, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.tipoMovimentacao.data);
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        }
        $scope.getAllTabelaPreco = function () {
            entidadeAuxiliarService
                .getAllTabelaPreco()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Data, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.tabelaPreco.data);
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        }
        $scope.getAllTransito = function () {
            $scope.auxiliar.transito.carregando = true;
            $scope.auxiliar.transito.vazio = true;
            transitoService
                .getAllPendente()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.transito.data);
                            $scope.auxiliar.transito.vazio = (response.Data.length == 0);
                        }

                        $scope.auxiliar.transito.carregando = false;
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.auxiliar.transito.carregando = false;
                        $scope.auxiliar.transito.vazio = true;
                    }
                );
        };
        $scope.getTransito = function () {
            
            if ($scope.state.transito.Codigo == $scope.state.itemTransito.filtro.codigo)
                return false;
            $scope.state.itemTransito.filtro.codigo = $scope.state.transito.Codigo
            transitoService
                .getTransferencias($scope.state.transito.Codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.$parent.config.ProdutoTransf)
                            {
                                $scope.state.itemTransito.dataAux = response.Data.Itens;
                                $scope.state.itemTransito.data = [];
                            }
                                else{
                                    $scope.state.itemTransito.data = response.Data.Itens;
                                }
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        };
        $scope.getAllFornecedorPendente = function () {
            $scope.auxiliar.fornecedorPedido.carregando = true;
            $scope.auxiliar.fornecedorPedido.vazio = false;
            compraService
                .getAllFornecedorPendente()
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.fornecedorPedido.data);

                        $scope.auxiliar.fornecedorPedido.carregando = false;
                        $scope.auxiliar.fornecedorPedido.vazio = (response.Status < 0 || response.Data.length == 0);

                        if (!$scope.auxiliar.fornecedorPedido.vazio) {
                            if ($scope.state.xml == false)
                                $scope.state.data.Terceiro = $scope.auxiliar.fornecedorPedido.data[0];
                            $scope.getAllItemPedido();
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.auxiliar.fornecedorPedido.carregando = false;
                    }
                );
        };
        $scope.getAllItemPedido = function () {
            $scope.auxiliar.itemPedido.carregando = true;
            $scope.auxiliar.itemPedido.vazio = false;
            compraService
                .getAllPendente($scope.state.data.Terceiro.Codigo, $scope.state.numeroPedido)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.itemPedido.data);

                        $scope.auxiliar.itemPedido.carregando = false;
                        $scope.auxiliar.itemPedido.vazio = (response.Status < 0 || response.Data.length == 0);
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                        $scope.auxiliar.itemPedido.carregando = false;
                    }
                );
        };
        $scope.getAllSerie = function (callback) {
            entidadeAuxiliarService
                .getAllSerieByEspecie($scope.state.data.NotaFiscal.Serie.Especie.Codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Data, 'Serviço');
                        else
                            angular.copy(angular.fromJson(response.Data), $scope.auxiliar.serie.data);
                        if (callback)
                            callback();
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        }

        $scope.getTerceiroByCNPJ = function (callback) {
            terceiroService
                .getByCNPJ($scope.state.data.Terceiro.CNPJ)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Data, 'Serviço');
                            console.error('Serviço', response.Exception);
                        }
                        else {
                            $scope.state.data.Terceiro = response.Data;
                        }
                        if (callback)
                            callback();
                    },
                    function (error) {
                        $scope.$parent.toastr.error('Ao buscar o terceiro por CNPJ', 'Comunicação com o servidor');
                        console.error('Comunicação com o servidor', error);
                    }
                );
        }
        $scope.getInfoChaveNFe = function () {
            notaFiscalService
                .getInfoChaveNFe($scope.state.data.NotaFiscal.NFE.Chave)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Chave NFE');
                            console.error('Chave NFE', response.Exception);
                        }
                        else {
                            $scope.auxiliar.chaveNFE.data = response.Data;
                            $scope.state.data.NotaFiscal.Numero = response.Data.Numero;
                            $scope.state.data.Terceiro.CNPJ = response.Data.CNPJ;

                            /* seleciona a especie de série */
                            for (var i = 0; i < $scope.auxiliar.especieSerie.data.length; i++) {
                                if ($scope.auxiliar.especieSerie.data[i].NumeroModeloFiscal === response.Data.ModeloFiscal) {
                                    $scope.state.data.NotaFiscal.Serie.Especie = $scope.auxiliar.especieSerie.data[i];
                                    $scope.state.data.NotaFiscal.Serie.Codigo = response.Data.Serie;
                                    $scope.getAllSerie(function () {
                                        /* seleciona a série */
                                        for (var i = 0; i < $scope.auxiliar.serie.data.length; i++) {
                                            if ($scope.auxiliar.serie.data[i].Codigo === response.Data.Serie) {
                                                $scope.state.data.NotaFiscal.Serie = $scope.auxiliar.serie.data[i];
                                                break
                                            }
                                        }
                                    });
                                    break;
                                }
                            }
                            $('[ng-model*="state.data.Terceiro"]').focus();
                        }

                    },
                    function () {
                        $scope.$parent.toastr.error('Ops! Não foi possível comunicar com o servidor.', 'Comunicação com o servidor');
                        console.error('Comunicação com o servidor', error);
                    }
                )
        };
        $scope.setQuantidadeItemTransito = function (index) {
            var row = $scope.state.itemTransito.data[index];
            row.Quantidade = 0;
            for (var i = 0; i < row.Tamanhos.length; i++)
                row.Quantidade += row.Tamanhos[i].Quantidade;
            row.Valor = row.Quantidade * row.Preco1;

            $scope.state.quantidade = $scope.getTotal($scope.state.itemTransito.data);
        }

        $scope.getTotal = function (obj) {
            var total = 0;
            for (var i = 0; i < obj.length; i++) {
                total += obj[i].Quantidade;
            }
            return total;
        }

        $scope.setQuantidadeItemPedido = function (index) {
            var row = $scope.state.itemPedido.data[index];
            row.QuantidadeEntregar = 0;
            for (var i = 0; i < row.Tamanhos.length; i++)
                row.QuantidadeEntregar += row.Tamanhos[i].QuantidadeEntregar;
            row.Valor = row.QuantidadeEntregar * row.Custo1;
            row.ValorEntregar = row.QuantidadeEntregar * row.Custo1;
        }

        $scope.lookupTerceiro = function (val) {
            return $q.when(
                terceiroService
                    .getLookup(val)
                    .then(function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            //if (response.Data.length == 1) {
                            //    $scope.state.data.FilialOrigem.CNPJ = response.Data[0].CNPJ;
                            //    $scope.state.data.FilialOrigem.Codigo = response.Data[0].Codigo;
                            //    $scope.state.data.FilialOrigem.Nome = response.Data[0].Nome;
                            //    $scope.state.data.FilialOrigem.NomeCompleto = response.Data[0].RazaoSocial;
                            //}
                            return response.Data;
                        }
                    })
             );
        };
        $scope.selectTerceiro = function (val) {
            $scope.state.data.Terceiro = val;
        }

        $scope.toggleAllItemPedido = function () {
            for (var i = 0; i < $scope.auxiliar.itemPedido.data.length; i++)
                $scope.auxiliar.itemPedido.data[i].Selecionado = $scope.state.itemPedido.todos;
        };

        $scope.gotoNext = function () {
            debugger;
            switch ($scope.wizard.index) {
                case $scope.wizard.steps.opcoesTipoEntrada:
                    switch ($scope.state.tipoEntrada) {
                        case $scope.auxiliar.tipoEntrada.transferencia:
                            $scope.wizard.index = $scope.wizard.steps.pesquisarTransito;
                            $scope.getAllTransito();
                            break;
                        case $scope.auxiliar.tipoEntrada.compra:
                            $scope.wizard.index = $scope.wizard.steps.opcoesTipoPreenchimento;
                            break;
                    }
                    break;
                case $scope.wizard.steps.pesquisarTransito:
                    if (!$scope.state.transito) {
                        $scope.$parent.toastr.info('Para avançar é necessário escolher um dos romaneios de transferência.');
                        break;
                    }
                    $timeout(function () { $scope.getTransito(); });
                    $scope.wizard.index = $scope.wizard.steps.ajustarTransito;
                    $timeout(function () { $('input[ng-model="searchItemTransito"]').first().focus(); });
                    break;
                case $scope.wizard.steps.opcoesTipoPreenchimento:
                    switch ($scope.state.tipoPreenchimento) {
                        case $scope.auxiliar.tipoPreenchimento.pedido:

                            $timeout(function () { $('select[ng-model*="state.data.Terceiro"]').focus(); });
                            //$scope.getAllFornecedorPendente();
                            // $scope.wizard.index = $scope.wizard.steps.pesquisarPedido;
                            $scope.wizard.index = $scope.wizard.steps.detalhes;
                            break;
                        case $scope.auxiliar.tipoPreenchimento.manual:
                            $timeout(function () { $('input[ng-model*="state.data.NotaFiscal.NFE.Chave"]').focus(); });
                            $scope.wizard.index = $scope.wizard.steps.detalhes;
                            break;
                        case $scope.auxiliar.tipoPreenchimento.coletor:
                            $timeout(function () { $('input[ng-model*="state.data.NotaFiscal.NFE.Chave"]').focus(); });
                            $scope.wizard.index = $scope.wizard.steps.detalhes;
                            break;
                    };
                    break;
                case $scope.wizard.steps.pesquisarPedido:
                    $scope.state.itemPedido.data = $filter('filter')($scope.auxiliar.itemPedido.data, function (i) { return i.Selecionado; });
                    if ($scope.state.itemPedido.data.length == 0) {
                        $scope.$parent.toastr.info('Para avançar é necessário escolher pelo menos um item de compra.');
                        break;
                    }
                    $scope.wizard.index = $scope.wizard.steps.ajustarPedidos;
                    $timeout(function () { $('input[ng-model="searchItemPedido"]').first().focus(); });
                    break;
                case $scope.wizard.steps.ajustarTransito:
                    $scope.saveNewTransferencia();
                    break;
                case $scope.wizard.steps.ajustarPedidos:
                    $timeout(function () { $('input[ng-model*="state.data.NotaFiscal.NFE.Chave"]').focus(); });
                    // $scope.wizard.index = $scope.wizard.steps.detalhes;
                    $scope.saveNewCompras();
                    break;
                case $scope.wizard.steps.detalhes:
                    switch ($scope.state.tipoPreenchimento) {
                        case $scope.auxiliar.tipoPreenchimento.pedido:

                            $scope.wizard.index = $scope.wizard.steps.pesquisarPedido;
                            //$scope.saveNewCompras();
                            break;
                        case $scope.auxiliar.tipoPreenchimento.manual:
                            $scope.save();
                            break;
                        case $scope.auxiliar.tipoPreenchimento.coletor:
                            $scope.save();
                            break;
                    };
                    break;
                default:
                    $scope.wizard.index++;
                    break
            }
        };
        $scope.gotoPrior = function () {
            switch ($scope.wizard.index) {
                case $scope.wizard.steps.detalhes:
                    switch ($scope.state.tipoEntrada) {
                        case $scope.auxiliar.tipoEntrada.transferencia:
                            $scope.wizard.index = $scope.wizard.steps.ajustarTransito;
                            break;
                        case $scope.auxiliar.tipoEntrada.compra:
                            switch ($scope.state.tipoPreenchimento) {
                                case $scope.auxiliar.tipoPreenchimento.pedido:
                                    // $scope.wizard.index = $scope.wizard.steps.ajustarPedidos;
                                    $scope.wizard.index = $scope.wizard.steps.opcoesTipoPreenchimento;
                                    break;
                                case $scope.auxiliar.tipoPreenchimento.manual:
                                    $scope.wizard.index = $scope.wizard.steps.opcoesTipoPreenchimento;
                                    break;
                                case $scope.auxiliar.tipoPreenchimento.coletor:
                                    $scope.wizard.index = $scope.wizard.steps.opcoesTipoPreenchimento;
                                    break;
                            };
                            break;
                    }
                    break;
                case $scope.wizard.steps.ajustarPedidos:
                    $scope.wizard.index = $scope.wizard.steps.pesquisarPedido;
                    break;
                case $scope.wizard.steps.ajustarTransito:
                    $scope.wizard.index = $scope.wizard.steps.pesquisarTransito;
                    break;
                case $scope.wizard.steps.pesquisarPedido:
                    //  $scope.wizard.index = $scope.wizard.steps.opcoesTipoPreenchimento;
                    $scope.wizard.index = $scope.wizard.steps.detalhes;
                    break;
                case $scope.wizard.steps.opcoesTipoPreenchimento:
                    $scope.wizard.index = $scope.wizard.steps.opcoesTipoEntrada;
                    break;
                case $scope.wizard.steps.pesquisarTransito:
                    $scope.wizard.index = $scope.wizard.steps.opcoesTipoEntrada;
                    break;
                case $scope.wizard.steps.opcoesTipoEntrada:
                    break;
                default:
                    $scope.wizard.index--;
                    break
            }
        };

        $scope.refresh = function () {
            $scope.removeSession();
            $scope.getAllEspecieSerie();
            $scope.getAllTipoMovimentacao();
            $scope.getAllTabelaPreco();
            $scope.getAllSerieEntrada();
            $scope.getAllFornecedorPendente();            
        };

        $scope.removeSession = function () {
            entradaService.revomeSession().then
                (
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        };
        $scope.CompareItens = function (file) {
            var fd = new FormData();
            fd.append('file', file);
            entradaService.SetItensCompra($scope.state.itemPedido.data).then
                (
                 function (response) {
                     if (response.Status < 0)
                         $scope.$parent.toastr.error(response.Message, 'Serviço');
                     else {
                         entradaService.CompareItens(fd)
                             .then(
                            function (response) {
                                if (response.Status < 0)
                                    $scope.$parent.toastr.error(response.Message, 'Serviço');
                                else {
                                    $scope.state.data = response.Data;
                                }
                            },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
                     }
                 },
                    function (error) { $scope.$parent.toastr.error(error, 'Comunicação com o servidor'); }
                );
        };

        $scope.uploadFile = function () {
            var file = $scope.myFile;
            $scope.CompareItens(file);
        };


        $scope.getAllSerieEntrada = function () {
            entradaService.getAllSerieEntrada().then(function (data) {
                $scope.state.seriesEntrada = data.Data;
            }, function (error) {
                $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
            });
        }

        $scope.filterBySerie = function (item) {
            return (!$scope.state.filtro.responsavel || $scope.state.filtro.nome == "" || item.Nome.toUpperCase().indexOf($scope.state.filtro.nome.toUpperCase()) >= 0);
        }

        $scope.selecionarSerie = function (item) {
            $scope.state.data.NotaFiscal.Serie.Codigo = item.Codigo;
            $scope.toggleModalSeries();
        }

        $scope.toggleModalSeries = function () {
            $scope.state.modalSerie = !$scope.state.modalSerie;
        };

        $scope.filterParameter = function (item) {
            return !$scope.state.searchProdutoTransito || $scope.state.searchProdutoTransito == "" || item.Produto.Codigo.toUpperCase().indexOf($scope.state.searchProdutoTransito.toUpperCase()) >= 0;
        };
        //Transferencia
        $scope.buscaProdutoBarraTrigger = function (event) {
            if (event.keyCode == 13) {

                if (!$scope.produto.Barra)
                    return false;
                buscaProduto($scope.produto.Barra, null, $scope.state.transito.TabelaPreco.Codigo);
                $scope.produto.Barra = "";
            }
            
        }

        $scope.buscaProdutoTrigger = function (event) {
            if (event.keyCode == 13) {

                if (!$scope.produto.Codigo) {
                    $scope.$parent.toastr.warning("Digite o código do produto!", 'Serviço');
                    return false;
                }
                    
                if (!$scope.produto.Cor) {
                    $scope.$parent.toastr.warning("Digite a cor do produto!", 'Serviço');
                    return false;
                }

                buscaProduto($scope.produto.Codigo, $scope.produto.Cor, $scope.state.transito.TabelaPreco.Codigo);
            }
        }

        var buscaProduto = function (codigo, cor, codigoTabelaPreco) {
            entradaService
                //.addProdutoCega(codigo, cor, codigoTabelaPreco, $scope.state.itemTransito.data, $scope.state.itemTransito.dataAux)
                //.addProdutoCegaEntrada(codigo, cor, codigoTabelaPreco, $scope.state.itemTransito.data, $scope.state.transito.Codigo)
                .addProdutoCegaEntrada(codigo, cor, codigoTabelaPreco, null, $scope.state.transito.Codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.state.itemTransito.data == null)
                                $scope.state.itemTransito.data = [];

                            var item = $scope.state.itemTransito.data.find(a => a.Produto.Codigo == response.Data.Item.Produto.Codigo && a.CorProduto.Codigo == response.Data.Item.CorProduto.Codigo);
                            var indexO = $scope.state.itemTransito.data.indexOf(item);

                            if (indexO >= 0) {
                                $scope.state.itemTransito.data.splice(indexO, 1);
                            }

                            $scope.state.itemTransito.data.push(response.Data.Item);
                            $scope.state.quantidade = $scope.getTotal($scope.state.itemTransito.data);
                            //$scope.state.itemTransito.data = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);                        
                    }
                );            
        }
        //Compra
        $scope.buscaProdutoBarraCompraTrigger = function (event) {
            if (event.keyCode == 13) {

                if (!$scope.produto.Barra)
                    return false;
               
                entradaService.AddProdutoCegoCompra($scope.produto.Barra, $scope.state.itemPedido.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.state.itemPedido.data == null)
                                $scope.state.itemPedido.data = [];
                            $scope.state.itemPedido.data = response.Data;
                            $scope.produto.Barra = "";
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
                
            }

        }

        $scope.Clear = function()
        {
            $scope.produto.Barra = "";
            $scope.produto.Codigo = "";
            $scope.produto.Cor = "";
            $scope.auxiliar.itemCompra.vazio = true;
        }
        $scope.AddItemCompra  = function(event)
        {
            if (event.keyCode == 13) {
                entradaService.SetLinhaProduto($scope.auxiliar.itemCompra.data, $scope.state.itemPedido.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.state.itemPedido.data == null)
                                $scope.state.itemPedido.data = [];
                            $scope.state.itemPedido.data = response.Data;
                           
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
                $scope.Clear();
            }
        }

        $scope.buscaProdutoCompraTrigger = function (event) {
            if (event.keyCode == 13) {

                if (!$scope.produto.Codigo) {
                    $scope.$parent.toastr.warning("Digite o código do produto!", 'Serviço');
                    return false;
                }

                if (!$scope.produto.Cor) {
                    $scope.$parent.toastr.warning("Digite a cor do produto!", 'Serviço');
                    return false;
                }
                
                entradaService.GetLinhaProduto($scope.produto.Codigo, $scope.produto.Cor, $scope.state.itemPedido.data)
                .then(
                    function (response) {
                        
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.auxiliar.itemCompra.data == null)
                                $scope.auxiliar.itemCompra.data = [];
                            $scope.auxiliar.itemCompra.data = response.Data;
                            $scope.auxiliar.itemCompra.vazio = false;
                            $scope.produto.Barra = "";
                            console.log($scope.auxiliar.itemCompra.data); 
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
            }
        }

        $scope.calculate = function (item) {
            item.PrecoLiquido = item.Custo1;
            entradaService
                .calculateItemPedido(item)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Recalculando entrada');
                        else
                            item.ValorEntregar = response.Data.PrecoOriginal;
                            //$scope.state.data = response.Data;
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Sem comunicação com o servidor.');
                    }
                );
        };

        var buscaProdutoCompra = function (codigo, cor, codigoTabelaPreco) {
            entradaService
                .addProdutoCega(codigo, cor, codigoTabelaPreco, $scope.state.itemPedido.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Serviço');
                        else {
                            if ($scope.state.itemTransito.data == null)
                                $scope.state.itemTransito.data = [];
                            $scope.state.itemTransito.data = response.Data;
                        }
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                    }
                );
        }

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

})();