app.controller("ocorrenciasController", function ($scope, $modal, $upload, $rootScope, httpRequestFactory, notificationFactory, ngProgress, dataService) {
   // $scope.selecteditem = null;
    $scope.emExecucao = false;
    $scope.lstOcorrencias = [];
    $scope.lstDetalhesOcorrencia = [];
    $scope.lstEstados = [];
    $scope.selectedEstado = null;
    $scope.selectedOcorrencia = null;
    $scope.selectedDetalhesOcorrencia = null;
    $scope.selectedPlanoMan = null;
    $scope.lstPlanosManutencao = [];
    $scope.lstIntervencoes = [];
    $scope.selectedIntervencao = null;

    $scope.showTabLocal = [];
    $scope.showTabLocal[0] = true;
    $scope.showTabLocal[1] = false;
    $scope.lstAnexoIntervencao = [];
    $scope.selectedAnexoIntervencao = null;

    $scope.activarTabLocal = function (n) {
        $scope.showTabLocal[0] = false;
        $scope.showTabLocal[1] = false;
        $scope.showTabLocal[n] = true;
    };

    /*$scope.setCadastro = function (row) {
        if (row == null)
            return;

        $scope.selecteditem = row;
    };*/

    $scope.selOcorrencia = function (row) {
        if (row == null)
            return;

        $scope.selectedOcorrencia = row;
    };

    $scope.selDetalhesOcorrencia = function (row) {
        if (row == null)
            return;

        $scope.selectedDetalhesOcorrencia = row;
    };

    $scope.selPlanoMan = function (row) {
        if (row == null)
            return;

        $scope.selectedPlanoMan = row;
    };

    $scope.selIntervencao = function (row) {
        
        $scope.selectedIntervencao = row;
    };

    $scope.selAnexoIntervencao = function (row) {

        $scope.selectedAnexoIntervencao = row;
    };

    $scope.selEncaminhamento = function (row) {

        $scope.selectedEncaminhamento = row;
    };

    $scope.selEncaminhamentoDestino = function (row) {

        $scope.selectedEncaminhamentoDestino = row;
    };

    $scope.openModalPesquisaAvancadaOcorrencia = function () {

        //var op = $scope.pesquisaOcorrencia_opcoes;
        var filtro = {
            RegistosPorPagina: 50,
            DataInferiorDesde: null,
            TextoProcura: '',
            NinvInicial: null,
            NinvFinal: null,
            DataInicialStr: null,
            DataFinalStr: null,
            IdEstado: null,
            Gestor: null,
            Local: null
        };
        $scope.pesquisaOcorrencia_opcoes = filtro;

        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalPesquisaAvancOcorrencias.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {
                items: function () { return filtro; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.pesquisaOcorrencia_opcoes = item;
            //console.log(item);
            $scope.carregarOcorrencias('', false);
        }, function () {
        });
    };
        
    $scope.carregarOcorrencias = function (procura,carregarProximos) {
        $scope.selectedOcorrencia = null;
        $scope.itemsLoaded = false;
        $scope.totalLoaded = 0;

        var getSuccessCallback = function (data, status) {
            $scope.totalLoaded = data.length;
            $scope.itemsLoaded = true;

            if ($scope.lstOcorrencias == null)
                $scope.lstOcorrencias = [];

            if (carregarProximos == true) {
                for (i = 0; i < data.length; i++)
                    $scope.lstOcorrencias.push(data[i]);
            }
            else
            {
                $scope.lstOcorrencias = data;
            }

            ngProgress.complete();
            
            if ($scope.lstOcorrencias.length>0)
                $scope.selOcorrencia($scope.lstOcorrencias[0]);
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.itemsLoaded = true;
            
            ngProgress.reset();
        };

        
        var filtro = $scope.pesquisaOcorrencia_opcoes;
        
        if (filtro == null) {
            filtro = {
                RegistosPorPagina: 50,
                DataInferiorDesde: null,
                TextoProcura: procura
            };
            
        }

        if (carregarProximos == true) {
            var ultimaData = null;
            if ($scope.lstOcorrencias.length > 0) {
                ultimaData = $scope.lstOcorrencias[$scope.lstOcorrencias.length - 1].Data;
                filtro.DataInferiorDesde = ultimaData;
            }
            
        }


        httpRequestFactory.postData('../api/ocorrencia/lista',filtro).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarOcorrenciasInv = function (idInventario) {
        
        $scope.selectedOcorrencia = null;
        if (idInventario == null)
            return;

        var getSuccessCallback = function (data, status) {
            $scope.lstOcorrencias = data;
            ngProgress.complete();

            if ($scope.lstOcorrencias.length > 0)
                $scope.selOcorrencia($scope.lstOcorrencias[0]);
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/ocorrencia/inv/'+idInventario).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarDetalhesOcorrencias = function (row) {
        if (row == null)
            return;
        $scope.selectedDetalhesOcorrencia = null;
        var FkOcorrencia = row.PkOcorrencia;
        var getSuccessCallback = function (data, status) {
            $scope.lstDetalhesOcorrencia = data;
            ngProgress.complete();
            
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/ocorrencia/detalhes/'+FkOcorrencia).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregaEstados = function (idEstado,incluirOpcaoTodos) {
        var getSuccessCallback = function (data, status) {
            $scope.lstEstados = data;
            if (incluirOpcaoTodos == true)
                $scope.lstEstados.push({ IdEstado: -1, Descricao:'Todos', Sigla:'' })

            ngProgress.complete();
            
            if (idEstado != null)
                $scope.ativaEstado(idEstado);
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/ocorrencia/estados').success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarIntervencoes = function (idPlano,idInventario) {

        var getSuccessCallback = function (data, status) {
            $scope.lstIntervencoes = data;
            ngProgress.complete();

            if ($scope.lstIntervencoes.length > 0) {
                var info = $scope.lstIntervencoes[0];
                $scope.selIntervencao(info);

                if ($scope.selectedPlanoMan != null && $scope.selectedPlanoMan.PkPlano == idPlano) {
                    //console.log($scope.selectedPlanoMan);
                    $scope.selectedPlanoMan.DataExecutadaStr = info.DataStr;
                    $scope.selectedPlanoMan.DataExecutada = new Date(info.DataStr + 'T00:00:00Z');
                    //d1.setFullYear(2020, 8, 30);
                    //var DataExecutada = new Date();
                    //DataExecutada.setFullYear(2020, 5, 30);
                    //$scope.selectedPlanoMan.DataExecutada = DataExecutada.getDate();
                    $scope.calculaDataAvisoPlanoManutencao($scope.selectedPlanoMan);
                }
            }
            
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        var url = '../api/planoManutencao/intervencoes/' + idPlano;
        if (idInventario!=null && idInventario>0)
            url = '../api/planoManutencao/intervencoes/inv/' + idPlano + '/' + idInventario;

        httpRequestFactory.getData(url).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.verificaCorAbateBloqueio = function (item) {
        if (item == null)
            return {};
        if (item.TemAbate)
            return { "color": "orange" };
        return {};
    };
        

    $scope.toDataFormat = function (dat) {
        return dataService.toDataStr(dat);
    };

    $scope.toHHmmss = function (dat) {
        return dataService.toHHmmss(dat);
    }

    $scope.calculaDataAvisoPlanoManutencao = function (planoManutencao) {
       
        if (planoManutencao.DataExecutada != null) {
            if (planoManutencao.Finalizado == true)
                planoManutencao.DataAviso = planoManutencao.DataExecutada;
            else {

                var d1 = planoManutencao.DataExecutada;
                d1.setDate(d1.getDate() + planoManutencao.Periodicidade);
                planoManutencao.DataAviso = d1;
            }
            planoManutencao.DataAvisoStr = dataService.toDataStr(planoManutencao.DataAviso);
        }
        else {
            var d1 = planoManutencao.DataInicio;
            d1.setDate(d1.getDate() + planoManutencao.Periodicidade);
            planoManutencao.DataAviso = d1;
            planoManutencao.DataAvisoStr = dataService.toDataStr(planoManutencao.DataAviso);
            
        }

    };

    $scope.openModalEditarOcorrencia = function (ocorrencia) {
        if (ocorrencia == null) {
            var dat = new Date();
            ocorrencia = {
                PkOcorrencia: 0,
                Data: dat,
                Hora: $scope.toHHmmss(dat),
                IdInv: 0,
                NumInv: 0,
                Descricao: '',
                Local: '',
                IdEstado: 4,
                Estado: 'A',
                Ticket: false
            };
        }
                        
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarOcorrencia.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return ocorrencia; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarOcorrencia(item);
        }, function () {

        });
    };

    $scope.gravarOcorrencia = function (dados) {
        if (dados == null)
            return;
        $scope.emExecucao = true;
        
        var getSuccessCallback = function (data, status) {
            $scope.carregarOcorrencias();
            
            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };
                
        httpRequestFactory.postData('../api/ocorrencia/gravar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.ativaEstado = function (idEstado) {
        for (var i = 0; i < $scope.lstEstados.length; i++) {
            var info = $scope.lstEstados[i];
            if (info.PkEstado == idEstado) {
                $scope.selectedEstado = info;
                break;
            }
        }
    }

    $scope.openModalEditarDetalheOcorrencia = function (detalhesOcorrencia,fkOcorrencia) {
        if (detalhesOcorrencia == null) {
            var dat = new Date();
            detalhesOcorrencia = {
                PkDetalhe: 0,
                Data: dat,
                DataHora: $scope.toHHmmss(dat),
                Assunto: '',
                FkOcorrencia: fkOcorrencia,
                Emissor: '',
                TextoNota: ''
            };
        }
        
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarDetalheOcorrencia.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return detalhesOcorrencia; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarDetalhesOcorrencia(item);
        }, function () {

        });
    };

    $scope.gravarDetalhesOcorrencia = function (dados) {
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarDetalhesOcorrencias($scope.selectedOcorrencia);

            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        httpRequestFactory.postData('../api/ocorrencia/gravar/detalhe', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarPlanosManutencao = function (IdInv) {
        
        $scope.selectedPlanoMan = null;
        
        var getSuccessCallback = function (data, status) {
            $scope.lstPlanosManutencao = data;
            ngProgress.complete();
            
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/planoManutencao/inv/' + IdInv).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarLstPlanosManutencao = function (procura, carregarProximos) {

        $scope.selectedPlanoMan = null;
        $scope.itemsLoaded = false;
        $scope.totalLoaded = 0;

        var getSuccessCallback = function (data, status) {
            $scope.totalLoaded = data.length;
            $scope.itemsLoaded = true;

            if ($scope.lstPlanosManutencao == null)
                $scope.lstPlanosManutencao = [];

            if (carregarProximos == true) {
                for (i = 0; i < data.length; i++)
                    $scope.lstPlanosManutencao.push(data[i]);
            }
            else {
                $scope.lstPlanosManutencao = data;
            }
            
            ngProgress.complete();

        };

        var errorCallback = function (data, status, headers, config) {
            $scope.itemsLoaded = true;
            ngProgress.reset();
        };


        var filtro = $scope.pesquisaManutencao_opcoes;
        
        if (filtro == null) {
            filtro = {
                RegistosPorPagina: 50,
                DataInferiorDesde: null,
                TextoProcura: procura
            };

        }

        if (carregarProximos == true) {
            var ultimaData = null;
            if ($scope.lstPlanosManutencao.length > 0) {
                ultimaData = $scope.lstPlanosManutencao[$scope.lstPlanosManutencao.length - 1].DataAviso;
                filtro.DataInferiorDesde = ultimaData;
            }

        }

        httpRequestFactory.postData('../api/planoManutencao/lista/',filtro).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.gravarPlanoMan = function (dados) {
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarPlanosManutencao(dados.FkInventario);
            
            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        httpRequestFactory.postData('../api/planoManutencao/gravar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.gravarPlanoManGeral = function (dados) {
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarLstPlanosManutencao();
                      
            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        httpRequestFactory.postData('../api/planoManutencao/gravar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.openModalPlanoManInventario = function (dados, idInv) {
        if (dados == null) {
            var dat = new Date();
            dados = {
                PkPlano: 0,
                DataInicio: dat,
                DataInicioStr: $scope.toDataFormat(dat),
                FkInventario: idInv,
                FkResponsavel: 0,
                Descricao: '',
                Titulo: '',
                Periodicidade: 0,
                Responsavel: ''
            };     
        
        }

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarPlanoMan.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return dados; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarPlanoMan(item);
        }, function () {

        });
    };

    $scope.openModalPlanoManutencao = function (dados) {
        if (dados == null) {
            return;
        }

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarPlanoMan.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return dados; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarPlanoManGeral(item);
        }, function () {

        });
    };

    $scope.openModalPlanoIntervencao = function (dados, idPlano) {
        if (dados == null) {
            var dat = new Date();
            dados = {
                Pk_PlanoIntervencao: 0,
                Data: dat,
                DataStr: $scope.toDataFormat(dat),
                FkPlano: idPlano,
                Descricao: ''
                
            };

        }

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarIntervencaoBens.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return dados; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarPlanoIntervencao(item);
        }, function () {

        });
    };

    $scope.openModalPlanoIntervencaoInventario = function (dados, idPlano,idInventario) {
        if (dados == null) {
            var dat = new Date();
            dados = {
                Pk_PlanoIntervencao: 0,
                Data: dat,
                DataStr: $scope.toDataFormat(dat),
                FkPlano: idPlano,
                Descricao: ''

            };

        }
        dados.lstInvIntervencao = [{FkInventario:idInventario, Associado: true}];

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarIntervencao.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return dados; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarPlanoIntervencao(item, idInventario);
        }, function () {

        });
    };

    $scope.selecionarBensListagemIntervencao = function (estado) {
        for (i = 0; i < $scope.lstInvIntervencao.length; i++) {
            $scope.lstInvIntervencao[i].Associado = estado;
        }
    };

    $scope.gravarPlanoIntervencao = function (dados,idInv) {
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarIntervencoes(dados.FkPlano,idInv);

            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        if (dados.lstInvIntervencao != null) {
            var lstInvIntervencao = [];
            for (i = 0; i < dados.lstInvIntervencao.length; i++) {
                var info = dados.lstInvIntervencao[i];
                if (info.Associado == true)
                    lstInvIntervencao.push(info);
            }
            dados.lstInvIntervencao = lstInvIntervencao;
        }

        httpRequestFactory.postData('../api/planoManutencao/gravar/intervencoes', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    //Upload
    $scope.myDocFile = "";

   
    $scope.onFileSelect = function ($files, planoIntervencao) {
        //$files: an array of files selected, each file has name, size, and type.
        //console.log(planoIntervencao);
        //if (!$scope.validaDadosPlanoIntervencao(planoIntervencao)) {
        //    return;
        //}
        

        var it = {
            PkAnexo: 0,
            Anexo: null,
            FkPlanoIntervencao: planoIntervencao.Pk_PlanoIntervencao,
            NomeFicheiro: '',
            Intervencao: planoIntervencao
        };
                
        for (var i = 0; i < $files.length; i++) {
            var $file = $files[i];
            (function (index) {
                $upload.upload({
                    url: "../api/documentos/intervencoes/anexo/upload", // webapi url
                    method: "POST",

                    data: it,

                    file: $file
                }).progress(function (evt) {
                    // get upload percentage
                    $scope.uploadprogress = parseInt(100.0 * evt.loaded / evt.total);

                }).success(function (data, status, headers, config) {
                    if (data.Success == true) {
                        notificationFactory.success(data.Message);
                        planoIntervencao.Pk_PlanoIntervencao = data.Dados.FkPlanoIntervencao;
                        idPlanoIntervencao = planoIntervencao.Pk_PlanoIntervencao;
                        $scope.carregarAnexosIntervencao(idPlanoIntervencao);
                    }
                    else {
                        notificationFactory.error(data.Message);
                    }
                                        
                }).error(function (data, status, headers, config) {

                    notificationFactory.error(data);
                });

            })(i);
        }
    };
        

    $scope.carregarAnexosIntervencao = function (FkPlanoIntervencao) {

        var getSuccessCallback = function (data, status) {

            $scope.lstAnexoIntervencao = data;

        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };
                
        httpRequestFactory.getData('../api/documentos/intervencoes/plano/' + FkPlanoIntervencao).success(getSuccessCallback).error(errorCallback);
    };

    $scope.removeAnexosIntervencao = function (item) {

        var getSuccessCallback = function (data, status) {
            $scope.carregarAnexosIntervencao(item.FkPlanoIntervencao);
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/documentos/intervencoes/anexo', item.PkAnexo).success(getSuccessCallback).error(errorCallback);
    };

    $scope.downloadAnexoIntervencao = function (PkAnexo) {
        if (PkAnexo == null) {
            notificationFactory.error("Seleccione um Documento");
            return;
        }

        window.open("../api/downloaddoc/intervencoes/" + PkAnexo + "/?tk=" + sessionStorage.getItem("CibeAtk"));
    };

    $scope.confirmarApagarPlanoManutencao = function (row) {

        if (row == null)
            return;

        row.infoExtra = "";

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {

                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarPlanoManutencao(item);

        }, function () {

        });

    };

    $scope.apagarPlanoManutencao = function (elem) {
        if (elem == null)
            return;


        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            //$scope.carregarLstPlanosManutencao();
            for (i = 0; i < $scope.lstPlanosManutencao.length; i++) {
                var P = $scope.lstPlanosManutencao[i];
                if (P.PkPlano == elem.PkPlano) {
                    $scope.lstPlanosManutencao.splice(i, 1);
                    break;
                }
            }

        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/planoManutencao/remove', elem.PkPlano).success(successCallback).error(errorCallback);
    };


    $scope.carregarLstEncaminhamentos = function () {
        //var idResponsavel = 0;
        //if ($scope.selectedEncaminhamento != null)
        //    idResponsavel = $scope.selectedEncaminhamento.FkResponsavel;

        $scope.selectedEncaminhamento = null;
        $scope.lstEncaminhamentos = [];

        var getSuccessCallback = function (data, status) {
            $scope.lstEncaminhamentos = data;
            ngProgress.complete();

            //$scope.selectedEncaminhamento = $scope.getEncaminhamento(idResponsavel);
            
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/Encaminhamentos/lista/').success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.gravarEncaminhamento = function (dados) {
        
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarLstEncaminhamentos();

            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        httpRequestFactory.postData('../api/Encaminhamentos/gravar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };
    
    $scope.openModalEditarEncaminhamentos = function (dados, idResponsavel) {
       
        if (dados == null) {
            var dat = new Date();
            dados = {
                PkEncaminhamento: 0,
                DataInicio: dat,
                DataInicioStr: $scope.toDataFormat(dat),
                DataFim: dat,
                DataFimStr: $scope.toDataFormat(dat),
                FkResponsavel: idResponsavel,
                Descricao: '',
                HoraInicioStr: $scope.toHHmmss(dat),
                HoraFimStr: $scope.toHHmmss(dat),
                FkResponsavelDestino: 0,
                NomeRespDestino: '',
                NomeResponsavel: ''
            };
           
        }

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarEncaminhamento.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {
                items: function () { return dados; }
            }

        });

        modalInstance.result.then(function (item) {
            $scope.gravarEncaminhamento(item);
        }, function () {
            
        });
    };

    $scope.openModalEncaminhamentos = function () {
        
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEncaminhamentos.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: { }
            }

        });

        modalInstance.result.then(function () {
            
        }, function () {
            
        });
    };

    $scope.confirmarApagarEncaminhamento = function (row) {

        if (row == null)
            return;

        row.infoExtra = "";

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {

                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarEncaminhamento(item);

        }, function () {

        });

    };

    $scope.apagarEncaminhamento = function (elem) {
        if (elem == null)
            return;


        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            $scope.carregarLstEncaminhamentos();
            //for (i = 0; i < $scope.lstEncaminhamentos.length; i++) {
            //    var P = $scope.lstEncaminhamentos[i];
            //    if (P.PkEncaminhamento == elem.PkEncaminhamento) {
            //        $scope.lstEncaminhamentos.splice(i, 1);
            //        break;
            //    }
            //}

        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/Encaminhamentos/remove', elem.PkEncaminhamento).success(successCallback).error(errorCallback);
    };

    $scope.carregarResponsaveisUtilizador = function (FkResponsavelDestino) {
        $scope.selectedResponsavelEnc = null;
        $scope.lstResponsaveisEnc = [];
        //console.log(FkResponsavelDestino);
        var getSuccessCallback = function (data, status) {
            $scope.lstResponsaveisEnc = data;
            ngProgress.complete();

            if ($scope.lstResponsaveisEnc.length > 0 && FkResponsavelDestino!=null) {
                $scope.ativaResponsavelDestino(FkResponsavelDestino);
            }
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/Encaminhamentos/lista/responsaveis/').success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarResponsaveisUtilizadorOrigem = function (FkResponsavel) {
        $scope.selectedResponsavelEnc = null;
        $scope.lstResponsaveisOrigem = [];
        //console.log(FkResponsavelDestino);
        var getSuccessCallback = function (data, status) {
            $scope.lstResponsaveisOrigem = data;
            ngProgress.complete();

            if ($scope.lstResponsaveisOrigem.length > 0 && FkResponsavel != null) {
                $scope.ativaResponsavelOrigem(FkResponsavel);
            }
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/Encaminhamentos/lista/responsaveis/').success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.ativaResponsavelDestino = function (FkResponsavelDestino) {
        
        for (var i = 0; i < $scope.lstResponsaveisEnc.length; i++) {
            var info = $scope.lstResponsaveisEnc[i];
            
            if (info.Pk_Responsavel == FkResponsavelDestino) {
                $scope.selectedResponsavelEnc = info;
                
                break;
            }
        }
    };

    $scope.ativaResponsavelOrigem = function (FkResponsavel) {

        for (var i = 0; i < $scope.lstResponsaveisOrigem.length; i++) {
            var info = $scope.lstResponsaveisOrigem[i];

            if (info.Pk_Responsavel == FkResponsavel) {
                $scope.selectedResponsavelOrigem = info;

                break;
            }
        }
    };

    //$scope.getEncaminhamento = function (FkResponsavel) {
    //    if (FkResponsavel == null || FkResponsavel==0)
    //        return null;
    //    var dados = null;

    //    for (var i = 0; i < $scope.lstEncaminhamentos.length; i++) {
    //        var info = $scope.lstEncaminhamentos[i];

    //        if (info.FkResponsavel == FkResponsavel) {
    //            dados = info;
    //            break;
    //        }
    //    }
    //    return dados;
    //};

    $scope.mostrarListagemBens = false;
    $scope.aplicaNumInventarioOcorrencia = function (selecteditem, selectedCadastro) {
        if (selecteditem == null)
            return;
        if (selectedCadastro == null)
            return;
        selecteditem.NumInv = selectedCadastro.NumInventario
    };

    $scope.setMostraListagemBens = function (estado) {
        $scope.mostrarListagemBens = estado
    };

    $scope.openModalManutencaoGeral = function (dados) {
        if (dados == null) {
            var dat = new Date();
            dados = {
                DataInicio: dat,
                DataInicioStr: $scope.toDataFormat(dat),
                LstIdInventario: [],
                Descricao: '',
                Titulo: '',
                Periodicidade: 0,
                nomesInv: '',
                PkPlano: 0
            };

        }
        
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarPlanoManGeral.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: function () { return dados; }
                
            },
            

        });

        modalInstance.result.then(function (item) {
            $scope.gravarPlanoManListaBens(item);
        }, function () {

        });
    };

    $scope.validaDadosPlanoManutencaoGeral = function (dados) {
        if (dados.Titulo == "") {
            notificationFactory.error("Titulo inválido");
            return false;
        }

        if (dados.Descricao == "") {
            notificationFactory.error("Descrição inválida");
            return false;
        }

        if (!dataService.dataIsValid(dados.DataInicioStr)) {
            notificationFactory.error("data de inicio inválida");
            return false;
        }
        

        if (dados.LstIdInventario == null)
            dados.LstIdInventario = [];
        if (dados.LstIdInventario.length == 0) {
            notificationFactory.error("Não foram selecionados 'Bens' para gravar planos de manutenção");
            return false;
        }

        return true;
    };

    $scope.validaDadosPlanoManutencao = function (dados) {
        if (dados.Titulo == "") {
            notificationFactory.error("Titulo inválido");
            return false;
        }

        if (dados.Descricao == "") {
            notificationFactory.error("Descrição inválida");
            return false;
        }

        if (!dataService.dataIsValid(dados.DataInicioStr)) {
            notificationFactory.error("data de inicio inválida");
            return false;
        }

        return true;
    };


    //$scope.aplicaBensPlanoManutencao = function (selecteditem, lstBens) {
    //    if (selecteditem == null)
    //        return;
    //    selecteditem.LstIdInventario = [];
    //    selecteditem.nomesInv = '';
    //    var lstNomes = [];
    //    for (i = 0; i < lstBens.length; i++) {
    //        var inv = lstBens[i];
    //        if (inv.selecionado==true) {
    //            selecteditem.LstIdInventario.push(inv.Pk_Inventario);
    //            lstNomes.push(inv.Nome);
    //        }
    //    }

    //    var uniqueArray = lstNomes.filter(function (item, pos) {
    //        return lstNomes.indexOf(item) == pos;
    //    })

    //    selecteditem.nomesInv = uniqueArray.join("; ");
    //};

    $scope.aplicaBensPlanoManutencao = function (selecteditem, lstBens,acrescentar) {
        if (selecteditem == null)
            return;
        
        /*if (acrescentar == null || acrescentar == false) {
            selecteditem.LstIdInventario = [];
           
            $scope.lstInvPlano = [];
        }*/
        
        for (i = 0; i < lstBens.length; i++) {
            var inv = lstBens[i];
            if (inv.selecionado == true) {
                selecteditem.LstIdInventario.push(inv.Pk_Inventario);
                var d = {
                    NumInventario: inv.NumInventario,
                    Nome: inv.Nome,
                    Pk_Inventario: inv.Pk_Inventario
                };
                //selecteditem.lstInvPlano.push(d);
                $scope.lstInvPlano.push(d);
            }
        }
        //$scope.lstInvPlano = selecteditem.lstInvPlano;
        
    };

    $scope.carregarBensAssociadosPlanoManutencao = function (idplano, selecteditem) {
        
        $scope.lstInvPlano = [];
        
        var getSuccessCallback = function (data, status) {
            $scope.lstInvPlano = data;
            
            /*if (selecteditem != null) {
                selecteditem.LstIdInventario = [];

                for (i = 0; i < $scope.lstInvPlano.length; i++) {
                    var inv = $scope.lstInvPlano[i];
                    selecteditem.LstIdInventario.push(inv.Pk_Inventario);
                }
            }*/
            
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };

        httpRequestFactory.getData('../api/planoManutencao/bensAssociados/'+idplano).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.retiraBemAssociadosPlanoManutencao = function (item,selectedPlano) {
        for (i = 0; i < $scope.lstInvPlano.length; i++) {
            var info = $scope.lstInvPlano[i];
            if (info.Pk_Inventario==item.Pk_Inventario)
                $scope.lstInvPlano.splice(i, 1);
        }
        for (i = 0; i < selectedPlano.LstIdInventario.length; i++) {
            var idinv = selectedPlano.LstIdInventario[i];
            if (idinv == item.Pk_Inventario)
                selectedPlano.LstIdInventario.splice(i, 1);
        }
    };

    


    $scope.validaDadosEncaminhamento = function (dados) {
        
        if (!dataService.dataIsValid(dados.DataInicioStr)) {
            notificationFactory.error("data inicio inválida");
            return false;
        }
        if (!dataService.dataIsValid(dados.DataFimStr)) {
            notificationFactory.error("data final inválida");
            return false;
        }
        if (dados.FkResponsavel == 0 || dados.FkResponsavel==null) {
            notificationFactory.error("O responsável que está a utilizar como emissor de encaminhamento não é válido");
            return false;
        }
        if (dados.FkResponsavel == dados.FkResponsavelDestino) {
            notificationFactory.error("Não é possivel o responsável encaminhar para si próprio");
            return false;
        }
        if (dados.FkResponsavelDestino==0) {
            notificationFactory.error("Indique o responsável de destino");
            return false;
        }
        

        return true;
    };

    $scope.validaDadosPlanoIntervencao = function (dados) {
        if (!dataService.dataIsValid(dados.DataStr)) {
            notificationFactory.error("data inválida");
            return false;
        }

        if (dados.Descricao == "") {
            notificationFactory.error("Descrição da intervenção é inválida");
            return false;
        }

        return true;
    };

    $scope.validaDadosOcorrencias = function (dados) {
       
        if (dados.Descricao == "") {
            notificationFactory.error("Descrição inválida");
            return false;
        }
        /*if (dados.NumInv == 0) {
            notificationFactory.error("Nº de inventário inválido");
            return false;
        }*/
        if (dados.IdEstado == 0) {
            notificationFactory.error("Estado inválido");
            return false;
        }

        return true;
    };

    $scope.validaDadosOcorrenciasDetalhes = function (dados) {

        
        if (dados.Assunto == 0) {
            notificationFactory.error("Assunto inválido");
            return false;
        }

        return true;
    };

    $scope.gravarPlanoManListaBens = function (dados) {
        if (dados == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            $scope.carregarLstPlanosManutencao();

            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        httpRequestFactory.postData('../api/planoManutencao/gravar/lista', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.carregarBensAssociadosIntervencao = function (idplano,intervencao,mostrarTodos) {

        $scope.lstInvIntervencao = [];
        
        var getSuccessCallback = function (data, status) {
            $scope.lstInvIntervencao = data;
            intervencao.lstInvIntervencao = data;
            
            ngProgress.complete();
        };

        var errorCallback = function (data, status, headers, config) {
            ngProgress.reset();
        };
        var op = 1;
        if (mostrarTodos == false)
            op = 0;

        httpRequestFactory.getData('../api/planoManutencao/intervencao/bensAssociados/' + idplano + '/' + intervencao.Pk_PlanoIntervencao+'/'+op).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.setUrlRefresParam = function () {
        $scope.currentUrlRefresParam = '?r=' + Math.random();
    };

    $scope.encerraOcorrencia = function (DetalheOcorrencia) {
        if (DetalheOcorrencia == null)
            return;
        $scope.emExecucao = true;

        var getSuccessCallback = function (data, status) {
            DetalheOcorrencia.EstadoSigla = 'R';
           
            $scope.emExecucao = false;
            notificationFactory.success(data);
            ngProgress.complete();
            setInterval(function () { location.reload() }, 1000);
        };

        var errorCallback = function (data, status, headers, config) {
            $scope.emExecucao = false;
            notificationFactory.error(data);
            ngProgress.reset();
        };

        //var dados = { Id: DetalheOcorrencia.FkOcorrencia }
        httpRequestFactory.postData('../api/ocorrencia/estados/encerrar', DetalheOcorrencia).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.confirmarApagarIntervencaoPlanoManutencao = function (row) {

        if (row == null)
            return;

        row.infoExtra = "";

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {

                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarIntervencaoPlanoManutencao(item);

        }, function () {

        });
    };

    $scope.apagarIntervencaoPlanoManutencao = function (elem) {
        if (elem == null)
            return;


        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            for (i = 0; i < $scope.lstIntervencoes.length; i++) {
                var P = $scope.lstIntervencoes[i];
                if (P.Pk_PlanoIntervencao == elem.Pk_PlanoIntervencao) {
                    $scope.lstIntervencoes.splice(i, 1);
                    break;
                }
            }

        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/planoManutencaoIntervencao/remove', elem.Pk_PlanoIntervencao).success(successCallback).error(errorCallback);
    };

    $scope.confirmarApagarDetalhesOcorrencia = function (row) {

        if (row == null)
            return;

        row.infoExtra = "";

        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {

                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarDetalhesOcorrencia(item);

        }, function () {

        });
    };

    $scope.apagarDetalhesOcorrencia = function (elem) {
        if (elem == null)
            return;


        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            for (i = 0; i < $scope.lstDetalhesOcorrencia.length; i++) {
                var P = $scope.lstDetalhesOcorrencia[i];
                if (P.PkDetalhe == elem.PkDetalhe) {
                    $scope.lstDetalhesOcorrencia.splice(i, 1);
                    break;
                }
            }
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/ocorrencia/detalhes/remove', elem.PkDetalhe).success(successCallback).error(errorCallback);
    };

    $scope.confirmarApagarOcorrencia = function (row) {

        if (row == null)
            return;

        row.infoExtra = "";

        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {

                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.apagarOcorrencia(item);

        }, function () {

        });
    };

    $scope.apagarOcorrencia = function (elem) {
        if (elem == null)
            return;


        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            for (i = 0; i < $scope.lstOcorrencias.length; i++) {
                var P = $scope.lstOcorrencias[i];
                if (P.PkOcorrencia == elem.PkOcorrencia) {
                    $scope.lstOcorrencias.splice(i, 1);
                    break;
                }
            }
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };

        httpRequestFactory.deleteData('../api/ocorrencia/remove', elem.PkOcorrencia).success(successCallback).error(errorCallback);
    };

    $scope.openModalPesquisaAvancadaManutencao = function () {

        var filtro = {
            RegistosPorPagina: 50,
            DataInferiorDesde: null,
            TextoProcura: '',
            NinvInicial: null,
            NinvFinal: null,
            DataInicialStr: null,
            DataFinalStr: null,
            Gestor: null
        };
        $scope.pesquisaManutencao_opcoes = filtro;

        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalPesquisaAvancManutencao.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {
                items: function () { return filtro; }
            }
        });

        modalInstance.result.then(function (item) {
            $scope.pesquisaManutencao_opcoes = item;
            
            $scope.carregarLstPlanosManutencao('', false);

        }, function () {
        });
    };

    $scope.getCorLinhaPlanoEncerrado = function (p) {
        if (p == null)
            return {};

        if (p.Finalizado===true)
            return { "color": "#17a2b8" };
        return {};
    };

    $scope.showTooltip = function (cond) {
        return cond === true ? 'mouseenter' : 'none';
    };

    $scope.openModalNotasOcorrencia = function (texto) {

        var row ={
            titulo: "Texto da nota",
            msg: texto
        }


        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalResultados.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            item.perm = null;
        }, function () {
        });
    };

    $scope.getCorLinhaEncerrado = function (encerrado) {
        if (encerrado == null)
            return {};

        if (encerrado===true)
            return { "color": "#17a2b8" };
        return {};
    };

});