(function () {
    "use strict";

    angular.module('pos').controller('consumivelEditController', controller);
    controller.$inject = ['$scope', '$state', '$stateParams', '$window', 'produtoService', 'consumivelService', 'clienteService', 'entidadeAuxiliarService', '$confirm'];

    function controller($scope, $state, $stateParams, $window, produtoService, consumivelService, clienteService, entidadeAuxiliarService, $confirm) {
        $scope.Title = "Consumível";
        $scope.tipo = "PR";
        $scope.state = {
            filtro: { ativo: false },
            mostraOBS: false,
            id: "",
            data: {},
            filtroProduto: {},
            naturezas: [],
            series: [],
        };
        $scope.auxiliar = {
            seriesNf: [],
            ordenacao: ["swap_vert", "keyboard_arrow_down", "keyboard_arrow_up"],
            permiteEdicao: false,
            destinatarios: [],
            destinatarioPesquisado: '',
            tipoDestinatario: 'CV',
            ordenadorData: 0,
            ordenadorNumero: 0,
        }
        $scope.mostraImpostos = false;
        $scope.impostos = [];
        $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.gerarNota = true;
        $scope.mostraReferencias = false;
        $scope.auxBuscarNotasReferencia = {
            chaveNFE: "",
            notafiscal: {
                numeroNF: "",
                serieNF: ""
            }
        };
        $scope.listaNotasFiscaisReferenciadas = [];
        $scope.adicionandoReferencia = false;
        $scope.gerandoNota = false;

        $scope.fechaObs = function () {
            $scope.state.mostraOBS = false;
            if( $scope.state.data.Observacao == "")
                $scope.state.data.Observacao = "";
        }

        $scope.AdicionarObs = function () {
            $scope.state.mostraOBS = false;
        }

        $scope.abreOBS = function () {
            $scope.state.mostraOBS = true;
        }


     
        var automaticSendProduct = function (produto, cor, tamanho) {
            var hasItem = $.grep($scope.auxiliar.oldItens, function (element, index) {
                return element.CorProduto.Codigo == cor && element.Produto.Codigo == '';
            });

            var index = (hasItem.length > 0 ? 0 : $scope.auxiliar.oldItens.length);

            for (var i = index; i < produto.Itens.length; i++) {
                var item = produto.Itens[i];

                for (var cont = 0; cont < item.Tamanhos.length; cont++) {
                    $scope.setInitialValue($scope.state.ultimoProduto, item.CorProduto.Codigo, item.Tamanhos[cont]);
                }
            }
            $scope.calculate();
            $scope.state.filtroProduto.codigo = "";
        }

        $scope.calculatePercentual = function (index) {
            $scope.state.data.Itens[index].Desconto = null;
            $scope.calculate(index);
        }

        $scope.calculateValorAbsoluto = function (index) {
            $scope.state.data.Itens[index].DescontoPercentual = null;
            $scope.calculate(index);
        }

        $scope.calculate = function (index) {
            var i = $scope.state.data.Itens[index];
            i.Quantidade = 0;//i.Tamanhos.Sum(a => a.Quantidade);
            for (var x = 0; x < i.Tamanhos.length; x++) {
                i.Quantidade += i.Tamanhos[x].Quantidade;
            }
            if ((i.Desconto == null) && (i.DescontoPercentual == null))
                i.Valor = i.Preco1 * i.Quantidade;
            else if (i.Desconto != null) {
                i.DescontoPercentual = (i.Desconto / (i.Preco1 == 0 ? 1 : i.Preco1)) * 100;
                i.Unitario = (i.Preco1 - i.Desconto);
                i.Valor = (i.Unitario) * i.Quantidade;
            }
            else {
                i.DescontoPercentual = (i.DescontoPercentual != null && i.DescontoPercentual >= 100 ? 99 : i.DescontoPercentual);
                i.Valor = (i.Preco1 - (i.Preco1 * (i.DescontoPercentual / 100))) * i.Quantidade;
                i.Desconto = (i.Preco1 * (i.DescontoPercentual / 100));
                i.Unitario = (i.Preco1 - i.Desconto);
            }
            var sumQtde = 0;
            var sumValor = 0;
            for (var i = 0; i < $scope.state.data.Itens.length; i++) {
                sumQtde += $scope.state.data.Itens[i].Quantidade
                sumValor += $scope.state.data.Itens[i].Valor;
            }
            $scope.state.data.Quantidade = sumQtde;
            $scope.state.data.Valor = sumValor;
            //consumivelService
            //    .calculate($scope.state.data)
            //    .then(
            //        function (response) {
            //            if (response.Status < 0) {
            //                $scope.$parent.toastr.error(response.Message, 'Recalculando consumível');
            //            }
            //            else {
            //                angular.copy($scope.state.data, response.Data);
            //                if (!response.Data.Itens || response.Data.Itens.length == 0)
            //                    $scope.state.data.Itens.length = 0;
            //            }
            //        },
            //        function (error) {
            //            $scope.$parent.toastr.error(error, 'Sem comunicação com o servidor.');
            //        }
            //    );
        };

        $scope.calculateBruto = function (index) {
            var i = $scope.state.data.Itens[index];
            if (i.Desconto == null)
                i.Desconto = 0;
            i.Preco1 = i.Unitario + i.Desconto;
            $scope.calculate(index);
            //consumivelService
            //    .calculateBruto($scope.state.data)
            //    .then(
            //        function (response) {
            //            if (response.Status < 0) {
            //                $scope.$parent.toastr.error(response.Message, 'Recalculando consumível');
            //            }
            //            else {
            //                angular.merge($scope.state.data, response.Data);
            //                if (!response.Data.Itens || response.Data.Itens.length == 0)
            //                    $scope.state.data.Itens.length = 0;
            //            }
            //        },
            //        function (error) {
            //            $scope.$parent.toastr.error(error, 'Sem comunicação com o servidor.');
            //        }
            //    );
        };

        $scope.setInitialValue = function (produto, cor, tamanho) {
            if (!produto || !produto.CodigosBarras || produto.CodigosBarras.length == 0)
                return;

            var codigoBarra = produto.CodigosBarras[0];

            if (codigoBarra.CorProduto.Codigo == cor && codigoBarra.Tamanho.Posicao == tamanho.Tamanho.Posicao)
                tamanho.Quantidade += 1;
        }

        $scope.changeOrdenacaoData = function () {
            $scope.auxiliar.ordenadorData = ($scope.auxiliar.ordenadorData == 2 ? 0 : ++$scope.auxiliar.ordenadorData);
            $scope.auxiliar.ordenadorNumero = 0;
            if ($scope.auxiliar.ordenadorData > 0) {
                $scope.dateStyle = { color: '#ffffff' };
                $scope.numberStyle = { color: '#666666' };
            }
            else {
                $scope.dateStyle = { color: '#666666' };
                $scope.numberStyle = { color: '#666666' };
            }

        }

        $scope.changeOrdenacaoNumero = function () {
            $scope.auxiliar.ordenadorNumero = ($scope.auxiliar.ordenadorNumero == 2 ? 0 : ++$scope.auxiliar.ordenadorNumero);
            $scope.auxiliar.ordenadorData = 0;
            if ($scope.auxiliar.ordenadorNumero > 0) {
                $scope.dateStyle = { color: '#666666' };
                $scope.numberStyle = { color: '#ffffff' };
            }
            else {
                $scope.dateStyle = { color: '#666666' };
                $scope.numberStyle = { color: '#666666' };
            }

        }

        var getOrdenacao = function () {
            var filtro = 0;
            if ($scope.auxiliar.ordenadorData > 0)
                filtro = $scope.auxiliar.ordenadorData - 1;
            else if ($scope.auxiliar.ordenadorNumero > 0)
                filtro = $scope.auxiliar.ordenadorNumero + 1;
            else
                filtro = null;

            $scope.state.filtro.ordenacao = filtro;
        }

        $scope.toggleFilter = function () {
            $scope.state.filtro.ativo = !$scope.state.filtro.ativo;
        }

        $scope.refresh = function () {
            consumivelService.get($scope.state.id).then(
                function (response) {
                    angular.copy(response.Data, $scope.state.data);

                    for (var i = 0; i < $scope.state.data.Itens.length; i++) {
                        $scope.state.data.Itens[i].Unitario = $scope.state.data.Itens[i].Preco1 - $scope.state.data.Itens[i].Desconto;
                    }

                    $scope.verificarEdicao();

                    if ($scope.state.data.ClienteDestinatario && $scope.state.data.ClienteDestinatario.Nome) {
                        $scope.auxiliar.tipoDestinatarioSelecionado = 'CV';
                        consumivelService.validarEnderecoClienteVarejo($scope.state.data.ClienteDestinatario.Endereco).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(Response.Message, "Serviço");
                                return;
                            } else {
                                $scope.auxiliar.destinatarioEnderecoIncompleto = response.Data;
                                if ($scope.auxiliar.destinatarioEnderecoIncompleto) {
                                    $scope.$parent.toastr.error("O cliente selecionado não possui endereço completo, edite seu cadastro clicando em seu nome para que seja possível prosseguir.");
                                }
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Serviço");
                            return;
                        }
                    );
                    }
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                });
        }

        $scope.prepareNewItem = function () {
            consumivelService
                .prepareNewItem($scope.state.data, $scope.state.filtroProduto.codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Preparando item de entrada');
                        else {
                            $scope.auxiliar.oldItens = ($scope.state.data.Itens ? $scope.state.data.Itens : []);
                            angular.copy(response.Data.Consumivel, $scope.state.data);
                            $scope.state.ultimoProduto = response.Data.Produto;

                            if (!($scope.$parent.config.GradeEntradaSaida || !$scope.state.ultimoProduto.CodigosBarras[0])) {
                                //automaticSendProduct($scope.state.data, $scope.state.ultimoProduto.CodigosBarras[0].CorProduto.Codigo, $scope.state.ultimoProduto.CodigosBarras[0]);
                                //var item = $scope.state.data.Itens.filter(a => a.Produto.Codigo == $scope.state.ultimoProduto.CodigosBarras[0].Produto.Codigo && a.CorProduto.Codigo == $scope.state.ultimoProduto.CodigosBarras[0].CorProduto.Codigo);
                                //if (item.length > 0) {
                                //    var tamanho = item[0].Tamanhos.filter(a => a.Tamanho.Posicao == $scope.state.ultimoProduto.CodigosBarras[0].Tamanho.Posicao)
                                //    {
                                //        if (tamanho.length > 0)
                                //            tamanho[0].Quantidade += 1;
                                //    }
                                //}
                            }

                            $scope.toggleItem();
                            // $scope.state.data.Itens = $scope.state.data.Itens.slice().reverse();
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Sem comunicação com o servidor.');
                    }
                );
        };

        var buscarTransportadoras = function () {
            entidadeAuxiliarService.getAllTransportadora().then(
                function (response) {
                    $scope.state.transportadoras = response.Data;
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                }
                );
        }

        $scope.prepareNewItemFiscal = function () {
            consumivelService
                .prepareNewItemFiscal($scope.state.data, $scope.state.filtroProduto.codigo)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, 'Preparando item de entrada');
                        else {
                            $scope.auxiliar.oldItens = ($scope.state.data.Itens ? $scope.state.data.Itens : []);
                            angular.copy(response.Data.Consumivel, $scope.state.data);
                            $scope.state.ultimoProduto = response.Data.Produto;


                            automaticSendProduct($scope.state.data, $scope.state.ultimoProduto.CodigosBarras[0].CorProduto.Codigo, $scope.state.ultimoProduto.CodigosBarras[0]);
                            $scope.toggleItem();
                        }
                    },
                    function (error) {
                        $scope.$parent.toastr.error(error, 'Sem comunicação com o servidor.');
                    }
                );
        };

        $scope.toggleItem = function () {
            $scope.state.filtroProduto.codigo = '';
            if (!$scope.state.ultimoProduto.CodigosBarras[0])
                $('input[ng-model*="state.filtroProduto.codigo"]').first().focus();
            else
                $('#' + $scope.state.ultimoProduto.CodigosBarras[0].CorProduto.Codigo + "-" + $scope.state.ultimoProduto.CodigosBarras[0].Tamanho.Posicao).focus();
        };

        $scope.submit = function () {

            if ($scope.state.filtroProduto.codigo) {
                if ($scope.tipo == "IF")
                    $scope.prepareNewItemFiscal();
                else
                    $scope.prepareNewItem();
            }
            else {
                if (!$scope.state.data.NotaFiscal.Volume || !$scope.state.data.NotaFiscal.Volume.Quantidade || $scope.state.data.NotaFiscal.Volume.Quantidade <= 0) {
                    $scope.$parent.toastr.error("O campo volume é obrigatório.");
                    return;
                }
                $scope.save();

            }

        };

        //Criado outro submit, pois o de adicionar o item e o de salvar nota fiscal compartilham do mesmo

        $scope.submitNota = function () {
            if (!$scope.state.data.NotaFiscal.Volume || !$scope.state.data.NotaFiscal.Volume.Quantidade || $scope.state.data.NotaFiscal.Volume.Quantidade <= 0) {
                $scope.$parent.toastr.error("O campo volume é obrigatório.");
                return;
            }
            $scope.save();
        };

        $scope.save = function () {
            if (!$scope.state.data.Transportadora) {
                $scope.state.data.TipoFrete = null;
            }
            consumivelService
                .save($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Gravação de consumível");
                        else {
                            $scope.gerarNota = true;
                            $scope.$parent.toastr.success("Nota Fiscal salva com sucesso");
                            $scope.gerarNotaFiscal();
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, "Comunicação com o servidor"); }
                );
        };

        $scope.keyPress = function (keyEvent) {
            if (keyEvent.which === 13) {
                $scope.submit();
                keyEvent.preventDefault();
            }
        }

        $scope.gerarNotaFiscal = function () {
            if (!$scope.state.data.NotaFiscal.Volume
                || !$scope.state.data.NotaFiscal.Volume.Quantidade
                || $scope.state.data.NotaFiscal.Volume.Quantidade <= 0) {
                $scope.$parent.toastr.error("O campo volume é obrigatório.");
                return;
            }

            $scope.gerandoNota = true;
      
            consumivelService
                .save($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.gerandoNota = false;
                            $scope.$parent.toastr.error(response.Message, "Gravação de consumível");
                        }
                        else {
                            consumivelService.gerarNotaConsumivel($scope.state.id).then(
                                function (response) {
                                    $scope.gerandoNota = false;
                                    if (response.Status < 0) {
                                        $scope.$parent.toastr.error(response.Message, "Comunicação com o servidor");
                                        return;
                                    }
                                    else {
                                        $scope.$parent.toastr.success("Nota Fiscal Gerada Com Sucesso");
                                        $state.go("state-nota-fiscal-detail", { numero: response.Data.NotaFiscal.Numero, serie: response.Data.NotaFiscal.Serie.Codigo });
                                    }
                                },
                                function (error) {
                                    $scope.gerandoNota = false;
                                    $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                                });
                        }
                    },
                    function (error) {
                        $scope.gerandoNota = false;
                        $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                    }
                );
        };

        var gerarNota = function () {

        }

        $scope.deleteItem = function (index) {
            $scope.state.data.Itens.splice(index, 1);
            var sumQtde = 0;
            var sumValor = 0;
            for (var i = 0; i < $scope.state.data.Itens.length; i++) {
                sumQtde += $scope.state.data.Itens[i].Quantidade
                sumValor += $scope.state.data.Itens[i].Valor;
            }
            $scope.state.data.Quantidade = sumQtde;
            $scope.state.data.Valor = sumValor;
        };

        $scope.goToListagem = function () {
            $state.go("state-nota-fiscal-detail", { numero: $scope.state.data.NotaFiscal.Numero, serie: $scope.state.data.NotaFiscal.Serie.Codigo });
        }

        $scope.abreImpostosConsumiveis = function () {
            $scope.mostraImpostos = true;
            $scope.getImpostoValor();
        }

        $scope.fechaImpostosConsumiveis = function () {
            $scope.mostraImpostos = false;
        }

        $scope.abreReferencias = function () {
            $scope.mostraReferencias = true;
            $scope.getListaReferencias();
        }

        $scope.fechaReferencias = function () {
            $scope.mostraReferencias = false;
        }

        $scope.getImpostoValor = function () {
            consumivelService
                .getImpostoValores($scope.state.id)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Erro ao buscar impostos de consumível");
                        else {
                            $scope.impostos = response.Data;
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, "Comunicação com o servidor"); }
                );
        };

        $scope.getListaReferencias = function () {
            consumivelService
                .getListaReferencias($scope.state.id)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Erro ao buscar impostos de consumível");
                        else {
                            $scope.listaNotasFiscaisReferenciadas = response.Data;
                        }
                    },
                    function (error) { $scope.$parent.toastr.error(error, "Comunicação com o servidor"); }
                );
        };

        $scope.getSum = function (array, column) {
            if (!array || !column)
                return null;
            var sum = 0;
            for (var i = 0; i < array.length; i++)
                sum += (!array[i][column] ? 0 : array[i][column]);
            return sum;
        }

        var getNaturezas = function () {
          
            consumivelService.getNaturezas().then(
             
                function (response) {
                    debugger;
                    if ($scope.state.data.ConsumivelSaida != null)
                        $scope.state.naturezas = response.Data.filter(a =>  (a.TipoOperacao.Tipo != "1" && a.TipoOperacao.Tipo != "0") || a.TipoOperacao.Tipo == ($scope.state.data.ConsumivelSaida ? '1' : '0' ));
                        else
                    $scope.state.naturezas = response.Data;
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                });
        }

        var getAllSerie = function () {
            entidadeAuxiliarService.getAllSerie().then(
                function (response) {
                    $scope.state.series = response.Data;
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                });
        }

        $scope.verificaCamposNF = function (tipo) {
            if (tipo == 0) {
                $scope.auxBuscarNotasReferencia.notafiscal.numeroNF = "";
                $scope.auxBuscarNotasReferencia.notafiscal.serieNF = "";
            }

            if (tipo == 1) {
                $scope.auxBuscarNotasReferencia.chaveNFE = "";
            }
        }

        $scope.buscarNotaFiscalReferencia = function () {
            if (
                $scope.auxBuscarNotasReferencia.notafiscal.numeroNF == "" &&
                $scope.auxBuscarNotasReferencia.notafiscal.serieNF == "" &&
                $scope.auxBuscarNotasReferencia.chaveNFE == ""
                ) {
                $scope.$parent.toastr.error("Preencha o campo da chaveNFE ou o número e série da Nota Fiscal", "Campos obrigatórios");
                return;
            }

            $scope.adicionandoReferencia = true;

            consumivelService
                .addListaReferencias($scope.state.data, $scope.auxBuscarNotasReferencia)
                .then(
                    function (response) {
                        $scope.adicionandoReferencia = false;
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Adicionar chave à lista de referências de consumível");
                        else {
                            angular.copy(response.Data, $scope.listaNotasFiscaisReferenciadas);
                            $scope.auxBuscarNotasReferencia.notafiscal.numeroNF = "";
                            $scope.auxBuscarNotasReferencia.notafiscal.serieNF = "";
                            $scope.auxBuscarNotasReferencia.chaveNFE = "";
                            $scope.$parent.toastr.success("Nota Fiscal referenciada com sucesso", "Referência de Nota Fiscal");
                        }
                    },
                    function (error) {
                        $scope.adicionandoReferencia = false;
                        $scope.$parent.toastr.error(error, "Comunicação com o servidor");
                    }
                );
        }

        $scope.deleteListaReferencias = function (id) {
            consumivelService
                .deleteListaReferencias(id)
                .then(
                    function (response) {
                        if (response.Status < 0)
                            $scope.$parent.toastr.error(response.Message, "Erro ao deletar nota referenciada de consumível");
                        else {
                            $scope.getListaReferencias();
                        }
                    },
                    function () { $scope.$parent.toastr.error("Comunicação com o servidor"); }
                );
        };

        $scope.escolherDestinatario = function () {
            $scope.state.modalDestinatario = !$scope.state.modalDestinatario;
        }

        $scope.setarDestinatario = function (destinatario) {
            $scope.state.data.ClienteDestinatario = {};
            $scope.state.data.FilialDestinatario = {};
            $scope.state.data.FornecedorDestinatario = {};

            switch ($scope.auxiliar.tipoDestinatario) {
                case "CV":
                    $scope.state.data.ClienteDestinatario = destinatario;
                    $scope.auxiliar.tipoDestinatarioSelecionado = $scope.auxiliar.tipoDestinatario;

                    consumivelService.validarEnderecoClienteVarejo(destinatario.Endereco).then(
                        function (response) {
                            if (response.Status < 0) {
                                $scope.$parent.toastr.error(Response.Message, "Serviço");
                                return;
                            } else {
                                $scope.auxiliar.destinatarioEnderecoIncompleto = response.Data;
                                if ($scope.auxiliar.destinatarioEnderecoIncompleto) {
                                    $scope.$parent.toastr.error("O cliente selecionado não possui endereço completo, edite seu cadastro clicando em seu nome para que seja possível prosseguir.");
                                }
                            }
                        },
                        function (error) {
                            $scope.$parent.toastr.error(error, "Serviço");
                            return;
                        }
                    );
                    break;
                case "FL":
                    $scope.state.data.FilialDestinatario = destinatario;
                    $scope.auxiliar.tipoDestinatarioSelecionado = $scope.auxiliar.tipoDestinatario;
                    break;
                case "FO":
                    $scope.state.data.FornecedorDestinatario = destinatario;
                    $scope.auxiliar.tipoDestinatarioSelecionado = $scope.auxiliar.tipoDestinatario;
                    break;
                case "CA":
                    $scope.state.data.FornecedorDestinatario = destinatario;
                    $scope.auxiliar.tipoDestinatarioSelecionado = $scope.auxiliar.tipoDestinatario;
                    break;
            }

            $scope.auxiliar.destinatarioPesquisado = '';
            $scope.auxiliar.destinatarios = [];

            $scope.escolherDestinatario();
        }

        $scope.buscarDestinatario = function (chave) {
            if (!chave || chave == "") {
                $scope.auxiliar.destinatarios = [];
                return;
            }
            switch ($scope.auxiliar.tipoDestinatario) {
                case "CV":
                    buscarClienteVarejo(chave);
                    break;
                case "FL":
                    buscarFilial(chave);
                    break;
                case "FO":
                    buscarFornecedor(chave);
                    break;
                case "CA":
                    buscarClienteAtacado(chave);
                    break;
            }
        }

        var buscarClienteVarejo = function (chave) {
            clienteService.GetTopCliente(chave).then(
                function (response) {
                    $scope.auxiliar.destinatarios = response.Data;
                    //$scope.state.cliente.chaves.nome = "Nome";
                    //$scope.state.cliente.chaves.codigo = "Codigo";
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                }
                );
        }
        var buscarFornecedor = function (chave) {
            entidadeAuxiliarService.getTopFornecedor(chave).then(
               function (response) {
                   $scope.auxiliar.destinatarios = response.Data;
                   //$scope.state.cliente.chaves.nome = "Nome";
                   //$scope.state.cliente.chaves.codigo = "Codigo";
               },
               function (error) {
                   $scope.$parent.toastr.error(error, 'Serviço');
               });
        }
        var buscarFilial = function (chave) {
            entidadeAuxiliarService.getTopFilial(chave).then(
                function (response) {
                    $scope.auxiliar.destinatarios = response.Data;
                    //$scope.state.cliente.chaves.nome = "Nome";
                    //$scope.state.cliente.chaves.codigo = "Codigo";
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                }
                );
        }
        var buscarClienteAtacado = function (chave) {
            entidadeAuxiliarService.getTopClienteAtacado(chave).then(
                function (response) {
                    $scope.auxiliar.destinatarios = response.Data;
                    //$scope.state.cliente.chaves.nome = "Nome";
                    //$scope.state.cliente.chaves.codigo = "Codigo";
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                }
                );
        }

        $scope.verificarEdicao = function () {
            if ($scope.state.data.NotaFiscal && $scope.state.data.NotaFiscal.NFE) {
                var statusNotaFiscal = $scope.state.data.NotaFiscal.NFE.Status;

                if (!statusNotaFiscal || statusNotaFiscal == '' || statusNotaFiscal == '1' || statusNotaFiscal == '4') {
                    $scope.auxiliar.permiteEdicao = true;
                }
                else {
                    $scope.auxiliar.permiteEdicao = false;
                }
            }
            else {
                $scope.auxiliar.permiteEdicao = true;
            }
        }

        var initilize = function () {
            buscarTransportadoras();
            getNaturezas();
            getAllSerie();
            $scope.state.id = $stateParams.id;
            $scope.refresh();
        }
        initilize();

        $scope.$watch('state.data', function (valor, oldvalue) {
            $scope.gerarNota = false;
        }, true);
    }

})();