From a22fda66b2bc7b363cf74c821647a827272f07c4 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Fri, 13 Nov 2015 11:41:37 +0000 Subject: [PATCH] Task #8574: hooked filtering of list to gantt --- .../ResourceAssignmentEditor/lib/fakedata.py | 8 +- .../static/app/controllers/datacontroller.js | 6 ++ .../static/app/controllers/ganttcontroller.js | 83 ++++++++++++------- .../static/app/controllers/gridcontroller.js | 28 ++++++- .../lib/webservice.py | 2 +- 5 files changed, 91 insertions(+), 36 deletions(-) diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py index b7aa095810d..bf257ceeac2 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py @@ -23,13 +23,13 @@ from datetime import datetime from datetime import timedelta numProjects = 5 -numObsPerProject = 2 -numPipelinesPerObs = 3 +numObsPerProject = 3 +numPipelinesPerObs = 5 numCoreStations = 20 -numRemoteStations = 15 +numRemoteStations = 25 numCobaltNodes = 8 numComputeNodes = 50 -numIngestNodes = 4 +numIngestNodes = 2 _taskIdCntr = 0 diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js index 63247e47743..6201fef3342 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js @@ -19,6 +19,9 @@ angular.module('raeApp').factory("dataService", function(){ self.resourcesWithClaims = []; + self.filteredTasks = []; + self.filteredTaskDict = {}; + return self; }); @@ -66,6 +69,9 @@ dataControllerMod.controller('DataController', $http.get('/rest/tasks').success(function(result) { self.dataService.tasks = result.tasks; self.dataService.taskDict = toIdBasedDict(self.dataService.tasks); + + self.dataService.filteredTasks = self.dataService.tasks; + self.dataService.filteredTaskDict = self.dataService.taskDict; }); }; diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js index 3e8f84409b1..148cae10467 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttcontroller.js @@ -18,6 +18,9 @@ var ganttControllerMod = angular.module('GanttControllerMod', [ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', function($scope, dataService) { + var self = this; + self.doInitialCollapse = true; + $scope.dataService = dataService; $scope.ganttData = [] @@ -61,7 +64,7 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var numResources = resources.length; var resourceGroupsDict = $scope.dataService.resourceGroupsDict; - var taskDict = $scope.dataService.taskDict; + var taskDict = $scope.dataService.filteredTaskDict; var resourceGroupClaims = $scope.dataService.resourceGroupClaims; var numResourceGroupClaims = resourceGroupClaims.length; @@ -122,16 +125,19 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var groupClaim = resourceGroupClaims[i]; var task = taskDict[groupClaim.taskId]; - var groupClaimTask = { - name: task ? task.name : '<unknown>', - 'from': groupClaim.startTime, - 'to': groupClaim.endTime - }; + if(task) + { + var groupClaimTask = { + name: task ? task.name : '<unknown>', + 'from': groupClaim.startTime, + 'to': groupClaim.endTime + }; - var groupRowId = 'group_' + groupClaim.resourceGroupId; - var ganntGroupRow = ganntRowsDict[groupRowId]; - if(ganntGroupRow) - ganntGroupRow.tasks.push(groupClaimTask); + var groupRowId = 'group_' + groupClaim.resourceGroupId; + var ganntGroupRow = ganntRowsDict[groupRowId]; + if(ganntGroupRow) + ganntGroupRow.tasks.push(groupClaimTask); + } } //and assign each resourceclaim to its resource in each group @@ -139,29 +145,42 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct var claim = resourceClaims[i]; var task = taskDict[claim.taskId]; - var groupIds = resourceIdToGroupIdsDict[claim.resourceId]; - var numGroups = groupIds.length; - - var claimTask = { - name: task ? task.name : '<unknown>', - 'from': claim.startTime, - 'to': claim.endTime - }; - - if(numGroups > 0) { - for(var j = 0; j < numGroups; j++) { - var resourceRowId = 'group_' + groupIds[j] + '_resource_' + claim.resourceId; + if(task) + { + var groupIds = resourceIdToGroupIdsDict[claim.resourceId]; + var numGroups = groupIds.length; + + if(numGroups > 0) { + for(var j = 0; j < numGroups; j++) { + var resourceRowId = 'group_' + groupIds[j] + '_resource_' + claim.resourceId; + var ganntRow = ganntRowsDict[resourceRowId]; + if(ganntRow) + { + var claimTask = { + name: task ? task.name : '<unknown>', + 'from': claim.startTime, + 'to': claim.endTime + }; + + ganntRow.tasks.push(claimTask); + } + } + } + else { + var resourceRowId = 'resource_' + claim.resourceId; var ganntRow = ganntRowsDict[resourceRowId]; if(ganntRow) + { + var claimTask = { + name: task ? task.name : '<unknown>', + 'from': claim.startTime, + 'to': claim.endTime + }; + ganntRow.tasks.push(claimTask); + } } } - else { - var resourceRowId = 'resource_' + claim.resourceId; - var ganntRow = ganntRowsDict[resourceRowId]; - if(ganntRow) - ganntRow.tasks.push(claimTask); - } } var ganntRows = []; @@ -170,7 +189,12 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct ganntRows.push(ganntRowsDict[groupId]); $scope.ganttData = ganntRows; - setTimeout($scope.api.tree.collapseAll(), 10) + + if(self.doInitialCollapse) + { + doInitialCollapse = false; + setTimeout($scope.api.tree.collapseAll, 500) + } }; $scope.$watch('dataService.tasks', updateGanttData); @@ -178,5 +202,6 @@ ganttControllerMod.controller('GanttController', ['$scope', 'dataService', funct $scope.$watch('dataService.resourceclaims', updateGanttData); $scope.$watch('dataService.resourceGroups', updateGanttData); $scope.$watch('dataService.resourceGroupClaims', updateGanttData); + $scope.$watch('dataService.filteredTaskDict', updateGanttData); } ]); diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js index 529d0f44951..8bba12fc8e3 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js @@ -33,7 +33,32 @@ gridControllerMod.controller('GridController', ['$scope', 'dataService', 'uiGrid enableSorting: true, enableFiltering: true, columnDefs: $scope.columns, - data: [] + data: [], + onRegisterApi: function(gridApi){ + $scope.gridApi = gridApi; + + $scope.gridApi.core.on.rowsRendered($scope, filterTasks); + } + }; + + function filterTasks() { + var taskDict = $scope.dataService.taskDict; + var filteredTasks = []; + var filteredTaskDict = {}; + var rows = $scope.gridApi.grid.rows; + var numRows = rows.length; + for(var i = 0; i < numRows; i++) { + var row = rows[i]; + if(row.visible) + { + var task = taskDict[row.entity.id]; + filteredTasks.push(task); + filteredTaskDict[task.id] = task; + } + } + + $scope.dataService.filteredTasks = filteredTasks; + $scope.dataService.filteredTaskDict = filteredTaskDict; }; function fillColumFilterSelectOptions(options, columnDef) { @@ -48,7 +73,6 @@ gridControllerMod.controller('GridController', ['$scope', 'dataService', 'uiGrid columnDef.filter.selectOptions = columnSelectOptions; }; - $scope.$watch('dataService.taskstatustypes', function() { fillColumFilterSelectOptions($scope.dataService.taskstatustypes, $scope.columns[3]); }); diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py index 7f4be997c82..746a135d077 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py @@ -119,7 +119,7 @@ def taskstatustypes(): def main(argv=None, debug=False): '''Start the webserver''' - app.run(debug=debug, threaded=True, port=5001) + app.run(debug=debug, threaded=True, host='0.0.0.0', port=5001) if __name__ == '__main__': main(sys.argv[1:], True) -- GitLab