app.controller("cadastroController", function ($scope, $modal, $upload, $rootScope, dataService, cadastroFactory, notificationFactory, actividadeFactory, httpRequestFactory, $location, ngProgress, $http) {

    $scope.mostrar = true;
    $scope.tabshow = [];
    $scope.tabshow[0] = true;
    $scope.tabshow[1] = false;
    $scope.tabshow[2] = false;
    $scope.tabshow[3] = false;
    $scope.tabshow[4] = false;
    $scope.tabshow[5] = false;
    $scope.tabshow[6] = false;

    $scope.houveAlteracoes = false;
    $scope.itemsLoaded = false;
    $scope.username = window.sessionStorage.getItem('username.cibe.inovar');
    $scope.tipout = window.sessionStorage.getItem('tipout.cibe.inovar');
    $scope.fillPlanoMan = "";

    $scope.dadosModificados = function (modificado) {
        
        if ($scope.houveAlteracoes != modificado)
        {
            //console.log(1);
            $scope.houveAlteracoes = modificado;
            $rootScope.$broadcast('houveAlteracoes', modificado);
        }
        //if (modificado == false)
        //    $scope.houveAlteracoes = false;
        
    };

    $scope.templates =
        [{ name: 'planoManutencao.html', url: 'views/planoManutencao.html' },
         { name: 'ocorrencias.html', url: 'views/ocorrencias.html' }];
    

    $scope.changeTab = function (indice) {
        if (indice < 0 || indice > $scope.tabshow.length - 1)
            return;

        if (indice == 4 && $scope.tabshow[4]==false) //outros
        {
            
            if ($scope.selectedCadastro != null)
                $scope.carregarImagem($scope.selectedCadastro.FK_Imagem);
        }

        if (indice == 5 && $scope.selectedCadastro != null)
            $scope.templatePlanoManutencao = $scope.templates[0];
        if (indice == 6 && $scope.selectedCadastro != null)
            $scope.templateOcorrencias = $scope.templates[1];

        for (i = 0; i < $scope.tabshow.length; i++) {
            if (i != indice)
                $scope.tabshow[i] = false;
        }
        $scope.tabshow[indice] = true;
    };

    $scope.toogleDiv = function (e) {
        e.stopPropagation();
        $scope.showdiv = !$scope.showdiv;
    }

    $scope.opendate = function ($event) {
        $event.preventDefault();
        $event.stopPropagation();
        $scope.data_opened = true;
    };

    $scope.opendate_dataInicial = function ($event) {
        $event.preventDefault();
        $event.stopPropagation();
        $scope.dataInicial_opened = true;
        
    };

    $scope.opendate_dataTermo = function ($event) {
        $event.preventDefault();
        $event.stopPropagation();
        $scope.dataTermo_opened = true;
    };

    $scope.opendate_dataAbate = function ($event) {


        $event.preventDefault();
        $event.stopPropagation();

        $scope.dataAbate_opened = true;
    };

    $scope.opendate_dataAlteracao = function ($event) {


        $event.preventDefault();
        $event.stopPropagation();

        $scope.dataAlteracao_opened = true;
    };

    $scope.data_formats = ['yyyy-MM-dd', 'yyyy/MM/dd', 'shortDate','dd-MM-yyyy'];
    $scope.data_format = $scope.data_formats[0];

    $scope.repetirCadastro = function (elem) {
        if (elem == null)
        {
            notificationFactory.success("Seleccione um Inventário");
            return;
        }
            
        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            $scope.carregarCadastro();

            var n = $scope.items.length;
            if (n > 0)
                $scope.selCadastro($scope.items[n - 1]); //selecciona ultimo guardado
        };


        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };
        
        if (!dataService.dataIsValid(elem.Aquisicao.DataInicio))
            elem.Aquisicao.DataInicio = "1900-01-01";
        if (!dataService.dataIsValid(elem.Aquisicao.DataTermo))
            elem.Aquisicao.DataTermo = "1900-01-01";
        if (!dataService.dataIsValid(elem.Abate.Data))
            elem.Abate.Data = "1900-01-01";
        if (elem.Aquisicao.Valor == "" || isNaN(elem.Aquisicao.Valor))
            elem.Aquisicao.Valor = 0;
        if (!dataService.dataIsValid(elem.Data))
            elem.Data = "1900-01-01";
        if (elem.Aquisicao.ValorRenda == "" || isNaN(elem.Aquisicao.ValorRenda))
            elem.Aquisicao.ValorRenda = 0;
        if (elem.Aquisicao.ValorContrato == "" || isNaN(elem.Aquisicao.ValorContrato))
            elem.Aquisicao.ValorContrato = 0;
        if (elem.Aquisicao.ValorResidual == "" || isNaN(elem.Aquisicao.ValorResidual))
            elem.Aquisicao.ValorResidual = 0;
        if (elem.Aquisicao.NumeroRendas == "" || isNaN(elem.Aquisicao.NumeroRendas))
            elem.Aquisicao.NumeroRendas = 0;
        if (elem.Abate.Receita == "" || isNaN(elem.Abate.Receita))
            elem.Abate.Receita = 0;
        if (elem.Comprimento == "" || isNaN(elem.Comprimento))
            elem.Comprimento = 0;
        if (elem.Largura == "" || isNaN(elem.Largura))
            elem.Largura = 0;
        if (elem.Altura == "" || isNaN(elem.Altura))
            elem.Altura = 0;

        cadastroFactory.duplicaCadastro(elem).success(successCallback).error(errorCallback);
    };

    $scope.selCadastro = function (row,carregar) {
       
        if (row == null)
            return;

        //verificar se houve alteracao de dados
        if ($scope.houveAlteracoes == true) {
            //avisa que houve alteracoes
            var c = confirm("Houve Alterações que não foram Guardadas.\nDeseja Continuar?");
            if (c == false)
                return;

        }

        
        
        $scope.dadosModificados(false);
        $scope.selectedCadastro = row;
        $scope.carregarCadastro(row);
            
    };

    $scope.confirmarApagarCadastro = function (row) {

        if (row == null)
            return;
        
        row.infoExtra = "Atenção: ao eliminar os bens da aplicação Inovar Inventário deve garantir que os registos presentes na contabilidade coincidem com os bens inseridos no inventário. Se os bens eliminados afetam meses de depreciações já gravados na aplicação da contabilidade, é necessário voltar a gravar os registos contabilísticos na contabilidade em Movimentos » Op. N/Orçamentais."

        var modalInstance = $modal.open(
        {

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

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

        modalInstance.result.then(function (item) {

            $scope.apagarCadastro(item);

        }, function () {

        });

    };

    $scope.carregarCadastro = function (row) {
        $scope.itemsLoaded = false;
        $scope.totalLoaded = 0;
        $scope.templateOcorrencias = "";
        $scope.templatePlanoManutencao = "";

        var getSuccessCallback = function (data, status) {
            
            
            if (row == null)
            {
                $scope.items = data;
                $scope.totalLoaded = data.length;
                if ($scope.items.length > 0)
                    $scope.selCadastro($scope.items[0]);
            }
            else
            {
                if ($scope.selectedCadastro == null)
                    return;
                $scope.totalLoaded = 1;
                angular.copy(data, $scope.selectedCadastro);
                


                if ($scope.tabshow[4] == true) {
                    
                    $scope.carregarImagem(row.FK_Imagem);
                }
                if ($scope.tabshow[5] == true)
                    $scope.templatePlanoManutencao = $scope.templates[0];
                if ($scope.tabshow[6] == true)
                    $scope.templateOcorrencias = $scope.templates[1];
                

                
                if ($scope.selectedCadastro.Aquisicao != null)
                {
                    var d = new Date(Date.parse($scope.selectedCadastro.Aquisicao.DataInicio));
                    
                    if (d.getFullYear == 1900 || d.getYear() == 0)
                        $scope.selectedCadastro.Aquisicao.DataInicio = "";

                    d = new Date(Date.parse($scope.selectedCadastro.Aquisicao.DataTermo));

                    if (d.getFullYear == 1900 || d.getYear() == 0)
                        $scope.selectedCadastro.Aquisicao.DataTermo = "";

                }
                if ($scope.selectedCadastro.Abate!=null)
                {
                    var d = new Date(Date.parse($scope.selectedCadastro.Abate.Data));

                    if (d.getFullYear == 1900 || d.getYear() == 0)
                        $scope.selectedCadastro.Abate.Data = "";
                }
                if ($scope.selectedCadastro != null) {
                    var d = new Date(Date.parse($scope.selectedCadastro.Data));

                    if (d.getFullYear == 1900 || d.getYear() == 0)
                        $scope.selectedCadastro.Data = "";
                }
                    
                if ($scope.removerIdsBens != null && $scope.removerIdsBens.length > 0) {
                    $scope.items = $scope.getListaBensIgnorarIds($scope.removerIdsBens);
                }
            }

            if ($scope.selectedCadastro == null)
                return;

            //valida ao gravar, pois esta já não é fixa
            /*if ($scope.selectedCadastro.Cfuncional == "" || $scope.selectedCadastro.Cfuncional == null) {
                $scope.selectedCadastro.Cfuncional = "2.1.3";
            }*/
            
            $scope.dadosModificados(false);
            $scope.itemsLoaded = true;

            $scope.selectedAbate = null;
            $scope.selectedCodAquisicao=null;
            $scope.selectedAtividade = null;
            $scope.selectedTipoDespesa = null;
            $scope.selectedMotivoAbate = null;
            
            if ($scope.selectedCadastro.Aquisicao != null)
            {


                if ($scope.codAquisicao != null) {
                    for (i = 0; i < $scope.codAquisicao.length; i++) {
                        var obj = $scope.codAquisicao[i];
                    
                        if (obj.Pk_CodAquisicao == $scope.selectedCadastro.Aquisicao.Fk_CodAquisicao) {
                        
                            $scope.selCodAquisicao(obj);
                            break;
                        }
                    }
                }

                if ($scope.itemsDesp != null) {
                    for (i = 0; i < $scope.itemsDesp.length; i++) {
                        var obj = $scope.itemsDesp[i];
                        if (obj.Pk_TipoDespesaAquisicao == $scope.selectedCadastro.Aquisicao.Fk_TipoDespesaAquisicao) {
                            $scope.selTipoDespesa(obj);
                            break;
                        }
                    }
                }
            }

            if ($scope.itemsAtividades != null)
            {
                for (i = 0; i < $scope.itemsAtividades.length; i++) {
                    var obj = $scope.itemsAtividades[i];
                    if (obj.Pk_Actividades == $scope.selectedCadastro.Fk_Actividade) {
                        $scope.selAtividade(obj);
                        break;
                    }
                }
            }
            
            if ($scope.selectedCadastro.Abate != null) {
                for (i = 0; i < $scope.abateitems.length; i++) {
                    var obj = $scope.abateitems[i];
                    if (obj.Pk_CodAbate == $scope.selectedCadastro.Abate.Fk_CodAbate) {
                        $scope.selAbate(obj);
                        break;
                    }
                }
                for (i = 0; i < $scope.motivoAbateitems.length; i++) {
                    var obj = $scope.motivoAbateitems[i];
                    if (obj.Pk_MotivoAbate == $scope.selectedCadastro.Abate.Fk_MotivoAbate) {
                        $scope.selMotivoAbate(obj);
                        break;
                    }
                }
            }

            $rootScope.root_podeMexerDadosDoBem = $scope.selectedCadastro.PodeMexer;
            
        };

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

        if (row==null)
            cadastroFactory.getCadastros().success(getSuccessCallback).error(errorCallback);
        else
        {
            setTimeout(function () {
                cadastroFactory.getCadastrosId(row).success(getSuccessCallback).error(errorCallback);
            }, 100);
        }
    };

    $scope.itemsAtividades = [];

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

            $scope.itemsAtividades = data;

        };


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

        actividadeFactory.getActividades().success(getSuccessCallback).error(errorCallback);
    };

    $scope.abateitems = [];
    $scope.carregarAbates = function () {
        var getSuccessCallback = function (data, status) {
                        
            $scope.abateitems = data;
            $scope.abateitems.push({Pk_CodAbate:0, Codigo:'', Designacao:'Nenhum'});
        };

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

        cadastroFactory.getAbates().success(getSuccessCallback).error(errorCallback);
    };

    $scope.selMotivoAbate = function (selectedMotivoAbate) {
        $scope.selectedMotivoAbate = selectedMotivoAbate;
        if ($scope.selectedMotivoAbate == null) {
            $scope.selectedCadastro.Abate.Fk_MotivoAbate = 0;
            return;
        }

        $scope.selectedCadastro.Abate.Fk_MotivoAbate = $scope.selectedMotivoAbate.Pk_MotivoAbate;
    };

    $scope.motivoAbateitems = [];
    $scope.carregarMotivoAbates = function () {
        var getSuccessCallback = function (data, status) {

            $scope.motivoAbateitems = data;
        };

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

        cadastroFactory.getMotivoAbates().success(getSuccessCallback).error(errorCallback);
    };

    $scope.carregarMaisCadastroPos = function (procura,recomecar) {
        $scope.itemsLoaded = false;
        $scope.totalLoaded = 0;
        var getSuccessCallback = function (data, status) {
            
            $scope.totalLoaded = data.length;
            if (recomecar == true)
            {
                $scope.items = data;
                if ($scope.items.length > 0)
                    $scope.selCadastro($scope.items[0]);
            }
            else
            {
                for (i = 0; i < data.length; i++)
                    $scope.items.push(data[i]);
            }
            
            if (pos == 0) {
                $("#tabCadastro").scrollTop(0);
            }
            else {
                $("#tabCadastro").scrollTop($("#tabCadastro")[0].scrollHeight);
            }

           
            $scope.dadosModificados(false);
            $scope.itemsLoaded = true;
        };

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

        if (recomecar == null)
            recomecar = false;

        var pos = 0;
        if ($scope.items.length>0 && recomecar==false)
            pos = $scope.items[$scope.items.length - 1].NumInventario;
        
        if ($scope.isNumeric(procura)) {
            $scope.p_opcoes.ninicial = procura;
            procura = "";
        }
        
        cadastroFactory.getCadastros(pos, procura, $scope.p_opcoes).success(getSuccessCallback).error(errorCallback);
       
    };

    $scope.isNumeric=function(n) {
        return !isNaN(parseFloat(n)) && isFinite(n);
    }

    $scope.iniciarProcura = function (nome_inv) {
        
        $scope.selectedCadastro = null;
        $scope.carregarMaisCadastroPos(nome_inv, true);
    }

    var modalInstance = null;
    $scope.openModalNovoCadastro = function (row) {

        if ($scope.houveAlteracoes == true) {
            //avisa que houve alteracoes
            var c = confirm("Houve Alterações que não foram Guardadas.\nDeseja Continuar?");
            if (c == false)
                return;

        }
        $scope.houveAlteracoes = false;
        //console.log(row);
        var idUt = 0;
        if (sessionStorage.getItem('id.cibe.inovar'))
            idUt = Number(sessionStorage.getItem('id.cibe.inovar'));
        //console.log(idUt);

        if (row == null) {
            var row = {
                Pk_Inventario: 0,
                NumInventario: 0,
                Nome: 'Descrição',
                Data: dataService.devDataHoje(),
                Aquisicao: { Valor: 0, Fk_CodAquisicao: 0, Fk_TipoDespesaAquisicao: 0 },
                op: "Novo",
                NumRepetir: 0
            };
        }

        row.perm = $scope.$parent.mnuCadastro;

        var infoGestor = httpRequestFactory.getDataSync('../api/responsavel/utilizador/idResponsavel');
        if (infoGestor != null) {
            row.Fk_Responsavel = infoGestor.Id;
            row.NomeResponsavel = infoGestor.ValorStr;
        }

        modalInstance = $modal.open(
        {

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

        modalInstance.result.then(function (item) {
            var datastr = $("#txtDataNovoBem").val();
            if (!dataService.dataIsValid(datastr)) {
                notificationFactory.error('A data do Bem não é válida');
                $scope.openModalNovoCadastro(item);
                return;
            } else {
                item.Data = datastr;
                item.DataStr = item.Data;
            }
                            

            item.perm = null;
            $scope.inserirCadastro(item);


        }, function () {
            
        });

    };
        
    
    $scope.inserirCadastro = function (it) {
        if (it == null)
            return;

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

        };

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

        if (it.Aquisicao.Valor == "" || isNaN(it.Aquisicao.Valor))
            it.Aquisicao.Valor = 0;
               
        

        cadastroFactory.addCadastro(it).success(successCallback).error(errorCallback);
        $scope.houveAlteracoes = true;
        $scope.dadosModificados(false);
    };

    $scope.apagarCadastro = function (elem, todos) {
        if (elem == null)
            return;
        

        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);
            $scope.dadosModificados(false);
            $scope.carregarCadastro();
        };

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

        cadastroFactory.deleteCadastro(elem).success(successCallback).error(errorCallback);
    };

    $scope.updateCadastro = function (elem) {
        if (elem == null)
            return;
        var successCallback = function (data, status, headers, config) {
            var d = data.split(":MsgCode=");
            var msg = "";
            if (d.length > 0)
                msg = d[0];
            notificationFactory.success(msg);
            $scope.carregarCadastro($scope.selectedCadastro);
            
        };

        var errorCallback = function (data, status, headers, config) {
            var d = data.split(":MsgCode=");
            var msg = "";
            var tipo = "";
            if (d.length > 0) {
                msg = d[0];
                if (d.length > 1)
                    tipo = d[1];
            }
            
            if (tipo == "TIPO_ERRO_AMORTIZACAO")
                $scope.confirmaAlteracoesAmortizacoesDoBem(elem, msg);
            else
                notificationFactory.error(msg);
            
            $scope.repoeDataInvalidas(elem);
            
        };
        
        
        var elemAquisicaoDataInicio = $("#txtDataAquisicaoInicio").val();
        var elemData = $("#txtDataBem").val();
        var elemAquisicaoDataTermo = $("#txtDataAquisicaoTermo").val();
        var elemAbateData = $("#txtDataAbate").val();
        
        if (!dataService.dataIsValid(elemData)) {
            notificationFactory.error('A data do Bem não é válida');
            return;
        }
        elem.Data = elemData;
                
        if (!dataService.dataIsValid(elemAquisicaoDataInicio)) {
            if (elemAquisicaoDataInicio != '') {
                notificationFactory.error('A data de inicio não é válida');
                $scope.repoeDataInvalidas(elem);
                return;
            }
            elem.Aquisicao.DataInicio = '1900-01-01'
        } else {
            elem.Aquisicao.DataInicio = elemAquisicaoDataInicio;
        }
            
        if (!dataService.dataIsValid(elemAquisicaoDataTermo)) {
            if (elemAquisicaoDataTermo != '') {
                notificationFactory.error('A data de termo não é válida');
                $scope.repoeDataInvalidas(elem);
                return;
            }
            elem.Aquisicao.DataTermo = '1900-01-01'
        } else {
            elem.Aquisicao.DataTermo = elemAquisicaoDataTermo;
        }
            
        if (!dataService.dataIsValid(elemAbateData)) {
            if (elemAbateData != '') {
                notificationFactory.error('A data de abate não é válida');
                $scope.repoeDataInvalidas(elem);
                return;
            }
            elem.Abate.Data = '1900-01-01'
        } else {
            elem.Abate.Data = elemAbateData;
        }
            
        if (elem.Aquisicao.Valor == "" || isNaN(elem.Aquisicao.Valor))
            elem.Aquisicao.Valor = 0;
        if (elem.Aquisicao.ValorRenda == "" || isNaN(elem.Aquisicao.ValorRenda))
            elem.Aquisicao.ValorRenda = 0;
        if (elem.Aquisicao.ValorContrato == "" || isNaN(elem.Aquisicao.ValorContrato))
            elem.Aquisicao.ValorContrato = 0;
        if (elem.Aquisicao.ValorResidual == "" || isNaN(elem.Aquisicao.ValorResidual))
            elem.Aquisicao.ValorResidual = 0;
        if (elem.Aquisicao.NumeroRendas == "" || isNaN(elem.Aquisicao.NumeroRendas))
            elem.Aquisicao.NumeroRendas = 0;
        if (elem.Abate.Receita == "" || isNaN(elem.Abate.Receita))
            elem.Abate.Receita = 0;
        if (elem.Comprimento == "" || isNaN(elem.Comprimento))
            elem.Comprimento = 0;
        if (elem.Largura == "" || isNaN(elem.Largura))
            elem.Largura = 0;
        if (elem.Altura == "" || isNaN(elem.Altura))
            elem.Altura = 0;
                
      
        elem.DataStr = elem.Data; 
        elem.Aquisicao.DataInicioStr = elem.Aquisicao.DataInicio;
        elem.Aquisicao.DataTermoStr = elem.Aquisicao.DataTermo;
        elem.Abate.DataStr = elem.Abate.Data;

        cadastroFactory.updateCadastro(elem).success(successCallback).error(errorCallback);
        $scope.dadosModificados(false);
    };

    $scope.repoeDataInvalidas = function (elem) {
        if (elem.Aquisicao.DataInicio == '1900-01-01')
            elem.Aquisicao.DataInicio = '';
        if (elem.Aquisicao.DataTermo == '1900-01-01')
            elem.Aquisicao.DataTermo = '';
        if (elem.Abate.Data == '1900-01-01')
            elem.Abate.Data = '';
    }
        

    $scope.confirmarDuplicarCadastro = function (row) {

        if (row == null)
            return;
        if ($scope.houveAlteracoes == true) {
            //avisa que houve alteracoes
            var c = confirm("Houve Alterações que não foram Guardadas.\nDeseja Continuar?");
            if (c == false)
                return;

        }
        $scope.houveAlteracoes = false;
        row.NumRepetir = 1;
        
        var modalInstance = $modal.open(
        {

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

        modalInstance.result.then(function (item) {

            $scope.repetirCadastro(item);

        }, function () {

        });
    };

  
    $scope.LstAlteracao = [];
    $scope.selLinhaAlteracao = function (row) {
        
        $scope.selectedLinhaAlteracao = row;
    };

    $scope.selLinhaAmort = function (row) {

        $scope.selectedLinhaAmort = row;
    };

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

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

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

        modalInstance.result.then(function (item) {
            var alteracaoData = $("#txtDataAlteracaoBem").val();
            if (alteracaoData == "" || isNaN(Date.parse(alteracaoData))) {
                
            } else {
                item.Data = alteracaoData;
                item.DataStr = item.Data;
            }

            $scope.selectedLinhaAlteracao = item;
            $scope.actualizarInventarioAlteracao(item);
           
        }, function () {

        });

    };

    

    $scope.linhaAlteracaoAddRow = function (Pk_Inventario) {

        var row = {
            Pk_InventarioAlteracao: 0,
            Fk_Inventario: Pk_Inventario,
            Fk_CodAlteracao: 0,
            Data: dataService.devDataHoje(),
            ValorAlteracao: 0,
            VidaUtil: 0,
            TaxaAmortisacao: 0
        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalEditarLinhaAlteracao.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            var alteracaoData = $("#txtDataAlteracaoBem").val();
            if (alteracaoData == "" || isNaN(Date.parse(alteracaoData))) {

            } else {
                item.Data = alteracaoData;
                item.DataStr = item.Data;
            }
            $scope.inserirLinhaAlteracao(item);
        }, function () {

        });

    };
 
    $scope.carregarCodAlteracao = function () {
        
        var getSuccessCallback = function (data, status) {
            $scope.codAlteracao = data;
        };

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

        cadastroFactory.getCodAlteracao().success(getSuccessCallback).error(errorCallback);
    };

    $scope.selAbate = function (selectedAbate) {
        $scope.selectedAbate = selectedAbate;
        if ($scope.selectedAbate == null)
        {
            $scope.selectedCadastro.Abate.Fk_CodAbate = 0;
            return;
        }
            
        $scope.selectedCadastro.Abate.Fk_CodAbate = $scope.selectedAbate.Pk_CodAbate;
    };

    $scope.selAtividade = function (selectedAtividade) {
        $scope.selectedAtividade = selectedAtividade;
        if ($scope.selectedAtividade == null)
        {
            $scope.selectedCadastro.Fk_Actividade = 0;
            return;
        }
            
        $scope.selectedCadastro.Fk_Actividade = $scope.selectedAtividade.Pk_Actividades;
    };

    $scope.selTipoDespesa = function (selectedTipoDespesa) {
        $scope.selectedTipoDespesa = selectedTipoDespesa;
        if ($scope.selectedTipoDespesa == null)
        {
            $scope.selectedCadastro.Aquisicao.Fk_TipoDespesaAquisicao = 0;
            return;
        }
            
        $scope.selectedCadastro.Aquisicao.Fk_TipoDespesaAquisicao = $scope.selectedTipoDespesa.Pk_TipoDespesaAquisicao;
    };

    $scope.selTipoDespesaV2 = function (selectedTipoDespesa,item) {
        $scope.selectedTipoDespesa = selectedTipoDespesa;
        if ($scope.selectedTipoDespesa == null) {
            item.Aquisicao.Fk_TipoDespesaAquisicao = 0;
            return;
        }

        item.Aquisicao.Fk_TipoDespesaAquisicao = $scope.selectedTipoDespesa.Pk_TipoDespesaAquisicao;
    };

    $scope.selTipoDespesaV3 = function (item) {

        if ($scope.itemsDesp == null)
            return;
        for (i = 0; i < $scope.itemsDesp.length; i++) {
            var obj = $scope.itemsDesp[i];
            if (obj.Pk_TipoDespesaAquisicao == item.Aquisicao.Fk_TipoDespesaAquisicao) {
                $scope.selectedTipoDespesa = obj;

                break;
            }
        }

    };

    $scope.selCodAquisicao = function (selectedCodAquisicao) {
        $scope.selectedCodAquisicao = selectedCodAquisicao;
        if ($scope.selectedCodAquisicao == null)
        {
            $scope.selectedCadastro.Aquisicao.Fk_CodAquisicao = 0;
            return;
        }
        $scope.selectedCadastro.Aquisicao.Fk_CodAquisicao = $scope.selectedCodAquisicao.Pk_CodAquisicao;
    };

    $scope.selCodAquisicaoV2 = function (selectedCodAquisicao,item) {
        
        $scope.selectedCodAquisicao = selectedCodAquisicao;
        if ($scope.selectedCodAquisicao == null) {
            item.Aquisicao.Fk_CodAquisicao = 0;
            return;
        }
        item.Aquisicao.Fk_CodAquisicao = $scope.selectedCodAquisicao.Pk_CodAquisicao;
    };

    $scope.selCodAquisicaoV3 = function (item) {
        
        if ($scope.codAquisicao == null)
            return;
        for (i = 0; i < $scope.codAquisicao.length; i++) {
            var obj = $scope.codAquisicao[i];
            if (obj.Pk_CodAquisicao == item.Aquisicao.Fk_CodAquisicao) {
                $scope.selectedCodAquisicao = obj;
                
                break;
            }
        }
        
    };


    $scope.carregarCodAquisicao = function () {

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

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

        cadastroFactory.getCodAquisicao().success(getSuccessCallback).error(errorCallback);
    };

    $scope.carregarCodAquisicaoRunOnloadCallback = function (callback,args) {

        var getSuccessCallback = function (data, status) {
            $scope.codAquisicao = data;
            callback.apply(this,args);
        };

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

        cadastroFactory.getCodAquisicao().success(getSuccessCallback).error(errorCallback);
    };

    $scope.inserirLinhaAlteracao = function (item) {

        if (item== null)
            return;

        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);
            
            $scope.carregarCadastro($scope.selectedCadastro);
            //$scope.carregarInventarioAlteracao(item.Fk_Inventario);
        };


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

        if (isNaN(item.TaxaAmortisacao) || item.TaxaAmortisacao == "")
            item.TaxaAmortisacao = 0;
        if (isNaN(item.VidaUtil) || item.VidaUtil == "")
            item.VidaUtil = 0;
        if (isNaN(item.ValorAlteracao) || item.ValorAlteracao == "")
            item.ValorAlteracao = 0;
            

        cadastroFactory.addInventarioAlteracao(item).success(successCallback).error(errorCallback);
    };

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

        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);
            $scope.carregarCadastro($scope.selectedCadastro);
        };

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

        cadastroFactory.deleteInventarioAlteracao(elem).success(successCallback).error(errorCallback);
    };

    $scope.confirmarApagarAlteracao = function (row) {

        if (row == null)
            return;

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmarApagar.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {

            $scope.apagarInventarioAlteracao(item);

        }, function () {

        });

    };

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

        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);
            $scope.carregarCadastro($scope.selectedCadastro);
        };

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

        
        if (isNaN(elem.TaxaAmortisacao) || elem.TaxaAmortisacao == "")
            elem.TaxaAmortisacao = 0;
        if (isNaN(elem.VidaUtil) || elem.VidaUtil == "")
            elem.VidaUtil = 0;
        if (isNaN(elem.ValorAlteracao) || elem.ValorAlteracao== "")
            elem.ValorAlteracao = 0;
            

        cadastroFactory.updateInventarioAlteracao(elem).success(successCallback).error(errorCallback);
    };


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

            $scope.itemsDesp = data;

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

        cadastroFactory.getTipoDespesa().success(getSuccessCallback).error(errorCallback);
    };

    $scope.carregarTipoDespesaRunOnloadCallback = function (callback,args) {
        var getSuccessCallback = function (data, status) {

            $scope.itemsDesp = data;
            callback.apply(this, args);
        };
        var errorCallback = function (data, status, headers, config) {
            //notificationFactory.error(data);
        };

        cadastroFactory.getTipoDespesa().success(getSuccessCallback).error(errorCallback);
    };

    $scope.actualizarInventarioAbate = function (elem) {
        if (elem == null)
            return;
        var successCallback = function (data, status, headers, config) {
            notificationFactory.success(data);

            $scope.carregarCadastro($scope.selectedCadastro);
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
        };     
        
        var elemAbateData = $("#txtDataAbate").val();
        if (elemAbateData == "" || isNaN(Date.parse(elemAbateData))) {
            elem.Data = '1900-01-01'
        } else {
            elem.Data = elemAbateData;
        }

        if (elem.Receita == "" || isNaN(elem.Receita))
            elem.Receita = 0;

        cadastroFactory.updateInventarioAbate(elem).success(successCallback).error(errorCallback);
    };
    
    //Upload
    $scope.mySelFile = "../app/images/defaultFoto.png";

    $scope.onFileSelect = function ($files,info) {
        //$files: an array of files selected, each file has name, size, and type.
        
        var it = {
            Inv:info.Pk_Inventario,
            Imagem: info.FK_Imagem
        };
        
        for (var i = 0; i < $files.length; i++) {
            var $file = $files[i];
            (function (index) {
                $upload.upload({
                    url: "../api/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) {
                    data = data.toString();
                    if (data.substr(0, 5) != "Erro:") {
                        notificationFactory.success(data);
                        
                    }
                    else
                        notificationFactory.error(data);

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

            })(i);
        }
    };

    $scope.openModalUpload = function (row) {

        if (row == null)
            return;
        row.perm = $scope.$parent.mnuCadastro;
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalUploadFoto.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            
            //$scope.carregarImagem(item.FK_Imagem);
            $scope.carregarCadastro(item);
            item.perm = null;

        }, function () {

        });
    };

    $scope.carregarImagem = function (FK_Imagem) {
        
        var getSuccessCallback = function (data, status) {
            
            $scope.infoImagem = data;
            
            if ($scope.infoImagem.ImgBase64 == "")
                $scope.infoImagem.ImgBase64 = "../app/images/defaultFoto.png";

            $scope.mySelFile = $scope.infoImagem.ImgBase64;
            
        };

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

        cadastroFactory.getImagem(FK_Imagem).success(getSuccessCallback).error(errorCallback);
    };

    $scope.mostrarClassificacoes = function (row) {
        if (row.Bloqueado)
            return;
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalClassificacoes.html',
            controller: 'modalController',
            size: 'lg',
            resolve: {
                items: function () { return row; }
            }
        });

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

        });
    };

    $scope.carregarClassificacoes = function () {
        
        var getSuccessCallback = function (data, status) {
            $scope.classificacoes = data;
        };

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

        cadastroFactory.getClassificacoes().success(getSuccessCallback).error(errorCallback);
    };

    $scope.selClassificacao = function (row) {
        $scope.selectedClassificacao = row;
    };


    //Classsificação economica
    $scope.mostrarClassificacaoEconomica = function (row) {
        if (row.Bloqueado)
            return;
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalCEconomica.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

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

        });
    };

    $scope.carregarClassificacoesEconomicas = function () {
        

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

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

        cadastroFactory.getClassificacoesEconomicas().success(getSuccessCallback).error(errorCallback);
    };

    $scope.selClassificacaoEco = function (row) {
        $scope.selectedClassificacaoEco = row;
    };

    //classificações patrimoniais
    $scope.mostrarClassificacaoPatri = function (row) {
        if (row.Bloqueado)
            return;

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalCPatrimonial.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

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

        });
    };
    
    $scope.carregarClassificacoesPatri = function () {

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

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

        cadastroFactory.getClassificacoesPatri().success(getSuccessCallback).error(errorCallback);
    };

    $scope.selClassificacaoPatri = function (row) {
        $scope.selectedClassificacaoPatri = row;
    };

    //classificações patrimoniais
    $scope.mostrarClassificacaoFuncional = function (row) {
        if (row.Bloqueado)
            return;

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalCFuncional.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

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

        });
    };

    $scope.carregarClassificacoesFuncionais = function (idInv, ano) {
       
        var getSuccessCallback = function (data, status) {
            $scope.classificacoesFunc = data;
            ngProgress.complete();
        };

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

        if (idInv == 0 && ano != null) {
            httpRequestFactory.getData('../api/classificacao/funcional/ano/' + ano).success(getSuccessCallback).error(errorCallback);
        }
        else
            httpRequestFactory.getData('../api/classificacao/funcional/idInv/' + idInv).success(getSuccessCallback).error(errorCallback);

        
    };

    $scope.selClassificacaoFunc = function (row) {
        $scope.selectedClassificacaoFunc = row;
        //console.log(row);
        //$scope.selectedCadastro.Cfuncional = row._CodigoConta;
    };

    $scope.mostrarFornecedores = function (row) {

        row.perm = $scope.$parent.mnuTabelas;
        
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalFornecedores.html',
            controller: 'modalController',
            size: 'lg',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            item.perm = null;
            $scope.dadosModificados(true);
        }, function () {
            
        });
    };

    $scope.mostrarResponsavelLocal = function (row) {

        row.perm = $scope.$parent.mnuTabelas;
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalResponsavelLocal.html',
            controller: 'modalController',
            size: 'lg',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            item.perm = null;
            $scope.dadosModificados(true);
            
        }, function () {

        });

    };

    $scope.mostrarLocalizacoes = function (row) {
        
        row.perm = $scope.$parent.mnuTabelas;
        
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalLocalizacaoN.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

        modalInstance.result.then(function (item) {
            item.perm = null;
            $scope.dadosModificados(true);
        }, function () {

        });
    };

    $scope.existeAbate = function () {
        if ($scope.selectedCadastro == null)
            return false;
        if ($scope.selectedCadastro.Abate == null)
            return false;
        return $scope.selectedCadastro.Abate.Fk_CodAbate != 0;
    };

    $scope.openModalDocumentos = function (row,tipodoc) {

        if (row == null)
            return;

        row.tipodoc = tipodoc;
        row.perm = $scope.$parent.mnuCadastro;
        
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalDocumentos.html',
            controller: 'modalController',
            resolve: {
                items: function () { return row; }
            }
        });

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

    $scope.p_opcoes = {
        abates: false,
        query: "",
        datai: dataService.devDataHoje(),
        dataf: dataService.devDataHoje(),
        pordata: false,
        pornumero: false,
        ninicial: "",
        nfinal: "",
        n:50
    };

    $scope.getFiltroActual = function () {

        

        var op = $scope.p_opcoes;
        if (op==null)
            return "Actualmente está a filtrar tudo";

        var str = "";
        
        var strAbates = "";
        if (op.abates == true)
            strAbates = "- Abates ";
        var strData = "";
        if (op.pordata == true)
            strData = "- Data Aquisição entre (" + op.datai + " " + op.dataf + ") ";
        strNumero = "";
        if (op.ninicial != "" || op.nfinal != "")
            strNumero = "- Número Inventário entre (" + op.ninicial + " " + op.nfinal + ") ";

        strQuery = "";
        if (op.query != "")
            strQuery = " com a respectiva descrição ";

        str = strAbates+strData+strNumero+strQuery;
        if (str == "")
            str = "tudo";
       

        var strfinal = "Actualmente está a filtrar " + str;
        return strfinal;
    };

    $scope.openModalPesquisaAvancada = function () {

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

        modalInstance.result.then(function (item) {
            //$scope.p_opcoes.abates = item.abates;
            //$scope.p_opcoes.query = item.query;
            $scope.p_opcoes = item;
            $scope.nome_inv = item.query;
            $scope.carregarMaisCadastroPos(item.query,true);
        }, function () {
        });
    };

    $scope.activarClassificacao = function (row,cadastro) {
        $scope.selClassificacao(row); 
        cadastro.Classificacao = row.DescricaoFinal; 
        cadastro.Fk_ClassificacaoInventario=row.Pk_ClassificacaoInventario
    };
    
    $scope.openModalEtiquetas = function () {
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalEtiquetas.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            size: 'lg',
            resolve: {
                items: {}
            }
        });

        modalInstance.result.then(function () {

        }, function () {
        });
    };

    $scope.activarClassificacao = function (row, cadastro) {
        $scope.selClassificacao(row);
        cadastro.Classificacao = row.DescricaoFinal;
        cadastro.Fk_ClassificacaoInventario = row.Pk_ClassificacaoInventario
    };

    $scope.printFicha = function () {
        if ($scope.selectedCadastro == null)
            return;

        var id = $scope.selectedCadastro.Pk_Inventario;
        var op = { Pk_inventario: id, NumInventario: $scope.selectedCadastro.NumInventario }
        //window.open("../api/fidmoveis/?n=" + id + "&ano=0&tk=" + sessionStorage.getItem("enctoken.cibe.inovar"));
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalFidMoveis.html?v='+new Date().getTime(),
            controller: 'modalController',
            resolve: {
                items: function () { return op; }
                
            }
        });

        modalInstance.result.then(function () {

        }, function () {
        });
    };

    
    $scope.printFichaInv = function () {

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };


    

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
       
    };

    $scope.printMapaInv = function () {

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };


    $scope.verBensPorLocal = function () {
        $location.path("/local");
    };

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

       
        row.Data = row.Data.substr(0, 10);
        
        row.perm = $scope.$parent.mnuValorizacao;

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

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

    $scope.ExportarInventarioExcel = function () {
        window.open("../api/ExportarInventarioExcel/?tk=" + sessionStorage.getItem("CibeAtk"));
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });

    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

        modalInstance.result.then(function () {

        }, function () {
        });
    };

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

    $scope.abrirCentroCustos = function () {


        var row = {
            perm: $scope.$parent.mnuValorizacao,
            idInventario : $scope.selectedCadastro.Pk_Inventario
        };

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

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

        }, function () {
        });
    };

    $scope.abrirMapas = function () {


        var row = {
            inv: $scope.selectedCadastro
        };

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

        modalInstance.result.then(function (item) {
            

        }, function () {
        });
    };

    $scope.abrirAuxCentroCustos = function () {


        var row = {
            perm: $scope.$parent.mnuValorizacao
        };

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

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

        }, function () {
        });
    };
    
    $scope.mostrarPlanoSNC = function (row) {
        if (row.Bloqueado)
            return;
        
        
        //var datastr = $("#txtDataNovoBem").val();
        var dt = dataService.toDataStr(row.Data);
        if (!dataService.dataIsValid(dt)) {
            notificationFactory.error("A Data não é válida.");
            return;
        }
        row.AnoStr = dt.substr(0, 4);

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalPlanoSNC.html',
            controller: 'modalController',
            size: 'lg',
            resolve: {
                items: function () { return row; }
            }
        });

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

        });
    };
    
    $scope.carregarPlanoSNC = function (idInv,ano) {

        var getSuccessCallback = function (data, status) {
            $scope.lstPlanosSNC = data;
            ngProgress.complete();
            $scope.itemsLoaded = true;
            
        };

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

        $scope.itemsLoaded = false;
        ngProgress.start();
        
        if (idInv == 0 && ano != null) {
            httpRequestFactory.getData('../api/SNC/contabilidade/plano/ano/' + ano).success(getSuccessCallback).error(errorCallback);
        }
        else
            httpRequestFactory.getData('../api/SNC/contabilidade/plano/' + idInv).success(getSuccessCallback).error(errorCallback);
        
    };

    $scope.atualizaListaPlanoSNC = function (lst) {
        $scope.lstPlanosSNC = lst
    };
       

    $scope.selContaSNC = function (row) {
        $scope.selectedContaSNC = row;
    };

    $scope.mostrarSNC = function () {
        
        if ($scope.selectedCadastro == null)
            return false;
        var d = new Date($scope.selectedCadastro.Data);
        var ano = d.getFullYear();
                
        return ano >= 2018;
    };

    $scope.criarEquivSNC = function () {
        var row = {
            mensagem : "Deseja criar equivalência de contas SNC para todos os Bens?"
        };
                
        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

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

        });
    };

    $scope.correAuxilioEquivSNC = function () {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
        };

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

        var dados = {};
        httpRequestFactory.postData('../api/auxilio/equiv/contasSNC', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };
    
    $scope.validarF3CBL = function () {
        var dat = new Date();
        
        var row = {
            ano: dat.getFullYear(),
            excel: 1
        };

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

        modalInstance.result.then(function (item) {
            
            var w = window.open("../api/mapas/diferencaMapaF3Contabilidade/" + item.ano);
            $(w.document.body).html('<p align="center">Por Favor Aguarde. Este Processo pode demorar um pouco...</p>');
        }, function () {
        });
    };

    $scope.escolherIntervaloNumInv = function () {
       
        var row = {
            titulo: 'Escolher intervalo de números',
            numInicial: 0,
            numFinal: 0,
            infoExtra: "Atenção: ao eliminar os bens da aplicação Inovar Inventário deve garantir que os registos presentes na contabilidade coincidem com os bens inseridos no inventário. Se os bens eliminados afetam meses de depreciações já gravados na aplicação da contabilidade, é necessário voltar a gravar os registos contabilísticos na contabilidade em Movimentos » Op. N/Orçamentais."
        };

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

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

    $scope.removeBensIntervalo = function (dados) {

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

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            ngProgress.reset();
        };
                
        httpRequestFactory.postData('../api/cadastro/removerInt', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.openOpcaoAmortizarValorTotal = function (row) {

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalAmortizarValorTotal.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

        modalInstance.result.then(function (item) {
            var amData = $("#txtDataAmortizTotalBem").val();
            if (amData == "" || isNaN(Date.parse(amData))) {
                item.DataAmortizTotal = null;
                item.DataAmortizTotalStr = null;
            } else {
                item.DataAmortizTotal = amData;
                item.DataAmortizTotalStr = item.DataAmortizTotal;
            }
                        
            $scope.updateCadastro(item);

        }, function () {

        });
    };

    $scope.confirmaRecalcularTodasAmortizacoesInovar = function () {
        var row = {
            mensagem: "Deseja recalcular e gravar amortizaçoes para todos os Bens?"
        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

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

        });
    };

    $scope.recalcularTodasAmortizacoesInovar = function () {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
        };

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

        var dados = {};
        httpRequestFactory.postData('../api/cadastro/recalcular/gravarAmortizacoes/inovar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.openModalRecalcularAmortizacoes = function (row) {

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalCalcularAmortizacoes.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

        modalInstance.result.then(function (item) {
            

        }, function () {

        });
    };

    $scope.confirmaRecalcularAmortizacoesDoBem = function (info) {
        
        var row = {
            mensagem: "Esta ação vai recalcular e gravar as amortizações desde a data de aquisição para o 'Bem' nº"+info.NumInventario+". Deseja continuar?",
            
        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

        modalInstance.result.then(function (item) {
            $scope.recalcularAmortizacoesDoBem(info.Pk_Inventario);
        }, function () {

        });
    };

    $scope.recalcularAmortizacoesDoBem = function (IdInv) {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
            $scope.carregarCadastro($scope.selectedCadastro);
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            ngProgress.reset();
        };
        var vida = -1;
        if ($scope.selectedCadastro !=null && $scope.selectedCadastro.LstAmortizacao.length > 0)
            vida = $scope.selectedCadastro.LstAmortizacao[0].VidaUtil;
        var dados = {
            Id: IdInv,
            Valor: vida
        }
        httpRequestFactory.postData('../api/cadastro/recalcular/gravarAmortizacoes/individual', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.linhaAmortizacaoEditRow = function (info) {
        if (info == null)
            return;
        if ($scope.selCadastro == null)
            return;
        if ($scope.selectedCadastro.LstAmortizacao.length == 0)
            return;
        var mostrarVidaUtil = false;
        if (info.Pk_Amortizacao == $scope.selectedCadastro.LstAmortizacao[0].Pk_Amortizacao)
            mostrarVidaUtil = true;
        

        var row = {
            Amort: info.ValorAmortizacao,
            Liq: Number(info.ValorLiquido),
            VidaUtil: info.VidaUtil,
            mostrarVida: mostrarVidaUtil
        }

        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalEditarLinhaAmortizacao.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

        modalInstance.result.then(function (item) {
            info.ValorAmortizacao = item.Amort;
            info.ValorLiquido = item.Liq;
            info.Gravar = true;
            info.AlteracaoManual = true;
            info.VidaUtil = item.VidaUtil;
            //$scope.selLinhaAmort(info);
            //console.log(item);

        }, function () {

        });
    };

    $scope.formata2casas = function (valor) {
        var n = Number(valor);
        return n.toFixed(2);
    };

    $scope.getCorLinhaAmortAlterada = function (am) {
        if (am.AlteracaoManual == true) {
            return { 'color': 'orange' };
        }
        return '';
    };
        
    $scope.confirmaAlteracoesAmortizacoesDoBem = function (info,msg) {

        var row = {
            mensagem: msg+"Esta ação vai recalcular e gravar as amortizações desde a data de aquisição para o 'Bem' nº" + info.NumInventario + ". Deseja continuar?",

        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

        modalInstance.result.then(function (item) {
            info.RecalcAmort = true;
            $scope.updateCadastro(info);
        }, function () {

        });
    };

    $scope.verificaAmortizacoesGravadas = function () {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
            
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            ngProgress.reset();
        };
                
        httpRequestFactory.getData('../api/cadastro/verifica/amortizacoesGravadas').success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.confirmaRecalcularVidaUtil = function () {
        var row = {
            mensagem: "Deseja recalcular e gravar a vida util para todos os Bens?"
        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

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

        });
    };

    $scope.recalcularVidaUtilBens = function () {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
        };

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

        var dados = {};
        httpRequestFactory.postData('../api/cadastro/recalcular/gravarVidaUtil/inovar', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.openModalAmortizacoesInovarPorExcel = function () {
        var row = {
            mensagem: "Deseja recalcular e gravar amortizaçoes para todos os Bens?"
        };

        var modalInstance = $modal.open(
        {

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

                items: { }
            }
        });

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

        });
    };

    $scope.openModalAbaterBensPorExcel = function () {
        var row = {
            mensagem: ""
        };

        var modalInstance = $modal.open(
        {

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

                items: {}
            }
        });

        modalInstance.result.then(function () {

        }, function () {

        });
    };

    $scope.selecionarBensListagem = function (estado) {
        for (i = 0; i < $scope.items.length; i++) {
            $scope.items[i].selecionado = estado;
        }
    };

    $scope.exportaSIC_EstruturaDados = function (ano, mes) {
        $scope.emExecucao = true;

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

            var file = new Blob([data], { type: 'application/zip' });
            var fileURL = URL.createObjectURL(file);
            //var w = window.open(fileURL);
            //$(w.document.body).html('<p align="center">Por Favor Aguarde. Este Processo pode demorar um pouco...</p>');

            
            var a = document.createElement('a');
            a.href = fileURL;
            a.download = "SIC_EstruturaDados.zip";
            a.click();
            window.URL.revokeObjectURL(fileURL);
        };

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

        var dados = {Ano: ano, 
            Mes: mes};
        httpRequestFactory.getDownload('../api/auxilio/exporta/SICEstrDados',dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.escolheAnoMesExportarSIC = function () {

        
        var listaMeses = [];

        listaMeses.push({ Mes: 1, Descricao: 'Janeiro' });
        listaMeses.push({ Mes: 2, Descricao: 'Fevereiro' });
        listaMeses.push({ Mes: 3, Descricao: 'Março' });
        listaMeses.push({ Mes: 4, Descricao: 'Abril' });
        listaMeses.push({ Mes: 5, Descricao: 'Maio' });
        listaMeses.push({ Mes: 6, Descricao: 'Junho' });
        listaMeses.push({ Mes: 7, Descricao: 'Julho' });
        listaMeses.push({ Mes: 8, Descricao: 'Agosto' });
        listaMeses.push({ Mes: 9, Descricao: 'Setembro' });
        listaMeses.push({ Mes: 10, Descricao: 'Outubro' });
        listaMeses.push({ Mes: 11, Descricao: 'Novembro' });
        listaMeses.push({ Mes: 12, Descricao: 'Dezembro' });

        var row = { ano: new Date().getFullYear(), mes: 1, excel: 0, lstMeses: listaMeses };

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

        modalInstance.result.then(function (item) {
            $scope.exportaSIC_EstruturaDados(item.ano,item.mes)
        }, function () {
        });
    };
    
    $scope.getListaBensIgnorarIds = function (lstPksInv) {
        if (lstPksInv == null || lstPksInv.length==0)
            return $scope.items;
        var l = [];
        for (var i = 0; i < $scope.items.length; i++) {
            var inv = $scope.items[i];
            if (lstPksInv.includes(inv.Pk_Inventario) == false)
                l.push(inv);
        }
        
        return l;
    };

    $scope.getLstPkInventarioAssociadosPlanoManutencao = function (lstInvPlano) {
        //console.log(lstInvPlano);
        var l = [];
        for (i = 0; i < lstInvPlano.length; i++) {
            var info = lstInvPlano[i];
            l.push(info.Pk_Inventario);
        }
        return l;
    };

    $scope.verificaGestorUtilizador = function () {

        var getSuccessCallback = function (data, status) {
            
        };

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

        httpRequestFactory.getData('../api/responsavel/utilizador/idResponsavel').success(getSuccessCallback).error(errorCallback);
        
    };

    $scope.atualizaAmortizacaoIndividual = function (dados) {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
            $scope.carregarCadastro($scope.selectedCadastro);
        };

        var errorCallback = function (data, status, headers, config) {
            notificationFactory.error(data);
            ngProgress.reset();
        };
        
        httpRequestFactory.postData('../api/cadastro/gravarAmortizacao/individual', dados).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.apagaAmortizacaoIndividual = function (id) {

        var getSuccessCallback = function (data, status) {
            notificationFactory.success(data);
            ngProgress.complete();
            $scope.carregarCadastro($scope.selectedCadastro);
        };

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

        
        httpRequestFactory.deleteData('../api/cadastro/apagaAmortizacao/', id).success(getSuccessCallback).error(errorCallback);
        ngProgress.start();
    };

    $scope.confirmaApagarAmortizacao = function (id) {
        var row = {
            mensagem: "Confirma que deseja apagar este linha de amortização?"
        };

        var modalInstance = $modal.open(
        {

            templateUrl: 'views/modalConfirmar.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

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

        });
    };

    $scope.linhaAmortizacaoEditRowV2 = function (info) {
        
        if ($scope.selectedCadastro == null)
            return;
        
        if (info == null) {
            info = {
                Data: dataService.devDataHoje(),
                Tipo: '',
                DescricaoCodigo: '',
                ValorBruto: 0,
                VidaUtil: 0,
                Taxa: 0,
                ValorAmortizacao: 0,
                ValorLiquido: 0,
                Fk_CodAquisicao: $scope.selectedCadastro.Aquisicao.Fk_CodAquisicao,
                Mensal: true,
                Fk_Iventario: $scope.selectedCadastro.Pk_Inventario
            }
        };
      
        var modalInstance = $modal.open(
        {
            templateUrl: 'views/modalEditarLinhaAmortizacaoV2.html',
            controller: 'modalController',
            backdrop: 'static',
            keyboard: false,
            resolve: {

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

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

        }, function () {

        });
    };

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

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

                items: {}
            }
        });

        modalInstance.result.then(function () {

        }, function () {

        });
    };

    $scope.daVisibilidadeClassPat = function (cadastro) {
        if (cadastro == null)
            return false;
        if (cadastro.Cpatrimonial != null && cadastro.Cpatrimonial.length > 0)
            return true;
        if (cadastro.Data.getFullYear <= 2017)
            return true;
        return false;
    };
       

});