(function () {
    "use strict";

    angular.module('pos').controller('consignacaoDetailController', controller);
    controller.$inject = ['$scope', '$state', '$stateParams', '$window', 'consignacaoService', '$timeout', 'configService', '$confirm', 'entidadeAuxiliarService', 'notaFiscalService'];

    function controller($scope, $state, $stateParams, $window, consignacaoService, $timeout, configService, $confirm, entidadeAuxiliarService, notaFiscalService) {
        $scope.Title = "Consignação";

        $scope.state = {
            changed: false,
            carregando: false,
            codigo: "",
            data: {},
            tabelaspreco: [],
            tiposconsignacao: [],
            mostraEventos: false,
            mostraEncerramento: false,
            mostraConverter: false,
            mostraGerarNFSaida: false,
            mostraGerarNFRetorno: false,
            textNovoEvento: "",
            listaProdutosPreVenda: [],
            NaturezaOperacao: {},
            Serie: {},
            Volumes: 0,
            NaturezaOperacaoRetorno: {},
            SerieRetorno: {},
            VolumesRetorno: 0,
            carregandoEnviarSefaz: false,
            modalEnviarsefaz: false,
            statusNfe: '',
            mostrarEnviarSefaz: false
        };

        $scope.auxiliar = {
            modaldanfe: false,
        };
        $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.state.naturezas = [];
        $scope.state.series = [];
        $scope.state.naturezasretorno = [];

        $scope.gerandoNotaFiscal = false;
        $scope.gerandoNotaFiscalRetorno = false;

        $scope.searchItemConsignacao = "";

        $scope.openEventos = function () {
            $scope.state.mostraEventos = true;
        }

        $scope.closeEventos = function () {
            $scope.state.mostraEventos = false;
        }

        $scope.refresh = function () {
            ;
            $scope.state.carregando = true;
            consignacaoService.getConsignacao($scope.state.codigo).then(
                function (response) {
                    $scope.state.carregando = false;
                    if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Serviço'); }
                    else {
                        angular.copy(response.Data, $scope.state.data);
                    }
                },
                function (error) {
                    $scope.$parent.toastr.error(error, "Serviço");
                });
        }

        $scope.getTabelasPreco = function () {
            configService.getAllTabelasPreco()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Serviço'); }
                        else {
                            $scope.state.tabelaspreco = response.Data;
                            
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.getTiposConsignacao = function () {
            consignacaoService.getAllTiposConsignacao()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error(response.Message, 'Serviço'); }
                        else {
                            $scope.state.tiposconsignacao = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.save = function () {
            if (!$scope.state.data.Cliente.Codigo) {
                $scope.$parent.toastr.error("Informe o cliente corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.TipoConsignacao.Codigo) {
                $scope.$parent.toastr.error("Informe o tipo de consignacao corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.TabelaPreco.Codigo) {
                $scope.$parent.toastr.error("Informe a tabela de preço corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.Emissao) {
                $scope.$parent.toastr.error("Informe a data de emissão corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.Itens.length) {
                $scope.$parent.toastr.error("Informe pelo menos um produto para consignacao.", 'Atenção');
                return;
            }
            ;
            consignacaoService
                .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;
                            $scope.$parent.toastr.success("A consignacao foi salva com sucesso.", 'Sucesso');
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.saveSefaz = function () {
            if (!$scope.state.data.Cliente.Codigo) {
                $scope.$parent.toastr.error("Informe o cliente corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.TipoConsignacao.Codigo) {
                $scope.$parent.toastr.error("Informe o tipo de consignacao corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.TabelaPreco.Codigo) {
                $scope.$parent.toastr.error("Informe a tabela de preço corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.Emissao) {
                $scope.$parent.toastr.error("Informe a data de emissão corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.Itens.length) {
                $scope.$parent.toastr.error("Informe pelo menos um produto para consignacao.", 'Atenção');
                return;
            }
            ;
            consignacaoService
                .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;

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

        $scope.addEvento = function () {
            consignacaoService
            .saveEvent($scope.state.data.Codigo, $scope.state.textNovoEvento)
            .then(
                function (response) {
                    if (response.Status < 0)
                        $scope.$parent.toastr.error(response.Message, 'Serviço');
                    else {
                        $scope.state.data.Observacao = response.Data;
                        $scope.state.textNovoEvento = "";
                        $timeout(function () {
                            $('#textareaOBS').animate({ scrollTop: document.getElementById('textareaOBS').scrollHeight }, 400, function () { });
                        }, 100);
                        $scope.$parent.toastr.success("Evento confirmado com sucesso.", 'Sucesso');
                    }
                },
                function (err) { $scope.$parent.toastr.error(err); }
            );
        }

       
        $scope.edit = function () {
            $state.go("state-consignacao-edit", { codigo: $scope.state.codigo });
        }

        $scope.openNotaFiscal = function () {
            $state.go("state-nota-fiscal-detail", { numero: $scope.state.data.NumeroNotaFiscal, serie: $scope.state.data.SerieNotaFiscal });
        };

        $scope.openPreVenda = function () {
            $state.go("state-venda-add", { id: $scope.state.data.CodigoPedido });
        };

        $scope.openNotaFiscalRetorno = function () {
            $state.go("state-nota-fiscal-detail", { numero: $scope.state.data.NumeroNotaFiscalRetorno, serie: $scope.state.data.SerieNotaFiscalRetorno });
        };

        $scope.calculate = function (item) {
            var qtdeitem = 0;
            for (var i = 0; i < item.Tamanhos.length; i++) {
                qtdeitem += item.Tamanhos[i].Quantidade;
            }
            item.Quantidade = qtdeitem;
            item.Valor = qtdeitem * item.Preco;

            $scope.recalculateTotal();
        }

        $scope.recalculateTotal = function () {
            var qtdetotal = 0;
            var valortotal = 0;
            for (var i = 0; i < $scope.state.data.Itens.length; i++) {
                qtdetotal += $scope.state.data.Itens[i].Quantidade;
                valortotal += $scope.state.data.Itens[i].Valor;
            }
            $scope.state.data.QuantidadeTotal = qtdetotal;
            $scope.state.data.ValorTotal = valortotal;
        }

        $scope.limpaCodBarFocus = function () {
            $timeout(function () {
                $scope.searchItemConsignacao = "";
                $('[ng-model$="searchItemConsignacao"]').focus();
            });
        }

        $scope.pesquisaProduto = function () {
            if (!$scope.searchItemConsignacao) {
                $scope.$parent.toastr.error("Informe o código de barras corretamente.", 'Atenção');
                return;
            }

            if (!$scope.state.data.TabelaPreco || !$scope.state.data.TabelaPreco.Codigo) {
                $scope.$parent.toastr.error("Selecione uma tabela de preço para definir preço dos produtos a serem incluídos.", 'Atenção');
                return;
            }


            if ($scope.state.data.Encerramento) {
                $scope.$parent.toastr.error("Consignacao já está encerrada, não é possível incluir novos itens.", 'Atenção');
                return;
            }

            //enviar o codigo de barras e os itens atuais, retornar os itens ja adicionado o item enviado
            consignacaoService
                .addItem($scope.state.data, $scope.searchItemConsignacao)
                .then(
                    function (response) {
                        if (response.Status < 0) {
                            $scope.$parent.toastr.error(response.Message, 'Atenção');
                        }
                        else {
                            angular.copy(response.Data, $scope.state.data.Itens);
                            $scope.recalculateTotal();
                        }
                        $scope.limpaCodBarFocus();
                    },
                    function (err) {
                        $scope.$parent.toastr.error(err);
                        $scope.limpaCodBarFocus();
                    }
                );


        }

        $scope.enterCodigo = function ($event) {
            if ($event.keyCode == 10 || $event.keyCode == 13)
                $scope.pesquisaProduto();
        }

        $scope.deleteItem = function (index) {
            $scope.state.data.Itens.splice(index, 1);
            $scope.recalculateTotal();
        };

        $scope.openEncerrar = function () {
            $scope.state.mostraEncerramento = true;
        }

        $scope.closeEncerrar = function () {
            $scope.state.mostraEncerramento = false;
        }

        $scope.encerrarConsignacao = function () {
            $confirm({ text: "Todas as alterações nesta consignação foram efetuadas? Após está opção ser selecionada não será mais possivel transformar a consignação em pré venda e nem gerar NFE de retorno", title: "Cancelamento de Consignação", ok: "Sim", cancel: "Não" })
               .then(function () {
                   consignacaoService
                   .encerrarConsignacao($scope.state.data)
                   .then(
                       function (response) {
                           if (response.Status < 0)
                               $scope.$parent.toastr.error(response.Message, 'Serviço');
                           else {
                               $scope.state.data = response.Data;
                               $scope.closeEncerrar();
                               $scope.$parent.toastr.success("A consignacao foi encerrada com sucesso.", 'Sucesso');
                           }
                       },
                       function (err) { $scope.$parent.toastr.error(err); }
                   );
               }
               );

        }

        $scope.getStatus = function (item) {

            if (item.Encerramento) {
                return "Encerrada";
            }

            var hoje = new Date();
            hoje.setHours(0, 0, 0, 0)
            var expiraEm = Math.ceil((new Date(item.Retorno) - hoje) / 86400000);

            if (expiraEm < 0) {
                //expirada
                return "Expirada";
            }
            if (expiraEm < 3) {
                //expirando
                return "Expirando";
            }
            if (expiraEm < 7) {
                //breve
                return "Em Breve";
            }
            if (expiraEm >= 7) {
                //com tempo ainda
                return "Em dia";
            }
        };

        $scope.getStatusColor = function (item) {

            if (item.Encerramento) {
                return "label-default";
            }

            var hoje = new Date();
            hoje.setHours(0, 0, 0, 0)
            var expiraEm = Math.ceil((new Date(item.Retorno) - hoje) / 86400000);

            if (expiraEm < 0) {
                //expirada
                return "label-danger";
            }
            if (expiraEm < 3) {
                //expirando
                return "label-warning";
            }
            if (expiraEm < 7) {
                //breve
                return "label-info";
            }
            if (expiraEm >= 7) {
                //com tempo ainda
                return "label-success";
            }
        };

        $scope.openConverter = function () {
            angular.copy($scope.state.data.Itens, $scope.state.listaProdutosPreVenda);
            $scope.state.mostraConverter = true;
        }

        $scope.closeConverter = function () {
            $scope.state.mostraConverter = false;
        }

        $scope.converterConsignacao = function () {
            ;

            var qtdeTotal = 0;
            for (var i = 0; i < $scope.state.listaProdutosPreVenda.length; i++) {
                qtdeTotal += $scope.state.listaProdutosPreVenda[i].Quantidade;
            }
            if (qtdeTotal <= 0) {
                $scope.$parent.toastr.error("Nenhum item foi selecionado. Se não haverá a venda dos produtos, faça o Encerramento da Consignação.", 'Atenção');
                return;
            }

            var quantidadeOriginal = $scope.state.data.Itens.map(x => x.Quantidade).reduce(function (prev, curr) { return prev + curr; }, 0);
            var quantidadeEnviada = $scope.state.listaProdutosPreVenda.map(x => x.Quantidade).reduce(function (prev, curr) { return prev + curr; }, 0);

            /* Caso não seja feita uma pré-venda parcial ou não tenha uma nota de consignação aprovada, gera somente a pré-venda. */
            if (quantidadeOriginal == quantidadeEnviada || $scope.state.data.StatusNFE != 5) {
                consignacaoService
                    .converterConsignacao($scope.state.data, $scope.state.listaProdutosPreVenda)
                    .then(
                        function (response) {
                            if (response.Status < 0)
                                $scope.$parent.toastr.error(response.Message, 'Serviço');
                            else {
                                var pedido = response.Data;
                                pedido = pedido.replace("-", "");
                                $scope.refresh();

                                $scope.confirmtoastr = $scope.$parent.toastr.success("A consignacao foi convertida em pré-venda de número #" + pedido);
                                //$scope.confirmtoastr = $scope.$parent.toastr.success("A consignacao foi convertida em pré-venda de número #" + pedido + "<br /><br /><button type='button' class='btn btn-primary'>OK</button>", 'Sucesso', { allowHtml: true });
                                $scope.state.mostraConverter = false;
                            }
                        },
                        function (err) { $scope.$parent.toastr.error(err); }
                    );
            }
            else {
                $scope.state.converterPreVendaGerarRetorno = true;
                $scope.openGerarNotaFiscalRetorno();
            }
        }

        $scope.verifica = function (linha, coluna) {
            var n = $scope.state.listaProdutosPreVenda[linha].Tamanhos[coluna];
            if (n && n.Quantidade == null) n.Quantidade = 0;
            var o = $scope.state.data.Itens[linha].Tamanhos[coluna];

            if (n && o && n.Quantidade != 0 && n.Quantidade > o.Quantidade) {
                $scope.$parent.toastr.warning("Quantidade inválida. Somente é permitido zerar um item. Não é possível alterar a quantidade original.");
                $scope.state.listaProdutosPreVenda[linha].Tamanhos[coluna].Quantidade = o.Quantidade;
            }
        }

        $scope.validaData = function (event) {
            var elem = $(event.target)[0];
            if (!elem || elem.value == "") return;
            var re = /^(((0[1-9]|[12][0-9]|3[01])([-.\/])(0[13578]|10|12)([-.\/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-.\/])(0[469]|11)([-.\/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-.\/])(02)([-.\/])(\d{4}))|((29)(\.|-|\/)(02)([-.\/])([02468][048]00))|((29)([-.\/])(02)([-.\/])([13579][26]00))|((29)([-.\/])(02)([-.\/])([0-9][0-9][0][48]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][2468][048]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][13579][26])))$/;
            if (!re.test(elem.value)) {
                $scope.$parent.toastr.warning("Data informada é inválida.");
                elem.value = "";
                if ($(elem).attr('ng-model') == "state.data.Emissao") $scope.state.data.Emissao = '';
                if ($(elem).attr('ng-model') == "state.data.Retorno") $scope.state.data.Retorno = '';
            }
        }

        $scope.openGerarNotaFiscalSaida = function () {
            ;
            $scope.getNaturezasOperacao();
            $scope.getSeriesNF();
            $scope.state.mostraGerarNFSaida = true;
        }

        $scope.closeGerarNotaFiscalSaida = function () {
            $scope.state.mostraGerarNFSaida = false;
        }

        $scope.getNaturezasOperacao = function () {
            consignacaoService.getNaturezasOperacao()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error("Erro ao buscar Naturezas de Operação: " + response.Message, 'Atenção'); }
                        else {
                            $scope.state.naturezas = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.getSeriesNF = function () {
            consignacaoService.getSeriesNF()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error("Erro ao buscar Séries de NF: " + response.Message, 'Atenção'); }
                        else {
                            $scope.state.series = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

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

        $scope.gerarNotaFiscal = function () {
            ;
            if (!$scope.state.NaturezaOperacao || !$scope.state.NaturezaOperacao.CFOP) {
                $scope.$parent.toastr.error("Selecione uma Natureza de Operação válida.", 'Atenção');
                return;
            }
            if (!$scope.state.Serie || !$scope.state.Serie.Codigo) {
                $scope.$parent.toastr.error("Selecione uma Série de NF válida.", 'Atenção');
                return;
            }
            if (!$scope.state.Volumes) {
                $scope.$parent.toastr.error("Informe o número de Volumes.", 'Atenção');
                return;
            }

            $scope.gerandoNotaFiscal = true;
            consignacaoService
              .gerarNotaFiscalSaida($scope.state.data, $scope.state.NaturezaOperacao, $scope.state.Serie, $scope.state.Volumes)
              .then(
                  function (response) {
                      $scope.gerandoNotaFiscal = false;
                      if (response.Status < 0)
                          $scope.$parent.toastr.error(response.Message, 'Serviço');
                      else {
                          $scope.state.data.Gerencial = false;
                          $scope.state.mostraGerarNFSaida = false;
                          $scope.state.data.NumeroNotaFiscal = response.Data;
                          $scope.state.data.SerieNotaFiscal = $scope.state.Serie.Codigo;
                          $scope.saveSefaz();

                          $timeout(function () {
                              $scope.enviarSefaz($scope.state.data.NumeroNotaFiscal, $scope.state.data.SerieNotaFiscal);
                              $scope.refresh();
                          }, 300);

                          //$scope.confirmtoastr = $scope.$parent.toastr.success("A Nota Fiscal para Remessa de Consignacao foi gerada com sucesso.<br /><br /><button type='button' class='btn btn-primary'>OK</button>", 'Sucesso',
                          //{
                          //    closeButton: false,
                          //    allowHtml: true,
                          //    timeOut: 0,
                          //    extendedTimeOut: 0,
                          //    tapToDismiss: false,
                          //    onShown: function (toast) {
                          //        $scope.oldparent = $scope.$parent;
                          //        $(angular.element(toast.el[0]).find("button")).click(function () {
                          //            $scope.oldparent.toastr.clear($scope.confirmtoastr);
                          //        });
                          //    }
                          //});
                      }
                  },
                  function (err) {
                      $scope.gerandoNotaFiscal = false;
                      $scope.$parent.toastr.error(err);
                  }
              );

        }

        $scope.enviarSefaz = function (numeroNotaFiscal, serieNotaFiscal) {
            ;
            $scope.state.mostrarEnviarSefaz = true;
            $confirm({ text: "Deseja enviar está nota para o Sefaz agora?", title: "Enviar Sefaz", ok: "Sim", cancel: "Não" })
            .then(function () {
                $scope.state.modalEnviarsefaz = true;
                $scope.state.carregandoEnviarSefaz = true;

                notaFiscalService.EnviaNotaSefaz(numeroNotaFiscal, serieNotaFiscal, $scope.state.data.Filial.Nome)
                .then(
                    function (response) {
                        ;
                        if (response.Status < 0) {
                            $scope.state.modalEnviarsefaz = false;
                            $scope.state.carregandoEnviarSefaz = false;
                            $scope.$parent.toastr.error(response.Message, 'Encerramento NF de saída');
                        } else {
                            $scope.state.modalEnviarsefaz = false;
                            $scope.state.carregandoEnviarSefaz = false;
                            $scope.state.mostrarEnviarSefaz = false;
                            $scope.state.data.StatusNFE = response.Data.NFE.Status;
                            $scope.saveSefaz();

                            $timeout(function () { $scope.refresh(); }, 300);
                            $scope.$parent.toastr.success("NF Gerada com sucesso.");
                        }
                    },
                    function (error) {
                        $scope.state.carregandoEnviarSefaz = false;
                        $scope.state.modalEnviarsefaz = false;
                        $scope.$parent.toastr.error(error, 'Comunicação com o servidor');
                    }
                );
            }
            );
        };

        $scope.openGerarNotaFiscalRetorno = function () {
            $scope.getNaturezasOperacaoRetorno();
            $scope.getSeriesNF();
            $scope.buscarTransportadoras();
            $scope.state.mostraGerarNFRetorno = true;
        }

        $scope.closeGerarNotaFiscalRetorno = function () {
            $scope.state.mostraGerarNFRetorno = false;
            $scope.state.converterPreVendaGerarRetorno = false;
        }

        $scope.getNaturezasOperacaoRetorno = function () {
            consignacaoService.getNaturezasOperacaoRetorno()
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error("Erro ao buscar Naturezas de Operação de Retorno: " + response.Message, 'Atenção'); }
                        else {
                            $scope.state.naturezasretorno = response.Data;
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.gerarNotaFiscalRetorno = function () {
            ;
            if (!$scope.state.NaturezaOperacaoRetorno || !$scope.state.NaturezaOperacaoRetorno.CFOP) {
                $scope.$parent.toastr.error("Selecione uma Natureza de Operação válida.", 'Atenção');
                return;
            }
            if (!$scope.state.SerieRetorno || !$scope.state.SerieRetorno.Codigo) {
                $scope.$parent.toastr.error("Selecione uma Série de NF válida.", 'Atenção');
                return;
            }
            if (!$scope.state.VolumesRetorno) {
                $scope.$parent.toastr.error("Informe o número de Volumes.", 'Atenção');
                return;
            }

            $scope.gerandoNotaFiscalRetorno = true;

            if ($scope.state.converterPreVendaGerarRetorno == true) {
                consignacaoService.converterConsignacaoGerarRetorno($scope.state.data, $scope.state.listaProdutosPreVenda,
                        $scope.state.NaturezaOperacaoRetorno, $scope.state.SerieRetorno, $scope.state.VolumesRetorno,
                        $scope.state.TransportadoraRetorno, $scope.state.PesoRetorno, $scope.state.TipoFreteRetorno)
                    .then(
                        function (response) {
                            $scope.gerandoNotaFiscalRetorno = false;
                            $scope.state.converterPreVendaGerarRetorno = false;

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

                                var pedido = response.Data.Item1;
                                var nfRetorno = response.Data.Item2;
                                $scope.enviarSefaz(nfRetorno, $scope.state.SerieRetorno.Codigo);
                                $scope.refresh();
                                $scope.$parent.toastr.success("A consignacao foi convertida em pré-venda de número #" + pedido );

                                $scope.state.mostraGerarNFRetorno = false;
                                $scope.state.converterPreVendaGerarRetorno = false;
                            }
                        },
                        function (err) {
                            $scope.gerandoNotaFiscalRetorno = false;
                            $scope.state.converterPreVendaGerarRetorno = false;

                            $scope.$parent.toastr.error(err);
                        }
                    );
            }
            else {
                consignacaoService.gerarNotaFiscalRetorno($scope.state.data, $scope.state.NaturezaOperacaoRetorno, $scope.state.SerieRetorno, 
                        $scope.state.VolumesRetorno, $scope.state.TransportadoraRetorno, $scope.state.PesoRetorno, $scope.state.TipoFreteRetorno)
                  .then(
                      function (response) {
                          $scope.gerandoNotaFiscalRetorno = false;
                          if (response.Status < 0)
                              $scope.$parent.toastr.error(response.Message, 'Serviço');
                          else { 
                              var nfRetorno = response.Data;
                              $scope.enviarSefaz(nfRetorno, $scope.state.SerieRetorno.Codigo);
                              $scope.refresh();
                              $scope.confirmtoastr = $scope.$parent.toastr.success("A Nota Fiscal de Retorno de Consignacao foi gerada com sucesso.");
                              $scope.state.mostraGerarNFRetorno = false;
                          }
                      },
                      function (err) {
                          $scope.gerandoNotaFiscalRetorno = false;
                          $scope.$parent.toastr.error(err);
                      }
                  );
            }
        }

        $scope.imprimirComprovanteRemessa = function () {
            consignacaoService.imprimirComprovanteRemessa($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error("Erro ao imprimir comprovante de Remessa: " + response.Message, 'Atenção'); }
                        else {
                            $scope.$parent.toastr.success("A Impressão foi enviada para a fila de impressão.", 'Sucesso');
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }

        $scope.imprimirComprovanteRetorno = function () {
            consignacaoService.imprimirComprovanteRetorno($scope.state.data)
                .then(
                    function (response) {
                        if (response.Status < 0) { $scope.$parent.toastr.error("Erro ao imprimir comprovante de Retorno: " + response.Message, 'Atenção'); }
                        else {
                            $scope.$parent.toastr.success("A Impressão foi enviada para a fila de impressão.", 'Sucesso');
                        }
                    },
                    function (err) { $scope.$parent.toastr.error(err); }
                );
        }


        $scope.toggledanfe = function () {
            $scope.auxiliar.modaldanfe = !$scope.auxiliar.modaldanfe;
        };

        $scope.PdfFileText = function () {
            ;
            return $scope.state.data.PDFFile;
            currentBlob = new Blob(text, { type: 'application/pdf' });
            return URL.createObjectURL(currentBlob);
        }

        $scope.toggledanferetorno = function () {
            $scope.auxiliar.modaldanferetorno = !$scope.auxiliar.modaldanferetorno;
        };

        $scope.PdfFileTextRetorno = function () {
            ;
            return $scope.state.data.PDFFileRetorno;
            currentBlob = new Blob(text, { type: 'application/pdf' });
            return URL.createObjectURL(currentBlob);
        }

        

        var initialize = function () {
            $scope.getTabelasPreco();
            $scope.getTiposConsignacao();
            $scope.state.codigo = $stateParams.codigo;
            $scope.refresh();
        }

        initialize();

        $scope.$watch('state.data', function (valor, oldvalue) {
            if (!$scope.state.carregando) {
                $scope.state.changed = true;
            }
        }, true)

    }

})();