{"version":3,"sources":["scripts/app.js"],"names":[],"mappings":"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","file":"scripts/app-7f5db5f973.js","sourcesContent":["(function () {\n 'use strict';\n\n angular\n .module('app.kpi', [\n 'nvd3',\n 'md.data.table'\n ])\n .config(config)\n .config(dateFormat);\n\n function dateFormat($mdDateLocaleProvider) {\n $mdDateLocaleProvider.formatDate = function (date) {\n return moment(date).format('DD/MM/YYYY');\n };\n }\n\n /** @ngInject */\n function config(msNavigationServiceProvider, $stateProvider) {\n // KPI\n $stateProvider.state('app.kpi', {\n parent: 'app',\n url: '/home/indicadores',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/apps/kpi/kpi.html',\n controller: 'KpiController as vm'\n }\n },\n resolve: {\n DepartmentsList: function ($rootScope) {\n $rootScope.activeContextApp = 'main';\n return {};\n }\n },\n authenticate: true\n });\n\n // RESULT ANALYSIS\n $stateProvider.state('app.kpi.results', {\n parent: 'app.kpi',\n url: '/:departmentId/:indicatorId',\n views: {\n 'indicators@app.kpi': {\n templateUrl: 'app/main/home/apps/kpi/results/indicator-results.html',\n controller: 'IndicatorResultsController as vm'\n }\n },\n params: {\n departmentId: null,\n departmentName: null,\n measureUnit: null,\n indicatorId: null\n },\n authenticate: true\n });\n }\n})();\n(function(){\n 'use strict';\n \n angular\n .module('app.kpi')\n .controller('AttachResultController', AttachResultController);\n \n function AttachResultController($stateParams, $state, $mdToast, Indicator, User, Tasks, AuthService, KpiIndicators, KpiNonCompliances, $scope)\n { \n var vm = this;\n \n vm.code = $stateParams.code;\n vm.selectedPeriod = $stateParams.selectedPeriod;\n vm.indicator = Indicator;\n vm.resultsData = $stateParams.resultsData;\n vm.resultModel = {};\n vm.improvementOption = 'yes';\n vm.improvementOptions = [\n {value: 'yes', title: 'Sim'},\n {value: 'no', title: 'Não'}\n ];\n vm.RACPOption = false;\n vm.RACPOptions = [\n {value: true, title: 'Sim'},\n {value: false, title: 'Não'}\n ];\n vm.actionPlanOption = 0;\n vm.actionPlanOptions = [\n {value: 0, title: 'Corretivo'},\n {value: 1, title: 'Preventivo'}\n ];\n vm.tasksList = [];\n \n vm.save = save;\n \n User.get(function(res){\n vm.users = res.data;\n });\n \n // Salva o indicador e cria o plano de ação se for necessário\n function save()\n {\n saveIndicator();\n if (vm.resultModel.RACPOption === 'true')\n createTaskActionPlan();\n }\n \n // Salva os dados do indicador\n function saveIndicator()\n {\n var d = new Date().getTime();\n if (!vm.indicator.resultAnalysis)\n vm.indicator.resultAnalysis = {};\n \n vm.indicator.resultAnalysis[d] = vm.resultModel;\n KpiIndicators.save(vm.indicator, true)\n .then(function(res){\n $mdToast.show(\n $mdToast.simple()\n .textContent('Análise salva com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n }, function(e){\n console.log(e);\n });\n }\n \n // Cria o plano de ação \"per se\"\n function createTaskActionPlan()\n {\n var newTask = new Tasks();\n \n newTask.name = '#ap Plano de Ação do RACP ' + vm.resultModel.RACPTitle;\n newTask.description = '#ap Plano de Ação do RACP ' + vm.resultModel.RACPTitle;\n newTask.dueDate = vm.resultModel.dueDate;\n newTask.owner = AuthService.authSessions.activitiSession.username;\n newTask.assignee = vm.resultModel.assignee;\n newTask.priority = 100;\n newTask.$save(function(res){\n $mdToast.show(\n $mdToast.simple()\n .textContent('Tarefa de plano de ação criada com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n createTaskMethodAnalysis(res.id);\n });\n }\n \n // Cria a tarefa principal do plano de ação\n function createTaskMethodAnalysis(parentTaskId)\n {\n var newTask = new Tasks();\n\n newTask.name = 'Método de análise do plano de ação';\n newTask.description = vm.resultModel.methodAnalysis;\n newTask.dueDate = vm.resultModel.dueDate;\n newTask.owner = AuthService.authSessions.activitiSession.username;\n newTask.assignee = vm.resultModel.assignee;\n newTask.parentTaskId = parentTaskId;\n newTask.priority = 100;\n newTask.$save(function(){\n $mdToast.show(\n $mdToast.simple()\n .textContent('Tarefa de método de análise criada com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n createChildrenTasks(parentTaskId);\n });\n }\n \n // Cria as tarefas \"filhas\", geradas na diretiva \n function createChildrenTasks(parentTaskId)\n {\n for(var i = 0; i < vm.tasksList.length; i++){\n var task = vm.tasksList[i];\n if (task.title){\n var newTask = new Tasks();\n\n newTask.name = task.title;\n newTask.dueDate = task.dueDate;\n newTask.owner = AuthService.authSessions.activitiSession.username;\n newTask.assignee = task.assignee;\n newTask.parentTaskId = parentTaskId;\n newTask.priority = 100;\n newTask.$save(function(){});\n }\n }\n //$state.go('app.home.tasks');\n }\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core',\n [\n 'ngAnimate',\n 'ngAria',\n 'ngCookies',\n 'ngMessages',\n 'ngResource',\n 'ngSanitize',\n 'ngMaterial',\n 'pascalprecht.translate',\n 'angularSlideables',\n 'ui.router',\n 'ui.sortable',\n 'ng-sortable',\n 'as.sortable'\n ]);\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('kpiChart', KpiChartDirective);\n\n function KpiChartDirective(ResultAnalisysEndpoint, $timeout) {\n return {\n restrict: 'E',\n transclude: true,\n scope: {\n //department: '@departmentId',\n indicator: '=indicator',\n period: '@',\n update: '=',\n code: '@',\n width: '=',\n height: '=',\n data: '='\n },\n controller: 'KpiChartController as ctrl',\n templateUrl: 'app/main/home/apps/kpi/directives/chart/kpi-chart.html',\n link: function (scope, elements, attrs) {\n scope.$watch('period', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n plot(scope.period);\n }\n });\n\n scope.$watch('update', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n plot(scope.period);\n }\n });\n\n scope.ctrl.chartData = {};\n\n plot();\n\n function plot(period) {\n if (!scope.data) {\n var pi = '-6',\n pf = '-1';\n\n if (period) {\n if (period === '12') {\n pi = '-12';\n pf = '-1';\n } else if (period === 'current') {\n var c = new Date();\n c = c.getTime() + c.getTimezoneOffset() * 60000;\n c = new Date(c);\n c = c.getMonth() * (-1);\n pi = c.toString();\n pf = '-1';\n }\n }\n\n var data = ResultAnalisysEndpoint.query({\n //endpoint: 'convert_extraction_query_to_cda', \n path: '/system/ppa/endpoints/kettle/kpiValues.cda',\n dataAccessId: \"kpiValues\",\n //paramdepartment_key: scope.indicator.departmentId,\n paramkpi_key: scope.indicator.id,\n paramseq_mes_i: pi,\n paramseq_mes_f: pf\n });\n\n data.$promise.then(function (res) {\n var v = [],\n m = [],\n i = 1;\n\n angular.forEach(res.resultset, function (value, key) {\n var\n day = '01',\n month = parseInt(value[1].toString().substr(4, 2)) - 1,\n year = value[1].toString().substr(0, 4);\n var d = new Date(year, month, day);\n\n if (parseInt(value[2]) >= 0) {\n v.push({\n x: d,\n y: parseFloat(value[2]) || 0\n });\n\n m.push({\n x: d,\n y: parseFloat(value[3]) || 0\n });\n }\n });\n\n var data = [{\n values: v,\n key: 'Resultados',\n color: '#ff7f0e'\n },\n {\n values: m,\n key: 'Metas',\n color: '#0e7fff'\n }\n ];\n\n scope.ctrl.chartData[scope.code] = [];\n scope.ctrl.chartData[scope.code] = data;\n\n scope.refresh(data);\n }, function (e) {\n console.log(e.message)\n })\n } else {\n scope.ctrl.chartData = scope.data;\n }\n }\n\n scope.ctrl.chart.options.chart.width = scope.width;\n scope.ctrl.chart.options.chart.height = scope.height;\n }\n };\n }\n}());\n\n(function(){\n 'use strict';\n\n angular\n .module('app.core')\n .controller('KpiChartController', KpiChartController);\n\n function KpiChartController($rootScope, $state, $scope)\n {\n var vm = this;\n\n vm.id = $scope.code;\n\n $scope.refresh = refresh;\n\n function refresh(data)\n {\n $scope.api.updateWithData(data);\n }\n\n vm.chart = {\n // Opções\n options: {\n chart: {\n type: 'lineChart',\n margin : {\n top: 20,\n right: 20,\n bottom: 40,\n left: 55\n },\n x: function(d){ return d.x; },\n y: function(d){ return d.y; },\n useInteractiveGuideline: true,\n dispatch: {\n stateChange: function(e){ },\n changeState: function(e){ },\n tooltipShow: function(e){ },\n tooltipHide: function(e){ }\n },\n showXAxis: true,\n showYAxis: true,\n xAxis: {\n //axisLabel: 'Mês',\n tickFormat: function(d){\n return d3.time.format('%b')(new Date(d))\n },\n tickValues: function(values) {\n return _.map(values[0].values, function(v) {\n return d3.time.format('%b')(new Date(v.x));\n });\n }\n },\n yAxis: {\n //axisLabel: 'Resultado',\n tickFormat: function(d){\n return d3.format('02d')(d);\n },\n axisLabelDistance: -5\n },\n callback: function(chart){\n\n },\n noData: 'Sem resultados.'\n }\n }\n }\n }\n}());\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .directive('actionPlan', ActionPlanDirective);\n\n function ActionPlanDirective(User) {\n return {\n restrict: 'E',\n scope: {\n taskslist: '=',\n taskId: '@taskid',\n readonly: '@readonly'\n },\n replace: true,\n controller: 'ActionPlanTasksController as ctrl',\n templateUrl: 'app/main/home/apps/kpi/directives/action-plan/action-plan.html',\n link: function (scope, elements, attrs) {\n scope.ctrl.tasksList = scope.taskslist;\n scope.ctrl.actionPlanTaskId = scope.taskId;\n scope.ctrl.readonly = scope.readonly;\n scope.ctrl.tasksList.push({\n name: null,\n assignee: null,\n dueDate: new Date()\n });\n User.get(function (res) {\n scope.ctrl.users = res.data;\n });\n }\n };\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .controller('ActionPlanTasksController', ActionPlanTasksController);\n\n function ActionPlanTasksController($rootScope, $scope, $state, SubTasks) {\n var vm = this;\n\n vm.tasksList = [];\n vm.users = [];\n\n // Se for informado o id da tarefa de plano de ação, busca as subtarefas\n $scope.$watch('taskId', function (newValue, oldValue) {\n if (newValue) {\n vm.subtasks = null;\n var data = SubTasks.query({\n \"taskId\": $scope.taskId\n });\n\n data.$promise.then(function (res) {\n vm.subtasks = res;\n }, function (e) {\n console.log(e);\n });\n }\n });\n\n vm.newLine = newLine;\n\n function newLine() {\n var last = vm.tasksList[vm.tasksList.length - 1];\n if (last.name && last.assignee && last.dueDate) {\n vm.tasksList.push({\n name: null,\n assignee: null,\n dueDate: new Date()\n });\n }\n }\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi')\n .controller('IndicatorDialogController', IndicatorDialogController);\n\n /** @ngInject */\n function IndicatorDialogController($mdDialog, $rootScope, Indicator, fuseTheming, KpiService, KpiIndicators, ConvertQueryToCDAEndpoint, LoadKpiValuesEndpoint, departmentId, newIndicator) {\n var vm = this;\n\n vm.indicator = Indicator;\n vm.selectedTarget = {};\n vm.newIndicator = newIndicator;\n\n // Lista de unidades de medida\n vm.kpiMeasureUnits = [{\n measureUnitId: 'percent',\n measureUnitName: 'Percentual',\n measureUnitSymbol: '%'\n },\n {\n measureUnitId: 'pacient',\n measureUnitName: 'Paciente',\n measureUnitSymbol: 'pac'\n },\n {\n measureUnitId: 'pacientday',\n measureUnitName: 'Paciente/Dia',\n measureUnitSymbol: 'pac/d'\n },\n {\n measureUnitId: 'pacientbed',\n measureUnitName: 'Paciente/Leito',\n measureUnitSymbol: 'pac/l'\n },\n {\n measureUnitId: 'bedday',\n measureUnitName: 'Leito/Dia',\n measureUnitSymbol: 'lei/d'\n },\n {\n measureUnitId: 'day',\n measureUnitName: 'Dias',\n measureUnitSymbol: 'dia'\n },\n {\n measureUnitId: 'hour',\n measureUnitName: 'Horas',\n measureUnitSymbol: 'hrs'\n },\n {\n measureUnitId: 'minute',\n measureUnitName: 'Minutos',\n measureUnitSymbol: 'min'\n },\n {\n measureUnitId: 'currency',\n measureUnitName: 'Moeda',\n measureUnitSymbol: 'R$'\n },\n {\n measureUnitId: 'unit',\n measureUnitName: 'Unidade',\n measureUnitSymbol: 'un'\n },\n {\n measureUnitId: 'kg',\n measureUnitName: 'Kilograma',\n measureUnitSymbol: 'kg'\n },\n {\n measureUnitId: 'ml',\n measureUnitName: 'Mililitros',\n measureUnitSymbol: 'ml'\n },\n {\n measureUnitId: 'pmil',\n measureUnitName: 'por Mil',\n measureUnitSymbol: '/1000'\n }\n ];\n\n // Lista de categorias\n vm.kpiCategories = ['Estratégico', 'Operacional', 'Tático e Operacional', 'Risco', 'Operacional e Risco', 'Operacional e Estratégico', 'Tático, Operacional e Risco'];\n vm.kpiSubcategories = ['Estrutura', 'Processo', 'Resultado'];\n\n // Lista de frequências\n vm.kpiVerificationFrequencies = ['Mensal', 'Bimestral', 'Trimestral', 'Quadrimestral', 'Semestral', 'Anual', 'Bianual'];\n\n // Lista de tipos de orientação\n vm.orientations = [{\n orientation: 1,\n orientationDesc: 'Quanto maior melhor'\n },\n {\n orientation: -1,\n orientationDesc: 'Quanto menor melhor'\n }\n ];\n\n // Lista de fonte de dados\n vm.kpiDataSources = ['SGHDW', 'SGHDADOS', 'DOCSTORE'];\n\n // Lista de tipos de query\n vm.kpiQueryTypes = ['SQL', 'MDX'];\n\n // Methods\n vm.closeDialog = closeDialog;\n vm.themes = fuseTheming.themes;\n vm.addTarget = addTarget;\n vm.removeTarget = removeTarget;\n vm.saveIndicator = saveIndicator;\n vm.convertExtractionQueryToCDA = convertExtractionQueryToCDA;\n vm.loadKpiValues = loadKpiValues;\n\n function closeDialog() {\n $mdDialog.cancel();\n //vm.saveIndicator();\n }\n\n // Adiciona novas metas\n function addTarget() {\n if (!vm.indicator.targets)\n vm.indicator.targets = {};\n\n vm.indicator.targets[vm.selectedTarget.validFromTmp.getTime()] = {\n target: vm.selectedTarget.target,\n source: vm.selectedTarget.source\n }\n\n vm.selectedTarget = {};\n }\n\n function removeTarget(target) {\n delete vm.indicator.targets[target];\n if (isEmpty(vm.indicator.targets)) {\n delete vm.indicator.targets;\n }\n }\n\n function isEmpty(ob) {\n for (var i in ob) {\n return false;\n }\n return true;\n }\n\n // Salva os dados do indicador\n function saveIndicator() {\n if (!vm.indicator.departmentId)\n vm.indicator.departmentId = departmentId;\n if (!vm.indicator.survey)\n vm.indicator.survey = false;\n\n KpiIndicators.salvar(vm.indicator, !newIndicator).then(function (res) {\n if (vm.indicator.automatedExtractionQuery) {\n vm.convertExtractionQueryToCDA();\n } else {\n vm.loadKpiValues();\n }\n });\n }\n\n function emitRefresh() {\n $rootScope.$broadcast('refreshindicator');\n }\n\n function convertExtractionQueryToCDA() {\n var data = ConvertQueryToCDAEndpoint.query({\n paramdepartment_key: vm.indicator.departmentId,\n paramkpi_key: vm.indicator.id\n });\n\n data.$promise.then(function (res) {\n vm.loadKpiValues();\n }, function (e) {\n console.log(e.message);\n });\n }\n\n function loadKpiValues() {\n var data = LoadKpiValuesEndpoint.query({\n paramdepartment_key: vm.indicator.departmentId,\n paramkpi_key: vm.indicator.id,\n paramskip_automated_extraction: vm.indicator.automatedExtractionQuery ? 'no' : 'yes'\n });\n\n data.$promise.then(function (res) {\n $mdDialog.hide();\n }, function (e) {\n console.log(e.message);\n });\n }\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi')\n .controller('ManualResultsDialogController', ManualResultsDialogController);\n\n /** @ngInject */\n function ManualResultsDialogController($mdDialog, $rootScope, Indicator, fuseTheming, KpiService, KpiIndicators, ConvertQueryToCDAEndpoint, LoadKpiValuesEndpoint, departmentId, $scope, Docstore) {\n var vm = this;\n\n vm.indicator = Indicator;\n vm.selectedResult = {};\n vm.btnSaveLbl = \"GRAVAR E FECHAR\";\n vm.btnSaveEnb = true;\n\n // Lista de unidades de medida\n vm.kpiMeasureUnits = [{\n measureUnitId: 'percent',\n measureUnitName: 'Percentual',\n measureUnitSymbol: '%'\n }, {\n measureUnitId: 'pacient',\n measureUnitName: 'Paciente',\n measureUnitSymbol: 'pac'\n }, {\n measureUnitId: 'pacientday',\n measureUnitName: 'Paciente/Dia',\n measureUnitSymbol: 'pac/d'\n }, {\n measureUnitId: 'pacientbed',\n measureUnitName: 'Paciente/Leito',\n measureUnitSymbol: 'pac/l'\n }, {\n measureUnitId: 'bedday',\n measureUnitName: 'Leito/Dia',\n measureUnitSymbol: 'lei/d'\n }, {\n measureUnitId: 'day',\n measureUnitName: 'Dias',\n measureUnitSymbol: 'dia'\n }, {\n measureUnitId: 'minute',\n measureUnitName: 'Minutos',\n measureUnitSymbol: 'min'\n }, {\n measureUnitId: 'currency',\n measureUnitName: 'Moeda',\n measureUnitSymbol: 'R$'\n }, {\n measureUnitId: 'unit',\n measureUnitName: 'Unidade',\n measureUnitSymbol: 'un'\n }, {\n measureUnitId: 'kg',\n measureUnitName: 'Kilograma',\n measureUnitSymbol: 'kg'\n }];\n\n // Lista de categorias\n vm.kpiCategories = ['Estrategico', 'Operacional', 'Tático/Operacional', 'Risco', 'Operacional e Risco', 'Operacional e Estratégico'];\n\n // Lista de frequências\n vm.kpiVerificationFrequencies = ['Mensal', 'Bimestral', 'Trimestral', 'Quadrimestral', 'Semestral', 'Anual', 'Bianual'];\n\n // Lista de tipos de orientação\n vm.orientations = [{\n orientation: 1,\n orientationDesc: 'Quanto maior melhor'\n }, {\n orientation: -1,\n orientationDesc: 'Quanto menor melhor'\n }];\n\n // Lista de fonte de dados\n vm.kpiDataSources = ['SGHDW', 'SGHDADOS'];\n\n // Lista de tipos de query\n vm.kpiQueryTypes = ['SQL', 'MDX'];\n\n // Methods\n vm.addResult = addResult;\n vm.removeResult = removeResult;\n vm.isEmpty = isEmpty;\n vm.closeDialog = closeDialog;\n vm.themes = fuseTheming.themes;\n vm.saveIndicator = saveIndicator;\n vm.loadKpiValues = loadKpiValues;\n vm.onlyFirstDay = onlyFirstDay;\n\n function closeDialog() {\n vm.saveIndicator();\n }\n\n // Adiciona novas metas\n function addResult() {\n if (!vm.indicator.results)\n vm.indicator.results = {};\n\n vm.indicator.results[vm.selectedResult.date.getTime()] = {\n value: vm.selectedResult.value\n };\n\n vm.selectedResult = {};\n }\n\n function assert (condition, message) {\n if (!condition) {\n throw message || \"Assertion failed\";\n }\n }\n\n // Will try to remove from Docstore/kpi-result a target/result record if it were\n // already loaded into\n // `kpi` is the complete object, d is the date object representing the date for which\n // should be removed the record\n function removeKpiResult(kpi, d, cb) {\n console.dir(kpi);\n console.dir(d);\n assert(typeof kpi === 'object', 'KPI should be an object');\n assert(typeof d === 'object');\n assert(typeof kpi.id === 'string', 'KPI ID should be a string');\n // o delete precisa ser feito usando id no formato '1hprs8r1bmjyl/20210201'\n const id = kpi.id + '/' + d3.time.format('%Y%m%d')(d);\n Docstore.delete(\n {\n type: 'kpi-result',\n id: id\n },\n cb\n )\n }\n\n function removeResult(result) {\n removeKpiResult(\n vm.indicator,\n new Date(parseInt(result)),\n function(r){\n if (r.success) {\n delete vm.indicator.results[result];\n if (isEmpty(vm.indicator.results)) {\n delete vm.indicator.results;\n }\n } else {\n alert('Não foi possível remover o resultado. Contacte o administrador do sistema');\n }\n }\n )\n }\n\n function isEmpty(ob) {\n for (var i in ob) {\n return false;\n }\n return true;\n }\n\n // Salva os dados do indicador\n function saveIndicator() {\n if (!vm.indicator.departmentId)\n vm.indicator.departmentId = departmentId;\n\n vm.btnSaveLbl = 'Aguarde...';\n vm.btnSaveEnb = false;\n KpiIndicators.salvar(vm.indicator, true).then(function (res) {\n vm.loadKpiValues();\n vm.btnSaveLbl = 'Pronto';\n });\n }\n\n function emitRefresh() {\n $rootScope.$broadcast('refreshindicator');\n }\n\n function loadKpiValues() {\n var data = LoadKpiValuesEndpoint.query({\n paramdepartment_key: vm.indicator.departmentId,\n paramkpi_key: vm.indicator.id,\n paramskip_automated_extraction: vm.indicator.automatedExtractionQuery ? 'no' : 'yes'\n });\n\n data.$promise.then(function (res) {\n vm.lastUpdate = new Date();\n $mdDialog.hide();\n }, function (e) {\n console.log(e.message);\n });\n }\n\n function onlyFirstDay(date) {\n if (vm.indicator.results)\n if (vm.indicator.results[date.getTime()]) return false;\n\n var day = date.getDate();\n return day === 1;\n }\n\n vm.isAddDisabled = function() {\n return (typeof vm.selectedResult.value) === 'undefined' || (vm.selectedResult.value != vm.selectedResult.confirm) || (!vm.selectedResult.date);\n }\n\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.activiti', [])\n .config(config);\n\n /** @ngInject */\n function config(msNavigationServiceProvider, $stateProvider)\n { \n // Tasks\n $stateProvider.state('app.tasks', {\n parent : 'app',\n url: '/home/tarefas',\n views : {\n 'content@app': {\n templateUrl: 'app/main/home/apps/activiti/tasks.html',\n controller : 'TasksController as vm'\n }\n },\n resolve : {\n TasksList: getTasksList\n },\n bodyClass: 'todo',\n authenticate: true\n });\n \n function getTasksList(Tasks, $rootScope, $q, AuthService)\n {\n var deferred = $q.defer();\n \n var data = Tasks.get({\n \"size\": 1000, \n \"owner\": AuthService.authSessions.activitiSession.username\n });\n \n data.$promise.then(function(res){\n $rootScope.activeContextApp = 'main';\n deferred.resolve(res);\n }, function(e){\n console.log(e);\n });\n\n return deferred.promise;\n }\n }\n})();\n(function(){\n 'use strict';\n \n angular\n .module('app.activiti')\n .filter('priority', PriorityFilter);\n \n function PriorityFilter(){\n return function(input){\n var result;\n\n if (input >= 0){\n if (input <= 35)\n result = 'Baixa prioridade';\n else if (input <= 70)\n result = 'Média prioridade';\n else\n result = 'Alta prioridade';\n } else {\n result = 'Baixa prioridade (indefinida)';\n }\n \n return result;\n }\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.activiti')\n .controller('TaskDialogController', TaskDialogController);\n\n /** @ngInject */\n function TaskDialogController($mdDialog, Task, TasksList, Tasks, event, FormData, ActivitiDataHandlerService, $rootScope, $http, AuthService, $mdToast, fuseTheming, UsersList, history)\n {\n var vm = this;\n\n // Adicionar nova tarefa\n if ( !Task )\n {\n vm.title = 'Nova tarefa';\n vm.task = {};\n vm.task.dueDate = null;\n vm.newTask = true;\n } else {\n vm.title = 'Dados da tarefa: #' + Task.id;\n vm.task = angular.copy(Task);\n vm.tasks = TasksList;\n vm.newTask = false;\n }\n\n // Methods\n vm.users = UsersList;\n vm.history = history;\n vm.finishTask = finishTask;\n vm.delegateTask = delegateTask;\n vm.closeDialog = closeDialog;\n vm.createTask = createTask;\n vm.themes = fuseTheming.themes;\n \n function finishTask(taskId)\n {\n if (vm.task.delegationState === 'pending'){\n var resource = new Tasks();\n resource.action = \"resolve\";\n \n resource.$save({\"taskId\": taskId}, function () {\n emitRefresh();\n $mdDialog.hide(resource.action);\n });\n } else {\n if (typeof vm.task.propertyForSaving != \"undefined\") {\n var \n objectToSave = ActivitiDataHandlerService.extractDataFromForm(vm.task),\n resource = new FormData();\n\n resource.taskId = taskId;\n resource.properties = objectToSave.properties;\n\n resource.$save(function(){\n emitRefresh();\n $mdDialog.hide('complete');\n }); \n } else {\n var resource = new Tasks();\n resource.action = \"complete\";\n\n resource.$save({\"taskId\": taskId}, function () {\n emitRefresh();\n $mdDialog.hide(resource.action);\n });\n }\n }\n }\n \n function delegateTask(taskId)\n {\n var resource = new Tasks();\n resource.action = \"delegate\";\n resource.assignee = vm.task.assigneeTmp;\n resource.$save({\"taskId\": taskId}, function () {\n emitRefresh();\n $mdDialog.hide(resource.action);\n });\n }\n\n function closeDialog()\n {\n $mdDialog.cancel();\n }\n \n function createTask()\n {\n if (vm.newTask && vm.task.name) {\n var newTask = new Tasks();\n newTask.name = vm.task.name;\n newTask.description = vm.task.description;\n newTask.dueDate = vm.task.dueDate;\n newTask.owner = AuthService.authSessions.activitiSession.username;\n newTask.assignee = vm.task.assignee || newTask.owner;\n if (newTask.assignee != newTask.owner)\n newTask.delegationState = 'pending';\n newTask.priority = vm.task.priority;\n newTask.parentTaskId = vm.task.parentTaskId;\n newTask.$save(function(){\n $mdToast.show(\n $mdToast.simple()\n .textContent('Tarefa criada com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n emitRefresh();\n $mdDialog.hide('create');\n });\n }\n }\n \n function emitRefresh() {\n $rootScope.$broadcast('refreshtasks');\n }\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.activiti')\n .controller('ProcessDialogController', ProcessDialogController);\n\n /** @ngInject */\n function ProcessDialogController($mdDialog, $rootScope, Process, ProcessDefinition, ActivitiDataHandlerService, FormData, fuseTheming)\n {\n var vm = this;\n\n vm.title = Process.name || ActivitiDataHandlerService.getNameFromResource(Process.resource);\n vm.process = angular.copy(Process);\n\n // Methods\n vm.startProcess = startProcess;\n vm.closeDialog = closeDialog;\n vm.themes = fuseTheming.themes;\n \n function startProcess(processId)\n {\n if (typeof vm.process.propertyForSaving != \"undefined\") {\n var \n objectToSave = ActivitiDataHandlerService.extractDataFromForm(vm.process),\n resource = new FormData();\n \n resource.processDefinitionId = processId;\n //resource.businessKey = Process.businessKey;\n resource.properties = objectToSave.properties;\n \n resource.$save(function(){\n emitRefresh();\n $mdDialog.hide();\n });\n } else {\n /*var resource = new ProcessDefinition();\n resource.action = \"complete\";\n resource.$save({\"processDefinitionId\": processId}, function () {\n emitRefresh();\n $mdDialog.hide();\n });*/\n }\n }\n\n function closeDialog()\n {\n $mdDialog.cancel();\n }\n \n function emitRefresh() {\n $rootScope.$broadcast('refreshtasks');\n }\n }\n})();\n(function(){\n 'use strict';\n \n angular\n .module('app.kpi')\n .controller('IndicatorResultsController', IndicatorResultsController);\n \n function IndicatorResultsController($state, $scope, $stateParams)\n { \n var vm = this;\n \n vm.departmentId = $stateParams.departmentId;\n vm.indicatorId = $stateParams.indicatorId;\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.admintools', ['datatables'])\n .config(config);\n\n /** @ngInject */\n function config(msNavigationServiceProvider, $stateProvider) {\n\n // ADMIN\n $stateProvider.state('app.admintools', {\n parent: 'app',\n url: '/home/ferramentas-administrativas/dados',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/apps/admin/admin-tools.html',\n controller: 'AdminToolsController as vm'\n }\n },\n resolve: {\n DepartmentsList: function ($rootScope) {\n $rootScope.activeContextApp = 'main';\n return {};\n }\n },\n authenticate: true\n });\n\n $stateProvider.state('app.admintools.usersdepartments', {\n parent: 'app',\n url: '/usuarios-departamentos',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/apps/admin/usersdepartments/usersdepartments.html',\n controller: 'UserDepartmentController as vm'\n }\n },\n resolve: {\n DepartmentsList: function ($rootScope) {\n $rootScope.activeContextApp = 'main';\n return {};\n },\n Context: function ($rootScope) {\n return $rootScope.getContext\n }\n },\n authenticate: true\n });\n\n $stateProvider.state('app.admintools.department', {\n parent: 'app',\n url: '/departamentos',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/apps/admin/department/department.html',\n controller: 'DepartmentController as vm'\n }\n },\n resolve: {\n DepartmentsList: function ($rootScope) {\n $rootScope.activeContextApp = 'main';\n return {};\n },\n Context: function ($rootScope) {\n return $rootScope.getContext\n }\n },\n authenticate: true\n });\n\n // DB-ASSOCIATION\n $stateProvider.state('app.admintools.dbassociation', {\n parent: 'app.admintools',\n url: '/associacao-de-cadastros',\n views: {\n 'tools@app.admintools': {\n templateUrl: 'app/main/home/apps/admin/db-association/db-association.html',\n controller: 'DBAssociationController as vm'\n }\n },\n params: {},\n authenticate: true\n });\n\n // ACTION PLAN WITHOUT DEPARTMENT\n $stateProvider.state('app.admintools.acwithoutdept', {\n parent: 'app.admintools',\n url: '/planos-de-acao-sem-departamentos',\n views: {\n 'tools@app.admintools': {\n templateUrl: 'app/main/home/apps/admin/ation-plan-without-department/ac-without-dept.html',\n controller: 'ACWithoutDeptController as vm'\n }\n },\n params: {},\n authenticate: true\n });\n }\n})();\n(function (module) {\n 'use strict';\n\n module.controller('DepartmentDialogController', function (Departamento, UsersList, $scope, $mdDialog, fuseTheming, $mdToast, KpiDepartments) {\n\n if (!Departamento) {\n $scope.departamento = {};\n $scope.departamento;\n $scope.edicao = 0;\n } else {\n $scope.departamento = angular.copy(Departamento);\n $scope.edicao = 1;\n }\n\n $scope.users = UsersList;\n $scope.themes = fuseTheming.themes;\n\n $scope.fechar = function () {\n $mdDialog.hide();\n };\n\n $scope.salvarDepartamento = function () {\n KpiDepartments.salvar($scope.departamento, $scope.edicao).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Departamento ' + ($scope.edicao ? 'editado' : 'criado') + ' com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n $scope.departamento = {};\n $mdDialog.hide(true);\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao cadastrar o departamento! ' + response.statusText)\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n });\n\n}(angular.module('app.admintools')));\n(function (module) {\n 'use strict';\n\n module.controller('DepartmentController', ['$scope', '$http', 'PENTAHO_APP_URL', '$cookies', 'User', '$timeout', '$mdDialog', '$document', '$rootScope', '$httpParamSerializerJQLike', '$mdToast', 'KpiDepartments', 'DTOptionsBuilder', 'DT_LANGUAGE', 'DTColumnDefBuilder',\n function ($scope, $http, PENTAHO_APP_URL, $cookies, User, $timeout, $mdDialog, $document, $rootScope, $httpParamSerializerJQLike, $mdToast, KpiDepartments, DTOptionsBuilder, DT_LANGUAGE, DTColumnDefBuilder) {\n\n getListaUsers();\n\n $scope.dtOptions = DTOptionsBuilder.newOptions().withLanguage(DT_LANGUAGE);\n\n $scope.dtInstance = {};\n\n $scope.dtColumnDefs = [\n DTColumnDefBuilder.newColumnDef(4).notSortable(),\n DTColumnDefBuilder.newColumnDef(5).notSortable()\n ];\n\n ($scope.getDepartamentos = function () {\n $scope.isAdmin = ($rootScope.userContext.isAdmin || $rootScope.userContext.isQualityManager);\n $scope.loading = 1;\n\n KpiDepartments.getDepartamentos().then(function success(response) {\n $scope.departamentos = KpiDepartments.format(response.data.documents);\n\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao buscar os departamentos!')\n .position('bottom right')\n .hideDelay(3000)\n );\n\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n });\n })();\n\n $scope.excluirDepartamento = function (departamento) {\n KpiDepartments.delete(departamento).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Departamento excluído com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n $scope.getDepartamentos();\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao excluir o departamento!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n\n $scope.openDialogChangeResponsible = function (ev, departamento) {\n $mdDialog.show({\n controller: 'DepartmentChangeResponsibleDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/admin/department/department.change-responsible.modal.html',\n parent: angular.element($document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: true,\n locals: {\n Departamento: departamento,\n UsersList: $scope.usuarios,\n event: ev\n }\n }).then(function (action) {\n if (action)\n $scope.getDepartamentos();\n });\n };\n\n $scope.openDialog = function (ev, departamento) {\n $mdDialog.show({\n controller: 'DepartmentDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/admin/department/department.modal.html',\n parent: angular.element($document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: true,\n locals: {\n Departamento: departamento,\n UsersList: $scope.usuarios,\n event: ev\n }\n }).then(function (action) {\n if (action)\n $scope.getDepartamentos();\n });\n };\n\n function getListaUsers() {\n User.get(function (res) {\n $scope.usuarios = res.data;\n });\n };\n }\n ]);\n\n module.directive('uppercase', function () {\n return {\n restrict: \"A\",\n require: \"?ngModel\",\n link: function (scope, element, attrs, ngModel) {\n\n ngModel.$parsers.push(function (input) {\n return input ? input.toUpperCase() : \"\";\n });\n\n element.css(\"text-transform\", \"uppercase\");\n }\n };\n });\n}(angular.module('app.admintools')));\n(function (module) {\n 'use strict';\n\n module.controller('DepartmentChangeResponsibleDialogController', function (Departamento, UsersList, $scope, $mdDialog, fuseTheming, $mdToast, KpiDepartments) {\n\n $scope.departamento = angular.copy(Departamento);\n $scope.edicao = 1;\n\n $scope.responsible = angular.copy($scope.departamento.responsible);\n\n $scope.departamento.responsible = undefined;\n\n $scope.users = UsersList;\n $scope.themes = fuseTheming.themes;\n\n $scope.fechar = function () {\n $mdDialog.hide(false);\n };\n\n $scope.salvarDepartamento = function () {\n KpiDepartments.salvar($scope.departamento, $scope.edicao).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Departamento editado com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n $scope.departamento = {};\n $mdDialog.hide(true);\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao cadastrar o departamento! ' + response.statusText)\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n });\n\n}(angular.module('app.admintools')));\n(function (module) {\n 'use strict';\n\n module.controller('UserDepartmentDialogController', function (ListUserDepartments, UserDepartments, UsersList, DepartamentList, $scope, $mdDialog, fuseTheming, $mdToast, UserDepartmentsService) {\n\n if (!UserDepartments) {\n $scope.userDepartments = {};\n $scope.edicao = 0;\n } else {\n $scope.userDepartments = angular.copy(UserDepartments);\n $scope.edicao = 1;\n }\n\n $scope.users = UsersList;\n $scope.themes = fuseTheming.themes;\n $scope.departments = DepartamentList;\n\n $scope.close = function () {\n $mdDialog.hide();\n };\n\n $scope.save = function () {\n\n var x = _.find(ListUserDepartments, function (item) {\n return item.user === $scope.userDepartments.user && item.id !== $scope.userDepartments.id;\n });\n\n if (x) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('O usuário selecionado já possui associações!')\n .position('bottom right')\n .hideDelay(3000)\n );\n return;\n }\n\n UserDepartmentsService.save($scope.userDepartments, $scope.edicao).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Associações realizadas com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n $scope.userDepartments = {};\n $mdDialog.hide(true);\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao processar a solicitação ' + response.statusText)\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n });\n\n}(angular.module('app.admintools')));\n(function (module) {\n 'use strict';\n\n module.controller('UserDepartmentController', ['$scope', 'KpiDepartments', '$http', 'PENTAHO_APP_URL', '$cookies', 'User', '$timeout', '$mdDialog', '$document', '$rootScope', '$httpParamSerializerJQLike', '$mdToast', 'UserDepartmentsService', 'DTOptionsBuilder', 'DT_LANGUAGE', 'DTColumnDefBuilder',\n function ($scope, KpiDepartments, $http, PENTAHO_APP_URL, $cookies, User, $timeout, $mdDialog, $document, $rootScope, $httpParamSerializerJQLike, $mdToast, UserDepartmentsService, DTOptionsBuilder, DT_LANGUAGE, DTColumnDefBuilder) {\n\n $scope.dtOptions = DTOptionsBuilder.newOptions().withLanguage(DT_LANGUAGE);\n\n $scope.dtInstance = {};\n\n $scope.dtColumnDefs = [\n DTColumnDefBuilder.newColumnDef(2).notSortable(),\n DTColumnDefBuilder.newColumnDef(3).notSortable()\n ];\n\n ($scope.getUsers = function () {\n User.get(function (res) {\n $scope.usuarios = res.data;\n });\n })();\n\n $scope.getDepartamentos = function () {\n KpiDepartments.getDepartamentos().then(function success(response) {\n $scope.departamentos = KpiDepartments.format(response.data.documents);\n\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao buscar os departamentos!')\n .position('bottom right')\n .hideDelay(3000)\n );\n\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n });\n };\n\n ($scope.get = function (notReloadDepartments) {\n $scope.isAdmin = ($rootScope.userContext.isAdmin || $rootScope.userContext.isQualityManager);\n $scope.loading = 1;\n\n UserDepartmentsService.get().then(function success(response) {\n $scope.listUserDepartments = UserDepartmentsService.format(response.data.documents);\n\n if (notReloadDepartments) {\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n } else {\n $scope.getDepartamentos();\n }\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao buscar os cadastros!')\n .position('bottom right')\n .hideDelay(3000)\n );\n\n $timeout(function () {\n $scope.loading = 0;\n }, 500);\n });\n })();\n\n $scope.delete = function (departamento) {\n UserDepartmentsService.delete(departamento).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Excluído com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n $scope.get();\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao excluir!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n\n $scope.openDialog = function (ev, userDepartments) {\n $mdDialog.show({\n controller: 'UserDepartmentDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/admin/usersdepartments/usersdepartments.modal.html',\n parent: angular.element($document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: true,\n locals: {\n ListUserDepartments: $scope.listUserDepartments,\n UserDepartments: userDepartments,\n UsersList: $scope.usuarios,\n DepartamentList: $scope.departamentos,\n event: ev\n }\n }).then(function (action) {\n if (action)\n $scope.get(true);\n });\n };\n\n $scope.showDepartments = function (ev, userDepartments) {\n $mdDialog.show({\n controller: 'ShowDepartmentsDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/admin/usersdepartments/showdepartments.modal.html',\n parent: angular.element($document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n fullscreen: true,\n locals: {\n UserDepartments: userDepartments,\n DepartamentList: $scope.departamentos,\n event: ev\n }\n });\n };\n }\n ]);\n\n module.directive('uppercase', function () {\n return {\n restrict: \"A\",\n require: \"?ngModel\",\n link: function (scope, element, attrs, ngModel) {\n\n ngModel.$parsers.push(function (input) {\n return input ? input.toUpperCase() : \"\";\n });\n\n element.css(\"text-transform\", \"uppercase\");\n }\n };\n });\n}(angular.module('app.admintools')));\n(function (module) {\n 'use strict';\n\n module.controller('ShowDepartmentsDialogController', function (UserDepartments, DepartamentList, $scope, $mdDialog, fuseTheming, $mdToast, DT_LANGUAGE) {\n\n $scope.userDepartments = angular.copy(UserDepartments);\n\n $scope.themes = fuseTheming.themes;\n $scope.departments = DepartamentList;\n\n $scope.dtOptions = {\n ordering: false,\n searching: false,\n paging: false,\n language: DT_LANGUAGE\n };\n\n $scope.dtInstance = {};\n\n $scope.close = function () {\n $mdDialog.hide();\n };\n });\n\n}(angular.module('app.admintools')));\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools')\n .controller('DBAssociationController', DBAssociationController);\n \n function DBAssociationController($state, $scope, $stateParams, EntitiesEndpoint, SourcesEndpoint, SourceItemsEndpoint, MasterItemsEndpoint, MappingsEndpoint)\n { \n var vm = this;\n \n vm.name = 'ASSOCIAÇÃO DE CADASTROS';\n vm.searchMaster = '';\n vm.searchSource = '';\n vm.currentTabIndex = 0;\n vm.selectedMasterEntity = null;\n vm.selectedSource = null;\n vm.sourceItems = [];\n vm.masterItems = [];\n vm.linkedItems = [];\n vm.sourceItensSelected = 0;\n vm.wait = false;\n \n vm.sortableOptions = {\n handle : '.handle',\n forceFallback : false,\n ghostClass : 'item-placeholder',\n fallbackClass : 'item-placeholder',\n fallbackOnBody: true,\n sort : true\n };\n \n vm.entities = EntitiesEndpoint.query({}, function(res){\n //Sucesso\n }, function(e){\n console.log(e.message);\n });\n \n $scope.$watch('vm.selectedMasterEntity', function(newValue){\n if (newValue){\n vm.sources = SourcesEndpoint.query({paramentity_key: newValue[0]}, function(res){\n //Sucesso\n }, function(e){\n console.log(e.message);\n })\n }\n });\n \n $scope.$watch('vm.selectedSource', function(newValue){\n // Verifica se o source e a entity foram definidos\n if (newValue && vm.selectedMasterEntity){\n // Obtém os itens associados...\n vm.linkedItems = MappingsEndpoint.query({\n paramentity: vm.selectedMasterEntity[0],\n paramsource: newValue[1]\n }, function(res_li){\n // Em seguida obtém os itens da source\n vm.sourceItems = SourceItemsEndpoint.query({\n dataAccessId: vm.selectedSource[1] + '__' + vm.selectedMasterEntity[0]\n }, function(res_si){\n // Resolve o nome dos itens associados\n angular.forEach(res_li.resultset, function(value, key){\n var itemsNames = getItemsNames(value[3], value[2]);\n value.sourceName = itemsNames.sourceItemName;\n value.targetName = itemsNames.targetItemName;\n });\n \n refreshPendingSourceItems();\n }, function(e){\n console.log(e.message); \n });\n }, function(e){\n console.log(e.message);\n });\n }\n });\n \n $scope.$watch('vm.selectedMasterEntity', function(newValue){\n if (newValue){\n vm.masterItems = MasterItemsEndpoint.query({\n paramentity_key: vm.selectedMasterEntity[0]\n }, function(res){\n //Sucesso\n }, function(e){\n console.log(e.message); \n });\n }\n });\n \n vm.linkedItems = {};\n \n vm.selectMasterEntity = selectMasterEntity;\n vm.selectSource = selectSource;\n vm.onlyCheckedFilter = onlyCheckedFilter;\n vm.notLinkedFilter = notLinkedFilter;\n vm.linkItem = linkItem;\n vm.unlinkItem = unlinkItem;\n vm.countSourceItemsSelected = countSourceItemsSelected;\n vm.preventDefault = preventDefault;\n \n function selectMasterEntity(item)\n {\n vm.sourceItems = null;\n vm.sources = null;\n \n vm.selectedMasterEntity = item;\n item.selected = true;\n vm.currentTabIndex = 1;\n }\n \n function selectSource(item)\n {\n vm.selectedSource = item;\n }\n \n function onlyCheckedFilter(item)\n {\n if (vm.showOnlyChecked)\n return item.selected === true;\n else\n return true;\n }\n \n function notLinkedFilter(item)\n {\n return !(item.linked === true);\n }\n \n function linkItem(masterItem)\n {\n angular.forEach(vm.sourceItems.resultset, function(value){\n if (value.selected === true && !(value.linked)){\n var objToSave = {};\n value.selected = false;\n \n objToSave.paramentity = vm.selectedMasterEntity[0];\n objToSave.paramsource = vm.selectedSource[1];\n objToSave.paramsource_code = value[0];\n objToSave.paramtarget_code = masterItem[0];\n objToSave.paramlinked = 1;\n \n saveLinkedItem(objToSave);\n }\n });\n vm.searchMaster = '';\n vm.searchSource = '';\n refreshPendingSourceItems();\n }\n \n function saveLinkedItem(params)\n {\n MappingsEndpoint.save(params, function(res){\n vm.linkedItems = [];\n // Obtém os itens associados...\n vm.linkedItems = MappingsEndpoint.query({\n paramentity: vm.selectedMasterEntity[0],\n paramsource: vm.selectedSource[1]\n }, function(res_li){\n // Resolve o nome dos itens associados\n angular.forEach(res_li.resultset, function(value, key){\n var itemsNames = getItemsNames(value[3], value[2]);\n value.sourceName = itemsNames.sourceItemName;\n value.targetName = itemsNames.targetItemName;\n });\n }, function(e){\n console.log(e.message);\n });\n }, function(e){\n console.log(e.message);\n });\n }\n \n function unlinkItem(item)\n {\n var objToSave = {};\n objToSave.paramentity = vm.selectedMasterEntity[0];\n objToSave.paramsource = vm.selectedSource[1];\n objToSave.paramsource_code = item[3];\n objToSave.paramtarget_code = item[2];\n objToSave.paramlinked = 0;\n \n saveLinkedItem(objToSave);\n }\n \n function countSourceItemsSelected(itemChecked)\n {\n itemChecked ? vm.sourceItensSelected++ : vm.sourceItensSelected--;\n }\n \n function getItemsNames(sourceItemCode, targetItemCode)\n {\n var res = {\n sourceItemName: '',\n targetItemName: ''\n }\n \n if (sourceItemCode){\n angular.forEach(vm.sourceItems.resultset, function(value, key){\n if (value[0] == sourceItemCode)\n res.sourceItemName = value[1];\n });\n }\n \n if (targetItemCode){\n angular.forEach(vm.masterItems.resultset, function(value, key){\n if (value[0] == targetItemCode)\n res.targetItemName = value[1];\n });\n }\n \n return res;\n }\n \n function refreshPendingSourceItems()\n {\n var linkedRef = {};\n angular.forEach(vm.linkedItems.resultset, function(value, key){\n linkedRef[value[3]] = true;\n });\n \n // Captura somente os items pendentes (não associados)\n angular.forEach(vm.sourceItems.resultset, function(value, key){\n if (linkedRef[value[0]])\n value.linked = true;\n });\n }\n \n function preventDefault(e)\n {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools')\n .controller('ACWithoutDeptController', ACWithoutDeptController);\n \n function ACWithoutDeptController($state, $scope, $rootScope, $stateParams, FixProcessInstances, KpiDepartments, KpiNonCompliances, ProcessInstances, SghqNonCompliances, $mdToast)\n { \n var vm = this;\n \n vm.departments = KpiDepartments.getAllDepartments();\n vm.foundActionPlans = [];\n vm.actionPlan = null;\n vm.nonCompliance = null;\n vm.newProcess = null;\n vm.canFix = false;\n vm.selectedCase = '';\n vm.currentProcessInstanceId = '';\n vm.counter = {\n i: 0,\n currentDeparmentId: ''\n }\n vm.countDepartment = 0;\n \n vm.loadNC = loadNC;\n vm.fix = fix;\n \n vm.departments.$loaded(function(){\n fixProcessWithoutDepartmentId();\n vm.countDepartment = vm.departments.length;\n });\n \n function fixProcessWithoutDepartmentId()\n {\n $rootScope.loadingProgress = true;\n FixProcessInstances.get({}, function(res){\n angular.forEach(res.data, function(value){\n var hasDId = false, \n hasNCId = false, \n NCId = '',\n emailSubjectStr = '',\n userName = '';\n \n angular.forEach(value.variables, function(v){\n if (v.name == 'departmentId')\n hasDId = true;\n \n if (v.name == 'nonComplianceId'){\n hasNCId = true;\n NCId = v.value;\n }\n });\n \n if ((hasNCId) && (!hasDId) /*&& (value.activityId == 'createActionPlan')*/){\n vm.foundActionPlans.push({\n name: 'ID DO PROCESSO: ' + value.id + ' | NCId: ' + NCId,\n NCId: NCId,\n PId: value.id\n });\n console.log('PId: ' + value.id + ' | NCId: ' + NCId);\n }\n });\n \n $rootScope.loadingProgress = false;\n });\n }\n \n function loadNC(actionPlanRef)\n {\n vm.canFix = false;\n vm.currentProcessInstanceId = '';\n vm.selectedCase = actionPlanRef.NCId;\n $rootScope.loadingProgress = true;\n findNC(actionPlanRef);\n }\n \n function findNC(actionPlanRef)\n { \n vm.nonCompliance = null;\n if (vm.counter.i < vm.countDepartment) {\n vm.counter.currentDeparmentId = vm.departments[vm.counter.i].$id;\n var nonCompliances = null;\n nonCompliances = KpiNonCompliances.getAll(vm.counter.currentDeparmentId);\n nonCompliances.$loaded(function(){\n var found = false;\n angular.forEach(nonCompliances, function(value, key){\n if (actionPlanRef.NCId == value.$id) {\n vm.nonCompliance = SghqNonCompliances.getByKey(value.occurrenceDepartment, value.$id);\n console.log('NAO CONFORMIDADE: ', vm.nonCompliance)\n \n vm.nonCompliance.$loaded(function(){\n vm.canFix = true;\n });\n \n found = true;\n }\n });\n \n if (!found){\n vm.counter.i++;\n vm.counter.currentDeparmentId = '';\n vm.loadNC(actionPlanRef);\n } else {\n vm.counter.i = 0;\n $rootScope.loadingProgress = false;\n vm.currentProcessInstanceId = actionPlanRef.PId;\n }\n });\n } else {\n $rootScope.loadingProgress = false;\n }\n }\n \n function fix()\n {\n if (vm.currentProcessInstanceId) {\n vm.processKey = 'registrar_nao_conformidade';\n\n var obj = {\n \"processDefinitionKey\": vm.processKey,\n variables: [\n {name: 'nonComplianceId', value: vm.nonCompliance.$id},\n {name: 'departmentId', value: vm.nonCompliance.occurrenceDepartment}\n ]\n }\n var resource = new ProcessInstances(obj);\n\n resource.$save(function (res) {\n vm.processId = res.id;\n \n vm.newProcess = res.id;\n \n vm.nonCompliance.processId = vm.processId;\n\n SghqNonCompliances.save(vm.nonCompliance, true).then(function(){\n\n var sentObj = SghqNonCompliances.getSentByKey(vm.nonCompliance.claimant, vm.nonCompliance.$id);\n sentObj.$loaded(function(){\n sentObj.processId = vm.processId;\n SghqNonCompliances.save(sentObj, true);\n\n obj = {\n \"processInstance\": vm.currentProcessInstanceId\n }\n var oldProcessResource = new ProcessInstances(obj);\n \n oldProcessResource.$delete({action: \"suspend\"})\n .then(function(res){\n console.log('NEW PROCESS: ', res);\n \n $mdToast.show(\n $mdToast.simple()\n .textContent('Processo corrigido com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n }, function(e){\n console.log(e.message);\n \n $mdToast.show(\n $mdToast.simple()\n .textContent('A correção do processo falhou!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n });\n console.log('SENT NC: ', sentObj);\n }, function(e){\n console.log(e);\n });\n }, function(e){\n console.log(e.message);\n });\n }\n }\n }\n}());\n\n//159567, 159597\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-viewer', []);\n}());\n(function () {\n 'use strict';\n\n angular.module('app.pentaho-connector.pentaho-viewer')\n .controller('TabController', TabController);\n\n /** ngInject **/\n function TabController(PentahoConnectorService, $scope) {\n var vm = this;\n\n var mainViewContainer = $('#main');\n vm.iframeHeight = 0;\n var elScope = angular.element(mainViewContainer).scope();\n\n elScope.$watch(function () {\n return $(mainViewContainer).css('height');\n }, function (newValue) {\n var h = newValue;\n h = newValue.substr(0, newValue.indexOf('px'));\n h = h - 112;\n h = h + 'px';\n vm.iframeHeight = h;\n }, true);\n\n $(window).resize(function () {\n var newValue = $(mainViewContainer).css('height');\n\n $scope.$apply(function () {\n var h = newValue;\n h = newValue.substr(0, newValue.indexOf('px'));\n h = h - 112;\n h = h + 'px';\n vm.iframeHeight = h;\n console.log(vm.iframeHeight)\n });\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-viewer')\n .directive('pentahoTab', PentahoTabDirective);\n \n function PentahoTabDirective(){\n return {\n restrict: 'E',\n templateUrl: 'app/ppa-ui-core/pentaho-connector/pentaho-viewer/tab/tab.tmpl.html',\n controller: 'TabController as vm',\n bindToController: true,\n scope: {\n src: '@'\n },\n link: function(scope, elements, attrs){\n scope.src = attrs.src;\n }\n }\n }\n}());\n(function () {\n 'use strict';\n\n angular.module('app.pentaho-connector.pentaho-viewer')\n .controller('PlaceholderController', PlaceholderController);\n\n /** ngInject **/\n function PlaceholderController($scope, PentahoViewerService, $state) {\n var vm = this;\n // Captura a aba ativa (nenhuma a princípio)\n $scope.indexCurrentTab = PentahoViewerService.tabs.active;\n // Captura as abas abertas (nenhuma a princípio)\n $scope.tabs = PentahoViewerService.tabs;\n\n vm.indexCurrentTab = $scope.indexCurrentTab;\n vm.tabs = $scope.tabs;\n vm.closeTab = closeTab;\n vm.setCurrent = setCurrent;\n vm.openNewTab = openNewTab;\n vm.current = 0;\n\n function setCurrent(index) {\n vm.current = index;\n }\n\n function openNewTab(url) {\n var win = window.open(url, '_blank');\n win.focus();\n }\n\n // Observa as alterações na aba ativa\n $scope.$watch('tabs.active', function () {\n vm.tabs = PentahoViewerService.tabs;\n vm.indexCurrentTab = PentahoViewerService.tabs.active;\n vm.current = PentahoViewerService.tabs.active;\n });\n\n // Invoca a função do PentahoViewerService responsável por fechar abas, passando o ID da aba como parâmetro\n function closeTab(id) {\n PentahoViewerService.closeTab(id);\n }\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-viewer')\n .directive('pentahoPlaceholder', PentahoPlaceholderDirective);\n \n function PentahoPlaceholderDirective(){\n return {\n restrict: 'E',\n templateUrl: 'app/ppa-ui-core/pentaho-connector/pentaho-viewer/placeholder/placeholder.tmpl.html',\n scope: true,\n controller: 'PlaceholderController as vm',\n bindToController: true \n }\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.admintools-data-handler', []);\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('SourcesEndpoint', SourcesEndpoint);\n \n function SourcesEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery', \n {\n path: '/system/ppa/endpoints/kettle/mappings.cda',\n dataAccessId: 'sources',\n paramentity_key: '@paramentity_key',\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('SourceItemsEndpoint', SourceItemsEndpoint);\n \n function SourceItemsEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery', \n {\n path: '/system/ppa/endpoints/kettle/sourceItems.cda',\n dataAccessId: '@dataAccessId', //'$source_key__$entity_key'\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('Settings', Settings);\n \n function Settings($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery', \n {\n path: '/system/ppa/endpoints/kettle/settings.cda',\n dataAccessId: '@dataAccessId',\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n paramcfgName: '@paramcfgName',\n\t\t\t\t\t\tparamusrName: '@paramusrName'\n }\n },\n save: {\n method: 'post',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n paramkey: '@paramkey',\n paramvalue: '@paramvalue'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('ResultAnalisysEndpoint', ResultAnalisysEndpoint);\n \n function ResultAnalisysEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery',\n {\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('MasterItemsEndpoint', MasterItemsEndpoint);\n \n function MasterItemsEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/ppa/api/entityItems', \n {\n paramentity_key: '@paramentity_key',\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('MappingsEndpoint', MappingsEndpoint);\n \n function MappingsEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/ppa/api/mappings', \n {\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n paramentity: '@paramentity',\n paramsource: '@paramsource',\n parammethod: 'GET'\n }\n },\n save: {\n method: 'post',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n paramentity: '@paramentity',\n paramsource: '@paramsource',\n paramsource_code: '@paramsource_code',\n paramtarget_code: '@paramtarget_code',\n paramlinked: '@paramlinked',\n parammethod: 'POST'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('LoadKpiValuesEndpoint', LoadKpiValuesEndpoint);\n \n function LoadKpiValuesEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/ppa/api/loadKpiValues', \n {\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('EntitiesEndpoint', EntitiesEndpoint);\n \n function EntitiesEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery', \n {\n path: '/system/ppa/endpoints/kettle/mappings.cda',\n dataAccessId: 'entities',\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n\n angular\n .module('app.admintools-data-handler')\n .factory('Docstore', Docstore);\n\n function Docstore($resource, PENTAHO_APP_URL, AuthService) {\n var url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore',\n defparam = null,\n actions = {\n read: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n parammethod: 'GET',\n paramtype: '@type'\n }\n },\n delete: {\n method: 'post',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n },\n params: {\n parammethod: 'DELETE',\n paramtype: '@type',\n paramid: '@id'\n }\n }\n };\n\n return $resource(url, defparam, actions);\n }\n}());\n\n/*\n(defn delete! [{:keys [type id handler]}]\n {:pre [(seq type) (seq id)]}\n (POST endpoint-path\n {:params {:parammethod \"DELETE\"\n :paramtype type\n :paramid id}\n :format :raw\n :response-format :json\n :keywords? true\n :error-handler #(js/console.error %)\n :handler (or handler #(js/console.dir %))}))\n */\n\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('ConvertQueryToCDAEndpoint', ConvertQueryToCDAEndpoint);\n \n function ConvertQueryToCDAEndpoint($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/ppa/api/convertExtractionQuerytoCda', \n {\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n(function(){\n 'use strict';\n\n angular\n .module('app.admintools-data-handler')\n .factory('CDAQuery', CDAQuery);\n\n function CDAQuery($resource, PENTAHO_APP_URL, AuthService)\n {\n return $resource(PENTAHO_APP_URL + '/plugin/cda/api/doQuery',\n {\n kettleOutput: 'Json'\n },\n {\n query: {\n method: 'get',\n headers: {\n 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n 'Content-Type': 'application/json'\n }\n }\n });\n }\n}());\n\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler', []);\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.activiti-connector.activiti-data-handler')\n .factory('User', UserService);\n \n /** @ngInject */\n function UserService($resource, APP_CFG, ActivitiConf, PENTAHO_APP_URL/*, AuthService*/) {\n if (APP_CFG['ACTIVE_APPS'].indexOf('activiti') != -1) {\n return $resource(\n ActivitiConf.activitiRestBaseURL + '/service/identity/users/:user', \n {user: \"@user\", size: ActivitiConf.activitiUserLoadLimit}\n )\n } else {\n return $resource(\n PENTAHO_APP_URL + '/api/users',\n {},\n {\n get: {\n method: 'get',\n // headers: {\n // 'Authorization': 'Basic ' + AuthService.authSessions.pentahoSession.authKey,\n // 'Content-Type': 'application/json'\n // },\n transformResponse: function (cnv) {\n var x2js = new X2JS();\n var aftCnv = x2js.xml_str2json(cnv);\n console.dir(aftCnv)\n var u = aftCnv.users.user.map(function(u){\n return {\n id: u,\n firstName: u,\n lastName: null,\n email: null,\n pictureUrl: null,\n url: null\n }\n });\n return {data: u}\n }\n }\n }\n )\n }\n }\n}());\n\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('Tasks', TasksService);\n \n /** @ngInject */\n function TasksService($resource, ActivitiConf, AuthService) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/runtime/tasks/:taskId', \n {\n taskId: '@taskId',\n processInstanceId: '@processInstanceId',\n includeProcessVariables: '@includeProcessVariables'\n },\n {\n save: {\n method: 'POST' \n },\n update: {\n method: 'POST'\n }\n });\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('TasksVariables', TasksVariablesService);\n \n /** @ngInject */\n function TasksVariablesService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL+'/service/runtime/tasks/:taskId/variables/:variableName', \n {\n taskId: \"@taskId\", \n variableName: \"@variableName\"},\n {\n update: {\n method: 'PUT', \n params: {\n taskId: \"@taskId\", \n variableName: \"@variableName\"\n }\n },\n save: {\n method: 'POST', \n params: {\n taskId: \"@taskId\"\n }, \n isArray: true\n }\n });\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('ActivitiMetaTables', ActivitiMetaTablesService);\n \n /** @ngInject */\n function ActivitiMetaTablesService($resource, ActivitiConf, AuthService) {\n return $resource(ActivitiConf.activitiRestBaseURL + \n '/service/management/tables/:table/data?orderDescendingColumn=:orderDescendingColumn&size=:size', \n {\n table: '@table',\n orderDescendingColumn: '@orderDescendingColumn',\n size: '@size'\n });\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('SubTasks', SubTasksService);\n \n /** @ngInject */\n function SubTasksService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/runtime/tasks/:taskId/subtasks', \n {taskId: \"@taskId\"},\n {query: {\n method: 'GET', \n isArray: true\n }});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('ActivitiUserRoles', ActivitiUserRolesService);\n \n /** @ngInject */\n function ActivitiUserRolesService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/identity/groups', \n {member: \"@member\"});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('ProcessInstances', ProcessInstancesService);\n \n /** @ngInject */\n function ProcessInstancesService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/runtime/process-instances/:processInstance', \n {\n processInstance: \"@processInstance\"\n }, \n {\n update: {\n method: 'PUT',\n params: {\n action: '@action'\n }\n },\n delete: {\n method: 'DELETE'\n }\n });\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector', [\n \n //Autenticacao para o Activiti\n 'app.activiti-connector.activiti-authentication',\n \n //Manipulador de dados e requisições REST\n 'app.activiti-connector.activiti-data-handler'\n ]);\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector')\n .factory('ProcessInstance', ProcessInstanceService);\n \n /** @ngInject */\n function ProcessInstanceService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/process-instance/:processInstance', \n {processInstance: \"@processInstance\"});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('ProcessDefinition', ProcessDefinitionService);\n \n /** @ngInject */\n function ProcessDefinitionService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/repository/process-definitions/:processDefinitionId', \n {processDefinitionId: \"@processDefinitionId\", size: 1000, suspended: \"false\"}, \n {update: {\n method: 'PUT', \n params: {processDefinitionId: \"@processDefinitionId\"}\n }});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('HistoricTasks', HistoricTasksService);\n \n /** @ngInject */\n function HistoricTasksService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/history/historic-task-instances/:taskId', \n {taskId: \"@taskId\", size: ActivitiConf.activitiUserLoadLimit},\n {update: {\n method: 'PUT', \n params: {taskId: \"@taskId\"}\n }});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('Group', GroupService);\n \n /** @ngInject */\n function GroupService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/identity/groups/:group', \n {group: \"@group\"});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('FormData', FormDataService);\n \n /** @ngInject */\n function FormDataService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + '/service/form/form-data', \n {},\n {\n startTask: {\n method:'GET',\n params: {processDefinitionId: \"@processDefinitionId\"}\n }});\n };\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('FixProcessInstances', FixProcessInstancesService);\n \n /** @ngInject */\n function FixProcessInstancesService($resource, ActivitiConf) {\n return $resource(ActivitiConf.activitiRestBaseURL + \n '/service/runtime/process-instances/:processInstance?includeProcessVariables=true&size=10000', \n {});\n };\n}());\n(function () {\n angular.module('app.activiti-connector.activiti-data-handler')\n .factory('ActivitiConf', activitiConf);\n\n /** @ngInject */\n function activitiConf(ACTIVITI_APP_URL) {\n return {\n activitiRestBaseURL: ACTIVITI_APP_URL,\n activitiUserLoadLimit: '1200'\n };\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.kpi')\n .service('KpiService', KpiService);\n \n /** @ngInject */\n function KpiService($q, $document, $mdDialog, StateFactory, msNavigationService, APP_CFG)\n {\n var vm = this;\n \n // Métodos\n vm.initSideNav = initSideNav;\n\n // Cria o menu lateral dos processos\n function initSideNav()\n { \n \n }\n \n // Exibe o modal de um indicador\n function loadIndicator(indicator) {\n openIndicatorDialog(null, indicator);\n };\n \n /**\n * Abre o modal de um indicador\n *\n * @param ev\n * @param indicator\n */\n function openIndicatorDialog(ev, indicator)\n {\n $mdDialog.show({\n controller : 'IndicatorDialogController',\n controllerAs : 'vm',\n templateUrl : 'app/main/home/apps/kpi/dialogs/indicators/indicator-dialog.html',\n parent : angular.element($document.body),\n targetEvent : ev,\n clickOutsideToClose: true,\n locals : {\n Indicator : indicator,\n event: ev\n }\n })\n .then(function(){\n //console.log('Saiu!');\n });\n }\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi')\n .controller('KpiController', KpiController);\n\n /** @ngInject */\n function KpiController(fuseTheming, $q, $mdDialog, KpiDataHandlerService, KpiDepartments, KpiIndicators, KpiNonCompliances, $state, $rootScope, AuthService, APP_CFG, Tasks) {\n var vm = this;\n vm.departments = null;\n vm.indicators = null;\n vm.selectedDepartment = {\n name: 'Carregando...'\n };\n vm.lastUpdate = {};\n vm.canSelectDepartment = true;\n vm.statusFilters = [{\n name: 'Ativos',\n value: true\n },\n {\n name: 'Inativos',\n value: false\n }\n ];\n vm.kpiMeasureUnits = {\n percent: 'Percentual',\n pacient: 'Paciente',\n pacientday: 'Paciente/Dia',\n pacientbed: 'Paciente/Leito',\n bedday: 'Leito/Dia',\n day: 'Dias',\n hour: 'Horas',\n minute: 'Minutos',\n currency: 'Moeda',\n unit: 'Unidade',\n kg: 'Kilograma',\n ml: 'Mililitros',\n pmil: 'por Mil'\n }\n\n vm.selectedActiveFilter = vm.statusFilters[0];\n\n $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n vm.canSelectDepartment = toState.name === 'app.kpi';\n });\n\n vm.themes = fuseTheming.themes;\n\n // Métodos\n vm.selectDepartment = selectDepartment;\n vm.openIndicatorDialog = openIndicatorDialog;\n vm.openManualResultDialog = openManualResultDialog;\n vm.openIndicatorResults = openIndicatorResults;\n vm.newIndicator = newIndicator;\n vm.filterActive = filterActive;\n vm.toggleActive = toggleActive;\n vm.selectActiveFilter = selectActiveFilter;\n vm.showConfirm = showConfirm;\n\n //Obtém a listagem de departamentos\n // vm.departments = KpiDepartments.getDepartments(AuthService.authSessions.pentahoSession.username);\n\n // vm.departments.$loaded(function () {\n // if (vm.departments.length > 0)\n // selectDepartment(vm.departments[0]);\n // else\n // vm.selectedDepartment = {\n // name: 'Nenhum disponível'\n // };\n // });\n\n KpiDepartments.getDepartamentos().then(function success(response) {\n vm.departments = KpiDepartments.format(response.data.documents);\n if (vm.departments.length > 0)\n selectDepartment(vm.departments[0]);\n else\n vm.selectedDepartment = {\n name: 'Nenhum disponível'\n };\n });\n\n // Vai para a view dos resultados do indicador\n function openIndicatorResults(indicator) {\n if (APP_CFG['ACTIVE_APPS'].indexOf('activiti') > -1) {\n $state.go('app.kpi.results', {\n departmentId: indicator.departmentId,\n departmentName: vm.selectedDepartment.name,\n measureUnit: vm.kpiMeasureUnits[indicator.measureUnit],\n indicatorId: indicator.id\n });\n }\n }\n\n // Seleciona o departamento\n function selectDepartment(department) {\n vm.selectedDepartment = department;\n // Obtém a listagem de indicadores para o departamento\n KpiIndicators.getIndicadores(department.id).then(function success(response) {\n vm.indicators = KpiIndicators.format(response.data.documents);\n });\n }\n\n // Abre o modal de edição/criação do indicador\n function openIndicatorDialog(ev, indicator, newIndicator) {\n $mdDialog.show({\n controller: 'IndicatorDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/kpi/dialogs/indicators/indicator-dialog.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n locals: {\n Indicator: indicator,\n departmentId: vm.selectedDepartment.id,\n newIndicator: newIndicator\n }\n }).then(function (result) {\n selectDepartment(vm.selectedDepartment);\n });\n }\n\n // Abre o modal de criação de resultado manual\n function openManualResultDialog(ev, indicator) {\n $mdDialog.show({\n controller: 'ManualResultsDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/kpi/dialogs/manual-results/manual-results-dialog.html',\n parent: angular.element(document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n locals: {\n Indicator: indicator,\n departmentId: vm.selectedDepartment.id\n }\n }).then(function (result) {\n vm.lastUpdate[indicator.id] = new Date();\n selectDepartment(vm.selectedDepartment);\n });\n }\n\n function showConfirm(ev, kpi) {\n\n var texto = (angular.isUndefined(kpi.active) || kpi.active === true) ? 'inativar' : 'ativar';\n\n var confirm = $mdDialog.confirm()\n .title('Confirmar ação')\n .textContent('Deseja realmente ' + texto + ' o indicador?')\n .targetEvent(ev)\n .ok('Sim')\n .cancel('Não');\n $mdDialog.show(confirm).then(function () {\n toggleActive(kpi);\n }, function () {});\n };\n\n function newIndicator(ev) {\n openIndicatorDialog(ev, null, true);\n }\n\n function filterActive(item) {\n return vm.selectedActiveFilter.value ? item.active !== false : item.active === false;\n }\n\n function toggleActive(indicator) {\n indicator.active = indicator.active === false ? true : false;\n KpiIndicators.salvar(indicator, true);\n }\n\n function selectActiveFilter(status) {\n vm.selectedActiveFilter = status;\n }\n\n /*vm.fixModelNonCompliancesDepartments = fixModelNonCompliancesDepartments;\n function fixModelNonCompliancesDepartments()\n {\n console.log('Iniciou!');\n KpiNonCompliances.fixModelNonCompliancesDepartments();\n }\n \n vm.fixModelNonCompliancesItems = fixModelNonCompliancesItems;\n function fixModelNonCompliancesItems()\n {\n console.log('Iniciou!');\n KpiNonCompliances.fixModelNonCompliancesItems();\n }\n \n vm.fixModelNonCompliancesDepartmentsSent = fixModelNonCompliancesDepartmentsSent;\n function fixModelNonCompliancesDepartmentsSent()\n {\n console.log('Iniciou!');\n KpiNonCompliances.fixModelNonCompliancesDepartmentsSent();\n }\n \n vm.fixModelSurvey = fixModelSurvey;\n function fixModelSurvey()\n {\n console.log('Iniciou!');\n KpiNonCompliances.fixModelSurvey();\n }\n \n vm.fixDateFormat = fixDateFormat;\n function fixDateFormat()\n {\n console.log('Iniciou!');\n KpiNonCompliances.refixDateFormat();\n }\n \n vm.fixActiveNC = fixActiveNC;\n function fixActiveNC()\n {\n KpiNonCompliances.fixActiveNC();\n }\n \n function genInsert()\n {\n KpiNonCompliances.genInsert();\n }\n \n vm.fix = fix;\n function fix()\n {\n genInsert();\n }*/\n }\n}());\n\n/*angular.module('sghi')\n.controller('KpiCtrl', function ($location, $mdDialog, $mdMedia, $rootScope, $routeParams, $scope,\n Department, Kpi, KPIValuesSrvc, SGHiEndpoint) {\n\n if( !$rootScope.loggedin ) $location.path('/');\n \n $scope.departmentKey = $routeParams.departmentKey;\n $scope.department = Department.get($scope.departmentKey);\n $scope.kpis = Kpi.all($scope.departmentKey);\n\n function blank(){\n return { \n \"code\": \"\",\n \"name\": \"\",\n \"description\": \"\",\n \"descriptionOfMeasureFormula\": \"\",\n \"category\": \"\",\n \"measureUnit\":\"\",\n \"verificationFrequency\": \"\",\n \"objectives\": {},\n \"targets\": []\n };\n }\n\n $scope.kpi = blank();\n\n $scope.add = function(ev) {\n $scope.kpi = blank();\n $scope.openEditForm(ev);\n };\n\n $scope.save = function(){\n Kpi.save($scope.kpi).then(function(){\n $scope.convertExtractionQueryToCDA($scope.kpi.$id);\n $scope.kpi = blank();\n });\n $mdDialog.hide();\n };\n \n $scope.convertExtractionQueryToCDA = function(kpiKey){\n SGHiEndpoint.query({\n endpoint: 'convert_extraction_query_to_cda', \n paramdepartment_key: $scope.departmentKey,\n paramkpi_key: kpiKey\n }).$promise.then(function(d){ //todo: melhorar o tratamento incluido msg de status e resultado\n console.log(d);\n });\n };\n\n $scope.delete = function(o){\n if (!confirm(\"Confirma a exclusão?\")) return;\n Kpi.delete(o);\n $scope.kpi = blank();\n };\n\n $scope.edit = function(o){\n $scope.kpi = o;\n $scope.openEditForm();\n };\n\n $scope.cancel = function(){\n $scope.kpi = blank();\n $mdDialog.hide();\n };\n\n $scope.addTarget = function(){\n if(!$scope.kpi.targets) $scope.kpi.targets = [];\n $scope.kpi.targets.push($scope.selectedTarget);\n $scope.selectedTarget = {};\n };\n\n $scope.kpiMeasureUnits = [\n { measureUnitId:'percent', measureUnitName:'Percentual', measureUnitSymbol:'%' },\n { measureUnitId:'pacient', measureUnitName:'Paciente', measureUnitSymbol:'pac' },\n { measureUnitId:'pacientday', measureUnitName:'Paciente/Dia', measureUnitSymbol:'pac/d' },\n { measureUnitId:'pacientbed', measureUnitName:'Paciente/Leito', measureUnitSymbol:'pac/l' },\n { measureUnitId:'bedday', measureUnitName:'Leito/Dia', measureUnitSymbol:'lei/d' },\n { measureUnitId:'day', measureUnitName:'Dias', measureUnitSymbol:'dia' },\n { measureUnitId:'minute', measureUnitName:'Minutos', measureUnitSymbol:'min' },\n { measureUnitId:'currency', measureUnitName:'Moeda', measureUnitSymbol:'R$' },\n { measureUnitId:'unit', measureUnitName:'Unidade', measureUnitSymbol:'un' },\n { measureUnitId:'kg', measureUnitName:'Kilograma', measureUnitSymbol:'kg' }\n ];\n\n $scope.kpiCategories = ['Estrategico','Operacional','Tático/Operacional','Risco','Operacional e Risco','Operacional e Estratégico'];\n\n $scope.kpiVerificationFrequencies = ['Mensal','Bimestral','Trimestral','Quadrimestral','Semestral','Anual','Bianual'];\n\n $scope.orientations = [{orientation:1, orientationDesc:'Quanto maior melhor'},{orientation:-1, orientationDesc:'Quanto menor melhor'}];\n\n $scope.kpiDataSources = ['SGHDW', 'SGHDADOS'];\n\n $scope.kpiQueryTypes = ['SQL', 'MDX'];\n\n var originatorEv;\n $scope.openMenu = function($mdOpenMenu, ev) {\n originatorEv = ev;\n $mdOpenMenu(ev);\n };\n\n $scope.kpisValuesData = {};\n $scope.kpisValuesLabels = {};\n $scope.kpisValuesSeries = {};\n\n $scope.kpis.$loaded().then(function(){\n angular.forEach($scope.kpis, function(k,v){\n var id = $scope.kpis[v].$id;\n var data = KPIValuesSrvc.query({paramid_indicador: id, path: '/kpi/kpi.cda', dataAccessId: 'kpi'});\n\n data.$promise.then(function(d){\n $scope.kpisValuesLabels[id] = $scope.getLabelsFromCDAResult(d);\n $scope.kpisValuesData[id] = $scope.getDataFromCDAResult(d);\n $scope.kpisValuesSeries[id] = $scope.getSeriesFromCDAResult(d);\n });\n });\n });\n\n $scope.getSeriesFromCDAResult = function(rs){\n var result = [];\n angular.forEach(rs.metadata, function(d,idx){\n if (idx > 0) {\n result.push(d['colName']);\n }\n });\n return result;\n };\n\n $scope.getLabelsFromCDAResult = function(rs){\n var result = [];\n angular.forEach(rs.resultset, function(d,idx){\n result.push(d[0]);\n });\n return result;\n };\n\n $scope.getDataFromCDAResult = function(rs){\n var len = rs.metadata.length || 1;\n var result = new Array(len-1);\n for(var i=0; i < result.length; i++) {\n result[i] = [];\n angular.forEach(rs.resultset, function(d){\n result[i].push(d[i+1]);\n });\n }\n return result;\n };\n \n $scope.updateData = function(kpiKey){\n SGHiEndpoint.query({\n endpoint: 'load_kpi_values', \n paramdepartment_key: $scope.departmentKey,\n paramkpi_key: kpiKey\n }).$promise.then(function(d){ //todo: melhorar o tratamento incluido msg de status e resultado\n console.log(d);\n });\n };\n \n});\n\n\nangular.module('sghi')\n .controller('KpiDialogCtrl', function ($scope, $mdDialog) {\n });\n\n*/\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.pentaho', [])\n .config(config);\n\n /** @ngInject */\n function config(msNavigationServiceProvider)\n { \n \n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.pentaho')\n .service('PentahoService', PentahoService);\n\n /** @ngInject */\n function PentahoService($q, msUtils, msNavigationService, PentahoDataHandlerService, PentahoConnectorService, StateFactory, $rootScope, PENTAHO_APP_URL, APP_CFG, $state, AuthService) {\n var\n vm = this,\n mountNavTree = mountNavTreeFn,\n objTree = [];\n\n var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\n var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;\n var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;\n\n vm.initSideNav = initSideNav;\n vm.refreshMenu = refreshMenu;\n var ACTIVE_APPS = APP_CFG['ACTIVE_APPS'];\n var FEATURE_FLAGS = APP_CFG['FEATURE_FLAGS'] || {};\n\n var transformations = {\n def1: function (url) {\n return url + '/generatedContent';\n },\n def2: function (url) {\n return url + '/viewer';\n },\n def3: function (url) {\n return url + '/content';\n },\n def4: function (url) {\n return url + '/run';\n }\n }\n\n var extensionsAdapter = {\n saiku: transformations.def1,\n xcdf: transformations.def1,\n wcdf: transformations.def1,\n prpt: transformations.def2,\n easy: transformations.def1,\n analysis: transformations.def1,\n xaction: transformations.def1,\n xjpivot: transformations.def1,\n htm: transformations.def3,\n html: transformations.def3,\n vdd: transformations.def4\n }\n\n function sortPentahoNavbar(a, b) {\n if (a.level != b.level) {\n return a.level < b.level ? -1 : 1;\n }\n if (!(a.dnf && b.dnf) && a.title != b.title) {\n return a.title < b.title ? -1 : 1;\n }\n return 0;\n }\n\n function refreshMenu() {\n var request = window.indexedDB.open(\"menu\");\n var userName = AuthService.authSessions.activitiSession.username;\n request.onsuccess = function (event) {\n var db = event.target.result;\n var menuStore = db.transaction(\"menu\" + userName, \"readwrite\").objectStore(\"menu\" + userName);\n var deleteAction = menuStore.delete(userName);\n\n deleteAction.onsuccess = function (event) {\n initSideNav();\n };\n\n deleteAction.onerror = function (event) {\n initSideNav();\n };\n }\n }\n\n function initSideNav() {\n var deferred = $q.defer();\n var userName = AuthService.authSessions.activitiSession.username;\n if (indexedDB) {\n var menu = undefined;\n var request = indexedDB.open(\"menu\");\n request.onerror = function(e) {\n console.log(\"Error when trying to read 'menu' from indexedDB\")\n console.log(e)\n getMenu(deferred);\n }\n request.onsuccess = function (event) {\n try {\n var db = event.target.result;\n var menuStore = db.transaction(\"menu\" + userName, \"readwrite\").objectStore(\"menu\" + userName);\n var menuRequest = menuStore.get(userName);\n menuRequest.onsuccess = function (event) {\n if (event.target && event.target.result && event.target.result.data) {\n var dataHoraInsercao = event.target.result.dataHora;\n if (!angular.isDefined(dataHoraInsercao)) {\n getMenu(deferred);\n } else {\n var dataAtual = moment().toDate();\n var diff = moment(dataAtual).diff(dataHoraInsercao, 'days');\n\n if (diff > 2) {\n getMenu(deferred);\n } else {\n init(event.target.result.data, deferred);\n }\n }\n } else {\n getMenu(deferred);\n }\n }\n } catch (error) {\n getMenu(deferred);\n }\n };\n } else {\n getMenu(deferred);\n }\n\n return deferred.promise;\n }\n\n function getMenu(deferred) {\n var userName = AuthService.authSessions.activitiSession.username;\n console.info(\"Calling BISERVER to get the repository content...\")\n PentahoConnectorService.dh.getDirStructure(':').then(function (r) {\n console.info(\"Got response for BISERVER repository content...\")\n $rootScope.$broadcast('repository-content-loaded');\n if (indexedDB) {\n var request = indexedDB.open(\"menu\", new Date().getTime());\n request.onupgradeneeded = function (event) {\n var db = event.target.result;\n\n var objectStore = db.createObjectStore(\"menu\" + userName, {\n keyPath: \"id\"\n });\n\n objectStore.transaction.oncomplete = function (event) {\n var menuStore = db.transaction(\"menu\" + userName, \"readwrite\").objectStore(\"menu\" + userName);\n var menu = {\n id: userName,\n data: r.data,\n dataHora: new Date()\n }\n menuStore.add(menu);\n };\n };\n }\n init(r.data, deferred);\n }, function (e) {\n /*FAZER TRATAMENTO DE ERROS COM BASE NO STATUS DA RESPOSTA*/\n console.log('Falha ao obter listagem do diretório!');\n deferred.reject();\n });\n }\n\n function hasFeatureFlag(f) {\n var ff = APP_CFG['FEATURE_FLAGS'];\n return (ff && ff[f])\n }\n\n function init(data, deferred) {\n var treeNav = data;\n\n msNavigationService.saveItem('ANALYTICS', {\n title: 'ANALYTICS',\n group: true,\n weight: 3\n });\n\n if (FEATURE_FLAGS['tasks'] == true) {\n defineMenuItem(\n '',\n 'newtasks',\n 'Tarefas',\n false,\n '/pentaho/api/repos/ppa/static/tasks.html',\n 'icon-checkbox-marked',\n null,\n 0,\n null\n )\n }\n\n if (FEATURE_FLAGS['old-kpi'] == true) {\n msNavigationService.saveItem('old-kpi', {\n title: 'Indicadores',\n icon: 'icon-chart-histogram',\n state: 'app.kpi',\n weight: 3\n });\n }\n\n if (FEATURE_FLAGS['kpi'] == true) {\n defineMenuItem(\n '',\n 'kpi',\n 'Indicadores',\n false,\n '/pentaho/api/repos/ppa/static/public/kpi.html',\n 'icon-chart-histogram',\n null,\n 0,\n null\n );\n }\n\n // Cria o state estático para o Saiku\n defineMenuItem('', 'nova-analise', 'Nova Análise', false, '/pentaho/content/saiku-ui/index.html?biplugin5=true&lang=pt&splash=false', 'icon-cube-outline', null, 0, null);\n\n // Cria o state estático para o Easy\n hasFeatureFlag('easy') &&\n defineMenuItem('', 'novo-painel', 'Novo Painel', false, '/pentaho/api/repos/%3Aplugins%3AEasyDashboards.xcdf/generatedContent', 'icon-apps', null, 0, null);\n\n if ($rootScope.userContext) {\n if (($rootScope.userContext.isAdmin\n || PentahoDataHandlerService.hasRole('Power User', $rootScope.userContext.userRoles))\n && hasFeatureFlag('query-runner')) {\n defineMenuItem(\n '',\n 'nova-consulta',\n 'Nova Consulta',\n false,\n '/pentaho/api/repos/ppa/static/public/query-runner.html',\n 'icon-play',\n null,\n 0,\n null\n );\n }\n }\n\n // Define menu para 'Playlists'\n defineMenuItem('', 'playlists', 'Playlists', false, '/pentaho/api/repos/ppa/static/play.html', 'icon-presentation-play', null, 0, null);\n\n createNavTree(treeNav);\n\n if ($rootScope.userContext && $rootScope.userContext.isAdmin) {\n // Creates the submenu for 'Configurações'\n msNavigationService.saveItem('SETTINGS', {\n title: 'CONFIGURAÇÕES',\n group: true,\n weight: 4\n });\n\n defineMenuItem('', 'ect', 'Notificações Automáticas', false, '/pentaho/api/repos/ppa/static/ect.html', 'icon-email', null, 0, null);\n // Permissões OLAP\n defineMenuItem('', 'olapperm', 'Permissões OLAP', false, '/pentaho/api/repos/ppa/static/olapperm.html', 'icon-security', null, 0, null);\n // Datasets\n }\n\n deferred.resolve();\n $rootScope.$emit('finishReload');\n }\n\n function createNavTree(treeNav) {\n mountNavTree(treeNav, '', 0);\n\n objTree.sort(sortPentahoNavbar);\n angular.forEach(objTree, function (value) {\n defineMenuItem(value.path, value.id, value.title, value.group, value.url, value.icon, value.urlPath, value.level, value.transformation);\n });\n }\n\n /* Percorre os itens recursivamente para criar os estados */\n function mountNavTreeFn(treeNode, dp, lvl) {\n var re = new RegExp('^[-._]');\n angular.forEach(treeNode, function (value, key) {\n if (key === 'file') {\n if (value.folder === \"true\") {\n dp = (dp || '') + '/' + value.title;\n } else {\n if (dp)\n dp = dp + '/' + value.title;\n if ((value.hidden === \"false\")) {\n var tmp = isValidExtension(value.name);\n if (tmp.valid) {\n if (!re.test(value.title)) {\n objTree.push({\n path: dp || value.path,\n id: value.id,\n title: value.title,\n group: false,\n url: null,\n icon: 'icon-view-dashboard',\n urlPath: value.path,\n level: lvl,\n transformation: tmp.urlTransformation\n });\n }\n }\n }\n }\n } else {\n var node = null;\n if (value && value.file) {\n node = {};\n node.file = value.file;\n node.subNode = value.children;\n } else if (value) {\n node = value;\n }\n mountNavTree(node, dp, lvl + 1);\n }\n });\n }\n\n function isValidExtension(fileName) {\n var availableExt = [\n 'saiku',\n 'xcdf',\n 'wcdf',\n 'prpt',\n 'easy',\n 'analysis',\n 'xaction',\n 'xjpivot',\n 'htm',\n 'html',\n 'vdd'\n ]\n\n var ext = fileName.split('.');\n ext = ext[ext.length - 1];\n //return availableExt.contains(ext);\n return {\n valid: availableExt.contains(ext),\n urlTransformation: extensionsAdapter[ext]\n }\n }\n\n // $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {\n // if (toState.name.indexOf('novaanalise') > -1) {\n // msUtils.clearLocalStorage();\n // }\n // });\n\n function containsState(stateName) {\n return _.find($state.get(), function (i) {\n return i.name === stateName;\n });\n }\n\n /* Cria o menu */\n function defineMenuItem(_path, _id, title, group, _url, icon, urlPath, level, transformation) {\n var url, path, id;\n\n if (_url) {\n url = _url;\n path = _path;\n } else {\n url = PENTAHO_APP_URL + '/api/repos/' + urlPath.toString().replace(/\\//g, '%3A');\n if (transformation)\n url = transformation(url);\n\n // Troca as barras por pontos para serem usados como níveis dos estados\n path = _path.split('/');\n path = path.slice(1, path.length - 1);\n path = path.join('.') + '.';\n }\n\n // Remove os traços para utilizar como estado\n id = _id.toString();\n id = id.replace(/-/g, '');\n\n // Se não for um grupo\n if (!group) {\n // Cria o estado\n\n var newState = {\n name: 'app.analytics-' + id,\n title: title,\n options: {\n parent: 'app',\n resolve: {\n tabControl: function () {\n var tabData = {\n title: title,\n id: id,\n url: url\n }\n\n // Controle de abas recentes\n /*var lsData;\n var d = localStorageService.get('recent-analytics');\n\n if (d) {\n lsData = {\n data: JSON.parse(d).data\n };\n } else {\n lsData = {\n data: []\n };\n }\n\n lsData.data.push({datetime: new Date(), title: title, state: 'app.analytics-' + id});\n\t\t\t\t\t\t\t\tconsole.log('app.analytics-' + id)\n localStorageService.set('recent-analytics', angular.toJson(lsData));\n $rootScope.$broadcast('restorestate');*/\n // ---- Controle de abas recentes\n\n // if (id == 'novaanalise') {\n // msUtils.clearLocalStorage();\n // }\n\n // Abre a aba requisitada\n return PentahoConnectorService.viewer.openTab(tabData);\n }\n },\n authenticate: true\n }\n }\n if (!containsState(newState.name)) {\n StateFactory(newState);\n }\n\n var tmpPath = path.split('.');\n var parent = '';\n var counter = 2;\n /*msNavigationService.saveItem(tmpPath[0], {\n \ttitle : tmpPath[0],\n \tweight : 3\n });*/\n\n if (path != undefined && path.indexOf('plugins.') < 0) {\n\n angular.forEach(tmpPath, function (value, key) {\n parent = parent + (parent != '' ? '.' : '') + value;\n counter++;\n if (!containsState(parent)) {\n msNavigationService.saveItem(parent, {\n title: value,\n weight: counter,\n hidden: parent.indexOf('plugins') >= 0 ? true : false\n });\n }\n });\n\n // Cria o item de menu\n if (title.indexOf('.') != -1) {\n title = title.substr(0, title.indexOf('.'));\n }\n\n if (!containsState(path + id)) {\n msNavigationService.saveItem(path + id, {\n title: title,\n icon: icon || 'icon-tile-four',\n state: 'app.analytics-' + id,\n weight: 3,\n hidden: path.indexOf('plugins') >= 0 ? true : false\n });\n }\n }\n }\n }\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.pentaho')\n .controller('PentahoController', PentahoController);\n\n /** @ngInject */\n function PentahoController()\n {\n var vm = this;\n }\n})();\n\n(function () {\n 'use strict';\n\n angular.module('app.admintools')\n .service('AdminToolsService', AdminToolsService);\n\n /** @ngInject */\n function AdminToolsService($q, $document, $mdDialog, ProcessDefinition, StateFactory, msNavigationService, User, FormData, ActivitiDataHandlerService, ACTIVITI_APP_URL, APP_CFG, $rootScope, $state) {\n var vm = this;\n\n vm.initSideNav = initSideNav;\n\n // Cria o menu lateral dos processos\n function initSideNav() {\n if (($rootScope.userContext.isDataAdministrator)\n || ($rootScope.userContext.isAdmin)\n || ($rootScope.userContext.isQualityManager)) {\n // Cria o grupo do menu\n msNavigationService.saveItem('admin', {\n title: 'ADMINISTRAÇÃO',\n group: true,\n weight: 4\n });\n\n // Navigation\n msNavigationService.saveItem('admin.data', {\n title: 'Dados',\n icon: 'icon-checkbox-marked',\n state: 'app.admintools',\n stateParams: {\n ref: 'datamanagement'\n },\n weight: 4\n });\n\n // Navigation\n msNavigationService.saveItem('admin.department', {\n title: 'Microssistemas',\n icon: 'icon-checkbox-marked',\n state: 'app.admintools.department',\n weight: 4\n });\n\n // Navigation\n msNavigationService.saveItem('admin.userdepartments', {\n title: 'Usuários e Microssistemas',\n icon: 'icon-checkbox-marked',\n state: 'app.admintools.usersdepartments',\n weight: 4\n });\n }\n }\n }\n}());\n\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools')\n .controller('AdminToolsController', AdminToolsController);\n \n /** @ngInject */\n function AdminToolsController(fuseTheming, $state, $stateParams, AdminTools, APP_CFG)\n {\n var vm = this;\n vm.tools = null;\n vm.selectedTool = {name: 'Carregando...'};\n \n vm.showToolSelector = true;\n \n vm.themes = fuseTheming.themes;\n \n // Métodos\n vm.selectTool = selectTool;\n \n vm.tools = [\n {name: 'Associação de cadastros', stateRef: 'dbassociation'},\n {name: 'Planos de ação sem departamento', stateRef: 'acwithoutdept'}\n ]\n \n selectTool(vm.tools[0]);\n \n // Seleciona o departamento\n function selectTool(tool)\n {\n vm.selectedTool = tool;\n if (vm.tools.length > 0)\n $state.go('app.admintools.' + vm.selectedTool.stateRef);\n }\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.activiti')\n .service('ActivitiService', ActivitiService);\n\n /** @ngInject */\n function ActivitiService($q, $document, msUtils, $mdDialog, ProcessDefinition, StateFactory, msNavigationService, User, FormData, ActivitiDataHandlerService, ACTIVITI_APP_URL, PENTAHO_APP_URL, APP_CFG, $rootScope, $state) {\n var vm = this;\n var FEATURE_FLAGS = APP_CFG['FEATURE_FLAGS'] || {};\n\n vm.navItemPosition = 0;\n vm.initSideNav = initSideNav;\n\n // Cria o menu lateral dos processos\n function initSideNav() {\n var deferred = $q.defer();\n\n ProcessDefinition.get(function (res) {\n var processes = res.data,\n name = '';\n\n // Cria o grupo do menu\n msNavigationService.saveItem('processos', {\n title: 'PROCESSOS',\n group: true,\n weight: 1\n });\n\n // Navigation\n if (FEATURE_FLAGS['tasks'] == true) {\n // Aqui deveria definir uma entrada para tasks, mas não consegui\n // fazer funcionar\n } else {\n msNavigationService.saveItem('processos.tasks', {\n title: 'Tarefas',\n icon: 'icon-checkbox-marked',\n state: 'app.tasks',\n weight: 1\n });\n }\n\n var external = APP_CFG['EXTERNAL_APPS'];\n\n if (external) {\n\n if (external.sghq.active) {\n if (external.sghq.items.minutes) {\n msNavigationService.saveItem('minutes', {\n title: 'Atas de Reuniões',\n icon: 'icon-document',\n state: 'app.minutes',\n weight: 2\n });\n }\n\n if (external.sghq.items.nonCompliances) {\n msNavigationService.saveItem('non-compliances', {\n title: 'Notificações',\n icon: 'icon-document',\n state: 'app.non-compliances',\n weight: 2\n });\n }\n\n if ($rootScope.userContext.isAdmin || $rootScope.userContext.isQualityManager) {\n msNavigationService.saveItem('administracao', {\n title: 'Administração',\n icon: 'icon-tile-four',\n weight: 1\n });\n\n if (external.sghq.items.eventTypes) {\n msNavigationService.saveItem('administracao.tipoEvento', {\n title: 'Tipos de Eventos',\n state: 'app.event-types'\n });\n }\n\n if (external.sghq.items.nonCompliancesTypes) {\n msNavigationService.saveItem('administracao.tiposNaoConformidades', {\n title: 'Tipos de Notificações',\n state: 'app.non-compliances.types'\n });\n }\n\n if (external.sghq.items.patternsNonCompliances) {\n msNavigationService.saveItem('administracao.patterns', {\n title: 'Padrões de Não Conformidade',\n state: 'app.non-compliances.patterns'\n });\n }\n }\n }\n }\n\n var path_prefix = ''; //Caso seja necessário um dia criar um prefixo para os estados, basta setá-lo aqui\n var pdList = {};\n\n angular.forEach(processes, function (value, key) {\n //if (!re.test(value.name)) {\n name = value.name || ActivitiDataHandlerService.getNameFromResource(value.resource);\n\n if (!pdList[value.key]) {\n pdList[value.key] = {};\n pdList[value.key].version = value.version;\n pdList[value.key].name = name;\n pdList[value.key].id = value.id;\n } else {\n if (pdList[value.key].version < value.version) {\n pdList[value.key].version = value.version;\n pdList[value.key].name = name;\n pdList[value.key].id = value.id;\n }\n }\n //}\n });\n\n angular.forEach(pdList, function (value, key) {\n // Verifica se o estado já está criado, para não tentar criá-lo novamente\n if (!$state.get('app.tasks.' + path_prefix + value.id)) {\n defineMenuItem(value.id, value.name, path_prefix);\n }\n });\n\n $rootScope.$broadcast('loadnavpentaho');\n\n deferred.resolve();\n }, function (e) {\n console.log('Falha ao obter os dados do Activiti!');\n deferred.reject();\n });\n\n return deferred.promise;\n }\n\n // Cria o menu lateral\n function defineMenuItem(id, name, path_prefix) {\n var path = path_prefix,\n newState = {\n name: 'app.tasks.' + path + id,\n title: name,\n options: {\n parent: 'app.tasks',\n resolve: {\n Process: getProcesses\n },\n authenticate: true\n }\n };\n StateFactory(newState);\n\n var re = new RegExp('^[-._]');\n if (!re.test(name)) {\n // Cria o item de menu\n msNavigationService.saveItem(path + id, {\n title: name,\n icon: 'icon-stackoverflow',\n state: 'app.tasks.' + path + id,\n weight: 2\n });\n }\n\n getProcesses.$inject = ['ProcessDefinition'];\n\n function getProcesses(ProcessDefinition) {\n var data = ProcessDefinition.get({\n \"activiti_url_base\": ACTIVITI_APP_URL,\n \"processDefinitionId\": id,\n \"size\": 1000\n });\n return data\n .$promise\n .then(function (res) {\n loadProcessDefinition(res);\n return res;\n }, function (err) {\n console.log('ERRO: ', err);\n return null;\n });\n }\n }\n\n // Exibe o modal de um processo\n function loadProcessDefinition(process) {\n FormData\n .get({\n \"processDefinitionId\": process.id\n }, function (res) {\n ActivitiDataHandlerService.extractForm(process, res);\n openProcessDialog(null, process);\n }, function (err) {\n if (err.status === 404) {\n console.log('Recurso não encontrado!');\n openProcessDialog(null, process);\n }\n });\n };\n\n /**\n * Open new process dialog\n *\n * @param ev\n * @param process\n */\n function openProcessDialog(ev, process) {\n $mdDialog.show({\n controller: 'ProcessDialogController',\n controllerAs: 'vm',\n templateUrl: 'app/main/home/apps/activiti/dialogs/process/process-dialog.html',\n parent: angular.element($document.body),\n targetEvent: ev,\n clickOutsideToClose: true,\n locals: {\n Process: process,\n event: ev\n }\n })\n .then(function (e) {\n //startProcess(process, ev);\n console.log(e);\n });\n }\n\n\n }\n}());\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.activiti')\n .controller('TasksController', TasksController);\n\n /** @ngInject */\n function TasksController($document, $mdDialog, $mdSidenav, TasksList, msNavigationService, AuthService, $rootScope, ActivitiConnectorService, ActivitiDataHandlerService, Tasks, HistoricTasks, FormData, ProcessDefinition, User, $location, StateFactory, $state, $ocLazyLoad, $http, KpiDepartments)\n {\n var vm = this;\n \n /*****************************************************/\n /***** ENGINE *****/\n /*****************************************************/\n vm.tasks;\n vm.processes;\n vm.users;\n vm.refreshing = false;\n vm.history = false;\n vm.tasksType = 'involved';\n vm.user = AuthService.authSessions.activitiSession.username;\n vm.loadTasksType = loadTasksType; // Carrega as tarefas pelo tipo\n vm.loadTasks = loadTasks; // Carrega as tarefas\n vm.loadUsers = loadUsers; // Carrega os usuários\n vm.loadTask = loadTask; // Exibe o modal de uma tarefa\n vm.loadTaskWithFormKey = loadTaskWithFormKey; // Exibe o modal de uma tarefa com form key\n vm.toTrustedHTML = toTrustedHTML;\n\n // Data\n vm.tasks = TasksList.data;\n \n // Recarrega as tarefas quando $rootScope for atualizado\n $rootScope.$on('refreshtasks', function (event, data) {\n vm.loadTasks();\n });\n \n vm.loadUsers();\n\n // Define os parâmetros da query\n function getTasksQuery()\n {\n switch (vm.tasksType){\n case 'involved':\n return {\n \"size\": 1000, \n \"involvedUser\": AuthService.authSessions.activitiSession.username,\n \"includeProcessVariables\": true\n }\n break;\n case 'owned':\n return {\n \"size\": 1000, \n \"owner\": AuthService.authSessions.activitiSession.username,\n \"includeProcessVariables\": true\n }\n break;\n case 'unassigned':\n return {\n \"size\": 1000, \n \"unassigned\": true,\n \"includeProcessVariables\": true\n }\n break;\n case 'assignee':\n return {\n \"size\": 1000, \n \"assignee\": AuthService.authSessions.activitiSession.username,\n \"includeProcessVariables\": true\n }\n break;\n defaul:\n return {\n \"size\": 1000, \n \"candidateUser\": AuthService.authSessions.activitiSession.username,\n \"includeProcessVariables\": true\n }\n }\n return obj;\n }\n\n // Carrega as tarefas pelo tipo\n function loadTasksType(tasksType) \n {\n vm.tasksType = tasksType;\n vm.loadTasks();\n }\n\n // Carrega as tarefas\n function loadTasks(completed) \n {\n vm.refreshing = true;\n $rootScope.loadingProgress = true;\n if (completed) {\n vm.history = true;\n vm.tasks = null;\n HistoricTasks.get(getTasksQuery(), function(res){\n vm.tasks = res.data;\n prepareTasksDateFormat();\n prepareTasksLinks();\n vm.refreshing = false;\n $rootScope.loadingProgress = false;\n });\n } else {\n vm.history = false;\n Tasks.get(getTasksQuery(), function(res){\n vm.tasks = res.data;\n prepareTasksDateFormat();\n prepareTasksLinks();\n vm.refreshing = false;\n $rootScope.loadingProgress = false;\n });\n }\n }\n \n // Carrega os usuários\n function loadUsers()\n {\n User.get(function(res){\n vm.users = res.data;\n });\n }\n\n // Exibe o modal de uma tarefa\n function loadTask(task) \n {\n FormData.get({\"taskId\": task.id}, function (res) {\n ActivitiDataHandlerService.extractForm(task, res);\n openTaskDialog(null, task);\n }, function (err) {\n if (err.status === 404) {\n openTaskDialog(null, task);\n } else {\n console.log(err);\n }\n });\n };\n\n // Exibe o modal de uma tarefa com form key\n /*\n As formKey's deverão seguir o modelo:\n state-name|external-app-name:var1:var2:var3...varN\n \n ex: non-compliance-action-plan|sghq:\n */\n function loadTaskWithFormKey(task)\n {\n var \n destination = task.formKey,\n destPath, mod_index;\n \n if (destination === '/non-compliance/:nonComplianceId/action-plan') {\n mod_index = [];\n mod_index[0] = 'non-compliance-action-plan';\n } else {\n destPath = destination.split(':'), \n mod_index = destPath[0].split('|');\n }\n \n var formProperties = task.variables;\n var params = {\n taskId: task.id\n };\n\n for(var i in formProperties) {\n params[formProperties[i].name] = formProperties[i].value\n }\n\n $state.go('app.' + mod_index[0], params);\n\n /*FormData.get(\n {\"taskId\": task.id}, \n function (formData) {\n var formProperties = formData.formProperties;\n var params = {\n taskId: task.id\n };\n \n for(var i in formProperties) {\n params[formProperties[i].name] = formProperties[i].value\n }\n\n $state.go('app.' + mod_index[0], params);\n }, \n function (data) {\n if (data.data.statusCode == 404) {\n alert(\"O caminho não pode ser encontrado!\");\n }\n }\n );*/\n \n \n };\n\n // HTML seguro\n function toTrustedHTML(html)\n {\n return $sce.trustAsHtml(html);\n }\n \n vm.loadTasks();\n \n /*****************************************************/\n /***** UI ******/\n /*****************************************************/\n \n // Navigation\n msNavigationService.saveItem('tasks', {\n badge : {\n content: vm.tasks.length,\n color : '#4CAF50'\n }\n });\n \n vm.completed = [];\n vm.projects = {\n 'main' : 'Principal'\n };\n vm.selectedFilter = {\n filter : 'Start Date',\n dueDate: '',\n delegationState: ''\n };\n vm.selectedProject = 'main';\n\n // Tasks will be filtered against these models\n vm.taskFilters = {\n search : '',\n createTime: '',\n dueDate : '',\n completed : '',\n delegationState : ''\n };\n vm.taskFiltersDefaults = angular.copy(vm.taskFilters);\n vm.showAllTasks = true;\n\n vm.taskOrder = '';\n vm.taskOrderDescending = true;\n\n vm.sortableOptions = {\n handle : '.handle',\n forceFallback : true,\n ghostClass : 'todo-item-placeholder',\n fallbackClass : 'todo-item-ghost',\n fallbackOnBody: true,\n sort : true\n };\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n // Methods\n vm.preventDefault = preventDefault;\n vm.openTaskDialog = openTaskDialog;\n vm.toggleSidenav = toggleSidenav;\n vm.toggleFilter = toggleFilter;\n vm.toggleFilterWithEmpty = toggleFilterWithEmpty;\n vm.filterByCreateTime = filterByCreateTime;\n vm.filterByDueDate = filterByDueDate;\n vm.filterByDelegationState = filterByDelegationState;\n vm.filterNyUser = filterNyUser;\n vm.resetFilters = resetFilters;\n vm.filterByPrefixes = filterByPrefixes;\n vm.openTaskOrigin = openTaskOrigin;\n\n init();\n\n //////////\n\n /**\n * Initialize the controller\n */\n function init()\n {\n prepareTasksDateFormat();\n }\n \n function prepareTasksDateFormat()\n {\n angular.forEach(vm.tasks, function (task)\n {\n if ( task.createTime )\n {\n task.createTime = new Date(task.createTime);\n task.createTimeTimestamp = task.createTime.getTime();\n }\n\n if ( task.dueDate )\n {\n task.dueDate = new Date(task.dueDate);\n task.dueDateTmp = new Date(task.dueDate);\n task.dueDateTimestamp = task.dueDate.getTime();\n }\n });\n }\n \n function prepareTasksLinks()\n {\n angular.forEach(vm.tasks, function (task){\n if (task.taskDefinitionKey == 'actionPlanTask'){\n angular.forEach(task.variables, function (v){\n if (v.name == 'nonComplianceId'){\n task.nonComplianceId = v.value;\n } else if (v.name == 'departmentId'){\n task.departmentId = v.value;\n } else if (v.name == 'userTask1Name'){\n task.nonComplianceName = v.value;\n }\n });\n }\n });\n }\n\n /**\n * Prevent default\n *\n * @param e\n */\n function preventDefault(e)\n {\n e.preventDefault();\n e.stopPropagation();\n }\n\n /**\n * Open new task dialog\n *\n * @param ev\n * @param task\n */\n function openTaskDialog(ev, task)\n {\n $mdDialog.show({\n controller : 'TaskDialogController',\n controllerAs : 'vm',\n templateUrl : 'app/main/home/apps/activiti/dialogs/task/task-dialog.html',\n parent : angular.element($document.body),\n targetEvent : ev,\n clickOutsideToClose: true,\n locals : {\n Task : task,\n history: vm.history,\n action: null,\n TasksList: vm.tasks,\n UsersList: vm.users,\n event: ev\n }\n })\n .then(function(action){\n if (action === 'complete')\n completeTask(task, ev);\n });\n }\n \n /**\n * Toggle completed status of the task\n *\n * @param task\n * @param event\n */\n function completeTask(task)\n {\n task.completed = true;\n }\n \n /**\n * Toggle completed status of the task\n *\n * @param task\n * @param event\n */\n function completeProcess(task)\n {\n // Remover processo do menu ao finalizar\n }\n\n /**\n * Toggle sidenav\n *\n * @param sidenavId\n */\n function toggleSidenav(sidenavId)\n {\n $mdSidenav(sidenavId).toggle();\n }\n\n /**\n * Toggles filter with true or false\n *\n * @param filter\n */\n function toggleFilter(filter)\n {\n //vm.taskFilters[filter] = !vm.taskFilters[filter];\n vm.taskFilters[filter] = false;\n checkFilters();\n }\n\n /**\n * Toggles filter with true or empty string\n * @param filter\n */\n function toggleFilterWithEmpty(filter)\n {\n if ( vm.taskFilters[filter] === '' )\n {\n vm.taskFilters[filter] = true;\n }\n else\n {\n vm.taskFilters[filter] = '';\n }\n\n checkFilters();\n }\n\n /**\n * Reset filters\n */\n function resetFilters()\n {\n vm.showAllTasks = true;\n vm.taskFilters = angular.copy(vm.taskFiltersDefaults);\n vm.loadTasks();\n }\n\n /**\n * Check filters and mark showAllTasks\n * as true if no filters selected\n */\n function checkFilters()\n {\n vm.showAllTasks = !!angular.equals(vm.taskFiltersDefaults, vm.taskFilters);\n }\n\n /**\n * Filter by createTime\n *\n * @param item\n * @returns {boolean}\n */\n function filterByCreateTime(item)\n {\n if ( vm.taskFilters.createTime === true )\n {\n if (item.createTime)\n return item.createTime.getDate() === new Date().getDate();\n else\n return false;\n }\n\n return true;\n }\n\n /**\n * Filter Due Date\n *\n * @param item\n * @returns {boolean}\n */\n function filterByDueDate(item)\n {\n if ( vm.taskFilters.dueDate === true )\n {\n if (vm.selectedFilter.dueDate){\n var \n d = new Date();\n d.setDate(d.getDate() + parseInt(vm.selectedFilter.dueDate));\n return (!(item.dueDate === null || item.dueDate.length === 0) && (d < item.dueDate));\n }\n return !(item.dueDate === null || item.dueDate.length === 0);\n }\n return true;\n }\n \n /**\n * Filter Delegated\n *\n * @param item\n * @returns {boolean}\n */\n function filterByDelegationState(item)\n {\n if (!vm.history) {\n if (vm.taskFilters.delegationState === true) {\n return (!(item.delegationState === null || item.delegationState === ''));\n } else {\n return (item.assignee === AuthService.authSessions.activitiSession.username);\n }\n } else {\n return true;\n }\n }\n \n function filterNyUser(item)\n {\n if (vm.taskFilters.delegationState === true) {\n return (item.owner === AuthService.authSessions.activitiSession.username);\n } else {\n return (item.assignee === AuthService.authSessions.activitiSession.username);\n }\n }\n \n function filterByPrefixes(item)\n {\n return (! ((item.name.substr(0, 3) === '#ap') || \n (item.name.substr(0, 6) === '__ap__')));\n }\n \n function openTaskOrigin(event, taskInstance)\n {\n event.preventDefault();\n event.stopPropagation();\n if (taskInstance.nonComplianceId && taskInstance.departmentId){\n $state.go('app.non-compliance-action-plan', {\n nonComplianceId: taskInstance.nonComplianceId,\n departmentId: taskInstance.departmentId\n })\n }\n }\n \n /**************************************************************/\n /*vm.eaStarterTest = eaStarterTest;\n function eaStarterTest(eaName)\n {\n var \n destination = 'sghq|sghq',\n destPath = destination.split(':'),\n mod_index = destPath[0].split('|'),\n eapp_files = '';\n \n $http.get('/external-apps/' + mod_index[1] + '/lazy-load.json')\n .success(function(data){\n eapp_files = data.data;\n \n // Carrega o módulo e os demais arquivos\n var mod = $ocLazyLoad.load(eapp_files);\n \n mod.then(function(res){\n // Cria rota dinamicamente, para o destino do formKey\n if (!$state.get('app.home.ea-module')) {\n var newState = {\n name: 'app.home.ea-module',\n options: {\n parent : 'app.home',\n url : '/' + mod_index[1] + '/index',\n views : {\n 'app.ea@app.home': {\n templateUrl: '/external-apps/' + mod_index[1] + '/' + mod_index[1] + '.html',\n controller: function(controllerParams){\n var ctrl = this;\n ctrl.params = controllerParams;\n },\n controllerAs: 'ctrl'\n }\n },\n resolve: {\n controllerParams: function ()\n {\n return null;\n }\n },\n params: {\n starterState: null,\n stateId: null,\n departmentId: null,\n indicatorId: null\n },\n authenticate: true\n }\n }\n StateFactory(newState);\n }\n $rootScope.activeContextApp = 'ea';\n $state.go('app.home.ea-module', {\n starterState: 'app.home.ea-module',\n stateId: 'app.home',\n departmentId: '',\n indicatorId: ''\n });\n }, function(e){\n console.log(e);\n });\n })\n .error(function(data, status, error, config){\n console.log(status + ':' + error);\n });\n };*/\n \n vm.newDepartment = newDepartment;\n function newDepartment()\n {\n KpiDepartments.add({\n email: 'rodrigo.almeida@veltio.com',\n initials: 'DEV',\n manager: \"admin\",\n name: 'DEVELOPMENT'\n });\n }\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.home', [\n 'app.pentaho',\n 'app.activiti',\n 'app.kpi',\n 'app.admintools',\n 'cb.x2js'\n ])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider) {\n // State\n $stateProvider\n .state('app.home', {\n url: '/home',\n parent: 'app',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/home.html',\n controller: 'HomeController as vm'\n }\n },\n resolve: {\n Context: function ($rootScope) {\n return $rootScope.getContext\n }\n },\n authenticate: true\n });\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.home')\n .controller('ProfileController', ProfileController);\n\n /** @ngInject **/\n function ProfileController()\n {\n var vm = this;\n console.log('PROFILE!')\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.home')\n .controller('InboxController', InboxController);\n\n /** @ngInject **/\n function InboxController()\n {\n var vm = this;\n console.log('INBOX!')\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.home')\n .controller('AboutContainerController', AboutContainerController);\n\n /** @ngInject **/\n function AboutContainerController($http)\n {\n var vm = this;\n\t\tvar url = 'version';\n\t\t\n\t\t$http.get(url).success(function(data) {\n\t\t\tvar version = null;\n\t\t\tversion = data;\n\n\t\t\tvm.version = version;\n\t\t\treturn true;\n\t\t}, function(e){\n\t\t\tconsole.log('ERROR: ', e);\n\t\t\treturn false;\n\t\t});\n }\n})();\n(function(){\n 'use strict';\n\n angular.module('app.pentaho-connector.pentaho-viewer')\n .service('PentahoViewerService', PentahoViewerService);\n\n /** @ngInject **/\n function PentahoViewerService($rootScope)\n {\n var vm = this;\n\n // Controla as abas abertas pelo usuário\n vm.tabs = {\n data: [],\n count: -1,\n active: -1\n };\n vm.openTab = openTab; // Abre uma nova aba ou localiza a aba já aberta\n vm.locateTab = locateTab; // Verifica se uma determinada aba já está aberta\n vm.closeTab = closeTab; // Fecha uma aba aberta\n vm.clearTabs = clearTabs;\n\n /*\n Verifica se uma aba já está aberta e retorna seu INDEX, ou abre uma nova caso não encontre-a\n */\n function openTab(tabData) {\n var index = -1;\n // Descomente esta linha para não permitir abrir a mesma aba mais de uma vez\n //index = vm.locateTab(tabData.id);\n\n // Caso não tenho encontrado a aba correspondente, cria uma nova\n if (index === -1) {\n var newTab = {\n title: tabData.title,\n id: tabData.id + (Math.random() * 1000).toString(),\n index: vm.tabs.count + 1,\n url: tabData.url\n };\n\n // Define o Pentaho como app do contexto\n $rootScope.activeContextApp = 'pentaho';\n\n if (vm.tabs.count <= 0) {\n newTab.title = newTab.title.substring(0,15);\n }\n vm.tabs.count++;\n vm.tabs.data.push(newTab);\n\n index = newTab.index;\n }\n\n vm.tabs.active = index;\n return index;\n }\n\n /*\n Busca uma aba pelo seu ID e retorna seu INDEX ou -1 se não localizá-la\n */\n function locateTab(id)\n {\n var res = -1;\n angular.forEach(vm.tabs.data, function(value, key){\n if (value.id === id) {\n res = value.index;\n }\n });\n \n return res;\n }\n \n /*\n Fecha (remove do vetor de objetos) uma aba identificada pelo seu ID\n */\n function closeTab(id)\n {\n vm.tabs.data = vm.tabs.data.filter(function(t){\n return t.id !== id;\n });\n }\n\t\t\n\t\t/*\n\t\t\tLimpa absas\n\t\t*/\n\t\tfunction clearTabs()\n\t\t{\n\t\t\tvm.tabs = {\n\t\t\t\tdata: [],\n\t\t\t\tcount: -1,\n\t\t\t\tactive: -1\n\t\t\t};\n\t\t}\n }\n}());\n\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-data-handler', []);\n}());\n(function() {\n 'use strict';\n\n angular.module('app.pentaho-connector.pentaho-data-handler')\n .service('PentahoDataHandlerService', PentahoDataHandlerService);\n\n /** @ngInject **/\n function PentahoDataHandlerService($http, PENTAHO_APP_URL, $cookies, $rootScope, APP_CFG) {\n var vm = this;\n\n vm.getDirStructure = getDirStructure;\n vm.getUserContext = getUserContext;\n vm.hasRole = hasRole;\n\n // Faz uma requisição da estrutura do diretório raiz informado\n function getDirStructure(root) {\n const prefix = function(e){return '*'+e}\n const exts = ['saiku', 'xcdf', 'wcdf', 'prpt', 'htm', 'vdd'].map(prefix).join('|');\n const url = PENTAHO_APP_URL + \n '/api/repo/files/' + root + '/tree?showHidden=false&filter=FILES|' + exts + '|';\n\n return $http({\n method: 'GET',\n url: url + '?' + new Date().getTime(),\n headers: {\n \"Content-Type\": 'application/json',\n \"Accept\": 'application/json',\n \"Authorization\": 'Basic ' + getAuth(),\n \"Cache-Control\": 'no-cache',\n \"Pragma\": 'no-cache',\n \"If-Modified-Since\": 0\n }\n });\n }\n\n // Localiza o cookie que armazena a chave de autenticação\n function getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function getUserContext(userName) {\n // Recebe uma promise da requisição\n var url = PENTAHO_APP_URL + '/plugin/ppa/api/myRoles';\n\n var res = $http({\n method: 'GET',\n url: url,\n headers: {\n \"Content-Type\": 'application/json',\n \"Accept\": 'application/json',\n \"Authorization\": 'Basic ' + getAuth()\n }\n });\n\n res.then(function(res) {\n var rs = res.data.resultset;\n\n $rootScope.userContext = {\n roles: null,\n isAdmin: false,\n isQualityManager: false\n };\n\n $rootScope.userContext.userRoles = rs;\n\n $rootScope.userContext.isAdmin = hasRole('Admin', $rootScope.userContext.userRoles) ||\n hasRole('Administrator', $rootScope.userContext.userRoles) ||\n APP_CFG['DEV_USR_ADM'];\n\n $rootScope.userContext.isQualityManager = hasRole('quality_manager', $rootScope.userContext.userRoles);\n\n $rootScope.userContext.isDataAdministrator = hasRole('data_administrator', $rootScope.userContext.userRoles);\n\n if (!APP_CFG['DEV_USR']) {\n console.log(\n 'Admin: ' + hasRole('Admin', $rootScope.userContext.userRoles),\n 'Administrator: ' + hasRole('Administrator', $rootScope.userContext.userRoles),\n 'QM: ' + hasRole('quality_manager', $rootScope.userContext.userRoles),\n 'DA: ' + hasRole('data_administrator', $rootScope.userContext.userRoles));\n }\n }, function() {\n\n });\n };\n\n function hasRole(role, roles) {\n var r = false;\n angular.forEach(roles, function(value, key) {\n if (value.indexOf(role) !== -1) {\n r = true;\n return;\n }\n });\n return r;\n }\n\n function filterRole(v) {\n return v == role;\n }\n\n function xmlToJson(xml) {\n // Create the return object\n var obj = {};\n\n if (xml.nodeType == 1) { // element\n // do attributes\n if (xml.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType == 3) { // text\n obj = xml.nodeValue;\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i);\n var nodeName = item.nodeName;\n if (typeof(obj[nodeName]) == \"undefined\") {\n obj[nodeName] = xmlToJson(item);\n } else {\n if (typeof(obj[nodeName].push) == \"undefined\") {\n var old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(xmlToJson(item));\n }\n }\n }\n return obj;\n };\n };\n }());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-authentication', []);\n}());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector.pentaho-authentication')\n .service('PentahoAuthenticationService', PentahoAuthenticationService);\n \n /** @ngInject **/\n function PentahoAuthenticationService($q, $http, $base64, PENTAHO_APP_URL, APP_CFG, $cookies, $location, PentahoViewerService, $rootScope)\n { \n var vm = this;\n \n // Objeto para armazenar as informações de sessão do Pentaho\n vm.session = {\n loggedIn: false,\n authKey: '',\n username: '',\n lastAttemptError: false\n }\n vm.logIn = logIn;\n vm.logOut = logOut;\n \n // Executa a tentativa de autenticação no Pentaho\n function logIn(loginData) {\n\t\t\tvar deferred = $q.defer();\n var authData = {\n j_username: loginData.username,\n j_password: loginData.password,\n locale: 'pt_br'\n }\n // Recebe uma promise da requisição\n // Comecei a analisar uma forma de fazer o login q não envolva o uso dessa chamada ao spring\n // pois ela provoca um redirect q está impactando a capacidade de ativar o SSL\n // de forma externa (no proxy Caddy) ao Tomcat, veja mais detalhes na nota do Obsidian: 'Sobre Usar HTTPS'\n const useNewLoginStrategy = APP_CFG['USE_NEW_LOGIN'];\n const authUrl = useNewLoginStrategy ? '/plugin/pentaho-cdf/api/ping' : '/j_spring_security_check';\n const authCred = useNewLoginStrategy ? 'Basic '+btoa(authData.j_username + ':' + authData.j_password) : undefined;\n $http({\n method: 'post',\n url: PENTAHO_APP_URL + authUrl,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Requested-With': 'XMLHttpRequest',\n 'Authorization': authCred\n },\n transformRequest: function(obj) {\n var str = [];\n for(var p in obj)\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]));\n return str.join(\"&\");\n },\n data: authData\n }).then(function(res){\n if ((useNewLoginStrategy && res.status === 200)\n || (!useNewLoginStrategy && res.data.indexOf('login?err=true') == -1)) {\n\t\t\t\t\tvm.session.loggedIn = true;\n\t\t\t\t\tvm.session.username = loginData.username;\n\t\t\t\t\tvm.session.authKey = $base64.encode(loginData.username + ':' + loginData.password);\n\t\t\t\t\tvm.session.lastAttemptError = false;\n\t\t\t\t\t$rootScope.$lastUse = new Date();\n\t\t\t\t\tdeferred.resolve();\n\t\t\t\t} else {\n deferred.reject();\n }\n });\n // Retorna a promise\n //return res;\n\t\t\treturn deferred.promise;\n };\n \n // Executa logout do Pentaho\n function logOut(noRequest)\n {\n\t\t\t//history.pushState(null, null, '/pentaho/Home');\n\t\t\t// if (!noRequest) {\n\t\t\t\tvar res = $http({\n\t\t\t\t\tmethod: 'post',\n\t\t\t\t\turl: PENTAHO_APP_URL + '/Logout',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t\t\t\t\t'Authorization': undefined\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.success(function(data, status){\n\t\t\t\t console.log('Logged out from BISERVER')\n\t\t\t\t})\n\t\t\t\t.error(function(data, status){\n\t\t\t\t\tconsole.log('ERRO: ' + status)\n\t\t\t\t});\n\t\t\t// }\n\t\t\t\n\t\t\tPentahoViewerService.clearTabs();\n \n vm.session.loggedIn = false;\n vm.session.username = '';\n vm.session.authKey = '';\n\t\t\t$rootScope.$lastUse = null;\n }\n };\n}());\n\n(function () {\n 'use strict';\n\n angular.module('app.activiti-connector.activiti-data-handler')\n .service('ActivitiDataHandlerService', ActivitiDataHandlerService);\n\n /** @ngInject **/\n function ActivitiDataHandlerService($http, $cookies, $rootScope, User, ActivitiUserRoles) {\n var vm = this;\n\n vm.enumFields = {};\n\n vm.extractForm = extractForm;\n vm.extractDataFromForm = extractDataFromForm;\n vm.getNameFromResource = getNameFromResource;\n vm.getUserContext = getUserContext;\n\n // Localiza o cookie que armazena a chave de autenticação\n function getAuth() {\n var auth = $cookies.getObject('ppaui-activiti-auth');\n return auth.authKey || '';\n }\n\n function extractForm(objectOfReference, data) {\n var propertyForSaving = {};\n\n for (var i = 0; i < data.formProperties.length; i++) {\n var elem = data.formProperties[i];\n\n propertyForSaving[elem.id] = {\n \"value\": getValueForFormFromRootScope(elem.id, elem.value),\n \"id\": elem.id,\n \"writable\": elem.writable\n };\n\n if (elem.datePattern != null) {\n propertyForSaving[elem.id].opened = false;\n propertyForSaving[elem.id].datePattern = elem.datePattern;\n }\n\n if (elem.required == true && elem.type == \"boolean\") {\n if (elem.value == null) {\n propertyForSaving[elem.id].value = false;\n }\n }\n\n if (elem.type == \"user\") {\n elem.enumValues = User.get();\n }\n }\n\n objectOfReference.form = data;\n objectOfReference.propertyForSaving = propertyForSaving;\n }\n\n function extractDataFromForm(objectOfReference, type) {\n\n if (type === 'task') {\n var objectToSave = {\n \"taskId\": objectOfReference.id,\n properties: []\n }\n } else {\n var objectToSave = {\n \"processDefinitionId\": objectOfReference.id,\n properties: []\n }\n }\n\n for (var key in objectOfReference.propertyForSaving) {\n var forObject = objectOfReference.propertyForSaving[key];\n\n if (!forObject.writable) { // Se não for uma propriedade editável, não a usa\n continue;\n }\n\n if (forObject.value != null) {\n var elem = {\n \"id\": forObject.id,\n \"value\": forObject.value\n };\n\n if (typeof forObject.datePattern != 'undefined') { //format\n var date = new Date(forObject.value);\n }\n objectToSave.properties.push(elem);\n }\n }\n\n return objectToSave;\n }\n\n function getValueForFormFromRootScope(id, v) {\n return (id == 'kpiCode' && $rootScope.kpiCode != 'undefined') ? $rootScope.kpiCode : v;\n }\n\n // Obtem o nome do processo pela URL do resource\n function getNameFromResource(resourceStr) {\n var\n path, file, name;\n path = resourceStr.split('/');\n file = path[path.length - 1];\n name = file.split('.');\n name = name[0];\n\n return name;\n }\n\n function getUserContext(userName) {\n\n $rootScope.getContext = ActivitiUserRoles.get({\n member: userName\n }).$promise;\n\n $rootScope.getContext.then(function (response) {\n $rootScope.userContext = {\n roles: [],\n isAdmin: false,\n isQualityManager: false\n };\n\n angular.forEach(response.data, function (value) {\n $rootScope.userContext.roles.push(value.id);\n\n if (value.id === 'admin')\n $rootScope.userContext.isAdmin = true;\n\n if (value.id === 'quality_manager')\n $rootScope.userContext.isQualityManager = true;\n\n if (value.id === 'data_administrator')\n $rootScope.userContext.isDataAdministrator = true;\n });\n }, function (e) {\n console.log(e.message);\n });\n };\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-authentication', []);\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector.activiti-authentication')\n .service('ActivitiAuthenticationService', ActivitiAuthenticationService);\n \n /** @ngInject **/\n function ActivitiAuthenticationService($http, $base64, ACTIVITI_APP_URL, sha1, APP_CFG)\n { \n var vm = this;\n \n // Objeto para armazenar as informações de sessão do Activiti\n vm.session = {\n loggedIn: false,\n authKey: '',\n username: '',\n lastAttemptError: false\n }\n vm.logIn = logIn;\n vm.logOut = logOut;\n \n // Executa a tentativa de autenticação no Activiti\n function logIn(loginData)\n {\n const pw = !APP_CFG['USE_SAME_PW']\n ? 'abc123!@#'\n : loginData.password\n\n // Applies SHA-1 encrypt to the password, and then Base64 over login and password\n if (APP_CFG['USE_SHA1_ENCRYPT'])\n var tmpKey = $base64.encode(loginData.username + ':' + sha1.hash(pw));\n else\n var tmpKey = $base64.encode(loginData.username + ':' + pw);\n \n // Recebe uma promise da requisição\n var obj = {\n method: 'get',\n url: ACTIVITI_APP_URL + '/service/identity/users/' + loginData.username,\n headers: {\n 'Content-Type': 'aplication/json',\n 'Authorization': 'Basic ' + tmpKey\n }\n }\n var res = $http(obj);\n \n res.then(function(res){\n vm.session.loggedIn = true;\n vm.session.username = res.data.id;\n vm.session.authKey = tmpKey; \n vm.session.lastAttemptError = false;\n // will set cookie `actak` to enable auto login to Activiti from CLJS pages\n const actak = $base64.encode('Basic ' + tmpKey);\n document.cookie = \"actak=\" + actak + \"; path=/\"\n }, function(e){\n vm.logOut();\n vm.session.lastAttemptError = true;\n console.log(e);\n });\n \n // Retorna a promise\n return res;\n };\n \n // Executa logout do Activiti\n function logOut()\n {\n vm.session.loggedIn = false;\n vm.session.username = '';\n vm.session.authKey = '';\n }\n };\n}());\n\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .factory('AdminTools', AdminTools);\n \n function AdminTools()\n { \n var obj = {\n \n }\n \n return obj;\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.kpi-data-handler', [\n 'firebase'\n ]);\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi-data-handler')\n .service('UserDepartmentsService', UserDepartmentsService)\n\n function UserDepartmentsService(KpiDataHandlerService, $q, $firebaseArray, AuthService, $rootScope, $cookies, PENTAHO_APP_URL, $http, $filter, $httpParamSerializerJQLike) {\n var\n vm = this,\n db = KpiDataHandlerService.database,\n allDepartments,\n departmentList,\n departmentObj;\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"user-departments\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function excludeId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n };\n\n var obj = {\n //Novos métodos\n get: function () {\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: _data\n });\n },\n\n format: function (result) {\n var arr = [];\n if (result) {\n for (var property in result) {\n var obj = result[property];\n obj.id = property;\n arr.push(obj);\n }\n }\n return arr;\n },\n\n save: function (obj, edicao) {\n\n var tempData = angular.copy(_data);\n if (edicao) {\n tempData.parammethod = 'PUT';\n tempData.paramid = obj.id;\n obj = excludeId(obj);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify(obj);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n },\n\n delete: function (obj) {\n\n var tempData = angular.copy(_data);\n tempData.parammethod = 'DELETE';\n tempData.paramid = obj.id;\n obj = excludeId(obj);\n\n tempData.paramdoc = JSON.stringify(obj);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n },\n\n getUserDepartmentsByUser: function (user) {\n var tempData = angular.copy(_data);\n tempData.paramfilter = JSON.stringify({\n user: user\n });\n\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: tempData\n });\n }\n }\n\n return obj;\n }\n}());\n(function (module) {\n 'use strict';\n\n module.service('SubEventTypes', function ($cookies, PENTAHO_APP_URL, $http, $filter, $httpParamSerializerJQLike) {\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"event-subtype\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function excluirId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n }\n\n var services = {\n getSubTiposEventos: function () {\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: _data\n });\n },\n\n format: function (result) {\n var tiposEventos = [];\n if (result) {\n for (var property in result) {\n var tipo = result[property];\n tipo.id = property;\n tiposEventos.push(tipo);\n }\n }\n\n return tiposEventos;\n },\n\n salvar: function (subType, edicao) {\n\n var tempData = angular.copy(_data);\n if (edicao) {\n tempData.parammethod = 'PUT';\n tempData.paramid = subType.id;\n subType = excluirId(subType);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify(subType);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n }\n };\n\n return services;\n });\n\n}(angular.module('app.kpi-data-handler')));\n(function(){\n 'use strict';\n \n angular\n .module('app.kpi-data-handler')\n .factory('KpiNonCompliances', KpiNonCompliancesService);\n \n function KpiNonCompliancesService($q, KpiDataHandlerService, $firebaseArray, $firebaseObject)\n {\n var \n nonComplianceList,\n db = KpiDataHandlerService.database;\n \n var obj = {\n getAll: function(departmentKey){\n\t\t\t\tif (departmentKey) {\n\t\t\t\t\t// Traz a lista de indicadores do departamento\n \tvar nonCompliancesRef = db.ref('nonCompliances/' + departmentKey);\n\t\t\t\t} else {\n\t\t\t\t\t// Traz todas as NCs\n\t\t\t\t\tvar nonCompliancesRef = db.ref('nonCompliances/');\n\t\t\t\t} \n\t\t\t\t\n nonComplianceList = $firebaseArray(nonCompliancesRef);\n \n return nonComplianceList;\n },\n getByKey: function(departmentKey, nonComplianceKey){\n var path = 'nonCompliances/' + departmentKey + '/' + nonComplianceKey;\n var nonComplianceRef = db.ref(path);\n var obj = new $firebaseObject(nonComplianceRef);\n return obj;\n },\n genInsert: function(){\n var departmentsRef = db.ref('departments/');\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n \n var nonComplianceRef = db.ref('nonCompliances/' + deptKey);\n var v = {};\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var ncKey = child.getKey();\n \n console.log(\"insert into NON_COMPLIANCES (ID_, DEPT_ID_) values ('\" + deptKey + \"','\" + ncKey + \"');\");\n });\n });\n });\n });\n return null;\n }/*,\n fixActiveNC: function(){\n var departmentsRef = db.ref('departments/');\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n \n var nonComplianceRef = db.ref('nonCompliances/' + deptKey);\n var v = {};\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var values = child.val();\n var d = null;\n if (values.active !== false) {\n v[child.getKey() + '/active'] = true;\n }\n });\n nonComplianceRef.update(v);\n });\n });\n });\n return null;\n }\n ,\n fixModelNonCompliancesItems: function(){\n var departmentsRef = db.ref('departments/');\n \n //Para cada departamento...\n departmentsRef.once('value', function(snapshot){\n var depts = snapshot.val(),\n deptsByManager = {};\n // Criar um objeto com os usuarios e seu departamento primeiro departamento\n angular.forEach(depts, function(value, key){\n deptsByManager[value.manager] = {id: key, name: value.name};\n });\n //console.log(deptsByManager)\n snapshot.forEach(function(child){\n var dptKey = child.getKey();\n //if (dptKey === '-Jf8E4KxrpBHLb2zW5j6') {\n var nonComplianceRef = db.ref('nonCompliances/' + dptKey);\n\n //Para cada não conformidade...\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var v = {};\n var \n values = child.val(),\n key = child.getKey();\n //if (key === '-KCaGSSCtTicg9PZcO4o') {\n console.log(deptsByManager[values.owner]);\n v[key + '/occurrenceDeptName'] = depts[values.occurrenceDepartment].name;\n v[key + '/closed'] = true;\n \n if (values.status) {\n if (values.status.key)\n v[key + '/status'] = values.status.key;\n }\n\n if (values.type) {\n if (values.type.key)\n v[key + '/type'] = values.type.key;\n }\n\n if ((!values.title) && (values.description)) {\n var title = values.description.substring(0, 29) + '...';\n v[key + '/title'] = title;\n }\n \n if (deptsByManager[values.owner]) {\n v[key + '/claimant'] = deptsByManager[values.owner].id;\n v[key + '/claimantDeptName'] = deptsByManager[values.owner].name;\n }\n //}//<-\n if (Object.keys(v).length !== 0)\n nonComplianceRef.update(v);\n //console.log(v)\n });\n });\n //} //<-\n });\n });\n return null;\n },\n fixModelNonCompliancesDepartments: function(){\n var departmentsRef = db.ref('departments');\n var nonComplianceBkpRef = db.ref('nonCompliancesBkp');\n var nonComplianceRef = db.ref('nonCompliances/');\n var v = {};\n \n nonComplianceBkpRef.set(null);\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n var ncList = [];\n \n var nonCompliancesRef = \n db.ref('nonCompliances')\n .orderByChild('occurrenceDepartment')\n .equalTo(deptKey);\n \n //ncList = $firebaseArray(nonCompliancesRef);\n nonCompliancesRef.once('value', function(snapshot){\n v[deptKey] = snapshot.val();\n console.log(deptKey);\n nonComplianceBkpRef.set(v);\n });\n });\n });\n return null;\n },\n fixModelNonCompliancesDepartmentsSent: function(){\n var departmentsRef = db.ref('departments/');\n var nonComplianceBkpRef = db.ref('nonCompliancesSent');\n var nonComplianceRef = db.ref('nonCompliances/');\n \n nonComplianceBkpRef.set(null);\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n var ncList = [];\n \n //if (deptKey === '-Jf-SsTuOKX0iOT88YxC') {\n var nonCompliancesRef = \n db.ref('nonCompliances/' + deptKey);\n\n nonCompliancesRef.once('value', function(snapshot){\n snapshot.forEach(function(child){\n var v = {};\n var value = child.val();\n var key = child.getKey();\n if (value.claimant){\n if (!v[value.claimant])\n v[value.claimant] = {};\n v[value.claimant][key] = value;\n console.log(v);\n if (Object.keys(v).length !== 0)\n nonComplianceBkpRef.set(v);\n }\n });\n });\n //}//<-\n });\n });\n return null;\n },\n fixModelSurvey: function(){\n var departmentsRef = db.ref('departments/');\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n \n //if (deptKey === '-Jf-SsTuOKX0iOT88YxC') {\n var kpiRef = \n db.ref('departments/' + deptKey + '/kpi');\n\n kpiRef.once('value', function(snapshot){\n snapshot.forEach(function(child){\n var v = child.val();\n v.survey = false;\n kpiRef.set(v);\n });\n });\n //}//<-\n });\n });\n return null;\n },\n fixDateFormat: function(){\n var nonComplianceRef = db.ref('nonCompliances');\n var v = {};\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var values = child.val();\n console.log(values.occurrenceDate);\n var d;\n if (values.occurrenceDate) {\n var ds = values.occurrenceDate.split('/');\n if (ds.length === 3) {\n if (ds[2].length === 2)\n ds[2] = '20' + ds[2];\n\n if (ds[1].length === 1)\n ds[1] = '0' + ds[1];\n\n if (ds[0].length === 1)\n ds[0] = '0' + ds[0];\n d = new Date(ds[2] + '-' + ds[1] + '-' + ds[0]);\n d = d.getTime() + d.getTimezoneOffset() * 60000;\n v[child.getKey() + '/occurrenceDate'] = d;\n }\n }\n });\n nonComplianceRef.update(v);\n });\n return null;\n },\n refixDateFormat: function(){\n var departmentsRef = db.ref('departments/');\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n \n if ((deptKey === '-Jf8EtJQbnRRnqHO91ZO') || (deptKey === '-JguvXcDmbbKQ-yrekGM') || (deptKey === '-Jf8LsE4qkAlsdeZnPIT')){\n var nonComplianceRef = db.ref('nonCompliances/' + deptKey);\n var v = {};\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var values = child.val();\n var d = null;\n if (values.occurrenceDate) {\n if (values.occurrenceDate.toString().indexOf('/') === -1) {\n var ds = values.occurrenceDate;\n d = new Date(ds.valueOf());\n d = new Date(d.getTime() + d.getTimezoneOffset() * 60000);\n console.log(d);\n d = d.toISOString();\n console.log(d);\n if (d)\n v[child.getKey() + '/occurrenceDate'] = d;\n } else {\n var ds = values.occurrenceDate.split('/');\n if (ds.length === 3) {\n if (ds[2].length === 2)\n ds[2] = '20' + ds[2];\n\n if (ds[1].length === 1)\n ds[1] = '0' + ds[1];\n\n if (ds[0].length === 1)\n ds[0] = '0' + ds[0];\n d = new Date(ds[2] + '-' + ds[1] + '-' + ds[0]);\n d = new Date(d.getTime() + d.getTimezoneOffset() * 60000);\n console.log(d);\n d = d.toISOString();\n console.log(d);\n if (d)\n v[child.getKey() + '/occurrenceDate'] = d;\n }\n }\n }\n });\n nonComplianceRef.update(v);\n });\n }\n });\n });\n return null;\n },\n debug_refixDateFormat: function(){\n var departmentsRef = db.ref('departments/');\n \n departmentsRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var deptKey = child.getKey();\n \n if ((deptKey === '-Jf8EtJQbnRRnqHO91ZO') || (deptKey === '-JguvXcDmbbKQ-yrekGM') || (deptKey === '-Jf8LsE4qkAlsdeZnPIT')){\n var nonComplianceRef = db.ref('nonCompliances/' + deptKey);\n var v = {};\n nonComplianceRef.once('value', function(snapshot) {\n snapshot.forEach(function(child) {\n var values = child.val();\n var d = null;\n if (values.occurrenceDate) {\n console.log(values.occurrenceDate, deptKey)\n if (values.occurrenceDate.toString().indexOf('/') === -1) {\n var ds = values.occurrenceDate;\n d = new Date(ds.valueOf());\n d = new Date(d.getTime() + d.getTimezoneOffset() * 60000);\n //console.log(d);\n d = d.toISOString();\n //console.log(d);\n if (d)\n v[child.getKey() + '/occurrenceDate'] = d;\n } else {\n var ds = values.occurrenceDate.split('/');\n if (ds.length === 3) {\n if (ds[2].length === 2)\n ds[2] = '20' + ds[2];\n\n if (ds[1].length === 1)\n ds[1] = '0' + ds[1];\n\n if (ds[0].length === 1)\n ds[0] = '0' + ds[0];\n d = new Date(ds[2] + '-' + ds[1] + '-' + ds[0]);\n d = new Date(d.getTime() + d.getTimezoneOffset() * 60000);\n\n d = d.toISOString();\n\n if (d)\n v[child.getKey() + '/occurrenceDate'] = d;\n }\n }\n }\n });\n //console.log(v);\n });\n //}\n });\n });\n return null;\n }*/\n }\n \n return obj;\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi-data-handler')\n .factory('KpiIndicators', KpiIndicatorsService);\n\n function KpiIndicatorsService(KpiDataHandlerService, $q, $firebaseArray, $firebaseObject, $cookies, PENTAHO_APP_URL, $http, $filter, $httpParamSerializerJQLike) {\n var\n indicatorList,\n commomList,\n surveyList,\n indicatorObj,\n db = KpiDataHandlerService.database;\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"kpi\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded;charset=utf-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function excluirId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n };\n\n var obj = {\n getAll: function (departmentKey) {\n // Traz a lista de indicadores do departamento\n var indicatorsRef = db.ref('departments/' + departmentKey).child('kpi');\n indicatorList = $firebaseArray(indicatorsRef);\n return indicatorList;\n },\n\n getByKey: function (departmentKey, indicatorKey) {\n var path = 'departments/' + departmentKey + '/kpi/' + indicatorKey;\n var indicatorRef = db.ref(path);\n var obj = new $firebaseObject(indicatorRef);\n return obj;\n },\n\n save: function (indicator, isObj) {\n if (!isObj) {\n if (indicator.$id)\n return indicatorList.$save(indicator)\n else\n return indicatorList.$add(indicator)\n } else {\n return indicator.$save(indicator);\n }\n },\n\n add: function (departmentKey, obj) {\n var path = 'departments/' + departmentKey + '/kpi';\n var departmentRef = db.ref(path);\n return departmentRef.push(obj);\n },\n\n delete: function (indicatorObj) {\n\n },\n\n //Novos métodos\n getIndicadores: function (idDepartamento) {\n\n var tempData = angular.copy(_data);\n tempData.paramfilter = JSON.stringify({\n departmentId: idDepartamento\n });\n\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: tempData\n });\n },\n\n format: function (result) {\n var indicadores = [];\n if (result) {\n for (var property in result) {\n var dep = result[property];\n dep.id = property;\n indicadores.push(dep);\n }\n }\n\n return indicadores;\n },\n\n salvar: function (indicador, edicao) {\n\n var tempData = angular.copy(_data);\n if (edicao) {\n tempData.parammethod = 'PUT';\n tempData.paramid = indicador.id;\n indicador = excluirId(indicador);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify(indicador);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n }\n }\n\n return obj;\n }\n}());\n(function (module) {\n 'use strict';\n\n module.service('EventTypesService', function ($cookies, PENTAHO_APP_URL, $http, $filter, $httpParamSerializerJQLike) {\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"event-type\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function excluirId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n };\n\n var services = {\n getTiposEventos: function () {\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: _data\n });\n },\n\n format: function (result) {\n var tiposEventos = [];\n if (result) {\n for (var property in result) {\n var tipo = result[property];\n tipo.id = property;\n tiposEventos.push(tipo);\n }\n }\n\n return tiposEventos;\n },\n\n salvar: function (type, edicao) {\n\n var tempData = angular.copy(_data);\n if (edicao) {\n tempData.parammethod = 'PUT';\n tempData.paramid = type.id;\n type = excluirId(type);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify(type);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n },\n\n delete: function (type) {\n\n var tempData = angular.copy(_data);\n tempData.parammethod = 'DELETE';\n tempData.paramid = type.id;\n type = excluirId(type);\n\n tempData.paramdoc = JSON.stringify(type);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n }\n };\n\n return services;\n });\n\n}(angular.module('app.kpi-data-handler')));\n(function () {\n 'use strict';\n\n angular\n .module('app.kpi-data-handler')\n .service('KpiDepartments', KpiDepartmentsService)\n\n function KpiDepartmentsService(KpiDataHandlerService, $q, $firebaseArray, AuthService, $rootScope, $cookies, PENTAHO_APP_URL, $http, $filter, $httpParamSerializerJQLike) {\n var\n vm = this,\n db = KpiDataHandlerService.database,\n allDepartments,\n departmentList,\n departmentObj;\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"department\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function excluirId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n };\n\n var obj = {\n getDepartments: function (user) {\n // Traz a lista de departamentos\n var departmentsRef = db.ref('departments')\n .orderByChild('manager')\n .equalTo(user);\n\n if ($rootScope.userContext &&\n (user === AuthService.authSessions.pentahoSession.username)) {\n if ($rootScope.userContext.isAdmin ||\n $rootScope.userContext.isQualityManager) {\n departmentsRef = db.ref('departments');\n }\n }\n\n departmentList = $firebaseArray(departmentsRef);\n return departmentList;\n },\n\n getAllDepartments: function () {\n // Traz a lista de departamentos\n var departmentsRef = db.ref('departments');\n allDepartments = $firebaseArray(departmentsRef);\n return allDepartments;\n },\n\n getByKey: function (departmentKey) {\n var path = 'departments/' + departmentKey;\n var departmentRef = db.ref(path);\n var obj = new $firebaseObject(departmentRef);\n return obj;\n },\n\n add: function (obj) {\n var path = 'departments/';\n var departmentRef = db.ref(path);\n return departmentRef.push(obj);\n },\n\n //Novos métodos\n getDepartamentos: function () {\n return $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: _data\n });\n },\n\n format: function (result) {\n var departamentos = [];\n if (result) {\n for (var property in result) {\n var dep = result[property];\n\n if (($rootScope.userContext.isAdmin || $rootScope.userContext.isQualityManager) || (AuthService.authSessions.pentahoSession.username === dep.responsible)) {\n dep.id = property;\n departamentos.push(dep);\n }\n }\n }\n\n return $filter('orderBy')(departamentos, 'name');\n },\n\n formatWithoutRules: function (result) {\n var departamentos = [];\n if (result) {\n for (var property in result) {\n var dep = result[property];\n dep.id = property;\n departamentos.push(dep);\n }\n }\n\n return $filter('orderBy')(departamentos, 'name');\n },\n\n salvar: function (departamento, edicao) {\n\n var tempData = angular.copy(_data);\n if (edicao) {\n tempData.parammethod = 'PUT';\n tempData.paramid = departamento.id;\n departamento = excluirId(departamento);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify(departamento);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n },\n\n delete: function (departamento) {\n\n var tempData = angular.copy(_data);\n tempData.parammethod = 'DELETE';\n tempData.paramid = departamento.id;\n departamento = excluirId(departamento);\n\n tempData.paramdoc = JSON.stringify(departamento);\n\n return $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n })\n }\n }\n\n return obj;\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider, msApiProvider)\n {\n // Translation\n $translatePartialLoaderProvider.addPart('app/quick-panel');\n\n // Api\n /*msApiProvider.register('quickPanel.activities', ['app/data/quick-panel/activities.json']);\n msApiProvider.register('quickPanel.contacts', ['app/data/quick-panel/contacts.json']);\n msApiProvider.register('quickPanel.events', ['app/data/quick-panel/events.json']);\n msApiProvider.register('quickPanel.notes', ['app/data/quick-panel/notes.json']);\n msApiProvider.register('quickPanel.recent-analytics', ['app/data/quick-panel/recent-analytics.json']);*/\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel')\n .controller('RecentAnalyticsController', RecentAnalyticsController);\n\n /** @ngInject */\n function RecentAnalyticsController(msApi, localStorageService, $scope, $state, $rootScope)\n {\n var vm = this;\n\n $rootScope.$on('restorestate', function(event, data){\n getData();\n });\n getData();\n \n // Data\n vm.analytic = {};\n\n // Methods\n vm.gotoState = gotoState;\n vm.clearRecentAnalytics = clearRecentAnalytics;\n vm.getData = getData;\n\n //////////\n \n function getData()\n {\n /*var lsData = localStorageService.get('recent-analytics');\n if (lsData)\n vm.recentAnalytics = JSON.parse(lsData).data;\n else\n vm.recentAnalytics = null;*/\n }\n \n function clearRecentAnalytics(){\n /*localStorageService.set('recent-analytics', '');\n $rootScope.$broadcast('restorestate');*/\n }\n\n function gotoState(state)\n {\n //$state.go(state);\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsStepperController', MsStepperController)\n .directive('msStepper', msStepperDirective)\n .directive('msStepperStep', msStepperStepDirective);\n\n /** @ngInject */\n function MsStepperController($timeout)\n {\n var vm = this;\n\n // Data\n vm.mainForm = undefined;\n\n vm.steps = [];\n vm.currentStep = undefined;\n vm.currentStepNumber = 1;\n\n // Methods\n vm.registerMainForm = registerMainForm;\n vm.registerStep = registerStep;\n vm.setupSteps = setupSteps;\n vm.resetForm = resetForm;\n\n vm.setCurrentStep = setCurrentStep;\n\n vm.gotoStep = gotoStep;\n vm.gotoPreviousStep = gotoPreviousStep;\n vm.gotoNextStep = gotoNextStep;\n vm.gotoFirstStep = gotoFirstStep;\n vm.gotoLastStep = gotoLastStep;\n\n vm.isFirstStep = isFirstStep;\n vm.isLastStep = isLastStep;\n\n vm.isStepCurrent = isStepCurrent;\n vm.isStepDisabled = isStepDisabled;\n vm.isStepOptional = isStepOptional;\n vm.isStepValid = isStepValid;\n vm.isStepNumberValid = isStepNumberValid;\n\n vm.isFormValid = isFormValid;\n\n //////////\n\n /**\n * Register the main form\n *\n * @param form\n */\n function registerMainForm(form)\n {\n vm.mainForm = form;\n }\n\n /**\n * Register a step\n *\n * @param element\n * @param scope\n * @param form\n */\n function registerStep(element, scope, form)\n {\n var step = {\n element : element,\n scope : scope,\n form : form,\n stepNumber: scope.step || (vm.steps.length + 1),\n stepTitle : scope.stepTitle\n };\n\n // Push the step into steps array\n vm.steps.push(step);\n\n // Sort steps by stepNumber\n vm.steps.sort(function (a, b)\n {\n return a.stepNumber - b.stepNumber;\n });\n }\n\n /**\n * Setup steps for the first time\n */\n function setupSteps()\n {\n vm.setCurrentStep(vm.currentStepNumber);\n }\n\n /**\n * Reset steps and the main form\n */\n function resetForm()\n {\n // Timeout is required here because we need to\n // let form model to reset before setting the\n // statuses\n $timeout(function ()\n {\n // Reset all the steps\n for ( var x = 0; x < vm.steps.length; x++ )\n {\n vm.steps[x].form.$setPristine();\n vm.steps[x].form.$setUntouched();\n }\n\n // Reset the main form\n vm.mainForm.$setPristine();\n vm.mainForm.$setUntouched();\n\n // Go to first step\n gotoFirstStep();\n })\n }\n\n /**\n * Set current step\n *\n * @param stepNumber\n */\n function setCurrentStep(stepNumber)\n {\n // If the stepNumber is not a valid step number, bail...\n if ( !isStepNumberValid(stepNumber) )\n {\n return;\n }\n\n // Update the current step number\n vm.currentStepNumber = stepNumber;\n\n // Hide all steps\n for ( var i = 0; i < vm.steps.length; i++ )\n {\n vm.steps[i].element.hide();\n }\n\n // Show the current step\n vm.steps[vm.currentStepNumber - 1].element.show();\n }\n\n /**\n * Go to a step\n *\n * @param stepNumber\n */\n function gotoStep(stepNumber)\n {\n vm.setCurrentStep(stepNumber);\n }\n\n /**\n * Go to the previous step\n */\n function gotoPreviousStep()\n {\n vm.setCurrentStep(vm.currentStepNumber - 1);\n }\n\n /**\n * Go to the next step\n */\n function gotoNextStep()\n {\n vm.setCurrentStep(vm.currentStepNumber + 1);\n }\n\n /**\n * Go to the first step\n */\n function gotoFirstStep()\n {\n vm.setCurrentStep(1);\n }\n\n /**\n * Go to the last step\n */\n function gotoLastStep()\n {\n vm.setCurrentStep(vm.steps.length);\n }\n\n /**\n * Check if the current step is the first step\n *\n * @returns {boolean}\n */\n function isFirstStep()\n {\n return vm.currentStepNumber === 1;\n }\n\n /**\n * Check if the current step is the last step\n *\n * @returns {boolean}\n */\n function isLastStep()\n {\n return vm.currentStepNumber === vm.steps.length;\n }\n\n /**\n * Check if the given step is the current one\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepCurrent(stepNumber)\n {\n // If the stepNumber is not a valid step number, bail...\n if ( !isStepNumberValid(stepNumber) )\n {\n return null;\n }\n\n return vm.currentStepNumber === stepNumber;\n }\n\n /**\n * Check if the given step should be disabled\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepDisabled(stepNumber)\n {\n // If the stepNumber is not a valid step number, bail...\n if ( !isStepNumberValid(stepNumber) )\n {\n return null;\n }\n\n var disabled = false;\n\n for ( var i = 1; i < stepNumber; i++ )\n {\n if ( !isStepValid(i) )\n {\n disabled = true;\n break;\n }\n }\n\n return disabled;\n }\n\n /**\n * Check if the given step is optional\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepOptional(stepNumber)\n {\n // If the stepNumber is not a valid step number, bail...\n if ( !isStepNumberValid(stepNumber) )\n {\n return null;\n }\n\n return vm.steps[stepNumber - 1].scope.optionalStep;\n }\n\n /**\n * Check if the given step is valid\n *\n * @param stepNumber\n * @returns {null|boolean}\n */\n function isStepValid(stepNumber)\n {\n // If the stepNumber is not a valid step number, bail...\n if ( !isStepNumberValid(stepNumber) )\n {\n return null;\n }\n\n // If the step is optional, always return true\n if ( isStepOptional(stepNumber) )\n {\n return true;\n }\n\n return vm.steps[stepNumber - 1].form.$valid;\n }\n\n /**\n * Check if the given step number is a valid step number\n *\n * @param stepNumber\n * @returns {boolean}\n */\n function isStepNumberValid(stepNumber)\n {\n return !(stepNumber < 1 || stepNumber > vm.steps.length);\n }\n\n /**\n * Check if the entire form is valid\n *\n * @returns {boolean}\n */\n function isFormValid()\n {\n return vm.mainForm.$valid;\n }\n }\n\n /** @ngInject */\n function msStepperDirective()\n {\n return {\n restrict : 'A',\n require : ['form', 'msStepper'],\n priority : 1001,\n controller : 'MsStepperController as MsStepper',\n bindToController: {\n model: '=ngModel'\n },\n transclude : true,\n templateUrl : 'app/core/directives/ms-stepper/templates/horizontal/horizontal.html',\n compile : function (tElement)\n {\n tElement.addClass('ms-stepper');\n\n return function postLink(scope, iElement, iAttrs, ctrls)\n {\n var FormCtrl = ctrls[0],\n MsStepperCtrl = ctrls[1];\n\n // Register the main form and setup\n // the steps for the first time\n MsStepperCtrl.registerMainForm(FormCtrl);\n MsStepperCtrl.setupSteps();\n };\n }\n }\n }\n\n /** @ngInject */\n function msStepperStepDirective()\n {\n return {\n restrict: 'E',\n require : ['form', '^msStepper'],\n priority: 1000,\n scope : {\n step : '=?',\n stepTitle : '=?',\n optionalStep: '=?'\n },\n compile : function (tElement)\n {\n tElement.addClass('ms-stepper-step');\n\n return function postLink(scope, iElement, iAttrs, ctrls)\n {\n var FormCtrl = ctrls[0],\n MsStepperCtrl = ctrls[1];\n\n // Is it an optional step?\n scope.optionalStep = angular.isDefined(iAttrs.optionalStep);\n\n // Register the step\n MsStepperCtrl.registerStep(iElement, scope, FormCtrl);\n\n // Hide the step by default\n iElement.hide();\n };\n }\n }\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsWidgetController', MsWidgetController)\n .directive('msWidget', msWidgetDirective)\n .directive('msWidgetFront', msWidgetFrontDirective)\n .directive('msWidgetBack', msWidgetBackDirective);\n\n /** @ngInject */\n function MsWidgetController($scope, $element)\n {\n var vm = this;\n\n // Data\n vm.flipped = false;\n\n // Methods\n vm.flip = flip;\n\n //////////\n\n /**\n * Flip the widget\n */\n function flip()\n {\n if ( !isFlippable() )\n {\n return;\n }\n\n // Toggle flipped status\n vm.flipped = !vm.flipped;\n\n // Toggle the 'flipped' class\n $element.toggleClass('flipped', vm.flipped);\n }\n\n /**\n * Check if widget is flippable\n *\n * @returns {boolean}\n */\n function isFlippable()\n {\n return (angular.isDefined($scope.flippable) && $scope.flippable === true);\n }\n }\n\n /** @ngInject */\n function msWidgetDirective()\n {\n return {\n restrict : 'E',\n scope : {\n flippable: '=?'\n },\n controller: 'MsWidgetController',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n //////////\n };\n }\n };\n }\n\n /** @ngInject */\n function msWidgetFrontDirective()\n {\n return {\n restrict : 'E',\n require : '^msWidget',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget-front');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n // Methods\n scope.flipWidget = MsWidgetCtrl.flip;\n };\n }\n };\n }\n\n /** @ngInject */\n function msWidgetBackDirective()\n {\n return {\n restrict : 'E',\n require : '^msWidget',\n transclude: true,\n compile : function (tElement)\n {\n tElement.addClass('ms-widget-back');\n\n return function postLink(scope, iElement, iAttrs, MsWidgetCtrl, transcludeFn)\n {\n // Custom transclusion\n transcludeFn(function (clone)\n {\n iElement.empty();\n iElement.append(clone);\n });\n\n // Methods\n scope.flipWidget = MsWidgetCtrl.flip;\n };\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsTimelineController', MsTimelineController)\n .directive('msTimeline', msTimelineDirective)\n .directive('msTimelineItem', msTimelineItemDirective);\n\n /** @ngInject */\n function MsTimelineController()\n {\n var vm = this;\n\n // Data\n vm.scrollEl = undefined;\n\n // Methods\n vm.setScrollEl = setScrollEl;\n vm.getScrollEl = getScrollEl;\n\n //////////\n\n /**\n * Set scroll element\n *\n * @param scrollEl\n */\n function setScrollEl(scrollEl)\n {\n vm.scrollEl = scrollEl;\n }\n\n /**\n * Get scroll element\n *\n * @returns {undefined|*}\n */\n function getScrollEl()\n {\n return vm.scrollEl;\n }\n }\n\n /** @ngInject */\n function msTimelineDirective()\n {\n return {\n scope : {\n loadMore: '&?msTimelineLoadMore'\n },\n controller: 'MsTimelineController',\n compile : function (tElement)\n {\n tElement.addClass('ms-timeline');\n\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n {\n // Create an element for triggering the load more action and append it\n var loadMoreEl = angular.element('
');\n iElement.append(loadMoreEl);\n\n // Grab the scrollable element and store it in the controller for general use\n var scrollEl = angular.element('#content');\n MsTimelineCtrl.setScrollEl(scrollEl);\n\n // Threshold\n var threshold = 144;\n\n // Register onScroll event for the first time\n registerOnScroll();\n\n /**\n * onScroll Event\n */\n function onScroll()\n {\n if ( scrollEl.scrollTop() + scrollEl.height() + threshold > loadMoreEl.position().top )\n {\n // Show the loader\n loadMoreEl.addClass('show');\n\n // Unregister scroll event to prevent triggering the function over and over again\n unregisterOnScroll();\n\n // Trigger load more event\n scope.loadMore().then(\n // Success\n function ()\n {\n // Hide the loader\n loadMoreEl.removeClass('show');\n\n // Register the onScroll event again\n registerOnScroll();\n },\n\n // Error\n function ()\n {\n // Remove the loader completely\n loadMoreEl.remove();\n }\n );\n }\n }\n\n /**\n * onScroll event registerer\n */\n function registerOnScroll()\n {\n scrollEl.on('scroll', onScroll);\n }\n\n /**\n * onScroll event unregisterer\n */\n function unregisterOnScroll()\n {\n scrollEl.off('scroll', onScroll);\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n unregisterOnScroll();\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function msTimelineItemDirective($timeout, $q)\n {\n return {\n scope : true,\n require: '^msTimeline',\n compile: function (tElement)\n {\n tElement.addClass('ms-timeline-item').addClass('hidden');\n\n return function postLink(scope, iElement, iAttrs, MsTimelineCtrl)\n {\n var threshold = 72,\n itemLoaded = false,\n itemInViewport = false,\n scrollEl = MsTimelineCtrl.getScrollEl();\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Check if the timeline item has ms-card\n if ( iElement.find('ms-card') )\n {\n // If the ms-card template loaded...\n scope.$on('msCard::cardTemplateLoaded', function (event, args)\n {\n var cardEl = angular.element(args[0]);\n\n // Test the card to see if there is any image on it\n testForImage(cardEl).then(function ()\n {\n $timeout(function ()\n {\n itemLoaded = true;\n });\n });\n });\n }\n else\n {\n // Test the element to see if there is any image on it\n testForImage(iElement).then(function ()\n {\n $timeout(function ()\n {\n itemLoaded = true;\n });\n });\n }\n\n // Check if the loaded element also in the viewport\n scrollEl.on('scroll', testForVisibility);\n\n // Test for visibility for the first time without waiting for the scroll event\n testForVisibility();\n }\n\n // Item ready watcher\n var itemReadyWatcher = scope.$watch(\n function ()\n {\n return itemLoaded && itemInViewport;\n },\n function (current, old)\n {\n if ( angular.equals(current, old) )\n {\n return;\n }\n\n if ( current )\n {\n iElement.removeClass('hidden').addClass('animate');\n\n // Unbind itemReadyWatcher\n itemReadyWatcher();\n }\n }, true);\n\n /**\n * Test the given element for image\n *\n * @param element\n * @returns promise\n */\n function testForImage(element)\n {\n var deferred = $q.defer(),\n imgEl = element.find('img');\n\n if ( imgEl.length > 0 )\n {\n imgEl.on('load', function ()\n {\n deferred.resolve('Image is loaded');\n });\n }\n else\n {\n deferred.resolve('No images');\n }\n\n return deferred.promise;\n }\n\n /**\n * Test the element for visibility\n */\n function testForVisibility()\n {\n if ( scrollEl.scrollTop() + scrollEl.height() > iElement.position().top + threshold )\n {\n $timeout(function ()\n {\n itemInViewport = true;\n });\n\n // Unbind the scroll event\n scrollEl.off('scroll', testForVisibility);\n }\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSplashScreen', msSplashScreenDirective);\n\n /** @ngInject */\n function msSplashScreenDirective($animate)\n {\n return {\n restrict: 'E',\n link : function (scope, iElement)\n {\n var splashScreenRemoveEvent = scope.$on('msSplashScreen::remove', function ()\n {\n $animate.leave(iElement).then(function ()\n {\n // De-register scope event\n splashScreenRemoveEvent();\n\n // Null-ify everything else\n scope = iElement = null;\n });\n });\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSearchBar', msSearchBarDirective);\n\n /** @ngInject */\n function msSearchBarDirective($document)\n {\n return {\n restrict : 'E',\n scope : true,\n templateUrl: 'app/core/directives/ms-search-bar/ms-search-bar.html',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('ms-search-bar');\n\n return function postLink(scope, iElement)\n {\n var expanderEl,\n collapserEl;\n\n // Initialize\n init();\n\n function init()\n {\n expanderEl = iElement.find('#ms-search-bar-expander');\n collapserEl = iElement.find('#ms-search-bar-collapser');\n\n expanderEl.on('click', expand);\n collapserEl.on('click', collapse);\n }\n\n /**\n * Expand\n */\n function expand()\n {\n iElement.addClass('expanded');\n\n // Esc key event\n $document.on('keyup', escKeyEvent);\n }\n\n /**\n * Collapse\n */\n function collapse()\n {\n iElement.removeClass('expanded');\n }\n\n /**\n * Escape key event\n *\n * @param e\n */\n function escKeyEvent(e)\n {\n if ( e.keyCode === 27 )\n {\n collapse();\n $document.off('keyup', escKeyEvent);\n }\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSidenavHelper', msSidenavHelperDirective);\n\n /** @ngInject */\n function msSidenavHelperDirective()\n {\n return {\n restrict: 'A',\n require : '^mdSidenav',\n link : function (scope, iElement, iAttrs, MdSidenavCtrl)\n {\n // Watch md-sidenav open & locked open statuses\n // and add class to the \".page-layout\" if only\n // the sidenav open and NOT locked open\n scope.$watch(function ()\n {\n return MdSidenavCtrl.isOpen() && !MdSidenavCtrl.isLockedOpen();\n }, function (current)\n {\n if ( angular.isUndefined(current) )\n {\n return;\n }\n\n iElement.parent().toggleClass('full-height', current);\n angular.element('html').toggleClass('sidenav-open', current);\n });\n }\n };\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msNavigationService', msNavigationServiceProvider)\n .controller('MsNavigationController', MsNavigationController)\n // Vertical\n .directive('msNavigation', msNavigationDirective)\n .controller('MsNavigationNodeController', MsNavigationNodeController)\n .directive('msNavigationNode', msNavigationNodeDirective)\n .directive('msNavigationItem', msNavigationItemDirective)\n //Horizontal\n .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\n .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\n .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\n .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\n\n /** @ngInject */\n function msNavigationServiceProvider() {\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n var states = [];\n\n // Navigation array\n var navigation = [];\n\n var service = this;\n\n // Methods\n service.saveItem = saveItem;\n service.deleteItem = deleteItem;\n service.sortByWeight = sortByWeight;\n service.getStates = getStates;\n\n function getStates() {\n return states;\n }\n\n //////////\n\n /**\n * Create or update the navigation item\n *\n * @param path\n * @param item\n */\n function saveItem(path, item) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n var parts = path.split('.');\n\n // Generate the object id from the parts\n var id = parts[parts.length - 1];\n\n // Get the parent item from the parts\n var parent = _findOrCreateParent(parts);\n\n // Decide if we are going to update or create\n var updateItem = false;\n\n for (var i = 0; i < parent.length; i++) {\n if (parent[i]._id === id) {\n updateItem = parent[i];\n\n break;\n }\n }\n\n // Update\n if (updateItem) {\n angular.extend(updateItem, item);\n\n // Add proper ui-sref\n updateItem.uisref = _getUiSref(updateItem);\n }\n // Create\n else {\n // Create an empty children array in the item\n item.children = [];\n\n // Add the default weight if not provided or if it's not a number\n if (angular.isUndefined(item.weight) || !angular.isNumber(item.weight)) {\n item.weight = 1;\n }\n\n // Add the item id\n item._id = id;\n\n // Add the item path\n item._path = path;\n\n // Add proper ui-sref\n item.uisref = _getUiSref(item);\n\n // Push the item into the array\n parent.push(item);\n states.push(item);\n }\n }\n\n /**\n * Delete navigation item\n *\n * @param path\n */\n function deleteItem(path) {\n if (!angular.isString(path)) {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n // Locate the item by using given path\n var item = navigation,\n parts = path.split('.');\n\n for (var p = 0; p < parts.length; p++) {\n var id = parts[p];\n\n for (var i = 0; i < item.length; i++) {\n if (item[i]._id === id) {\n // If we have a matching path,\n // we have found our object:\n // remove it.\n if (item[i]._path === path) {\n item.splice(i, 1);\n return true;\n }\n\n // Otherwise grab the children of\n // the current item and continue\n item = item[i].children;\n break;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Sort the navigation items by their weights\n *\n * @param parent\n */\n function sortByWeight(parent) {\n // If parent not provided, sort the root items\n if (!parent) {\n parent = navigation;\n parent.sort(_byWeight);\n }\n\n // Sort the children\n for (var i = 0; i < parent.length; i++) {\n var children = parent[i].children;\n\n if (children.length > 1) {\n children.sort(_byWeight);\n }\n\n if (children.length > 0) {\n sortByWeight(children);\n }\n }\n }\n\n /* ----------------- */\n /* Private Functions */\n /* ----------------- */\n\n /**\n * Find or create parent\n *\n * @param parts\n * @returns {Array|Boolean}\n * @private\n */\n function _findOrCreateParent(parts) {\n // Store the main navigation\n var parent = navigation;\n\n // If it's going to be a root item\n // return the navigation itself\n if (parts.length === 1) {\n return parent;\n }\n\n // Remove the last element from the parts as\n // we don't need that to figure out the parent\n parts.pop();\n\n // Find and return the parent\n for (var i = 0; i < parts.length; i++) {\n var _id = parts[i],\n createParent = true;\n\n for (var p = 0; p < parent.length; p++) {\n if (parent[p]._id === _id) {\n parent = parent[p].children;\n createParent = false;\n\n break;\n }\n }\n\n // If there is no parent found, create one, push\n // it into the current parent and assign it as a\n // new parent\n if (createParent) {\n var item = {\n _id: _id,\n _path: parts.join('.'),\n title: _id,\n weight: 1,\n children: []\n };\n\n parent.push(item);\n parent = item.children;\n }\n }\n\n return parent;\n }\n\n /**\n * Sort by weight\n *\n * @param x\n * @param y\n * @returns {number}\n * @private\n */\n function _byWeight(x, y) {\n return parseInt(x.weight) - parseInt(y.weight);\n }\n\n /**\n * Setup the ui-sref using state & state parameters\n *\n * @param item\n * @returns {string}\n * @private\n */\n function _getUiSref(item) {\n var uisref = '';\n\n if (angular.isDefined(item.state)) {\n uisref = item.state;\n\n if (angular.isDefined(item.stateParams) && angular.isObject(item.stateParams)) {\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n }\n }\n\n return uisref;\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n\n this.$get = function () {\n var activeItem = null,\n navigationScope = null,\n folded = null,\n foldedOpen = null;\n\n var service = {\n saveItem: saveItem,\n getStates: getStates,\n deleteItem: deleteItem,\n sort: sortByWeight,\n clearNavigation: clearNavigation,\n setActiveItem: setActiveItem,\n getActiveItem: getActiveItem,\n getNavigationObject: getNavigationObject,\n setNavigationScope: setNavigationScope,\n setFolded: setFolded,\n getFolded: getFolded,\n setFoldedOpen: setFoldedOpen,\n getFoldedOpen: getFoldedOpen,\n toggleFolded: toggleFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Clear the entire navigation\n */\n function clearNavigation() {\n // Clear the navigation array\n navigation = [];\n\n // Clear the vm.navigation from main controller\n if (navigationScope) {\n navigationScope.vm.navigation = [];\n }\n }\n\n /**\n * Set active item\n *\n * @param node\n * @param scope\n */\n function setActiveItem(node, scope) {\n activeItem = {\n node: node,\n scope: scope\n };\n }\n\n /**\n * Return active item\n */\n function getActiveItem() {\n return activeItem;\n }\n\n /**\n * Return navigation object\n *\n * @param root\n * @returns {Array}\n */\n function getNavigationObject(root) {\n if (root) {\n for (var i = 0; i < navigation.length; i++) {\n if (navigation[i]._id === root) {\n return [navigation[i]];\n }\n }\n }\n\n return navigation;\n }\n\n /**\n * Store navigation's scope for later use\n *\n * @param scope\n */\n function setNavigationScope(scope) {\n navigationScope = scope;\n }\n\n /**\n * Set folded status\n *\n * @param status\n */\n function setFolded(status) {\n folded = status;\n }\n\n /**\n * Return folded status\n *\n * @returns {*}\n */\n function getFolded() {\n return folded;\n }\n\n /**\n * Set folded open status\n *\n * @param status\n */\n function setFoldedOpen(status) {\n foldedOpen = status;\n }\n\n /**\n * Return folded open status\n *\n * @returns {*}\n */\n function getFoldedOpen() {\n return foldedOpen;\n }\n\n\n /**\n * Toggle fold on stored navigation's scope\n */\n function toggleFolded() {\n navigationScope.toggleFolded();\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationController($scope, msNavigationService) {\n var vm = this;\n\n // Data\n if ($scope.root) {\n vm.navigation = msNavigationService.getNavigationObject($scope.root);\n } else {\n vm.navigation = msNavigationService.getNavigationObject();\n }\n\n // Methods\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Sort the navigation before doing anything else\n msNavigationService.sort();\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n /** @ngInject */\n function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService) {\n return {\n restrict: 'E',\n scope: {\n folded: '=',\n root: '@'\n },\n controller: 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation');\n\n return function postLink(scope, iElement) {\n var bodyEl = angular.element('body'),\n foldExpanderEl = angular.element('
'),\n foldCollapserEl = angular.element('
'),\n sidenav = $mdSidenav('navigation');\n\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n\n // Initialize\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Set the folded status for the first time.\n // First, we have to check if we have a folded\n // status available in the service already. This\n // will prevent navigation to act weird if we already\n // set the fold status, remove the navigation and\n // then re-initialize it, which happens if we\n // change to a view without a navigation and then\n // come back with history.back() function.\n\n // If the service didn't initialize before, set\n // the folded status from scope, otherwise we\n // won't touch anything because the folded status\n // already set in the service...\n if (msNavigationService.getFolded() === null) {\n msNavigationService.setFolded(scope.folded);\n }\n\n if (msNavigationService.getFolded()) {\n // Collapse everything.\n // This must be inside a $timeout because by the\n // time we call this, the 'msNavigation::collapse'\n // event listener is not registered yet. $timeout\n // will ensure that it will be called after it is\n // registered.\n $timeout(function () {\n $rootScope.$broadcast('msNavigation::collapse');\n });\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n }\n\n // Sidenav locked open status watcher\n scope.$watch(function () {\n return sidenav.isLockedOpen();\n }, function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n var folded = msNavigationService.getFolded();\n\n if (folded) {\n if (current) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n } else {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n }\n }\n });\n\n // Folded status watcher\n scope.$watch('folded', function (current, old) {\n if (angular.isUndefined(current) || angular.equals(current, old)) {\n return;\n }\n\n setFolded(current);\n });\n\n /**\n * Set folded status\n *\n * @param folded\n */\n function setFolded(folded) {\n // Store folded status on the service for global access\n msNavigationService.setFolded(folded);\n\n if (folded) {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n } else {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n // Remove fold collapser\n removeFoldCollapser();\n }\n }\n\n /**\n * Set fold expander\n */\n function setFoldExpander() {\n iElement.parent().append(foldExpanderEl);\n\n // Let everything settle for a moment\n // before registering the event listener\n $timeout(function () {\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n });\n }\n\n /**\n * Set fold collapser\n */\n function setFoldCollapser() {\n bodyEl.find('#main').append(foldCollapserEl);\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n }\n\n /**\n * Remove fold collapser\n */\n function removeFoldCollapser() {\n foldCollapserEl.remove();\n }\n\n /**\n * onHover event of foldExpander\n */\n function onFoldExpanderHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(true);\n\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded-open');\n\n // Remove the fold opener\n foldExpanderEl.remove();\n\n // Set fold collapser\n setFoldCollapser();\n }\n\n /**\n * onHover event of foldCollapser\n */\n function onFoldCollapserHover(event) {\n if (event) {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(false);\n\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded-open');\n\n // Remove the fold collapser\n foldCollapserEl.remove();\n\n // Set fold expander\n setFoldExpander();\n }\n\n /**\n * Public access for toggling folded status externally\n */\n scope.toggleFolded = function () {\n var folded = msNavigationService.getFolded();\n\n setFolded(!folded);\n };\n\n /**\n * On $stateChangeStart\n */\n scope.$on('$stateChangeStart', function () {\n // Close the sidenav\n sidenav.close();\n\n // If navigation is folded open, close it\n if (msNavigationService.getFolded()) {\n onFoldCollapserHover();\n }\n });\n\n // Cleanup\n scope.$on('$destroy', function () {\n foldCollapserEl.off('mouseenter touchstart');\n foldExpanderEl.off('mouseenter touchstart');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.collapsed = undefined;\n vm.collapsable = undefined;\n vm.group = undefined;\n vm.animateHeightClass = 'animate-height';\n\n // Methods\n vm.toggleCollapsed = toggleCollapsed;\n vm.collapse = collapse;\n vm.expand = expand;\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n vm.checkItemState = checkItemState;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Is collapsable?\n if (!vm.hasChildren || vm.group) {\n vm.collapsable = false;\n } else {\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n }\n\n // Is collapsed?\n if (!vm.collapsable) {\n vm.collapsed = false;\n } else {\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n }\n\n // Expand all parents if we have a matching state or\n // the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function () {\n // Expand if the current scope is collapsable and is collapsed\n if (vm.collapsable && vm.collapsed) {\n $scope.$evalAsync(function () {\n vm.collapsed = false;\n });\n }\n });\n\n // Listen for collapse event\n $scope.$on('msNavigation::collapse', function (event, path) {\n if (vm.collapsed || !vm.collapsable) {\n return;\n }\n\n // If there is no path defined, collapse\n if (angular.isUndefined(path)) {\n vm.collapse();\n }\n // If there is a path defined, do not collapse\n // the items that are inside that path. This will\n // prevent parent items from collapsing\n else {\n var givenPathParts = path.split('.'),\n activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for given path\n if (givenPathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n return;\n }\n\n vm.collapse();\n }\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Collapse everything except the one we're using\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n }\n });\n }\n\n /**\n * Toggle collapsed\n */\n function toggleCollapsed() {\n if (vm.collapsed) {\n vm.expand();\n } else {\n vm.collapse();\n }\n }\n\n /**\n * Collapse\n */\n function collapse() {\n // Grab the element that we are going to collapse\n var collapseEl = vm.element.children('ul');\n\n // Grab the height\n var height = collapseEl[0].offsetHeight;\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = true;\n\n // Add collapsing class to the node\n vm.element.addClass('collapsing');\n\n // Animate the height\n $animate.animate(collapseEl, {\n 'display': 'block',\n 'height': height + 'px'\n }, {\n 'height': '0px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n collapseEl.css({\n 'display': '',\n 'height': ''\n });\n\n // Clear collapsing class from the node\n vm.element.removeClass('collapsing');\n }\n );\n\n // Broadcast the collapse event so child items can also be collapsed\n $scope.$broadcast('msNavigation::collapse');\n });\n }\n\n /**\n * Expand\n */\n function expand() {\n // Grab the element that we are going to expand\n var expandEl = vm.element.children('ul');\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n expandEl.css({\n 'position': 'absolute',\n 'visibility': 'hidden',\n 'display': 'block',\n 'height': 'auto'\n });\n\n // Grab the height\n var height = expandEl[0].offsetHeight;\n\n // Reset the style modifications\n expandEl.css({\n 'position': '',\n 'visibility': '',\n 'display': '',\n 'height': ''\n });\n\n $scope.$evalAsync(function () {\n // Set collapsed status\n vm.collapsed = false;\n\n // Add expanding class to the node\n vm.element.addClass('expanding');\n\n // Animate the height\n $animate.animate(expandEl, {\n 'display': 'block',\n 'height': '0px'\n }, {\n 'height': height + 'px'\n },\n vm.animateHeightClass\n ).then(\n function () {\n // Clear the inline styles after animation done\n expandEl.css({\n 'height': ''\n });\n\n // Clear expanding class from the node\n vm.element.removeClass('expanding');\n }\n );\n\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden() {\n if (angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden)) {\n return vm.node.hidden();\n }\n\n return false;\n }\n\n /**\n * Verifica se o estado pode ser recarregado, caso possa, faz o reload()\n *\n * @returns {boolean}\n */\n function checkItemState(state) {\n if ((state.substr(0, 14) == 'app.analytics-') && (state == $state.current.name))\n $state.reload(state);\n }\n }\n\n /** @ngInject */\n function msNavigationNodeDirective() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationNode'\n },\n controller: 'MsNavigationNodeController as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl) {\n // Add custom classes\n iElement.addClass(MsNavigationNodeCtrl.getClass());\n\n // Add group class if it's a group\n if (MsNavigationNodeCtrl.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationItemDirective() {\n return {\n restrict: 'A',\n require: '^msNavigationNode',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl) {\n // If the item is collapsable...\n if (MsNavigationNodeCtrl.collapsable) {\n iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalDirective(msNavigationService) {\n return {\n restrict: 'E',\n scope: {\n root: '@'\n },\n controller: 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\n transclude: true,\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal');\n\n return function postLink(scope) {\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService) {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.group = undefined;\n\n // Methods\n vm.getClass = getClass;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init() {\n // Setup the initial values\n\n // Is active\n vm.isActive = false;\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Mark all parents as active if we have a matching state\n // or the current state is a child of the node's state\n if (vm.node.state === $state.current.name || $state.includes(vm.node.state)) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function () {\n // Mark as active if has children\n if (vm.hasChildren) {\n $scope.$evalAsync(function () {\n vm.isActive = true;\n });\n }\n });\n\n // Listen for clearActive event\n $scope.$on('msNavigation::clearActive', function () {\n if (!vm.hasChildren) {\n return;\n }\n\n var activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if (activeItem) {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for active path\n if (activePathParts.indexOf(vm.node._id) > -1) {\n $scope.$evalAsync(function () {\n vm.isActive = true;\n });\n } else {\n $scope.$evalAsync(function () {\n vm.isActive = false;\n });\n }\n\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function () {\n if (vm.node.state === $state.current.name) {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if (angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params)) {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Clear all active states everything except the one we're using\n $rootScope.$broadcast('msNavigation::clearActive');\n }\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass() {\n return vm.node.class;\n }\n }\n\n /** @ngInject */\n function msNavigationHorizontalNodeDirective() {\n return {\n restrict: 'A',\n bindToController: {\n node: '=msNavigationHorizontalNode'\n },\n controller: 'MsNavigationHorizontalNodeController as vm',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl) {\n // Add custom classes\n iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\n\n // Add group class if it's a group\n if (MsNavigationHorizontalNodeCtrl.group) {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalItemDirective($mdMedia) {\n return {\n restrict: 'A',\n require: '^msNavigationHorizontalNode',\n compile: function (tElement) {\n tElement.addClass('ms-navigation-horizontal-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl) {\n iElement.on('click', onClick);\n\n function onClick() {\n if (!MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md')) {\n return;\n }\n\n iElement.toggleClass('expanded');\n }\n\n // Cleanup\n scope.$on('$destroy', function () {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msScrollConfig', msScrollConfigProvider)\n .directive('msScroll', msScrollDirective);\n\n /** @ngInject */\n function msScrollConfigProvider()\n {\n // Default configuration\n var defaultConfiguration = {\n wheelSpeed : 1,\n wheelPropagation : false,\n swipePropagation : true,\n minScrollbarLength : null,\n maxScrollbarLength : null,\n useBothWheelAxes : false,\n useKeyboard : true,\n suppressScrollX : false,\n suppressScrollY : false,\n scrollXMarginOffset : 0,\n scrollYMarginOffset : 0,\n stopPropagationOnClick: true\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Return the config\n */\n function getConfig()\n {\n return defaultConfiguration;\n }\n };\n }\n\n /** @ngInject */\n function msScrollDirective($timeout, msScrollConfig, msUtils, fuseConfig)\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n // Do not replace scrollbars if\n // 'disableCustomScrollbars' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbars') )\n {\n return;\n }\n\n // Do not replace scrollbars on mobile devices\n // if 'disableCustomScrollbarsOnMobile' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbarsOnMobile') && msUtils.isMobile() )\n {\n return;\n }\n\n // Add class\n tElement.addClass('ms-scroll');\n\n return function postLink(scope, iElement, iAttrs)\n {\n var options = {};\n\n // If options supplied, evaluate the given\n // value. This is because we don't want to\n // have an isolated scope but still be able\n // to use scope variables.\n // We don't want an isolated scope because\n // we should be able to use this everywhere\n // especially with other directives\n if ( iAttrs.msScroll )\n {\n options = scope.$eval(iAttrs.msScroll);\n }\n\n // Extend the given config with the ones from provider\n options = angular.extend({}, msScrollConfig.getConfig(), options);\n\n // Initialize the scrollbar\n $timeout(function ()\n {\n PerfectScrollbar.initialize(iElement[0], options);\n }, 0);\n\n // Update the scrollbar on element mouseenter\n iElement.on('mouseenter', updateScrollbar);\n\n // Watch scrollHeight and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollHeight');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n // Watch scrollWidth and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollWidth');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n /**\n * Update the scrollbar\n */\n function updateScrollbar()\n {\n PerfectScrollbar.update(iElement[0]);\n }\n\n // Cleanup on destroy\n scope.$on('$destroy', function ()\n {\n iElement.off('mouseenter');\n PerfectScrollbar.destroy(iElement[0]);\n });\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msResponsiveTable', msResponsiveTableDirective);\n\n /** @ngInject */\n function msResponsiveTableDirective()\n {\n return {\n restrict: 'A',\n link : function (scope, iElement)\n {\n // Wrap the table\n var wrapper = angular.element('
');\n iElement.after(wrapper);\n wrapper.append(iElement);\n\n //////////\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msNavFoldService', msNavFoldService)\n .directive('msNavIsFolded', msNavIsFoldedDirective)\n .controller('MsNavController', MsNavController)\n .directive('msNav', msNavDirective)\n .directive('msNavTitle', msNavTitleDirective)\n .directive('msNavButton', msNavButtonDirective)\n .directive('msNavToggle', msNavToggleDirective);\n\n /** @ngInject */\n function msNavFoldService()\n {\n var foldable = {};\n\n var service = {\n setFoldable : setFoldable,\n isNavFoldedOpen: isNavFoldedOpen,\n toggleFold : toggleFold,\n openFolded : openFolded,\n closeFolded : closeFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Set the foldable\n *\n * @param scope\n * @param element\n */\n function setFoldable(scope, element)\n {\n foldable = {\n 'scope' : scope,\n 'element': element\n };\n }\n\n /**\n * Is folded open\n */\n function isNavFoldedOpen()\n {\n return foldable.scope.isNavFoldedOpen();\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n foldable.scope.toggleFold();\n }\n\n /**\n * Open folded navigation\n */\n function openFolded()\n {\n foldable.scope.openFolded();\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded()\n {\n foldable.scope.closeFolded();\n }\n }\n\n /** @ngInject */\n function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\n {\n return {\n restrict: 'A',\n link : function (scope, iElement, iAttrs)\n {\n var isFolded = (iAttrs.msNavIsFolded === 'true'),\n isFoldedOpen = false,\n body = angular.element($document[0].body),\n openOverlay = angular.element('
'),\n closeOverlay = angular.element('
'),\n sidenavEl = iElement.parent();\n\n // Initialize the service\n msNavFoldService.setFoldable(scope, iElement, isFolded);\n\n // Set the fold status for the first time\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n\n /**\n * Is nav folded open\n */\n function isNavFoldedOpen()\n {\n return isFoldedOpen;\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n isFolded = !isFolded;\n\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n }\n\n /**\n * Fold the navigation\n */\n function fold()\n {\n // Add classes\n body.addClass('ms-nav-folded');\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n // Append the openOverlay to the element\n sidenavEl.append(openOverlay);\n\n // Event listeners\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Open folded navigation\n */\n function openFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n body.addClass('ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Remove open overlay\n sidenavEl.find(openOverlay).remove();\n\n // Append close overlay and bind its events\n sidenavEl.parent().append(closeOverlay);\n closeOverlay.on('mouseenter touchstart', function (event)\n {\n closeFolded(event);\n isFoldedOpen = false;\n });\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n body.removeClass('ms-nav-folded-open');\n\n // Remove close overlay\n sidenavEl.parent().find(closeOverlay).remove();\n\n // Append open overlay and bind its events\n sidenavEl.append(openOverlay);\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Unfold the navigation\n */\n function unfold()\n {\n body.removeClass('ms-nav-folded ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n iElement.off('mouseenter mouseleave');\n }\n\n // Expose functions to the scope\n scope.toggleFold = toggleFold;\n scope.openFolded = openFolded;\n scope.closeFolded = closeFolded;\n scope.isNavFoldedOpen = isNavFoldedOpen;\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n openOverlay.off('mouseenter touchstart');\n closeOverlay.off('mouseenter touchstart');\n iElement.off('mouseenter mouseleave');\n });\n }\n };\n }\n\n\n /** @ngInject */\n function MsNavController()\n {\n var vm = this,\n disabled = false,\n toggleItems = [],\n lockedItems = [];\n\n // Data\n\n // Methods\n vm.isDisabled = isDisabled;\n vm.enable = enable;\n vm.disable = disable;\n vm.setToggleItem = setToggleItem;\n vm.getLockedItems = getLockedItems;\n vm.setLockedItem = setLockedItem;\n vm.clearLockedItems = clearLockedItems;\n\n //////////\n\n /**\n * Is navigation disabled\n *\n * @returns {boolean}\n */\n function isDisabled()\n {\n return disabled;\n }\n\n /**\n * Disable the navigation\n */\n function disable()\n {\n disabled = true;\n }\n\n /**\n * Enable the navigation\n */\n function enable()\n {\n disabled = false;\n }\n\n /**\n * Set toggle item\n *\n * @param element\n * @param scope\n */\n function setToggleItem(element, scope)\n {\n toggleItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Get locked items\n *\n * @returns {Array}\n */\n function getLockedItems()\n {\n return lockedItems;\n }\n\n /**\n * Set locked item\n *\n * @param element\n * @param scope\n */\n function setLockedItem(element, scope)\n {\n lockedItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Clear locked items list\n */\n function clearLockedItems()\n {\n lockedItems = [];\n }\n }\n\n /** @ngInject */\n function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\n {\n return {\n restrict : 'E',\n scope : {},\n controller: 'MsNavController',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav');\n\n return function postLink(scope)\n {\n // Update toggle status according to the ui-router current state\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Update toggles on state changes\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\n {\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Close navigation sidenav on stateChangeSuccess\n $mdComponentRegistry.when('navigation').then(function (navigation)\n {\n navigation.close();\n\n if ( msNavFoldService.isNavFoldedOpen() )\n {\n msNavFoldService.closeFolded();\n }\n });\n });\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n stateChangeSuccessEvent();\n })\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavTitleDirective()\n {\n return {\n restrict: 'A',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-title');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavButtonDirective()\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-button');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavToggleDirective($rootScope, $q, $animate, $state)\n {\n return {\n restrict: 'A',\n require : '^msNav',\n scope : true,\n compile : function (tElement, tAttrs)\n {\n tElement.addClass('ms-nav-toggle');\n\n // Add collapsed attr\n if ( angular.isUndefined(tAttrs.collapsed) )\n {\n tAttrs.collapsed = true;\n }\n\n tElement.attr('collapsed', tAttrs.collapsed);\n\n return function postLink(scope, iElement, iAttrs, MsNavCtrl)\n {\n var classes = {\n expanded : 'expanded',\n expandAnimation : 'expand-animation',\n collapseAnimation: 'collapse-animation'\n };\n\n // Store all related states\n var links = iElement.find('a');\n var states = [];\n var regExp = /\\(.*\\)/g;\n\n angular.forEach(links, function (link)\n {\n var state = angular.element(link).attr('ui-sref');\n\n if ( angular.isUndefined(state) )\n {\n return;\n }\n\n // Remove any parameter definition from the state name before storing it\n state = state.replace(regExp, '');\n\n states.push(state);\n });\n\n // Store toggle-able element and its scope in the main nav controller\n MsNavCtrl.setToggleItem(iElement, scope);\n\n // Click handler\n iElement.children('.ms-nav-button').on('click', toggle);\n\n // Toggle function\n function toggle()\n {\n // If navigation is disabled, do nothing...\n if ( MsNavCtrl.isDisabled() )\n {\n return;\n }\n\n // Disable the entire navigation to prevent spamming\n MsNavCtrl.disable();\n\n if ( isCollapsed() )\n {\n // Clear the locked items list\n MsNavCtrl.clearLockedItems();\n\n // Emit pushToLockedList event\n scope.$emit('msNav::pushToLockedList');\n\n // Collapse everything but locked items\n $rootScope.$broadcast('msNav::collapse');\n\n // Expand and then...\n expand().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n }\n else\n {\n // Collapse with all children\n scope.$broadcast('msNav::forceCollapse');\n }\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n iElement.children('.ms-nav-button').off('click');\n });\n\n /*---------------------*/\n /* Scope Events */\n /*---------------------*/\n\n /**\n * Collapse everything but locked items\n */\n scope.$on('msNav::collapse', function ()\n {\n // Only collapse toggles that are not locked\n var lockedItems = MsNavCtrl.getLockedItems();\n var locked = false;\n\n angular.forEach(lockedItems, function (lockedItem)\n {\n if ( angular.equals(lockedItem.scope, scope) )\n {\n locked = true;\n }\n });\n\n if ( locked )\n {\n return;\n }\n\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Collapse everything\n */\n scope.$on('msNav::forceCollapse', function ()\n {\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Expand toggles that match with the current states\n */\n scope.$on('msNav::expandMatchingToggles', function ()\n {\n var currentState = $state.current.name;\n var shouldExpand = false;\n\n angular.forEach(states, function (state)\n {\n if ( currentState === state )\n {\n shouldExpand = true;\n }\n });\n\n if ( shouldExpand )\n {\n expand();\n }\n else\n {\n collapse();\n }\n });\n\n /**\n * Add toggle to the locked list\n */\n scope.$on('msNav::pushToLockedList', function ()\n {\n // Set expanded item on main nav controller\n MsNavCtrl.setLockedItem(iElement, scope);\n });\n\n /*---------------------*/\n /* Internal functions */\n /*---------------------*/\n\n /**\n * Is element collapsed\n *\n * @returns {bool}\n */\n function isCollapsed()\n {\n return iElement.attr('collapsed') === 'true';\n }\n\n /**\n * Is element expanded\n *\n * @returns {bool}\n */\n function isExpanded()\n {\n return !isCollapsed();\n }\n\n /**\n * Expand the toggle\n *\n * @returns $promise\n */\n function expand()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already expanded, do nothing..\n if ( isExpanded() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', false);\n\n // Grab the element to expand\n var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n elementToExpand.css({\n 'position' : 'absolute',\n 'visibility': 'hidden',\n 'display' : 'block',\n 'height' : 'auto'\n });\n\n // Grab the height\n var height = elementToExpand[0].offsetHeight;\n\n // Reset the style modifications\n elementToExpand.css({\n 'position' : '',\n 'visibility': '',\n 'display' : '',\n 'height' : ''\n });\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToExpand,\n {\n 'display': 'block',\n 'height' : '0px'\n },\n {\n 'height': height + 'px'\n },\n classes.expandAnimation\n ).then(\n function ()\n {\n // Add expanded class\n elementToExpand.addClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToExpand.css({'height': ''});\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Collapse the toggle\n *\n * @returns $promise\n */\n function collapse()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already collapsed, do nothing..\n if ( isCollapsed() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', true);\n\n // Grab the element to collapse\n var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Grab the height\n var height = elementToCollapse[0].offsetHeight;\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToCollapse,\n {\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n classes.collapseAnimation\n ).then(\n function ()\n {\n // Remove expanded class\n elementToCollapse.removeClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToCollapse.css({\n 'display': '',\n 'height' : ''\n });\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msRandomClass', msRandomClassDirective);\n\n /** @ngInject */\n function msRandomClassDirective()\n {\n return {\n restrict: 'A',\n scope : {\n msRandomClass: '='\n },\n link : function (scope, iElement)\n {\n var randomClass = scope.msRandomClass[Math.floor(Math.random() * (scope.msRandomClass.length))];\n iElement.addClass(randomClass);\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsFormWizardController', MsFormWizardController)\n .directive('msFormWizard', msFormWizardDirective)\n .directive('msFormWizardForm', msFormWizardFormDirective);\n\n /** @ngInject */\n function MsFormWizardController()\n {\n var vm = this;\n\n // Data\n vm.forms = [];\n vm.selectedIndex = 0;\n\n // Methods\n vm.registerForm = registerForm;\n\n vm.previousStep = previousStep;\n vm.nextStep = nextStep;\n vm.firstStep = firstStep;\n vm.lastStep = lastStep;\n\n vm.totalSteps = totalSteps;\n vm.isFirstStep = isFirstStep;\n vm.isLastStep = isLastStep;\n\n vm.currentStepInvalid = currentStepInvalid;\n vm.previousStepInvalid = previousStepInvalid;\n vm.formsIncomplete = formsIncomplete;\n vm.resetForm = resetForm;\n\n //////////\n\n /**\n * Register form\n *\n * @param form\n */\n function registerForm(form)\n {\n vm.forms.push(form);\n }\n\n /**\n * Go to previous step\n */\n function previousStep()\n {\n if ( isFirstStep() )\n {\n return;\n }\n\n vm.selectedIndex--;\n }\n\n /**\n * Go to next step\n */\n function nextStep()\n {\n if ( isLastStep() )\n {\n return;\n }\n\n vm.selectedIndex++;\n }\n\n /**\n * Go to first step\n */\n function firstStep()\n {\n vm.selectedIndex = 0;\n }\n\n /**\n * Go to last step\n */\n function lastStep()\n {\n vm.selectedIndex = totalSteps() - 1;\n }\n\n /**\n * Return total steps\n *\n * @returns {int}\n */\n function totalSteps()\n {\n return vm.forms.length;\n }\n\n /**\n * Is first step?\n *\n * @returns {boolean}\n */\n function isFirstStep()\n {\n return vm.selectedIndex === 0;\n }\n\n /**\n * Is last step?\n *\n * @returns {boolean}\n */\n function isLastStep()\n {\n return vm.selectedIndex === totalSteps() - 1;\n }\n\n /**\n * Is current step invalid?\n *\n * @returns {boolean}\n */\n function currentStepInvalid()\n {\n return angular.isDefined(vm.forms[vm.selectedIndex]) && vm.forms[vm.selectedIndex].$invalid;\n }\n\n /**\n * Is previous step invalid?\n *\n * @returns {boolean}\n */\n function previousStepInvalid()\n {\n return vm.selectedIndex > 0 && angular.isDefined(vm.forms[vm.selectedIndex - 1]) && vm.forms[vm.selectedIndex - 1].$invalid;\n }\n\n /**\n * Check if there is any incomplete forms\n *\n * @returns {boolean}\n */\n function formsIncomplete()\n {\n for ( var x = 0; x < vm.forms.length; x++ )\n {\n if ( vm.forms[x].$invalid )\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Reset form\n */\n function resetForm()\n {\n // Go back to the first step\n vm.selectedIndex = 0;\n\n // Make sure all the forms are back in the $pristine & $untouched status\n for ( var x = 0; x < vm.forms.length; x++ )\n {\n vm.forms[x].$setPristine();\n vm.forms[x].$setUntouched();\n }\n }\n }\n\n /** @ngInject */\n function msFormWizardDirective()\n {\n return {\n restrict : 'E',\n scope : true,\n controller: 'MsFormWizardController as msWizard',\n compile : function (tElement)\n {\n tElement.addClass('ms-form-wizard');\n\n return function postLink()\n {\n\n };\n }\n }\n\n }\n\n /** @ngInject */\n function msFormWizardFormDirective()\n {\n return {\n restrict: 'A',\n require : ['form', '^msFormWizard'],\n compile : function (tElement)\n {\n tElement.addClass('ms-form-wizard-form');\n\n return function postLink(scope, iElement, iAttrs, ctrls)\n {\n var formCtrl = ctrls[0],\n MsFormWizardCtrl = ctrls[1];\n\n MsFormWizardCtrl.registerForm(formCtrl);\n }\n }\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msMaterialColorPicker', msMaterialColorPicker);\n\n /** @ngInject */\n function msMaterialColorPicker($mdMenu, $mdColorPalette, fuseGenerator)\n {\n return {\n require : 'ngModel',\n restrict : 'E',\n scope : {\n ngModel : '=',\n msModelType: '@?'\n },\n templateUrl: 'app/core/directives/ms-material-color-picker/ms-material-color-picker.html',\n link : function ($scope, element, attrs, ngModel)\n {\n // Material Color Palette\n $scope.palettes = $mdColorPalette;\n $scope.selectedPalette = false;\n $scope.selectedHues = false;\n\n /**\n * ModelType: 'obj', 'class'(default)\n * @type {string|string}\n */\n $scope.msModelType = $scope.msModelType || 'class';\n\n /**\n * Initialize / Watch model changes\n */\n $scope.$watch('ngModel', setSelectedColor);\n\n /**\n * Activate Hue Selection\n * @param palette\n * @param hues\n */\n $scope.activateHueSelection = function (palette, hues)\n {\n $scope.selectedPalette = palette;\n $scope.selectedHues = hues;\n };\n\n /**\n * Select Color\n * @type {selectColor}\n */\n $scope.selectColor = function (palette, hue)\n {\n // Update Selected Color\n updateSelectedColor(palette, hue);\n\n // Update Model Value\n updateModel();\n\n // Hide The picker\n $mdMenu.hide();\n };\n\n $scope.removeColor = function ()\n {\n\n $scope.selectedColor = {\n palette: '',\n hue : '',\n class : ''\n };\n\n $scope.activateHueSelection(false, false);\n\n updateModel();\n };\n\n /**\n * Set SelectedColor by model type\n */\n function setSelectedColor()\n {\n if ( !ngModel.$viewValue || ngModel.$viewValue === '' )\n {\n return;\n }\n\n var palette, hue;\n\n // If ModelType Class\n if ( $scope.msModelType === 'class' )\n {\n var color = ngModel.$viewValue.split('-');\n if ( color.length >= 5 )\n {\n palette = color[1] + '-' + color[2];\n hue = color[3];\n }\n else\n {\n palette = color[1];\n hue = color[2];\n }\n }\n // If ModelType Object\n else if ( $scope.msModelType === 'obj' )\n {\n palette = ngModel.$viewValue.palette;\n hue = ngModel.$viewValue.hue || 500;\n }\n\n // Update Selected Color\n updateSelectedColor(palette, hue);\n }\n\n\n /**\n * Update Selected Color\n * @param palette\n * @param hue\n */\n function updateSelectedColor(palette, hue)\n {\n $scope.selectedColor = {\n palette : palette,\n hue : hue,\n class : 'md-' + palette + '-' + hue + '-bg',\n bgColorValue: fuseGenerator.rgba($scope.palettes[palette][hue].value),\n fgColorValue: fuseGenerator.rgba($scope.palettes[palette][hue].contrast)\n };\n\n // If Model object not Equals the selectedColor update it\n // it can be happen when the model only have pallete and hue values\n if ( $scope.msModelType === 'obj' && !angular.equals($scope.selectedColor, ngModel.$viewValue) )\n {\n // Update Model Value\n updateModel();\n }\n\n $scope.activateHueSelection(palette, $scope.palettes[palette]);\n }\n\n /**\n * Update Model Value by model type\n */\n function updateModel()\n {\n if ( $scope.msModelType === 'class' )\n {\n ngModel.$setViewValue($scope.selectedColor.class);\n }\n else if ( $scope.msModelType === 'obj' )\n {\n ngModel.$setViewValue($scope.selectedColor);\n }\n }\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msDatepickerFixConfig', msDatepickerFixConfigProvider)\n .directive('msDatepickerFix', msDatepickerFix);\n\n /** @ngInject */\n function msDatepickerFixConfigProvider()\n {\n\n // Default configuration\n var defaultConfiguration = {\n // To view\n formatter: function (val)\n {\n if ( !val )\n {\n return '';\n }\n\n return val === '' ? val : new Date(val);\n },\n // To model\n parser : function (val)\n {\n if ( !val )\n {\n return '';\n }\n var offset = moment(val).utcOffset();\n var date = new Date(moment(val).add(offset, 'm'));\n return date;\n }\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n return defaultConfiguration;\n };\n }\n\n /** @ngInject */\n function msDatepickerFix(msDatepickerFixConfig)\n {\n return {\n require: 'ngModel',\n link : function (scope, elem, attrs, ngModel)\n {\n ngModel.$formatters.unshift(msDatepickerFixConfig.formatter); // to view\n ngModel.$parsers.unshift(msDatepickerFixConfig.parser); // to model\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msCard', msCardDirective);\n\n /** @ngInject */\n function msCardDirective()\n {\n return {\n restrict: 'E',\n scope : {\n templatePath: '=template',\n card : '=ngModel',\n vm : '=viewModel'\n },\n template: '
',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('ms-card');\n\n return function postLink(scope, iElement)\n {\n // Methods\n scope.cardTemplateLoaded = cardTemplateLoaded;\n\n //////////\n\n /**\n * Emit cardTemplateLoaded event\n */\n function cardTemplateLoaded()\n {\n scope.$emit('msCard::cardTemplateLoaded', iElement);\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('searchBar', searchBarDirective);\n\n /** @ngInject */\n function searchBarDirective($document)\n {\n return {\n restrict : 'E',\n scope : true,\n controller : 'SearchBarController as ctrl',\n templateUrl: 'app/toolbar/search-bar/search-bar.html',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('search-bar');\n\n return function postLink(scope, iElement)\n {\n var expanderEl,\n collapserEl;\n\n // Initialize\n init();\n\n function init()\n {\n expanderEl = iElement.find('#search-bar-expander');\n collapserEl = iElement.find('#search-bar-collapser');\n\n expanderEl.on('click', expand);\n collapserEl.on('click', collapse);\n }\n\t\t\t\t\t\n\t\t\t\t\tscope.ctrl.close = collapse;\n\n /**\n * Expand\n */\n function expand()\n {\n iElement.addClass('expanded');\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar inputEl = iElement.find('input');\n\t\t\t\t\t\tinputEl.focus()\n\n // Esc key event\n $document.on('keyup', escKeyEvent);\n }\n\n /**\n * Collapse\n */\n function collapse()\n {\n iElement.removeClass('expanded');\n }\n\n /**\n * Escape key event\n *\n * @param e\n */\n function escKeyEvent(e)\n {\n if ( e.keyCode === 27 )\n {\n collapse();\n $document.off('keyup', escKeyEvent);\n }\n }\n };\n }\n };\n }\n})();\n(function () {\n 'use strict';\n angular\n .module('app.core')\n .controller('SearchBarController', SearchBarController);\n function SearchBarController($q, $rootScope, $state) {\n\n var vm = this;\n\n vm.isDisabled = false;\n vm.states = null;\n\n vm.reload = reload;\n vm.querySearch = querySearch;\n vm.selectedItemChange = selectedItemChange;\n vm.searchTextChange = searchTextChange;\n\n // methods\n function querySearch(query) {\n var results, deferred;\n\n if (vm.states) {\n results = vm.states.filter(createFilterFor(query));\n deferred = $q.defer();\n deferred.resolve(results);\n return deferred.promise;\n }\n }\n\n function searchTextChange(text) {\n vm.reload();\n }\n\n function selectedItemChange(item) {\n if (item) {\n vm.item = null;\n vm.searchText = null;\n vm.close();\n // hack usado para impedir q a div relacionada a pesquisa fique 'travada' sobre a tela\n // impedindo o uso\n setTimeout(function(){ $('.md-scroll-mask').remove(); }, 1000);\n $state.go(item.ref);\n }\n }\n\n function reload()\n {\n vm.states = loadAll();\n }\n\n function loadAll() \n {\n var allStates = $rootScope.statesTitles;\n return allStates;\n }\n\n /**\n * Create filter function for a query string\n */\n function createFilterFor(query)\n {\n var lowercaseQuery = angular.lowercase(query);\n return function filterFn(state){\n return (state.title.toLowerCase().indexOf(lowercaseQuery) >= 0);\n };\n }\n }\n})();\n\n(function(){\n 'use strict';\n \n angular\n .module('app.core')\n .directive('contextBar', ContextBarDirective);\n \n function ContextBarDirective(){\n return {\n restrict : 'E',\n scope : {\n update: '='\n },\n controller : 'ContextBarController as ctrl',\n templateUrl: 'app/toolbar/context-bar/context-bar.html',\n compile : function (tElement, $rootScope)\n {\n // Add class\n tElement.addClass('context-bar');\n \n return function postLink(scope, iElement)\n {\n var activeEl;\n \n // Initialize\n init();\n \n scope.$on('changeContext',function(event, data){\n update(data);\n });\n \n function update(data)\n {\n // Informa o contexto ativo\n activate(null, 'icn-' + data.ctx);\n }\n\n function init()\n {\n activeEl = iElement.find('.icon-ctx');\n\n activeEl.on('click', activate);\n }\n\n /**\n * Activate\n */\n function activate(e, id)\n {\n deactivate()\n activeEl = angular.element('#' + (id || e.target.id));\n activeEl.addClass('md-accent');\n activeEl.addClass('icon-ctx-active');\n }\n\n /**\n * Collapse\n */\n function deactivate()\n {\n activeEl = iElement.find('.icon-ctx-active');\n activeEl.removeClass('md-accent');\n activeEl.removeClass('icon-ctx-active');\n }\n }\n }\n };\n }\n}());\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .controller('ContextBarController', ContextBarController);\n\n function ContextBarController(fuseTheming, $rootScope, $state, $scope, PentahoService, StateFactoryClear) {\n var vm = this;\n\n vm.selectContext = selectContext;\n vm.refreshMenu = refreshMenu;\n\n vm.themes = fuseTheming.themes;\n\n function selectContext(ctx, state) {\n $rootScope.activeContextApp = ctx;\n if (state)\n $state.go(state);\n }\n\n $rootScope.$on('finishReload', function () {\n vm.refreshingMenu = 0;\n });\n\n function refreshMenu() {\n vm.refreshingMenu = 1;\n StateFactoryClear();\n }\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector', [\n \n //Autenticacao para o Pentaho BI Server\n 'app.pentaho-connector.pentaho-authentication',\n \n //Manipulador de dados e requisições REST\n 'app.pentaho-connector.pentaho-data-handler',\n \n //Renderizador de dados\n 'app.pentaho-connector.pentaho-viewer'\n ]);\n}());\n(function(){\n 'use strict';\n \n angular.module('app.pentaho-connector')\n .service('PentahoConnectorService', PentahoConnectorService);\n \n /** @ngInject **/\n function PentahoConnectorService(PentahoAuthenticationService, PentahoViewerService, PentahoDataHandlerService)\n {\n var vm = this;\n \n vm.auth = PentahoAuthenticationService;\n vm.viewer = PentahoViewerService;\n vm.dh = PentahoDataHandlerService;\n }\n}());\n(function(){\n 'use strict';\n \n angular.module('app.activiti-connector')\n .service('ActivitiConnectorService', ActivitiConnectorService);\n \n /** @ngInject **/\n function ActivitiConnectorService(ActivitiAuthenticationService, ActivitiDataHandlerService)\n {\n var vm = this;\n \n vm.auth = ActivitiAuthenticationService;\n vm.dh = ActivitiDataHandlerService;\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.admintools-data-handler')\n .service('AdminToolsDataHandlerService', AdminToolsDataHandlerService)\n \n function AdminToolsDataHandlerService()\n {\n var vm = this;\n }\n}());\n(function(){\n 'use strict';\n \n angular\n .module('app.kpi-data-handler')\n .service('KpiDataHandlerService', KpiDataHandlerService)\n \n function KpiDataHandlerService(APP_CFG)\n {\n var vm = this;\n \n /*var config = {\n apiKey: \"AIzaSyBG9I0-pgpeUTD6vUczWb1yH65Pr4p_A9Y\",\n authDomain: \"sghq.firebaseapp.com\",\n databaseURL: \"https://sghq.firebaseio.com/\",\n storageBucket: \"project-5102354495278682660.appspot.com\",\n };*/\n \n /*var config = {\n apiKey: \"AIzaSyB0-yCNd2Wt9s1gQCBPpw5sR5J7bl2PtcM\",\n authDomain: \"sghq-s0103.firebaseapp.com\",\n databaseURL: \"https://sghq-s0103.firebaseapp.com\",\n storageBucket: \"sghq-s0103.appspot.com\",\n };*/\n \n // Initialize Firebase\n var config = {\n apiKey: APP_CFG[\"FB_APP_KEY\"],\n authDomain: APP_CFG[\"FB_AUTH_DOMAIN\"],\n databaseURL: APP_CFG[\"FB_KPI_URL\"],\n storageBucket: APP_CFG[\"FB_STRG_BKT\"]\n };\n var a = firebase.initializeApp(config);\n \n vm.database = firebase.database();\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.login', [])\n .config(config);\n\n /** @ngInject */\n function config($stateProvider, $translatePartialLoaderProvider, msApiProvider, msNavigationServiceProvider)\n {\n // State\n /*$stateProvider\n .state('app.login', {\n url : '/login',\n views : {\n 'content@app': {\n templateUrl: 'app/main/login/login.html',\n controller : 'LoginController as vm'\n }\n },\n authenticate: false\n });*/\n\n // Translation\n $translatePartialLoaderProvider.addPart('app/main/login');\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.login')\n .controller('LoginController', LoginController);\n\n /** @ngInject */\n function LoginController(AuthService, $mdToast, $scope, $rootScope, $state, APP_CFG) {\n var vm = this;\n var ACTIVE_APPS = APP_CFG['ACTIVE_APPS'];\n\n vm.authInProgress = false;\n\n vm.login = login;\n vm.submit = submit;\n\n // vm.user = {username: 'VLT', password: 'pwVLTone%Btt'}\n $rootScope.$broadcast('hideSplash');\n\n // Chama o serviço de autenticação\n function login() {\n vm.authInProgress = true;\n\n AuthService.chainedLogin(vm.user)\n .then(function () {\n AuthService.authSessions.loggedIn = true;\n\n AuthService.updateAuthInformation();\n\n $rootScope.$broadcast('createnavigation');\n vm.authInProgress = false;\n AuthService.loginRedirect('app.home', true);\n }, function (err) {\n // /*REMOVER ISTO (DEIXAR APENAS O ELSE) APÓS RESOLVER O PROBLEMA DO HTTPS AO EFETUAR O POST EM J_SPRING_SECURITY_CHECK*/\n // /*------*/\n // if (APP_CFG['DEV_USR']) {\n // // Simula o login no pentaho\n\n // AuthService.authSessions.loggedIn = true;\n // vm.authInProgress = false;\n // AuthService.loginRedirect('app.home', true);\n // } else {\n // AuthService.authSessions.loggedIn = false;\n // vm.authInProgress = false;\n // toast('Falha ao efetuar login.');\n // }\n // /*------*/\n AuthService.authSessions.loggedIn = false;\n vm.authInProgress = false;\n toast('Falha ao efetuar login.');\n });\n }\n\n // Exibe mensagem ao usuário\n function toast(msg) {\n $mdToast.show(\n $mdToast.simple()\n .textContent(msg)\n .position('bottom right')\n .hideDelay(3000)\n );\n };\n\n function submit(field, event) {\n if (vm.user.username && vm.user.password) {\n var keycode;\n if (window.event)\n keycode = window.event.keyCode;\n else if (event)\n keycode = event.which;\n else return true;\n\n if (keycode == 13)\n vm.login();\n }\n }\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.home')\n .controller('HomeController', HomeController);\n\n /** @ngInject */\n function HomeController($rootScope, $injector, $state, PENTAHO_APP_URL, $http, APP_CFG, Settings, $timeout, AuthService, Docstore) {\n var vm = this;\n\n // this snippet just inoke an endpoint to set username on the session\n // and have no relation with other things in this controller\n $http({\n method: 'GET',\n url: PENTAHO_APP_URL + '/plugin/ppa/api/init_session',\n headers: {\n 'Accept': 'text/plain',\n 'Content-Type': 'text/plain'\n }\n });\n\n\n // Deixei comentado pq não está tendo o efeito esperado, uma vez que\n // está sendo executado depois que o menu já foi iniciado e a verificação\n // pelas feature flags já foi feita.\n //\n // Initialize Docstore read for feature flags\n //Docstore.read(\n // {paramtype: '__featflag__'},\n // function(res) {\n // if (res.documents && res.documents.default) {\n // const ff = res.documents.default;\n // console.info('Reseting FEATURE_FLAGS for ' + JSON.stringify(ff))\n // APP_CFG['FEATURE_FLAGS'] = ff\n // }\n // console.warn(APP_CFG);\n // }\n //)\n\n // Referência do contexto ativo\n if (!$rootScope.activeContextApp)\n $rootScope.activeContextApp = 'main';\n\n function withRetry (f, n, fs, fe) {\n try {\n f(n)\n // call success function if provided\n fs && fs()\n } catch (e) {\n console.warn('An error ocurred inside withRetry');\n console.warn(e);\n if (n > 0) {\n console.warn('A new attempt (' + n + ') will be made in 1 sec');\n setTimeout(function(){withRetry(f,--n, fs, fe)}, 1000);\n } else {\n console.error('I will not try anymore');\n // call error function if provided\n if (fe) {\n console.info('Error function was provided to withRetry. Calling it now!');\n fe();\n }\n }\n }\n }\n\n function goToHome(docstoreResult) {\n var hasHome = false;\n for (var d in docstoreResult.documents) {\n $rootScope.usersPreferencesLoaded = true;\n console.info(\"Trying to go to user home page\");\n withRetry(\n function () {\n console.info('Setting loadingProgress');\n if (docstoreResult.documents[d] && docstoreResult.documents[d].home) {\n hasHome = true;\n var home = docstoreResult.documents[d].home;\n if (home.substr(0, 14) == 'app.analytics-') {\n $rootScope.activeContextApp = 'pentaho';\n }\n $rootScope.loadingProgress = true;\n $state.go(home);\n $rootScope.loadingProgress = false;\n }\n if(!hasHome && APP_CFG['ACTIVE_APPS'].indexOf('activiti') != -1) {\n $state.go('app.tasks');\n }\n },\n 15\n );\n }\n $rootScope.loadingProgress = false;\n };\n\n //Cada contexto deverá alimentar esta variável quando for chamado,\n //para que o sistema troque para a view correspondente\n $rootScope.$watchCollection('activeContextApp', function(newValue, oldValue){\n vm.context = $rootScope.activeContextApp;\n $rootScope.$broadcast('changeContext', {ctx: $rootScope.activeContextApp});\n });\n\n $rootScope.$on('repository-content-loaded', function() {\n $rootScope.activeContextApp = 'pentaho';\n if (!$rootScope.userPreferencesLoaded) {\n console.info('Getting user settings...');\n Docstore.read(\n {\n paramtype: 'user-settings',\n paramfilter: {user: AuthService.authSessions.pentahoSession.username}\n },\n function(res){\n console.info('Got response for user settings...');\n if(!res.documents || Object.keys(res.documents).length == 0) {\n Docstore.read(\n {paramtype: 'user-settings', paramfilter: {user: '*'}},\n function(res){goToHome(res);}\n );\n }\n goToHome(res);\n $rootScope.userPreferencesLoaded = true;\n }\n )\n }\n });\n }\n})();\n\n(function (module) {\n 'use strict';\n\n module.controller('ConfigurationController', ['$scope', 'User', '$state', 'msNavigationService', '$cookies', 'PENTAHO_APP_URL', '$http', '$httpParamSerializerJQLike', '$mdToast', '$rootScope', 'AuthService', 'APP_CFG',\n function ($scope, User, $state, msNavigationService, $cookies, PENTAHO_APP_URL, $http, $httpParamSerializerJQLike, $mdToast, $rootScope, AuthService, APP_CFG) {\n\n var _data = {\n \"parammethod\": \"GET\",\n \"paramtype\": \"user-settings\"\n };\n\n var _headers = {\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n };\n\n var _url = PENTAHO_APP_URL + '/plugin/ppa/api/docstore';\n\n function _getAuth() {\n var auth = $cookies.getObject('ppaui-pentaho-auth');\n if (auth)\n return auth.authKey;\n else\n return '';\n }\n\n function format() {\n var departamentos = [];\n if (result) {\n for (var property in result) {\n var dep = result[property];\n dep.id = property;\n departamentos.push(dep);\n }\n }\n }\n\n function excluirId(item) {\n\n var _temp = angular.copy(item);\n\n if (_temp.hasOwnProperty('id'))\n delete _temp.id;\n\n return _temp;\n };\n\n $scope.onSelectUser = function (user) {\n\n $scope.showStates = 0;\n $scope.userSettings.home = undefined;\n $scope.userSettings = excluirId($scope.userSettings);\n\n var tempData = angular.copy(_data);\n tempData.paramfilter = JSON.stringify({\n user: user\n });\n\n $http({\n method: 'GET',\n url: _url,\n headers: _headers,\n params: tempData\n }).then(function success(response) {\n $scope.showStates = 1;\n\n var hasResult = 0;\n if (response.data.documents)\n for (var prop in response.data.documents) {\n hasResult = 1;\n }\n\n if (hasResult)\n $scope.userSettings = format(response.data.documents);\n }, function error(response) {\n $scope.userSettings.state = undefined;\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao buscar as configurações!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n\n ($scope.getUsers = function () {\n\n $scope.isAdmin = $rootScope.userContext ? $rootScope.userContext.isAdmin : false;\n $scope.session = AuthService.authSessions.pentahoSession;\n $scope.userSettings = {};\n\n if (!$scope.isAdmin) {\n $scope.userSettings.user = $scope.session.username;\n $scope.onSelectUser($scope.session.username);\n } else {\n var x2js = new X2JS();\n\n $http.get(PENTAHO_APP_URL + '/api/users', {\n headers: _headers,\n transformResponse: function (cnv) {\n var x2js = new X2JS();\n var aftCnv = x2js.xml_str2json(cnv);\n return aftCnv;\n }\n }).then(function success(response) {\n $scope.usuarios = response.data.users.user;\n $scope.usuarios = $scope.usuarios.sort();\n\n if (!$scope.isAdmin) {\n $scope.userSettings.user = $scope.session.username;\n $scope.onSelectUser();\n }\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao buscar os usuários!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n }\n })();\n\n if (!msNavigationService.getStates() || msNavigationService.getStates().length == 0) {\n $scope.loading = 1;\n $rootScope.$on('finishReload', function () {\n montarListaStates();\n });\n } else {\n montarListaStates();\n }\n\n function montarListaStates() {\n $scope.states = _.filter(msNavigationService.getStates(), function (item) {\n return item.children.length > 0;\n });\n\n $scope.states = _.sortBy($scope.states, 'title');\n $scope.loading = 0;\n };\n\n function format(result) {\n if (result) {\n for (var property in result) {\n var obj = result[property];\n obj.id = property;\n return obj;\n }\n }\n return null;\n };\n\n $scope.saveConfig = function () {\n var tempData = angular.copy(_data);\n if ($scope.userSettings.id) {\n tempData.parammethod = 'PUT';\n tempData.paramid = $scope.userSettings.id;\n $scope.userSettings = excluirId($scope.userSettings);\n } else {\n tempData.parammethod = 'POST';\n }\n\n tempData.paramdoc = JSON.stringify($scope.userSettings);\n\n $http({\n method: 'POST',\n url: _url,\n data: $httpParamSerializerJQLike(tempData),\n headers: _headers\n }).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Configurações salvas com sucesso!')\n .position('bottom right')\n .hideDelay(3000)\n );\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro ao salvar as configurações!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n\n $scope.changePass = {};\n $scope.changePassEnabled = APP_CFG && APP_CFG['FEATURE_FLAGS'] && APP_CFG['FEATURE_FLAGS']['change-password'];\n $scope.changePassword = function() {\n $http({\n method: 'PUT',\n url: PENTAHO_APP_URL + '/api/userroledao/user',\n data: \"\" +\n \"\" +\n \" \" + $scope.session.username.toLowerCase() + \"\" +\n \" \" + $scope.changePass.new + \"\" +\n \" \" + $scope.changePass.old + \"\" +\n \"\",\n headers: {\n \"Content-Type\": 'application/xml; charset=UTF-8',\n \"Authorization\": 'Basic ' + _getAuth()\n }\n }).then(function success(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Nova senha salva com sucesso.')\n .position('bottom right')\n .hideDelay(3000)\n );\n }, function error(response) {\n $mdToast.show(\n $mdToast.simple()\n .textContent('Ocorreu um erro na tentativa de salvar uma nova senha!')\n .position('bottom right')\n .hideDelay(3000)\n );\n });\n };\n }\n ]);\n\n}(angular.module('app.home')));\n\n(function () {\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msUtils', msUtils);\n\n /** @ngInject */\n function msUtils($window) {\n // Private variables\n var mobileDetect = new MobileDetect($window.navigator.userAgent),\n browserInfo = null;\n\n var service = {\n exists: exists,\n detectBrowser: detectBrowser,\n guidGenerator: guidGenerator,\n isMobile: isMobile,\n toggleInArray: toggleInArray,\n clearLocalStorage: clearLocalStorage,\n clearSessionStorage: clearSessionStorage\n };\n\n return service;\n\n function clearSessionStorage() {\n if (sessionStorage) {\n sessionStorage.clear();\n } else if (window.sessionStorage) {\n window.sessionStorage.clear();\n }\n }\n\n function clearLocalStorage() {\n if (localStorage) {\n localStorage.clear();\n } else if (window.localStorage) {\n window.localStorage.clear();\n }\n }\n\n //////////\n\n /**\n * Check if item exists in a list\n *\n * @param item\n * @param list\n * @returns {boolean}\n */\n function exists(item, list) {\n return list.indexOf(item) > -1;\n }\n\n /**\n * Returns browser information\n * from user agent data\n *\n * Found at http://www.quirksmode.org/js/detect.html\n * but modified and updated to fit for our needs\n */\n function detectBrowser() {\n // If we already tested, do not test again\n if (browserInfo) {\n return browserInfo;\n }\n\n var browserData = [{\n string: $window.navigator.userAgent,\n subString: 'Edge',\n versionSearch: 'Edge',\n identity: 'Edge'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Chrome',\n identity: 'Chrome'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'OmniWeb',\n versionSearch: 'OmniWeb/',\n identity: 'OmniWeb'\n },\n {\n string: $window.navigator.vendor,\n subString: 'Apple',\n versionSearch: 'Version',\n identity: 'Safari'\n },\n {\n prop: $window.opera,\n identity: 'Opera'\n },\n {\n string: $window.navigator.vendor,\n subString: 'iCab',\n identity: 'iCab'\n },\n {\n string: $window.navigator.vendor,\n subString: 'KDE',\n identity: 'Konqueror'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Firefox',\n identity: 'Firefox'\n },\n {\n string: $window.navigator.vendor,\n subString: 'Camino',\n identity: 'Camino'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Netscape',\n identity: 'Netscape'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'MSIE',\n identity: 'Explorer',\n versionSearch: 'MSIE'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Trident/7',\n identity: 'Explorer',\n versionSearch: 'rv'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Gecko',\n identity: 'Mozilla',\n versionSearch: 'rv'\n },\n {\n string: $window.navigator.userAgent,\n subString: 'Mozilla',\n identity: 'Netscape',\n versionSearch: 'Mozilla'\n }\n ];\n\n var osData = [{\n string: $window.navigator.platform,\n subString: 'Win',\n identity: 'Windows'\n },\n {\n string: $window.navigator.platform,\n subString: 'Mac',\n identity: 'Mac'\n },\n {\n string: $window.navigator.platform,\n subString: 'Linux',\n identity: 'Linux'\n },\n {\n string: $window.navigator.platform,\n subString: 'iPhone',\n identity: 'iPhone'\n },\n {\n string: $window.navigator.platform,\n subString: 'iPod',\n identity: 'iPod'\n },\n {\n string: $window.navigator.platform,\n subString: 'iPad',\n identity: 'iPad'\n },\n {\n string: $window.navigator.platform,\n subString: 'Android',\n identity: 'Android'\n }\n ];\n\n var versionSearchString = '';\n\n function searchString(data) {\n for (var i = 0; i < data.length; i++) {\n var dataString = data[i].string;\n var dataProp = data[i].prop;\n\n versionSearchString = data[i].versionSearch || data[i].identity;\n\n if (dataString) {\n if (dataString.indexOf(data[i].subString) !== -1) {\n return data[i].identity;\n\n }\n } else if (dataProp) {\n return data[i].identity;\n }\n }\n }\n\n function searchVersion(dataString) {\n var index = dataString.indexOf(versionSearchString);\n\n if (index === -1) {\n return;\n }\n\n return parseInt(dataString.substring(index + versionSearchString.length + 1));\n }\n\n var browser = searchString(browserData) || 'unknown-browser';\n var version = searchVersion($window.navigator.userAgent) || searchVersion($window.navigator.appVersion) || 'unknown-version';\n var os = searchString(osData) || 'unknown-os';\n\n // Prepare and store the object\n browser = browser.toLowerCase();\n version = browser + '-' + version;\n os = os.toLowerCase();\n\n browserInfo = {\n browser: browser,\n version: version,\n os: os\n };\n\n return browserInfo;\n }\n\n /**\n * Generates a globally unique id\n *\n * @returns {*}\n */\n function guidGenerator() {\n var S4 = function () {\n return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);\n };\n return (S4() + S4() + S4() + S4() + S4() + S4());\n }\n\n /**\n * Return if current device is a\n * mobile device or not\n */\n function isMobile() {\n return mobileDetect.mobile();\n }\n\n /**\n * Toggle in array (push or splice)\n *\n * @param item\n * @param array\n */\n function toggleInArray(item, array) {\n if (array.indexOf(item) === -1) {\n array.push(item);\n } else {\n array.splice(array.indexOf(item), 1);\n }\n }\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msApi', msApiProvider);\n\n /** @ngInject **/\n function msApiProvider()\n {\n /* ----------------- */\n /* Provider */\n /* ----------------- */\n var provider = this;\n\n // Inject required services\n var $log = angular.injector(['ng']).get('$log'),\n $resource = angular.injector(['ngResource']).get('$resource');\n\n // Data\n var baseUrl = '';\n var api = [];\n\n // Methods\n provider.setBaseUrl = setBaseUrl;\n provider.getBaseUrl = getBaseUrl;\n provider.getApiObject = getApiObject;\n provider.register = register;\n\n //////////\n\n /**\n * Set base url for API endpoints\n *\n * @param url {string}\n */\n function setBaseUrl(url)\n {\n baseUrl = url;\n }\n\n /**\n * Return the base url\n *\n * @returns {string}\n */\n function getBaseUrl()\n {\n return baseUrl;\n }\n\n /**\n * Return the api object\n *\n * @returns {object}\n */\n function getApiObject()\n {\n return api;\n }\n\n /**\n * Register API endpoint\n *\n * @param key\n * @param resource\n */\n function register(key, resource)\n {\n if ( !angular.isString(key) )\n {\n $log.error('\"path\" must be a string (eg. `dashboard.project`)');\n return;\n }\n\n if ( !angular.isArray(resource) )\n {\n $log.error('\"resource\" must be an array and it must follow $resource definition');\n return;\n }\n\n // Prepare the resource object\n var resourceObj = {\n url : baseUrl + (resource[0] || ''),\n paramDefaults: resource[1] || [],\n actions : resource[2] || [],\n options : resource[3] || {}\n };\n\n // Assign the resource\n api[key] = $resource(resourceObj.url, resourceObj.paramDefaults, resourceObj.actions, resourceObj.options);\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n this.$get = function ($q, $log)\n {\n // Data\n\n // Methods\n var service = {\n setBaseUrl: setBaseUrl,\n getBaseUrl: getBaseUrl,\n register : register,\n resolve : resolve,\n request : request\n };\n\n return service;\n\n //////////\n\n /**\n * Resolve an API endpoint\n *\n * @param action {string}\n * @param parameters {object}\n * @returns {promise|boolean}\n */\n function resolve(action, parameters)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct resource definition from api object\n var apiObject = api[resource];\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // Success\n function (response)\n {\n deferred.resolve(response);\n },\n\n // Error\n function (response)\n {\n deferred.reject(response);\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Make a request to an API endpoint\n *\n * @param action {string}\n * @param [parameters] {object}\n * @param [success] {function}\n * @param [error] {function}\n *\n * @returns {promise|boolean}\n */\n function request(action, parameters, success, error)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('msApi.resolve requires correct action parameter (resourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct resource definition from api object\n var apiObject = api[resource];\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // SUCCESS\n function (response)\n {\n // Resolve the promise\n deferred.resolve(response);\n\n // Call the success function if there is one\n if ( angular.isDefined(success) && angular.isFunction(success) )\n {\n success(response);\n }\n },\n\n // ERROR\n function (response)\n {\n // Reject the promise\n deferred.reject(response);\n\n // Call the error function if there is one\n if ( angular.isDefined(error) && angular.isFunction(error) )\n {\n error(response);\n }\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('modalState', modalState);\n\n /** @ngInject */\n function modalState($stateProvider)\n {\n var provider = this;\n var modalResult;\n \n this.$get = function() {\n return provider;\n };\n \n \n this.state = function(stateName, options) {\n var modalInstance;\n \n $stateProvider.state(stateName, {\n url: options.url,\n onEnter: ['$mdDialog', '$state', function($mdDialog, $state) {\n $mdDialog.show({\n controller : options.controller,\n templateUrl: options.templateUrl,\n parent: angular.element(document.body),\n clickOutsideToClose: true,\n fullscreen: true\n })\n .then(function(result) {\n modalResult = result;\n }).finally(function() { // modal closes\n modalResult = null;\n if ($state.$current.name === stateName) {\n $state.go('^'); // go to parent state\n }\n });\n }],\n onExit: function() {\n console.log('FECHOU!');\n }\n });\n \n return provider;\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('apiResolver', apiResolverService);\n\n /** @ngInject */\n function apiResolverService($q, $log, api)\n {\n var service = {\n resolve: resolve\n };\n\n return service;\n\n //////////\n /**\n * Resolve api\n * @param action\n * @param parameters\n */\n function resolve(action, parameters)\n {\n var actionParts = action.split('@'),\n resource = actionParts[0],\n method = actionParts[1],\n params = parameters || {};\n\n if ( !resource || !method )\n {\n $log.error('apiResolver.resolve requires correct action parameter (ResourceName@methodName)');\n return false;\n }\n\n // Create a new deferred object\n var deferred = $q.defer();\n\n // Get the correct api object from api service\n var apiObject = getApiObject(resource);\n\n if ( !apiObject )\n {\n $log.error('Resource \"' + resource + '\" is not defined in the api service!');\n deferred.reject('Resource \"' + resource + '\" is not defined in the api service!');\n }\n else\n {\n apiObject[method](params,\n\n // Success\n function (response)\n {\n deferred.resolve(response);\n },\n\n // Error\n function (response)\n {\n deferred.reject(response);\n }\n );\n }\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Get correct api object\n *\n * @param resource\n * @returns {*}\n */\n function getApiObject(resource)\n {\n // Split the resource in case if we have a dot notated object\n var resourceParts = resource.split('.'),\n apiObject = api;\n\n // Loop through the resource parts and go all the way through\n // the api object and return the correct one\n for ( var l = 0; l < resourceParts.length; l++ )\n {\n if ( angular.isUndefined(apiObject[resourceParts[l]]) )\n {\n $log.error('Resource part \"' + resourceParts[l] + '\" is not defined!');\n apiObject = false;\n break;\n }\n\n apiObject = apiObject[resourceParts[l]];\n }\n\n if ( !apiObject )\n {\n return false;\n }\n\n return apiObject;\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsThemeOptionsController', MsThemeOptionsController)\n .directive('msThemeOptions', msThemeOptions);\n\n /** @ngInject */\n function MsThemeOptionsController($cookies, fuseTheming)\n {\n var vm = this;\n\n // Data\n vm.themes = fuseTheming.themes;\n vm.layoutMode = 'wide';\n vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n // Methods\n vm.setActiveTheme = setActiveTheme;\n vm.updateLayoutMode = updateLayoutMode;\n vm.updateLayoutStyle = updateLayoutStyle;\n\n //////////\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // Set active theme\n fuseTheming.setActiveTheme(themeName);\n }\n\n /**\n * Update layout mode\n */\n function updateLayoutMode()\n {\n var bodyEl = angular.element('body');\n\n // Update class on body element\n bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\n }\n\n /**\n * Update layout style\n */\n function updateLayoutStyle()\n {\n // Update the cookie\n $cookies.put('layoutStyle', vm.layoutStyle);\n\n // Reload the page to apply the changes\n location.reload();\n }\n }\n\n /** @ngInject */\n function msThemeOptions()\n {\n return {\n restrict : 'E',\n scope : {\n panelOpen: '=?'\n },\n controller : 'MsThemeOptionsController as vm',\n templateUrl: 'app/core/theme-options/theme-options.html',\n compile : function (tElement)\n {\n tElement.addClass('ms-theme-options');\n\n return function postLink(scope, iElement)\n {\n var bodyEl = angular.element('body'),\n backdropEl = angular.element('
');\n\n // Panel open status\n scope.panelOpen = scope.panelOpen || false;\n\n /**\n * Toggle options panel\n */\n function toggleOptionsPanel()\n {\n if ( scope.panelOpen )\n {\n closeOptionsPanel();\n }\n else\n {\n openOptionsPanel();\n }\n }\n\n function openOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = true;\n\n // Add open class\n iElement.addClass('open');\n\n // Append the backdrop\n bodyEl.append(backdropEl);\n\n // Register the event\n backdropEl.on('click touch', closeOptionsPanel);\n }\n\n /**\n * Close options panel\n */\n function closeOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = false;\n\n // Remove open class\n iElement.removeClass('open');\n\n // De-register the event\n backdropEl.off('click touch', closeOptionsPanel);\n\n // Remove the backdrop\n backdropEl.remove();\n }\n\n // Expose the toggle function\n scope.toggleOptionsPanel = toggleOptionsPanel;\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseTheming', fuseThemingProvider);\n\n /** @ngInject */\n function fuseThemingProvider()\n {\n // Inject Cookies Service\n var $cookies;\n\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n var registeredPalettes,\n registeredThemes;\n\n // Methods\n this.setRegisteredPalettes = setRegisteredPalettes;\n this.setRegisteredThemes = setRegisteredThemes;\n\n //////////\n\n /**\n * Set registered palettes\n *\n * @param _registeredPalettes\n */\n function setRegisteredPalettes(_registeredPalettes)\n {\n registeredPalettes = _registeredPalettes;\n }\n\n /**\n * Set registered themes\n *\n * @param _registeredThemes\n */\n function setRegisteredThemes(_registeredThemes)\n {\n registeredThemes = _registeredThemes;\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getRegisteredPalettes: getRegisteredPalettes,\n getRegisteredThemes : getRegisteredThemes,\n setActiveTheme : setActiveTheme,\n setThemesList : setThemesList,\n themes : {\n list : {},\n active: {\n 'name' : '',\n 'theme': {}\n }\n }\n };\n\n return service;\n\n //////////\n\n /**\n * Get registered palettes\n *\n * @returns {*}\n */\n function getRegisteredPalettes()\n {\n return registeredPalettes;\n }\n\n /**\n * Get registered themes\n *\n * @returns {*}\n */\n function getRegisteredThemes()\n {\n return registeredThemes;\n }\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // If theme does not exist, fallback to the default theme\n if ( angular.isUndefined(service.themes.list[themeName]) )\n {\n // If there is no theme called \"default\"...\n if ( angular.isUndefined(service.themes.list.default) )\n {\n $log.error('You must have at least one theme named \"default\"');\n return;\n }\n\n $log.warn('The theme \"' + themeName + '\" does not exist! Falling back to the \"default\" theme.');\n\n // Otherwise set theme to default theme\n service.themes.active.name = 'default';\n service.themes.active.theme = service.themes.list.default;\n $cookies.put('selectedTheme', service.themes.active.name);\n\n return;\n }\n\n service.themes.active.name = themeName;\n service.themes.active.theme = service.themes.list[themeName];\n $cookies.put('selectedTheme', themeName);\n }\n\n /**\n * Set available themes list\n *\n * @param themeList\n */\n function setThemesList(themeList)\n {\n service.themes.list = themeList;\n }\n };\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($mdThemingProvider, fusePalettes, fuseThemes, fuseThemingProvider)\n {\n // Inject Cookies Service\n var $cookies;\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Check if custom theme exist in cookies\n var customTheme = $cookies.getObject('customTheme');\n if ( customTheme )\n {\n fuseThemes['custom'] = customTheme;\n }\n\n $mdThemingProvider.alwaysWatchTheme(true);\n\n // Define custom palettes\n angular.forEach(fusePalettes, function (palette)\n {\n $mdThemingProvider.definePalette(palette.name, palette.options);\n });\n\n // Register custom themes\n angular.forEach(fuseThemes, function (theme, themeName)\n {\n $mdThemingProvider.theme(themeName)\n .primaryPalette(theme.primary.name, theme.primary.hues)\n .accentPalette(theme.accent.name, theme.accent.hues)\n .warnPalette(theme.warn.name, theme.warn.hues)\n .backgroundPalette(theme.background.name, theme.background.hues);\n });\n\n // Store generated PALETTES and THEMES objects from $mdThemingProvider\n // in our custom provider, so we can inject them into other areas\n fuseThemingProvider.setRegisteredPalettes($mdThemingProvider._PALETTES);\n fuseThemingProvider.setRegisteredThemes($mdThemingProvider._THEMES);\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n var fuseThemes = {\n 'default' : {\n primary : {\n name: 'fuse-pale-blue',\n hues: {\n 'default': '700',\n 'hue-1' : '500',\n 'hue-2' : '600',\n 'hue-3' : '400'\n }\n },\n accent : {\n name: 'light-blue',\n hues: {\n 'default': '600',\n 'hue-1' : '400',\n 'hue-2' : '700',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'red'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'pink': {\n primary : {\n name: 'blue-grey',\n hues: {\n 'default': '800',\n 'hue-1' : '600',\n 'hue-2' : '400',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'pink',\n hues: {\n 'default': '400',\n 'hue-1' : '300',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'blue'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'teal' : {\n primary : {\n name: 'fuse-blue',\n hues: {\n 'default': '900',\n 'hue-1' : '600',\n 'hue-2' : '500',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'teal',\n hues: {\n 'default': '500',\n 'hue-1' : '400',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'deep-orange'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'veltio' : {\n primary : {\n name: 'veltio-blue-grey',\n hues: {\n 'default': '900',\n 'hue-1' : '600',\n 'hue-2' : '400',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'veltio-accent-green', //5461\n hues: {\n 'default': '500',\n 'hue-1' : '400',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'deep-orange'},\n background: {\n name: 'veltio-background',\n hues: {\n 'default': '50',\n 'hue-1' : '200',\n 'hue-2' : '100',\n 'hue-3' : '50'\n }\n }\n },\n 'spdata' : {\n primary : {\n name: 'spdata-blue',\n hues: {\n 'default': '900', //9 6 4 1\n 'hue-1' : '600',\n 'hue-2' : '400',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'spdata-accent-blue', //8 4 6 1\n hues: {\n 'default': '800',\n 'hue-1' : '400',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'spdata-red'},\n background: {\n name: 'grey',\n hues: {\n 'default': '50',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '200'\n }\n }\n }\n };\n\n angular\n .module('app.core')\n .constant('fuseThemes', fuseThemes);\n})();\n(function () {\n 'use strict';\n\n var fusePalettes = [\n {\n name: 'fuse-blue',\n options: {\n '50': '#ebf1fa',\n '100': '#c2d4ef',\n '200': '#9ab8e5',\n '300': '#78a0dc',\n '400': '#5688d3',\n '500': '#3470ca',\n '600': '#2e62b1',\n '700': '#275498',\n '800': '#21467e',\n '900': '#1a3865',\n 'A100': '#c2d4ef',\n 'A200': '#9ab8e5',\n 'A400': '#5688d3',\n 'A700': '#275498',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'fuse-pale-blue',\n options: {\n '50': '#ececee',\n '100': '#c5c6cb',\n '200': '#9ea1a9',\n '300': '#7d818c',\n '400': '#5c616f',\n '500': '#3c4252',\n '600': '#353a48',\n '700': '#2d323e',\n '800': '#262933',\n '900': '#1e2129',\n 'A100': '#c5c6cb',\n 'A200': '#9ea1a9',\n 'A400': '#5c616f',\n 'A700': '#2d323e',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'veltio-green',\n options: {\n '50': '#1eacaf',\n '100': '#1eacaf',\n '200': '#1eacaf',\n '300': '#04868f',\n '400': '#04868f',\n '500': '#04868f',\n '600': '#05686b',\n '700': '#05686b',\n '800': '#05686b',\n '900': '#034749',\n 'A100': '#1eacaf',\n 'A200': '#04868f',\n 'A400': '#05686b',\n 'A700': '#034749',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'veltio-accent-green',\n options: {\n '50': '#1eacaf',\n '100': '#1eacaf',\n '200': '#1eacaf',\n '300': '#04868f',\n '400': '#04868f',\n '500': '#04868f',\n '600': '#05686b',\n '700': '#05686b',\n '800': '#05686b',\n '900': '#034749',\n 'A100': '#1eacaf',\n 'A200': '#04868f',\n 'A400': '#05686b',\n 'A700': '#034749',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'veltio-blue-grey',\n options: {\n '50': '#ffffff',\n '100': '#8ea5af',\n '200': '#cddbdb',\n '300': '#748a96',\n '400': '#748a96',\n '500': '#748a96',\n '600': '#526770',\n '700': '#526770',\n '800': '#526770',\n '900': '#3d4d54',\n 'A100': '#8ea5af',\n 'A200': '#748a96',\n 'A400': '#526770',\n 'A700': '#3d4d54',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'veltio-background',\n options: {\n '50': '#ffffff',\n '100': '#cddbdb',\n '200': '#f4f4f4',\n '300': '#bac3c3',\n '400': '#96a9a8',\n '500': '#bac3c3',\n '600': '#57706f',\n '700': '#495e5d',\n '800': '#223331',\n '900': '#223331',\n 'A100': '#ededed',\n 'A200': '#cddbdb',\n 'A400': '#96a9a8',\n 'A700': '#495e5d',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'spdata-blue',\n options: {\n '50': '#56bee9',\n '100': '#56bee9',\n '200': '#56bee9',\n '300': '#00a0cd',\n '400': '#00a0cd',\n '500': '#00a0cd',\n '600': '#006d8e',\n '700': '#006d8e',\n '800': '#006d8e',\n '900': '#004259',\n 'A100': '#56bee9',\n 'A200': '#00a0cd',\n 'A400': '#006d8e',\n 'A700': '#004259',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'spdata-accent-blue',\n options: {\n '50': '#56bee9',\n '100': '#56bee9',\n '200': '#56bee9',\n '300': '#00a0cd',\n '400': '#00a0cd',\n '500': '#00a0cd',\n '600': '#006d8e',\n '700': '#006d8e',\n '800': '#006d8e',\n '900': '#004259',\n 'A100': '#56bee9',\n 'A200': '#00a0cd',\n 'A400': '#006d8e',\n 'A700': '#004259',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'spdata-red',\n options: {\n '50': '#e30614',\n '100': '#e30614',\n '200': '#e30614',\n '300': '#c6140e',\n '400': '#c6140e',\n '500': '#c6140e',\n '600': '#ae0e09',\n '700': '#ae0e09',\n '800': '#ae0e09',\n '900': '#800e0b',\n 'A100': '#e30614',\n 'A200': '#c6140e',\n 'A400': '#ae0e09',\n 'A700': '#800e0b',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n }\n ];\n\n angular\n .module('app.core')\n .constant('fusePalettes', fusePalettes);\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('fuseGenerator', fuseGeneratorService);\n\n /** @ngInject */\n function fuseGeneratorService($cookies, $log, fuseTheming)\n {\n // Storage for simplified themes object\n var themes = {};\n\n var service = {\n generate: generate,\n rgba : rgba\n };\n\n return service;\n\n //////////\n\n /**\n * Generate less variables for each theme from theme's\n * palette by using material color naming conventions\n */\n function generate()\n {\n var registeredThemes = fuseTheming.getRegisteredThemes();\n var registeredPalettes = fuseTheming.getRegisteredPalettes();\n\n // First, create a simplified object that stores\n // all registered themes and their colors\n\n // Iterate through registered themes\n angular.forEach(registeredThemes, function (registeredTheme)\n {\n themes[registeredTheme.name] = {};\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(registeredTheme.colors, function (colorType, colorTypeName)\n {\n themes[registeredTheme.name][colorTypeName] = {\n 'name' : colorType.name,\n 'levels': {\n 'default': {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues.default].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 4)\n },\n 'hue1' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 4)\n },\n 'hue2' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 4)\n },\n 'hue3' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 4)\n }\n }\n };\n });\n });\n\n // Process themes one more time and then store them in the service for external use\n processAndStoreThemes(themes);\n\n // Iterate through simplified themes\n // object and create style variables\n var styleVars = {};\n\n // Iterate through registered themes\n angular.forEach(themes, function (theme, themeName)\n {\n styleVars = {};\n styleVars['@themeName'] = themeName;\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorTypes, colorTypeName)\n {\n // Iterate through color levels (default, hue1, hue2 & hue3)\n angular.forEach(colorTypes.levels, function (colors, colorLevelName)\n {\n // Iterate through color name (color, contrast1, contrast2, contrast3 & contrast4)\n angular.forEach(colors, function (color, colorName)\n {\n styleVars['@' + colorTypeName + ucfirst(colorLevelName) + ucfirst(colorName)] = color;\n });\n });\n });\n\n // Render styles\n render(styleVars);\n });\n }\n\n // ---------------------------\n // INTERNAL HELPER FUNCTIONS\n // ---------------------------\n\n /**\n * Process and store themes for global use\n *\n * @param _themes\n */\n function processAndStoreThemes(_themes)\n {\n // Here we will go through every registered theme one more time\n // and try to simplify their objects as much as possible for\n // easier access to their properties.\n var themes = angular.copy(_themes);\n\n // Iterate through themes\n angular.forEach(themes, function (theme)\n {\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorType, colorTypeName)\n {\n theme[colorTypeName] = colorType.levels;\n theme[colorTypeName].color = colorType.levels.default.color;\n theme[colorTypeName].contrast1 = colorType.levels.default.contrast1;\n theme[colorTypeName].contrast2 = colorType.levels.default.contrast2;\n theme[colorTypeName].contrast3 = colorType.levels.default.contrast3;\n theme[colorTypeName].contrast4 = colorType.levels.default.contrast4;\n delete theme[colorTypeName].default;\n });\n });\n\n // Store themes and set selected theme for the first time\n fuseTheming.setThemesList(themes);\n\n // Remember selected theme.\n var selectedTheme = $cookies.get('selectedTheme');\n\n if ( selectedTheme )\n {\n fuseTheming.setActiveTheme(selectedTheme);\n }\n else\n {\n fuseTheming.setActiveTheme('default');\n }\n }\n\n\n /**\n * Render css files\n *\n * @param styleVars\n */\n function render(styleVars)\n {\n var cssTemplate = '[md-theme=\"@themeName\"] a {\\n color: @accentDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n background-color: @primaryDefaultColor;\\n color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n background-color: @primaryHue1Color;\\n color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n background-color: @primaryHue2Color;\\n color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n background-color: @primaryHue3Color;\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n color: @primaryHue3Color !important;\\n}\\n\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n background-color: @accentDefaultColor;\\n color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n background-color: @accentHue1Color;\\n color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n background-color: @accentHue2Color;\\n color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n background-color: @accentHue3Color;\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n color: @accentHue3Color !important;\\n}\\n\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n background-color: @warnDefaultColor;\\n color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n background-color: @warnHue1Color;\\n color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n background-color: @warnHue2Color;\\n color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n background-color: @warnHue3Color;\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n background-color: @backgroundDefaultColor;\\n color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n background-color: @backgroundHue1Color;\\n color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n background-color: @backgroundHue2Color;\\n color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n background-color: @backgroundHue3Color;\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n color: @backgroundHue3Color !important;\\n}';\n\n var regex = new RegExp(Object.keys(styleVars).join('|'), 'gi');\n var css = cssTemplate.replace(regex, function (matched)\n {\n return styleVars[matched];\n });\n\n var headEl = angular.element('head');\n var styleEl = angular.element('');\n styleEl.html(css);\n headEl.append(styleEl);\n }\n\n /**\n * Convert color array to rgb/rgba\n * Also apply contrasts if needed\n *\n * @param color\n * @param _contrastLevel\n * @returns {string}\n */\n function rgba(color, _contrastLevel)\n {\n var contrastLevel = _contrastLevel || false;\n\n // Convert 255,255,255,0.XX to 255,255,255\n // According to Google's Material design specs, white primary\n // text must have opacity of 1 and we will fix that here\n // because Angular Material doesn't care about that spec\n if ( color.length === 4 && color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color.splice(3, 4);\n }\n\n // If contrast level provided, apply it to the current color\n if ( contrastLevel )\n {\n color = applyContrast(color, contrastLevel);\n }\n\n // Convert color array to color string (rgb/rgba)\n if ( color.length === 3 )\n {\n return 'rgb(' + color.join(',') + ')';\n }\n else if ( color.length === 4 )\n {\n return 'rgba(' + color.join(',') + ')';\n }\n else\n {\n $log.error('Invalid number of arguments supplied in the color array: ' + color.length + '\\n' + 'The array must have 3 or 4 colors.');\n }\n }\n\n /**\n * Apply given contrast level to the given color\n *\n * @param color\n * @param contrastLevel\n */\n function applyContrast(color, contrastLevel)\n {\n var contrastLevels = {\n 'white': {\n '1': '1',\n '2': '0.7',\n '3': '0.3',\n '4': '0.12'\n },\n 'black': {\n '1': '0.87',\n '2': '0.54',\n '3': '0.26',\n '4': '0.12'\n }\n };\n\n // If white\n if ( color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color[3] = contrastLevels.white[contrastLevel];\n }\n // If black\n else if ( color[0] === 0 && color[1] === 0, color[2] === 0 )\n {\n color[3] = contrastLevels.black[contrastLevel];\n }\n\n return color;\n }\n\n /**\n * Uppercase first\n */\n function ucfirst(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByTags', filterByTags)\n .filter('filterSingleByTags', filterSingleByTags);\n\n /** @ngInject */\n function filterByTags()\n {\n return function (items, tags)\n {\n if ( items.length === 0 || tags.length === 0 )\n {\n return items;\n }\n\n var filtered = [];\n\n items.forEach(function (item)\n {\n var match = tags.every(function (tag)\n {\n var tagExists = false;\n\n item.tags.forEach(function (itemTag)\n {\n if ( itemTag.name === tag.name )\n {\n tagExists = true;\n return;\n }\n });\n\n return tagExists;\n });\n\n if ( match )\n {\n filtered.push(item);\n }\n });\n\n return filtered;\n };\n }\n\n /** @ngInject */\n function filterSingleByTags()\n {\n return function (itemTags, tags)\n {\n if ( itemTags.length === 0 || tags.length === 0 )\n {\n return;\n }\n\n if ( itemTags.length < tags.length )\n {\n return [];\n }\n\n var filtered = [];\n\n var match = tags.every(function (tag)\n {\n var tagExists = false;\n\n itemTags.forEach(function (itemTag)\n {\n if ( itemTag.name === tag.name )\n {\n tagExists = true;\n return;\n }\n });\n\n return tagExists;\n });\n\n if ( match )\n {\n filtered.push(itemTags);\n }\n\n return filtered;\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('toTrusted', toTrustedFilter)\n .filter('htmlToPlaintext', htmlToPlainTextFilter)\n .filter('nospace', nospaceFilter)\n .filter('humanizeDoc', humanizeDocFilter);\n\n /** @ngInject */\n function toTrustedFilter($sce)\n {\n return function (value)\n {\n return $sce.trustAsHtml(value);\n };\n }\n\n /** @ngInject */\n function htmlToPlainTextFilter()\n {\n return function (text)\n {\n return String(text).replace(/<[^>]+>/gm, '');\n };\n }\n\n /** @ngInject */\n function nospaceFilter()\n {\n return function (value)\n {\n return (!value) ? '' : value.replace(/ /g, '');\n };\n }\n\n /** @ngInject */\n function humanizeDocFilter()\n {\n return function (doc)\n {\n if ( !doc )\n {\n return;\n }\n if ( doc.type === 'directive' )\n {\n return doc.name.replace(/([A-Z])/g, function ($1)\n {\n return '-' + $1.toLowerCase();\n });\n }\n return doc.label || doc.name;\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('hljs', hljsDirective);\n\n /** @ngInject */\n function hljsDirective($timeout, $q, $interpolate)\n {\n return {\n restrict: 'EA',\n compile : function (tElement, tAttrs)\n {\n var code;\n //No attribute? code is the content\n if ( !tAttrs.code )\n {\n code = tElement.html();\n tElement.empty();\n }\n\n return function (scope, iElement, iAttrs)\n {\n if ( iAttrs.code )\n {\n // Attribute? code is the evaluation\n code = scope.$eval(iAttrs.code);\n }\n var shouldInterpolate = scope.$eval(iAttrs.shouldInterpolate);\n\n $q.when(code).then(function (code)\n {\n if ( code )\n {\n if ( shouldInterpolate )\n {\n code = $interpolate(code)(scope);\n }\n\n var contentParent = angular.element(\n '
'\n );\n\n iElement.append(contentParent);\n\n // Defer highlighting 1-frame to prevent GA interference...\n $timeout(function ()\n {\n render(code, contentParent);\n }, 34, false);\n }\n });\n\n function render(contents, parent)\n {\n var codeElement = parent.find('code');\n var lines = contents.split('\\n');\n\n // Remove empty lines\n lines = lines.filter(function (line)\n {\n return line.trim().length;\n });\n\n // Make it so each line starts at 0 whitespace\n var firstLineWhitespace = lines[0].match(/^\\s*/)[0];\n var startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n\n lines = lines.map(function (line)\n {\n return line\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, '');\n });\n\n var highlightedCode = hljs.highlight(iAttrs.language || iAttrs.lang, lines.join('\\n'), true);\n highlightedCode.value = highlightedCode.value\n .replace(/=\"\"<\\/span>/gi, '')\n .replace('', '')\n .replace('', '');\n codeElement.append(highlightedCode.value).addClass('highlight');\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseConfig', fuseConfigProvider);\n\n /** @ngInject */\n function fuseConfigProvider()\n {\n // Default configuration\n var fuseConfiguration = {\n 'disableCustomScrollbars' : false,\n 'disableMdInkRippleOnMobile' : true,\n 'disableCustomScrollbarsOnMobile': true\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n fuseConfiguration = angular.extend({}, fuseConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig,\n setConfig: setConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Returns a config value\n */\n function getConfig(configName)\n {\n if ( angular.isUndefined(fuseConfiguration[configName]) )\n {\n return false;\n }\n\n return fuseConfiguration[configName];\n }\n\n /**\n * Creates or updates config object\n *\n * @param configName\n * @param configValue\n */\n function setConfig(configName, configValue)\n {\n fuseConfiguration[configName] = configValue;\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.toolbar', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider)\n {\n $translatePartialLoaderProvider.addPart('app/toolbar');\n }\n})();\n\n(function () {\n 'use strict';\n\n angular\n .module('app.toolbar')\n .controller('ToolbarController', ToolbarController);\n\n /** @ngInject */\n function ToolbarController($http, $rootScope, $mdSidenav, $translate, $mdToast, $state, AuthService, msUtils, msNavigationService, PENTAHO_APP_URL) {\n var vm = this;\n\n vm.visible = AuthService.authSessions.loggedIn;\n\n // Data\n $rootScope.global = {\n search: ''\n };\n\n vm.session = AuthService.authSessions.pentahoSession;\n vm.bodyEl = angular.element('body');\n vm.userStatusOptions = [{\n 'title': 'Online',\n 'icon': 'icon-checkbox-marked-circle',\n 'color': '#4CAF50'\n },\n {\n 'title': 'Away',\n 'icon': 'icon-clock',\n 'color': '#FFC107'\n },\n {\n 'title': 'Do not Disturb',\n 'icon': 'icon-minus-circle',\n 'color': '#F44336'\n },\n {\n 'title': 'Invisible',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#BDBDBD'\n },\n {\n 'title': 'Offline',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#616161'\n }\n ];\n vm.languages = {\n en: {\n 'title': 'Portugês',\n 'code': 'pt-br',\n 'flag': 'br'\n },\n es: {\n 'title': 'Spanish',\n 'translation': 'TOOLBAR.SPANISH',\n 'code': 'es',\n 'flag': 'es'\n },\n tr: {\n 'title': 'Turkish',\n 'translation': 'TOOLBAR.TURKISH',\n 'code': 'tr',\n 'flag': 'tr'\n }\n };\n // Initilize as `false` so that a later call will change to true if docs/index.html exists\n vm.hasDocs = false;\n\n // Methods\n vm.toggleSidenav = toggleSidenav;\n vm.logout = logout;\n vm.containerStateProfile = containerStateProfile;\n vm.containerStateAbout = containerStateAbout;\n vm.config = config;\n vm.containerStateInbox = containerStateInbox;\n vm.changeLanguage = changeLanguage;\n vm.setUserStatus = setUserStatus;\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n vm.openBiServer = openBiServer;\n vm.openDocs = openDocs;\n //\\\n\n function config() {\n $state.go('app.home.configuration');\n }\n\n function openBiServer() {\n window.open('/pentaho/Home', '_blank');\n }\n\n init();\n touchDocPage()\n\n /**\n * Initialize\n */\n function init() {\n // Select the first status as a default\n vm.userStatus = vm.userStatusOptions[0];\n\n // Get the selected language directly from angular-translate module setting\n vm.selectedLanguage = vm.languages[$translate.preferredLanguage()];\n }\n\n /**\n * Checks if a ...docs/index.html page exists then set vm.hasDocs\n */\n function touchDocPage () {\n const sf = function(r) { vm.hasDocs = true };\n $http.head(PENTAHO_APP_URL + '/api/repos/ppa/static/docs/index.html').then(sf)\n }\n\n function openDocs () {\n const u = PENTAHO_APP_URL + '/api/repos/ppa/static/docs/index.html';\n if (window.$P && window.$P.openTab)\n window.$P.openTab({id: 'docs', title: 'DOCS', url: u});\n }\n\n /**\n * Toggle sidenav\n *\n * @param sidenavId\n */\n function toggleSidenav(sidenavId) {\n $mdSidenav(sidenavId).toggle();\n }\n\n /**\n * Sets User Status\n * @param status\n */\n function setUserStatus(status) {\n vm.userStatus = status;\n }\n\n /**\n * Logout Function\n */\n function logout() {\n // msUtils.clearLocalStorage();\n\n msNavigationService.clearNavigation();\n\n AuthService.chainedLogout();\n AuthService.loginRedirect('app.login');\n }\n\n /**\n * Profile (state)\n */\n function containerStateProfile() {\n $state.go('app.home.profile');\n }\n\n /**\n * About (state)\n */\n function containerStateAbout() {\n console.log('ABOUT!')\n $state.go('app.home.about');\n }\n\n /**\n * Inbox (state)\n */\n function containerStateInbox() {\n $state.go('app.home.inbox');\n }\n\n /**\n * Change Language\n */\n function changeLanguage(lang) {\n vm.selectedLanguage = lang;\n\n /**\n * Show temporary message if user selects a language other than English\n *\n * angular-translate module will try to load language specific json files\n * as soon as you change the language. And because we don't have them, there\n * will be a lot of errors in the page potentially breaking couple functions\n * of the template.\n *\n * To prevent that from happening, we added a simple \"return;\" statement at the\n * end of this if block. If you have all the translation files, remove this if\n * block and the translations should work without any problems.\n */\n if (lang.code !== 'en') {\n var message = 'Fuse supports translations through angular-translate module, but currently we do not have any translations other than English language. If you want to help us, send us a message through ThemeForest profile page.';\n\n $mdToast.show({\n template: '
' + message + '
',\n hideDelay: 7000,\n position: 'top right',\n parent: '#content'\n });\n\n return;\n }\n\n // Change the language\n $translate.use(lang.code);\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu() {\n vm.bodyEl.toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n})();\n\n(function(){\n 'use strict';\n\n angular.module('state-manager', [])\n .config(function($stateProvider) {\n\n //O segredo para resolver o problema das rotas é criar uma referência para \n //o provider [routeProvider], permitindo que ele seja acessado posteriormente.\n angular.module('state-manager')._stateProvider = $stateProvider;\n });\n}());\n(function () {\n 'use strict';\n\n angular.module('state-manager')\n .factory('StateFactory', function ($rootScope) {\n return function (newState) {\n angular.module('state-manager')._stateProvider\n .state(newState.name, newState.options);\n $rootScope.statesTitles.push({\n title: newState.title,\n ref: newState.name\n });\n }\n })\n\n .factory('StateFactoryClear', function (PentahoService, AuthService, $cookies) {\n return function () {\n PentahoService.refreshMenu();\n }\n });\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quick-panel')\n .controller('QuickPanelController', QuickPanelController);\n\n /** @ngInject */\n function QuickPanelController(msApi)\n {\n var vm = this;\n\n // Data\n vm.date = new Date();\n vm.settings = {\n notify: true,\n cloud : false,\n retro : true\n };\n\n /*msApi.request('quickPanel.events@get', {},\n // Success\n function (response)\n {\n vm.events = response.data;\n }\n );\n\n msApi.request('quickPanel.notes@get', {},\n // Success\n function (response)\n {\n vm.notes = response.data;\n }\n );*/\n\n // Methods\n\n //////////\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.navigation', [])\n .config(config);\n\n /** @ngInject */\n function config()\n {\n \n }\n\n})();\n(function () {\n 'use strict';\n\n angular\n .module('app.navigation')\n .controller('NavigationController', NavigationController);\n\n /** @ngInject */\n function NavigationController($scope, PentahoService, PentahoConnectorService, ActivitiService, KpiService, APP_CFG, msNavigationService, $rootScope, AuthService, AdminToolsService) {\n var vm = this;\n var ACTIVE_APPS = APP_CFG['ACTIVE_APPS'];\n var FEATURE_FLAGS = APP_CFG['FEATURE_FLAGS'];\n\n // Data\n vm.bodyEl = angular.element('body');\n vm.folded = false;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n // Methods\n vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n vm.openTab = openTab;\n\n /**\n * Allows for opening new tabs in PPA-UI given this three parameters.\n * This should be bound to a shared object in window (see `window.$P` bellow).\n * Para usar a funç˜o abaixo, basta add ao navigation.html uma chamada como `ng-click=\"vm.openTab()\"`\n */\n function openTab(tabOpts) {\n PentahoConnectorService.viewer.openTab({id: tabOpts.id, title: tabOpts.title, url: tabOpts.url})\n }\n\n // TODO: move this to a better location\n window.$P = {\n openTab: openTab\n }\n\n /**\n * Toggle folded status\n */\n function toggleMsNavigationFolded() {\n vm.folded = !vm.folded;\n }\n\n $scope.$on('$stateChangeStart', function () {\n vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active');\n });\n\n // Close the mobile menu on $stateChangeSuccess\n $scope.$on('$stateChangeSuccess', function () {\n vm.folded = true;\n });\n\n // Verifica se o Activiti está habilitado\n $rootScope.$on('createnavigation', function (event, data) {\n\n if (AuthService.authSessions.loggedIn) {\n if (!$rootScope.userPreferencesLoaded) {\n if (ACTIVE_APPS.indexOf('activiti') != -1) {\n // Listagem de menu do Activiti\n ActivitiService.initSideNav()\n .then(function () {\n // Verifica se o Pentaho está habilitado\n if (ACTIVE_APPS.indexOf('pentaho') != -1) {\n // Listagem de menu do KPI\n KpiService.initSideNav();\n\n msNavigationService.sort();\n\n setTimeout(pentahoLoginDelay, 2000);\n // Listagem de menu do Pentaho\n function pentahoLoginDelay() {\n PentahoService.initSideNav()\n .then(function () {\n //-- terminou a listagem de menu do Pentaho\n AdminToolsService.initSideNav();\n }, function (e) {\n //-- falha na listagem de menu do Pentaho\n console.log('Falha ao obter a listagem de itens do Pentaho');\n });\n }\n }\n\n }, function (e) {\n // Falha na listagem de menu do Activiti\n console.log('Falha ao obter a listagem de itens do Activiti!');\n });\n } else { // Quando Activiti não estiver habilitado\n // Verifica se o Pentaho está habilitado\n if (ACTIVE_APPS.indexOf('pentaho') != -1) {\n // Listagem de menu do KPI\n //KpiService.initSideNav();\n\n // Listagem de menu do Pentaho\n console.log('initSideNav will be delayed by 3s')\n setTimeout(function(){\n PentahoService.initSideNav()\n .then(function () {\n //-- terminou a listagem de menu do Pentaho\n AdminToolsService.initSideNav();\n }, function (e) {\n console.log('Falha ao obter a listagem de itens do Pentaho');\n });\n\n }, 3000)\n }\n }\n } else {\n msNavigationService.sort();\n }\n }\n });\n\n function sortNavbar(a, b) {\n /*if (a.level != b.level) {\n console.log(a.level, a.title)\n return a.level < b.level ? -1 : 1;\n }\n if (!(a.dnf && b.dnf) && a.title != b.title) {\n return a.title < b.title ? -1 : 1;\n }*/\n return 0;\n }\n\n $rootScope.$broadcast('createnavigation');\n }\n\n})();\n\n(function () {\n 'use strict';\n\n /**\n * Main module of the Fuse\n */\n angular\n .module('fuse', [\n\n // Core\n 'app.core',\n\n // Firebase\n 'firebase',\n\n // SHA-1\n 'angular-sha1',\n\n // OC Lazy Load\n 'oc.lazyLoad',\n\n // State Manager\n 'state-manager',\n\n // Pentaho Connector\n 'app.pentaho-connector',\n\n // Activiti Connector\n 'app.activiti-connector',\n\n // Admin Tools\n 'app.admintools-data-handler',\n\n // Authentication\n 'app.auth',\n\n // Navigation\n 'app.navigation',\n\n // Toolbar\n 'app.toolbar',\n\n // Quick panel\n 'app.quick-panel',\n\n // Base64 Enconder/Decoder\n 'base64',\n\n // Web Storage\n 'LocalStorageModule',\n\n // Login\n 'app.login',\n\n // Home\n 'app.home',\n\n // KPI\n 'app.kpi-data-handler'\n ]);\n\n angular.module('template', []);\n angular.module('sghq', []);\n})();\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .controller('MainController', MainController);\n\n /** @ngInject */\n function MainController($scope, $rootScope, APP_CFG) {\n // Data\n var vm = this;\n var ACTIVE_APPS = APP_CFG['ACTIVE_APPS'];\n\n $rootScope.$broadcast('showSplash');\n\n if (ACTIVE_APPS.indexOf('pentaho') != -1) {\n $rootScope.$on('finishReload', function () {\n $rootScope.$broadcast('hideSplash');\n });\n } else {\n // Remove the splash screen\n $scope.$on('$viewContentAnimationEnded', function (event) {\n if (event.targetScope.$id === $scope.$id) {\n $rootScope.$broadcast('hideSplash');\n }\n });\n }\n\n $rootScope.$watch('activeContextApp', function (newValue) {\n vm.activeContextApp = newValue;\n });\n }\n})();\n(function(){\n 'use strict';\n \n angular.module('fuse')\n .factory('InterceptorRequestService', InterceptorRequestService);\n \n /** @ngInject **/\n function InterceptorRequestService($q, $cookies)\n {\n var requestInterceptor = {\n\t\t\trequest: function(config) {\n\t\t\t\tif (config.url.indexOf('pentaho') != -1) {\n\t\t\t\t\tvar currentTime = new Date();\n\t\t\t\t\t\n\t\t\t\t\t$cookies.putObject('ppaui-session', currentTime);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn config;\n\t\t\t}\n\t\t};\n\n\t\treturn requestInterceptor;\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('toArray', toArray);\n\n /** @ngInject */\n function toArray()\n { \n return function(obj) {\n if (obj instanceof Object) {\n return _.map(obj, function(value, key) {\n if (value instanceof Object)\n Object.defineProperty(value, '$id', {__proto__: null, value: key});\n return value;\n });\n } else {\n return false;\n }\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('textCutter', textCutter);\n\n /** @ngInject */\n function textCutter()\n { \n return function(text, wordwise, max, tail) {\n if (!text) return '';\n \n max = parseInt(max, 10);\n if (!max) return text;\n \n if (text.length <= max) return text;\n \n text = text.substr(0, max);\n if (wordwise){\n var lastspace = text.lastIndexOf(' ');\n if (lastspace != -1) {\n if (text.charAt(lastspace - 1) == '.' || text.charAt(lastspace - 1) == ','){\n lastspace = lastspace - 1;\n }\n \n text = text.substr(0, lastspace);\n }\n }\n \n return text + (tail || '…');\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('monthFilter', monthFilter);\n\n /** @ngInject */\n function monthFilter(MONTHS)\n { \n return function(monthNumber) {\n if (MONTHS[parseInt(monthNumber)])\n return MONTHS[parseInt(monthNumber)].name;\n else\n return monthNumber;\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock(msUtils, fuseGenerator, fuseConfig)\n { \n /**\n * Generate extra classes based on registered themes so we\n * can use same colors with non-angular-material elements\n */\n fuseGenerator.generate();\n\n /**\n * Disable md-ink-ripple effects on mobile\n * if 'disableMdInkRippleOnMobile' config enabled\n */\n if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\n {\n var bodyEl = angular.element('body');\n bodyEl.attr('md-no-ink', true);\n }\n\n /**\n * Put isMobile() to the html as a class\n */\n if ( msUtils.isMobile() )\n {\n angular.element('html').addClass('is-mobile');\n }\n\n /**\n * Put browser information to the html as a class\n */\n var browserInfo = msUtils.detectBrowser();\n if ( browserInfo )\n {\n var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\n angular.element('html').addClass(htmlClass);\n } \n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($ariaProvider, $logProvider, msScrollConfigProvider, $translateProvider, fuseConfigProvider)\n {\n // Enable debug logging\n $logProvider.debugEnabled(true);\n\n // toastr configuration\n toastr.options.timeOut = 3000;\n toastr.options.positionClass = 'toast-top-right';\n toastr.options.preventDuplicates = true;\n toastr.options.progressBar = true;\n\n // angular-translate configuration\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '{part}/i18n/{lang}.json'\n });\n $translateProvider.preferredLanguage('en');\n $translateProvider.useSanitizeValueStrategy('sanitize');\n\n /*eslint-disable */\n\n // ng-aria configuration\n $ariaProvider.config({\n tabindex: false\n });\n\n // Fuse theme configurations\n fuseConfigProvider.config({\n 'disableCustomScrollbars' : false,\n 'disableCustomScrollbarsOnMobile': true,\n 'disableMdInkRippleOnMobile' : true\n });\n\n // msScroll configuration\n msScrollConfigProvider.config({\n wheelPropagation: true\n });\n\n /*eslint-enable */\n }\n})();\n\n(function(window, angular){\n 'use strict';\n\n function sha1(){\n // Private variables\n\n // Private methods\n\n /**\n * Generates SHA-1 hash of string.\n *\n * @param {string} msg - (Unicode) string to be hashed.\n * @returns {string} Hash of msg as hex character string.\n */\n function hash(msg) {\n // convert string to UTF-8, as SHA only deals with byte-streams\n msg = msg.utf8Encode();\n\n // constants [§4.2.1]\n var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 ];\n\n // PREPROCESSING\n\n msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1]\n\n // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\n var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length\n var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints\n var M = new Array(N);\n\n for (var i=0; i>> 32, but since JS converts\n // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators\n M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]);\n M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;\n\n // set initial hash value [§5.3.1]\n var H0 = 0x67452301;\n var H1 = 0xefcdab89;\n var H2 = 0x98badcfe;\n var H3 = 0x10325476;\n var H4 = 0xc3d2e1f0;\n\n // HASH COMPUTATION [§6.1.2]\n\n var W = new Array(80); var a, b, c, d, e;\n for (var i=0; i>>(32-n));\n };\n\n\n /**\n * Hexadecimal representation of a number.\n * @private\n */\n function toHexStr(n) {\n // note can't use toString(16) as it is implementation-dependant,\n // and in IE returns signed numbers when used on full words\n var s=\"\", v;\n for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); }\n return s;\n };\n\n\n /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n /** Extend String object with method to encode multi-byte string to utf8\n * - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html */\n if (typeof String.prototype.utf8Encode == 'undefined') {\n String.prototype.utf8Encode = function() {\n return unescape( encodeURIComponent( this ) );\n };\n }\n\n /** Extend String object with method to decode utf8 string to multi-byte */\n if (typeof String.prototype.utf8Decode == 'undefined') {\n String.prototype.utf8Decode = function() {\n try {\n return decodeURIComponent( escape( this ) );\n } catch (e) {\n return this; // invalid UTF-8? return as-is\n }\n };\n }\n\n // Public\n return {\n hash: hash,\n f: f,\n ROTL: ROTL,\n toHexStr: toHexStr\n };\n }\n\n angular.module('angular-sha1', []).factory('sha1', sha1);\n})(window, window.angular);\n(function(){\n 'use strict';\n \n angular.module('app.auth', []);\n}());\n/*\n Este módulo foi criado para servir de centralizador de rotinas de autenticação\n Todos os módulos que possuirem autenticações próprias, deverão ter suas funções chamadas e tratadas neste módulo\n*/\n\n(function () {\n 'use strict';\n\n angular.module('app.auth')\n .service('AuthService', AuthService);\n\n /** @ngInject **/\n function AuthService(PentahoConnectorService, ActivitiConnectorService, $cookies, $state, $q, $http, $window, APP_CFG, $rootScope) {\n var vm = this;\n\n // Objeto para armazenar dados de sessões\n vm.authSessions = {\n loggedIn: false,\n pentahoSession: PentahoConnectorService.auth.session,\n activitiSession: ActivitiConnectorService.auth.session\n //outras sessoes vão aqui\n }\n\n vm.updateAuthInformation = updateAuthInformation;\n vm.loginRedirect = loginRedirect;\n\n vm.chainedLogin = chainedLogin;\n vm.chainedLogout = chainedLogout;\n\n // Pentaho\n vm.logInPentaho = logInPentaho;\n vm.logOutPentaho = logOutPentaho;\n\n // Activiti\n vm.logInActiviti = logInActiviti;\n vm.logOutActiviti = logOutActiviti;\n\n /*\n Atualiza as informações de todas as sessões com base nos dados salvos em cookies\n Adicionar outras autenticações aqui...\n */\n function updateAuthInformation() {\n // Adiciona cada cookie em um nó do vetor de objetos\n var\n sid = {},\n apps = APP_CFG['ACTIVE_APPS'],\n allowed = true;\n\n for (var i = 0; i < apps.length; i++) {\n sid[apps[i]] = $cookies.getObject('ppaui-' + apps[i] + '-auth');\n if (!sid[apps[i]]) {\n allowed = false;\n break;\n }\n }\n \n if (allowed) {\n var timeout = APP_CFG['SESSION_TIMEOUT'] || 100,\n currentDate = new Date(),\n diffMs = 0,\n interval = 0, //Os minutos desde a última interação\n lastUse = $cookies.getObject('ppaui-session');\n\n lastUse = new Date(lastUse);\n diffMs = (currentDate - lastUse);\n interval = parseInt(diffMs / 1000 / 60);\n\n if (interval >= timeout) {\n vm.chainedLogout();\n allowed = false;\n }\n }\n\n // Se estiver permitido, atualiza as informações em memória\n if (allowed) {\n var activitiIsOn = false;\n\n for (var i = 0; i < apps.length; i++) {\n vm.authSessions[apps[i] + 'Session'] = sid[apps[i]];\n\n if (apps[i] === 'activiti')\n activitiIsOn = true;\n }\n\n vm.authSessions.loggedIn = true;\n\n if (activitiIsOn) {\n $http.defaults.headers.common.Authorization = 'Basic ' + vm.authSessions['activitiSession'].authKey;\n ActivitiConnectorService.dh.getUserContext(\n vm.authSessions['activitiSession'].username\n );\n } else {\n $http.defaults.headers.common.Authorization = 'Basic ' + vm.authSessions['pentahoSession'].authKey;\n PentahoConnectorService.dh.getUserContext(\n vm.authSessions['pentahoSession'].username\n );\n }\n } else {\n $cookies.remove('JSESSIONID', {\n 'path': '/pentaho'\n });\n //vm.chainedLogout(apps);\n vm.authSessions.loggedIn = false;\n $rootScope.userContext = {\n roles: null,\n isAdmin: false,\n isQualityManager: false\n };\n }\n }\n\n /*\n Invoca função de login de todos os apps informados por parâmetro\n */\n function chainedLogin(loginData) {\n var\n promises = [],\n apps = APP_CFG['ACTIVE_APPS'];\n\n if (!APP_CFG['USE_FREE_CASE_AUTH']) {\n loginData.username = loginData.username.toUpperCase();\n } else {\n console.log('O mecanismo de autenticação livre está habilitado!');\n }\n\n if (apps.indexOf('pentaho') !== -1) {\n promises.push(vm.logInPentaho(loginData));\n }\n\n if (apps.indexOf('activiti') !== -1) {\n promises.push(vm.logInActiviti(loginData));\n }\n\n // Retorna uma promise com base no resultado das demais promises\n return $q.all(promises);\n }\n\n /*\n Invoca função de logout de todos os apps informados por parâmetro\n */\n function chainedLogout() {\n var apps = APP_CFG['ACTIVE_APPS'];\n\n if (apps.indexOf('pentaho') !== -1) {\n vm.logOutPentaho();\n }\n\n if (apps.indexOf('activiti') !== -1) {\n vm.logOutActiviti();\n }\n\n $rootScope.userPreferencesLoaded = false;\n }\n\n function removeAuthCookies() {\n $cookies.remove('ppaui-session');\n $cookies.remove('ppaui-pentaho-auth');\n $cookies.remove('JSESSIONID');\n $cookies.remove('JSESSIONID', {'path': '/pentaho'});\n }\n\n /* \n Efe o login - PENTAHO\n Essa função serve de frente para o login do Pentaho\n */\n function logInPentaho(loginData) {\n removeAuthCookies();\n var res = PentahoConnectorService.auth.logIn(loginData);\n\n res.then(function (r) {\n if (PentahoConnectorService.auth.session.loggedIn) {\n vm.authSessions.pentahoSession = PentahoConnectorService.auth.session;\n $cookies.putObject('ppaui-pentaho-auth', vm.authSessions.pentahoSession);\n }\n }, function (e) {\n if (PentahoConnectorService.auth.session.loggedIn) {\n vm.authSessions.pentahoSession = PentahoConnectorService.auth.session;\n $cookies.putObject('ppaui-pentaho-auth', vm.authSessions.pentahoSession);\n }\n });\n return res; // Promise\n }\n\n /* \n Efetua o logout - PENTAHO\n Essa função serve de frente para o logout do Pentaho\n */\n function logOutPentaho() {\n PentahoConnectorService.auth.logOut(true);\n vm.authSessions.pentahoSession = PentahoConnectorService.auth.session;\n removeAuthCookies();\n }\n\n /* \n Efetua o login - ACTIVITI\n Essa função serve de frente para o login do Activiti\n */\n function logInActiviti(loginData) {\n var res = ActivitiConnectorService.auth.logIn(loginData);\n\n res.then(function (r) {\n if (ActivitiConnectorService.auth.session.loggedIn) {\n vm.authSessions.activitiSession = ActivitiConnectorService.auth.session;\n $cookies.putObject('ppaui-activiti-auth', vm.authSessions.activitiSession);\n }\n }, function (e) {\n if (ActivitiConnectorService.auth.session.loggedIn) {\n vm.authSessions.activitiSession = ActivitiConnectorService.auth.session;\n $cookies.putObject('ppaui-activiti-auth', vm.authSessions.activitiSession);\n }\n });\n return res; // Promise\n }\n\n /* \n Efetua o logout - ACTIVITI\n Essa função serve de frente para o logout do Activiti\n */\n function logOutActiviti() {\n ActivitiConnectorService.auth.logOut();\n vm.authSessions.activitiSession = ActivitiConnectorService.auth.session;\n $cookies.remove('ppaui-activiti-auth');\n }\n\n /*\n Redireciona o usuário após autenticação\n */\n function loginRedirect(url, forceReload) {\n $state.go(url, null, {\n reload: forceReload\n });\n }\n }\n}());\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock(fuseTheming, $rootScope, $timeout, $http, $state, $ocLazyLoad, AuthService, StateFactory, APP_CFG, ExternalAppsService)\n { \n var regex = /external-app/g\n\t\t\n\t\t$rootScope.userPreferencesLoaded = false;\n \n // Carrega as aplicações externas \n ExternalAppsService.loadExternalApps();\n\t\t\n fuseTheming.setActiveTheme(APP_CFG['COMPANY_BRAND']);\n\n // Activate loading indicator\n var stateChangeStartEvent = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams)\n {\n $rootScope.loadingProgress = true;\n });\n\n // Atualiza informações de logon com base nos cookies\n AuthService.updateAuthInformation();\n\n // Verifica se o usuário está logado em todos os estados que precisarem de autenticação\n $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){\n AuthService.updateAuthInformation();\n \n\t\t\tif (toState.authenticate && !AuthService.authSessions.loggedIn) {\n\t\t\t\t///\n\t\t\t}\n\t\t\t\n if (toState.authenticate && !AuthService.authSessions.loggedIn){\n $state.transitionTo('app.login');\n event.preventDefault();\n }\n\n if (toState.isAdmin && !$rootScope.userContext.isAdmin){\n $state.transitionTo('app.home');\n event.preventDefault();\n }\n\n if (toState.isDataAdministrator && !($rootScope.userContext.isDataAdministrator)){\n $state.transitionTo('app.home');\n event.preventDefault();\n }\n });\n \n $rootScope.$on('$stateNotFound', function(event, unfoundState, fromState, fromParams){\n if (regex.test(unfoundState.to)){\n ExternalAppsService.loadExternalApps()\n .then(function(){\n $state.transitionTo(unfoundState.to);\n }, function(){\n console.log('Falha ao carregar aplicação externa!');\n });\n event.preventDefault();\n }\n });\n\n // De-activate loading indicator\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams)\n {\n $timeout(function ()\n {\n $rootScope.loadingProgress = false;\n });\n });\n\n // Store state in the root scope for easy access\n $rootScope.state = $state;\n\n // Cleanup\n $rootScope.$on('$destroy', function ()\n {\n stateChangeStartEvent();\n stateChangeSuccessEvent();\n });\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .config(routeConfig);\n\n /** @ngInject */\n function routeConfig($stateProvider, $urlRouterProvider, $locationProvider, modalStateProvider) {\n $locationProvider.html5Mode(true);\n\n $urlRouterProvider.otherwise(function ($injector, $location) {\n return '/home'\n });\n\n // Inject $cookies\n var $cookies;\n\n angular.injector(['ngCookies']).invoke([\n '$cookies',\n function (_$cookies) {\n $cookies = _$cookies;\n }\n ]);\n\n // Get active layout\n var layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n var layouts = {\n verticalNavigation: {\n main: 'app/core/layouts/vertical-navigation.html',\n toolbar: 'app/toolbar/layouts/vertical-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\n },\n horizontalNavigation: {\n main: 'app/core/layouts/horizontal-navigation.html',\n toolbar: 'app/toolbar/layouts/horizontal-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\n },\n contentOnly: {\n main: 'app/core/layouts/content-only.html',\n toolbar: '',\n navigation: ''\n },\n contentWithToolbar: {\n main: 'app/core/layouts/content-with-toolbar.html',\n toolbar: 'app/toolbar/layouts/content-with-toolbar/toolbar.html',\n navigation: ''\n }\n };\n // END - Layout Style Switcher\n\n // State definitions\n $stateProvider\n .state('app', {\n abstract: true,\n views: {\n 'main@': {\n templateUrl: layouts[layoutStyle].main,\n controller: 'MainController as vm'\n },\n 'toolbar@app': {\n templateUrl: layouts[layoutStyle].toolbar,\n controller: 'ToolbarController as vm'\n },\n 'navigation@app': {\n templateUrl: layouts[layoutStyle].navigation,\n controller: 'NavigationController as vm'\n },\n 'quickPanel@app': {\n templateUrl: 'app/quick-panel/quick-panel.html',\n controller: 'QuickPanelController as vm'\n }\n }\n });\n\n $stateProvider\n .state('app.login', {\n url: '/login',\n views: {\n 'main@': {\n templateUrl: 'app/main/login/login.html',\n controller: 'LoginController as vm'\n },\n 'toolbar@app': {\n templateUrl: '',\n controller: 'ToolbarController as vm'\n },\n 'navigation@app': {\n templateUrl: '',\n controller: 'NavigationController as vm'\n },\n 'quickPanel@app': {\n templateUrl: '',\n controller: 'QuickPanelController as vm'\n }\n }\n });\n\n modalStateProvider.state('app.home.about', {\n parent: 'app',\n url: '/sobre',\n templateUrl: 'app/main/container/views/about/about.html',\n controller: 'AboutContainerController as vm',\n autenticate: true\n });\n\n $stateProvider.state('app.home.configuration', {\n parent: 'app.home',\n url: '/configuracao',\n views: {\n 'content@app': {\n templateUrl: 'app/main/configuration/configuration.html',\n controller: 'ConfigurationController as vm'\n }\n },\n resolve: {\n DepartmentsList: function ($rootScope) {\n $rootScope.activeContextApp = 'main';\n return {};\n },\n Context: function ($rootScope) {\n return $rootScope.getContext\n }\n },\n authenticate: true\n });\n\n /*modalStateProvider.state('app.home.inbox', {\n parent : 'app',\n url: '/inbox',\n templateUrl: 'app/main/container/views/inbox/inbox.html',\n controller : 'InboxController as vm',\n autenticate: true\n });*/\n }\n\n})();\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .controller('IndexController', IndexController);\n\n /** @ngInject */\n function IndexController(fuseTheming, $rootScope, PentahoViewerService) {\n var\n vm = this;\n\n // Tema\n vm.themes = fuseTheming.themes;\n\n vm.clearScope = clearScope;\n\n function clearScope() {\n PentahoViewerService.clearTabs();\n }\n\n // Cria o objeto que armazenará os títulos dos estados\n // para serem utilizados na barra de pesquisas\n $rootScope.statesTitles = [];\n\n $rootScope.$on('hideSplash', function () {\n $rootScope.loadingMenu = 0;\n });\n\n $rootScope.$on('showSplash', function () {\n $rootScope.loadingMenu = 1;\n });\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .constant('PENTAHO_APP_URL', '/pentaho')\n .constant('ACTIVITI_APP_URL', '/activiti-rest')\n .constant('APPS', {\n pentaho: {\n directive: 'pentaho-placeholder',\n appName: 'Pentaho'\n },\n activiti: {\n directive: 'activiti-placeholder',\n appName: 'Activiti'\n }\n })\n .constant('MONTHS', {\n 1: {\n name: 'Janeiro',\n value: '01'\n },\n 2: {\n name: 'Fevereiro',\n value: '02'\n },\n 3: {\n name: 'Março',\n value: '03'\n },\n 4: {\n name: 'Abril',\n value: '04'\n },\n 5: {\n name: 'Maio',\n value: '05'\n },\n 6: {\n name: 'Junho',\n value: '06'\n },\n 7: {\n name: 'Julho',\n value: '07'\n },\n 8: {\n name: 'Agosto',\n value: '08'\n },\n 9: {\n name: 'Setembro',\n value: '09'\n },\n 10: {\n name: 'Outubro',\n value: '10'\n },\n 11: {\n name: 'Novembro',\n value: '11'\n },\n 12: {\n name: 'Dezembro',\n value: '12'\n }\n })\n .constant('DT_LANGUAGE', {\n \"sEmptyTable\": \"Não há informações\",\n \"sInfo\": \"Visualizando _START_ até _END_ de _TOTAL_\",\n \"sInfoEmpty\": \"Sem registros\",\n \"sInfoFiltered\": \"(filtrado de _MAX_ registros)\",\n \"sInfoPostFix\": \"\",\n \"sInfoThousands\": \",\",\n \"sLengthMenu\": \"Mostrando _MENU_ registros\",\n \"sLoadingRecords\": \"Carregando...\",\n \"sProcessing\": \"Processando...\",\n \"sSearch\": \"Pesquisar:\",\n \"sZeroRecords\": \"Sem resultado da pesquisa\",\n \"oPaginate\": {\n \"sFirst\": \"Primeira\",\n \"sLast\": \"Última\",\n \"sNext\": \"Próxima\",\n \"sPrevious\": \"Anterior\"\n },\n \"oAria\": {\n \"sSortAscending\": \": clique para ordenar de forma ascendente\",\n \"sSortDescending\": \": clique para ordenar de forma descendente\"\n }\n });\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .config(config);\n\n /** @ngInject */\n function config($httpProvider, $mdThemingProvider, localStorageServiceProvider)\n { \n\t\t$httpProvider.interceptors.push('InterceptorRequestService');\n\t\t\n // Put your custom configurations here\n localStorageServiceProvider.setPrefix('ppa-ls');\n \n $mdThemingProvider.theme('veltio');\n \n //Functions prototype\n String.prototype.toCamel = function(){\n return this.replace(/(\\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');});\n }; \n \n if (![].contains) {\n Object.defineProperty(Array.prototype, 'contains', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function(searchElement/*, fromIndex*/) {\n if (this === undefined || this === null) {\n throw new TypeError('Cannot convert this value to object');\n }\n var O = Object(this);\n var len = parseInt(O.length) || 0;\n if (len === 0) { return false; }\n var n = parseInt(arguments[1]) || 0;\n if (n >= len) { return false; }\n var k;\n if (n >= 0) {\n k = n;\n } else {\n k = len + n;\n if (k < 0) k = 0;\n }\n while (k < len) {\n var currentElement = O[k];\n if (searchElement === currentElement ||\n searchElement !== searchElement && currentElement !== currentElement\n ) {\n return true;\n }\n k++;\n }\n return false;\n }\n });\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .factory('api', apiService);\n\n /** @ngInject */\n function apiService($resource)\n {\n /**\n * You can use this service to define your API urls. The \"api\" service\n * is designed to work in parallel with \"apiResolver\" service which you can\n * find in the \"app/core/services/api-resolver.service.js\" file.\n *\n * You can structure your API urls whatever the way you want to structure them.\n * You can either use very simple definitions, or you can use multi-dimensional\n * objects.\n *\n * Here's a very simple API url definition example:\n *\n * api.getBlogList = $resource('http://api.example.com/getBlogList');\n *\n * While this is a perfectly valid $resource definition, most of the time you will\n * find yourself in a more complex situation where you want url parameters:\n *\n * api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'});\n *\n * You can also define your custom methods. Custom method definitions allow you to\n * add hardcoded parameters to your API calls that you want to sent every time you\n * make that API call:\n *\n * api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'}, {\n * 'getFromHomeCategory' : {method: 'GET', params: {blogCategory: 'home'}}\n * });\n *\n * In addition to these definitions, you can also create multi-dimensional objects.\n * They are nothing to do with the $resource object, it's just a more convenient\n * way that we have created for you to packing your related API urls together:\n *\n * api.blog = {\n * list : $resource('http://api.example.com/blog'),\n * getById : $resource('http://api.example.com/blog/:id', {id: '@id'}),\n * getByDate: $resource('http://api.example.com/blog/:date', {id: '@date'}, {\n * get: {\n * method: 'GET',\n * params: {\n * getByDate: true\n * }\n * }\n * })\n * }\n *\n * If you look at the last example from above, we overrode the 'get' method to put a\n * hardcoded parameter. Now every time we make the \"getByDate\" call, the {getByDate: true}\n * object will also be sent along with whatever data we are sending.\n *\n * All the above methods are using standard $resource service. You can learn more about\n * it at: https://docs.angularjs.org/api/ngResource/service/$resource\n *\n * -----\n *\n * After you defined your API urls, you can use them in Controllers, Services and even\n * in the UIRouter state definitions.\n *\n * If we use the last example from above, you can do an API call in your Controllers and\n * Services like this:\n *\n * function MyController (api)\n * {\n * // Get the blog list\n * api.blog.list.get({},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n *\n * // Get the blog with the id of 3\n * var id = 3;\n * api.blog.getById.get({'id': id},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n *\n * // Get the blog with the date by using custom defined method\n * var date = 112314232132;\n * api.blog.getByDate.get({'date': date},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n * }\n *\n * Because we are directly using $resource service, all your API calls will return a\n * $promise object.\n *\n * --\n *\n * If you want to do the same calls in your UI Router state definitions, you need to use\n * \"apiResolver\" service we have prepared for you:\n *\n * $stateProvider.state('app.blog', {\n * url : '/blog',\n * views : {\n * 'content@app': {\n * templateUrl: 'app/main/apps/blog/blog.html',\n * controller : 'BlogController as vm'\n * }\n * },\n * resolve : {\n * Blog: function (apiResolver)\n * {\n * return apiResolver.resolve('blog.list@get');\n * }\n * }\n * });\n *\n * You can even use parameters with apiResolver service:\n *\n * $stateProvider.state('app.blog.show', {\n * url : '/blog/:id',\n * views : {\n * 'content@app': {\n * templateUrl: 'app/main/apps/blog/blog.html',\n * controller : 'BlogController as vm'\n * }\n * },\n * resolve : {\n * Blog: function (apiResolver, $stateParams)\n * {\n * return apiResolver.resolve('blog.getById@get', {'id': $stateParams.id);\n * }\n * }\n * });\n *\n * And the \"Blog\" object will be available in your BlogController:\n *\n * function BlogController(Blog)\n * {\n * var vm = this;\n *\n * // Data\n * vm.blog = Blog;\n *\n * ...\n * }\n */\n\n var api = {};\n\n // Base Url\n api.baseUrl = 'app/data/';\n\n // api.sample = $resource(api.baseUrl + 'sample/sample.json');\n\n return api;\n }\n\n})();\n(function () {\n 'use strict';\n\n angular.module('fuse')\n .service('ExternalAppsService', ExternalAppsService);\n\n /** @ngInject **/\n function ExternalAppsService($http, $ocLazyLoad, APP_CFG, $q) {\n var vm = this;\n\n vm.loadExternalApps = loadExternalApps;\n\n function loadExternalApps() {\n var promises = [];\n\n var eaList = APP_CFG['EXTERNAL_APPS'];\n if (eaList) {\n angular.forEach(eaList, function (value, key) {\n if (value.active === true) {\n var p = $q.defer();\n\n $http.get('external-apps/' + key + '/lazy-load.json')\n .success(function (data) {\n var eapp_files = data.data;\n\n // Carrega o módulo e os demais arquivos\n $ocLazyLoad.load(eapp_files, {\n cache: false,\n reconfig: true\n }).then(function () {\n p.resolve();\n }, function () {\n //p.reject();\n });\n });\n\n promises.push(p.promise);\n }\n });\n }\n\n return $q.all(promises);\n }\n }\n}());\nangular.module('angularSlideables', [])\n.directive('slideable', function () {\n return {\n restrict:'C',\n compile: function (element, attr) {\n // wrap tag\n var contents = element.html();\n element.html('
' + contents + '
');\n\n return function postLink(scope, element, attrs) {\n // default properties\n attrs.duration = (!attrs.duration) ? '1s' : attrs.duration;\n attrs.easing = (!attrs.easing) ? 'ease-in-out' : attrs.easing;\n element.css({\n 'overflow': 'hidden',\n 'height': '0px',\n 'transitionProperty': 'height',\n 'transitionDuration': attrs.duration,\n 'transitionTimingFunction': attrs.easing\n });\n };\n }\n };\n})\n.directive('slideToggle', function() {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n var target, content;\n \n attrs.expanded = false;\n \n element.bind('click', function() {\n if (!target) target = document.querySelector(attrs.slideToggle);\n if (!content) content = target.querySelector('.slideable_content');\n \n if(!attrs.expanded) {\n content.style.border = '1px solid rgba(0,0,0,0)';\n var y = content.clientHeight;\n content.style.border = 0;\n target.style.height = y + 'px';\n } else {\n target.style.height = '0px';\n }\n attrs.expanded = !attrs.expanded;\n });\n }\n }\n})\n.directive('slideUp', function() {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n var target, content;\n \n attrs.expanded = false;\n \n element.bind('click', function() {\n if (!target) target = document.querySelector(attrs.slideUp);\n if (!content) content = target.querySelector('.slideable_content');\n \n content.style.border = '1px solid rgba(0,0,0,0)';\n var y = content.clientHeight;\n content.style.border = 0;\n target.style.height = y + 'px';\n });\n }\n }\n})\n.directive('slideDown', function() {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n var target, content;\n \n attrs.expanded = true;\n \n element.bind('click', function() {\n if (!target) target = document.querySelector(attrs.slideDown);\n if (!content) content = target.querySelector('.slideable_content');\n \n target.style.height = '0px';\n });\n }\n }\n});\nangular.module(\"fuse\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/quick-panel/quick-panel.html\",\"\");\n$templateCache.put(\"app/core/layouts/content-only.html\",\"
\\n
\");\n$templateCache.put(\"app/core/layouts/content-with-toolbar.html\",\"
\\n
\");\n$templateCache.put(\"app/core/layouts/horizontal-navigation.html\",\"
\\n
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation.html\",\"
\\n
\");\n$templateCache.put(\"app/core/theme-options/theme-options.html\",\"
Layout Style:
Vertical Navigation\\nHorizontal NavigationContent OnlyContent with Toolbar\\n
\\nLayout Mode:
Boxed\\nWide
Color Palette:
\\n\\n{{themeName}}
\");\n$templateCache.put(\"app/main/configuration/configuration.html\",\"
Configurações
\\n{{user}}\\n

\\n{{s.title}}

\\n

Salvar\\n
\\n
Alterar
\\n
\");\n$templateCache.put(\"app/main/login/login.html\",\"


\\n\\n
Login
\\n
\");\n$templateCache.put(\"app/main/home/home.html\",\"
\");\n$templateCache.put(\"app/toolbar/context-bar/context-bar.html\",\"\");\n$templateCache.put(\"app/toolbar/search-bar/search-bar.html\",\"
{{item.title}}\\nNão foram encontradas opções para \\\"{{ctrl.searchText}}\\\".
\");\n$templateCache.put(\"app/core/directives/ms-material-color-picker/ms-material-color-picker.html\",\"\\n{{selectedColor.palette}} {{selectedColor.hue}} Select Color\\n
\\n{{selectedColor.palette}} {{selectedColor.hue}} Select Color\\n
{{palette}}
{{hue}}
\\n
\");\n$templateCache.put(\"app/core/directives/ms-search-bar/ms-search-bar.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/horizontal-navigation/navigation.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation/navigation.html\",\"
\\n
\");\n$templateCache.put(\"app/ppa-ui-core/pentaho-connector/pentaho-viewer/pentaho-viewer.html\",\"
\");\n$templateCache.put(\"app/toolbar/layouts/content-with-toolbar/toolbar.html\",\"
V\\n PPA
\\n
\\n
{{vm.session.username}}
\\nSair\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/toolbar.html\",\"
\\n
V\\n PPA
\\n
\\n
{{vm.session.username}}
\\nSobre\\n\\nConfiguraçõesArquivos e Usuários\\nSair\\n
\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation/toolbar.html\",\"
\\n
\\n
\\n
\\n{{vm.session.username}}
\\n
Sobre\\n\\nConfiguraçõesArquivos e Usuários\\nSair\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/recent-analytics/recent-analytics-tab.html\",\"
Limpar

{{item.title}}

\\n{{item.datetime | date:\\\"dd/MM/yyyy - h:mm\\\"}}h

\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/horizontal.html\",\"
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/vertical.html\",\"
\\n\");\n$templateCache.put(\"app/main/container/views/about/about.html\",\"

Veltio PPA-UI

\\nVersão: {{vm.version}}
\");\n$templateCache.put(\"app/main/container/views/inbox/inbox.html\",\"

Inbox

Menu lateral

Button\\n
\\n

Other stuffs

Apply
\\n
\");\n$templateCache.put(\"app/main/container/views/profile/profile.html\",\"

Perfil

Menu lateral

Preferências\\n
\\n

Minhas preferências

Aplicar
\");\n$templateCache.put(\"app/main/home/apps/activiti/tasks.html\",\"
\\n
\\n
\\nA partir de amanhã\\nDepois de 3 diasDepois de 7 diasDepois de 2 semanas\\n
\\nData de criaçãoData programada\\nManualTítulo\\n\\n
\\n
\");\n$templateCache.put(\"app/ppa-ui-core/pentaho-connector/pentaho-viewer/placeholder/placeholder.tmpl.html\",\"{{tab.title.toUpperCase()}}\\nx\\n\");\n$templateCache.put(\"app/ppa-ui-core/pentaho-connector/pentaho-viewer/tab/tab.tmpl.html\",\"\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-1/template-1.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-10/template-10.html\",\"
\\n
{{card.title}}
{{card.subtitle}}
\\\"{{card.media.image.alt}}\\\"
{{card.text}}
\");\n$templateCache.put(\"app/main/home/apps/admin/admin-tools.html\",\"
Ferramentas Administrativas
{{vm.selectedTool.name}}
\\n{{tool.name}}\\n
\");\n$templateCache.put(\"app/main/home/apps/kpi/kpi.html\",\"
Indicadores de desempenho
{{vm.selectedDepartment.name}}
\\n\\n{{department.name}}\\n
{{vm.selectedActiveFilter.name}}
\\n\\n\\n{{status.name}}\\n
\\n{{ k.name | textCutter:true:35}} {{ k.code }}
\\n{{ k.description | textCutter:true:100}}
\\nEditar indicador\\n\\nAdicionar resultadoInativar indicador Reativar indicador
\\n
\\n
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-3/template-3.html\",\"
{{card.title}}
{{card.subtitle}}
{{card.cta}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-4/template-4.html\",\"
{{card.title}}\\n
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-5/template-5.html\",\"
{{card.title}}
\\n{{card.event}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-2/template-2.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}\\n
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-6/template-6.html\",\"
\\n{{card.subtitle}}
{{card.title}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-7/template-7.html\",\"
{{card.title}}\\n
{{card.subtitle}}
{{card.text}}
\\n
\\\"{{card.media.image.alt}}\\\"
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-8/template-8.html\",\"
{{card.title}}
{{card.subtitle}}\\n
{{card.button1}}\\n{{card.button2}}
{{card.text}}
\");\n$templateCache.put(\"app/core/directives/ms-card/templates/template-9/template-9.html\",\"
{{card.title}}
\\n{{card.subtitle}}
{{card.text}}
\\\"{{card.media.image.alt}}\\\"
\\n
\");\n$templateCache.put(\"app/core/directives/ms-stepper/templates/horizontal/horizontal.html\",\"
{{step.stepNumber}} \\n
\\n{{step.stepTitle}}
Optional
\\n
Back
\\n
Next\\nSubmit
\");\n$templateCache.put(\"app/main/home/apps/admin/ation-plan-without-department/ac-without-dept.html\",\"

CASOS ENCONTRADOS

\\nProcesso: {{fap.PId}}
Não conformidade:\\n {{fap.NCId}}
\\n

NÃO CONFORMIDADE

ID: \\nTítulo:
Setor de ocorrência: ID:
Setor reclamante: ID: \\n
Corrigir

Novo PId: {{vm.newProcess}}

\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/db-association/db-association.html\",\"
Tabela\\n

{{se[1]}}

\\n
Origem\\n

{{s[1]}}

\\n

Tabela: {{vm.selectedMasterEntity[1]}}

\\n

\\n{{mi[0] + \\' - \\' + mi[1]}}

Origem: {{vm.selectedSource[1]}}

{{si[0] + \\' - \\' + si[1]}}

\\n
Exibir somente marcados
\\n

Itens Associados

\\n
Destino\\nOrigem
Cód.NomeCód.Nome
{{ai[2]}}\\n{{ai.targetName}}{{ai[3]}}{{ai.sourceName}}\\n
\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/department/department.change-responsible.modal.html\",\"

\\nMicrossistema - Trocar Responsável

\\n
{{user.firstName}}\\n
\\n\\n
SalvarFechar\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/department/department.html\",\"
Microssistemas
\\n
Novo microssistema
\\n
\\n\\n
SiglaNomeResponsávelE-mailEditarExcluir
{{d.sigla}}\\n{{d.name}}{{d.responsible}}{{d.email}}\\n\\n
\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/department/department.modal.html\",\"

Departamento

\\n
\\n
\\nSigla é obrigatória e precisa ter entre 2 e 6 caracteres.
\\nNome é obrigatório e precisa ter entre 3 e 50 caracteres.
Informe um e-mail válido.
\\n
SalvarFechar\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/usersdepartments/showdepartments.modal.html\",\"

\\nDepartamentos associados ao usuário

\\n

\\n{{userDepartments.user}}

\\n\\n -1\\\">
Departamento
{{d.sigla}} - {{d.name}}
\\n
Fechar
\");\n$templateCache.put(\"app/main/home/apps/admin/usersdepartments/usersdepartments.html\",\"
Usuários e Microssistemas
\\n
\\n\\nNova associação\\n
\\n
Usuário\\nMicrossistemasEditarExcluir
{{d.user}}\\n{{d.departments.length}} microssistema{{d.departments.length === 1 ? \\'\\' : \\'s\\'}}\\n
\");\n$templateCache.put(\"app/main/home/apps/admin/usersdepartments/usersdepartments.modal.html\",\"

Usuário e Microssistemas

\\n
\\n
{{user.firstName}}\\n
\\n{{department.sigla}} - {{department.name}}
\\nSalvar\\nFechar
\");\n$templateCache.put(\"app/main/home/apps/kpi/results/indicator-results.html\",\"\");\n$templateCache.put(\"app/main/home/apps/activiti/sidenavs/main/main-sidenav.html\",\"
\\nTarefas
{{title}}
NOVA TAREFA
\\nTodas as tarefas ativas\\n
Filtros
DelegadasProgramadas\\nCriadas hojeConcluídas\\n
\");\n$templateCache.put(\"app/main/home/apps/activiti/dialogs/process/process-dialog.html\",\"
\\nIniciar processo ({{vm.process.name + \\' | Versão \\' + vm.process.version}})
\\n
Título {{vm.title}}
Descrição \\n{{vm.process.description || \\'Este processo não possui uma descrição definida.\\'}}
\\n
0\\\">
\\nPreencha o formulário abaixo e inicie o processo
\\n{{enum.name}}{{enum.firstName}}
INICIAR PROCESSO
\\nCANCELAR
\");\n$templateCache.put(\"app/main/home/apps/activiti/dialogs/process/process-dialog2.html\",\"
\\n
{{vm.title}}
\\n\\n
{{enum.name}}{{enum.firstName}}
INICIAR PROCESSO
\");\n$templateCache.put(\"app/main/home/apps/activiti/dialogs/task/task-dialog.html\",\"
{{vm.task.name}} Nova tarefa\\n
Título da tarefa é necessário\\n

\\nPrioridade

Baixa\\nMédiaAlta
{{user.firstName}}\\n
Data limite \\n{{vm.task.dueDate | date: \\'dd/MM/yyyy\\'}} \\nSem data limite
Relevância {{vm.task.priority | priority}}
Data de criação {{vm.task.createTime | date: \\'dd/MM/yyyy\\'}}
\\n
Descrição {{vm.task.description || \\'Esta tarefa não possui uma descrição definida.\\'}}
Parte do processo \\n{{vm.task.processInstanceId}}
0\\\">
\\nPreencha o formulário abaixo e complete a tarefa
{{enum.name}}{{enum.firstName}}
CRIAR TAREFA
\\n{{vm.task.delegationState === \\'pending\\' ? \\'RESOLVER TAREFA\\' : \\'FINALIZAR TAREFA\\'}}
DELEGAR TAREFA{{user.firstName}}
\\n
CANCELAR
\\n
\");\n$templateCache.put(\"app/main/home/apps/activiti/views/list/list-view.html\",\"
ID da Tarefa: {{t.id}}\\n
{{t.name}}\\n
Responsável\\n
Data
\\n
{{t.assignee}}
{{t.dueDate | date:\\'dd/MM/yyyy\\'}}
\\n\\nEditar tarefa Delegar tarefa
\\n
\");\n$templateCache.put(\"app/main/home/apps/kpi/dialogs/indicators/indicator-dialog.html\",\"\\n
{{vm.indicator.name}} \\nNovo indicador de desempenho
\\n
\\n\\n
\\n
\\n{{c}}\\n{{c}}{{i.measureUnitName}}\\n{{i}}\\n\\n{{i.orientationDesc}}
\\nIndicador Refere-se à Satisfação do Cliente
\\n
InícioMetaFonte
{{k | date:\\'dd/MM/yyyy\\'}}{{v.target}}{{v.source}}\\n
Adicionar
\\n{{ds}}\\n\\n{{qt}}
\\n
SALVAR\\n
CANCELAR
\\n
\");\n$templateCache.put(\"app/main/home/apps/kpi/dialogs/manual-results/manual-results-dialog.html\",\"\\n
{{vm.indicator.name}} - Adicionar Resultado
\\n
{{c}}\\n\\n{{i.measureUnitName}}{{i}}\\n{{i.orientationDesc}}SimNão
EncerramentoResultado
\\n{{k | date:\\'dd/MM/yyyy\\'}}{{v.value}}
\\n\\n
Adicionar
\\n
{{ vm.btnSaveLbl }}
\");\n$templateCache.put(\"app/main/home/apps/kpi/directives/chart/kpi-chart.html\",\"\");\n$templateCache.put(\"app/main/home/apps/kpi/directives/action-plan/action-plan.html\",\"
\\nUm plano de ação já foi gerado para essa análise. ID do Plano de Ação: {{taskId}}
\\n
TarefaResponsávelData
{{subtask.name}}{{subtask.assignee}}{{subtask.dueDate | date:\\'dd/MM/yyyy\\'}}\\n
\\nVocê pode adicionar novas tarefas ao plano de ação:
\\n
\\n{{user.firstName}}\\n
\");\n$templateCache.put(\"app/main/home/apps/kpi/directives/result-analysis/result-analysis.html\",\"

{{ctrl.indicator.code}} - {{ctrl.indicator.name}}

\\nDescrição:
{{ctrl.indicator.description}}
\\nFórmula de Medida:
{{ctrl.indicator.descriptionOfMeasureFormula}}
\\n
Unidade de Medida:
{{ctrl.indicator.kpiMeasureUnits}}
\\nEvolução do indicador:{{e.title}}\\n
MêsResultadoReferencial
\\n{{result.month}}{{result.res}}\\n{{result.ref}}
\");\n$templateCache.put(\"app/main/home/apps/kpi/results/attachment/attach-result.html\",\"

Análise Crítica do Resultado

{{r.month}}
32% Resultado
100% Meta
Posso melhorar?
{{p.title}}\\n
Elaborar um RACP?
{{r.title}}\\n
\\n{{ap.title}}\\n\\n
{{user.firstName}}
\\n
\\n
\\nSALVAR\\n
\");}]);"],"sourceRoot":"/source/"}