diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js index a3b24463599e67ba08a275c50c4946564c75cc0f..72026b03b07907ee3aab8f54ce319ba803cc9759 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js @@ -90,6 +90,13 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, self.selected_task_ids.push(task_id); } + self.setSelectedTaskIds = function(task_ids) { + self.selected_task_ids.splice(0, self.selected_task_ids.length); + for(var task_id of task_ids) { + self.selected_task_ids.push(task_id); + } + } + self.selectTasksInSameGroup = function(task) { self.selected_task_ids.splice(0, self.selected_task_ids.length); var groupTasks = self.filteredTasks.filter(function(t) { return t.mom_object_group_id == task.mom_object_group_id; }); @@ -394,6 +401,41 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http, return _getTaskBy('mom_id', mom_id); }; + self.getTasksByMoMGroupId = function(mom_object_group_id) { + var defer = $q.defer(); + var url = '/rest/tasks/mom/group/' + mom_object_group_id; + + $http.get(url).success(function(result) { + //convert datetime strings to Date objects + for(var i in result.tasks) { + var task = result.tasks[i]; + task.starttime = self.convertDatestringToLocalUTCDate(task.starttime); + task.endtime = self.convertDatestringToLocalUTCDate(task.endtime); + } + + var newTaskDict = self.toIdBasedDict(result.tasks); + var newTaskIds = Object.keys(newTaskDict); + + for(var i = newTaskIds.length-1; i >= 0; i--) { + var task_id = newTaskIds[i]; + if(!self.taskDict.hasOwnProperty(task_id)) { + var task = newTaskDict[task_id]; + self.tasks.push(task); + self.taskDict[task_id] = task; + } + } + + self.taskChangeCntr++; + self.computeMinMaxTaskTimes(); + + defer.resolve(result.tasks); + }).error(function(result) { + defer.resolve(undefined); + }); + + return defer.promise; + }; + self.copyTask = function(task) { $http.put('/rest/tasks/' + task.id + '/copy').error(function(result) { console.log("Error. Could not copy task. " + result); @@ -853,8 +895,10 @@ dataControllerMod.controller('DataController', $scope.dataService.getTaskByOTDBId(otdb_id).then(function(task) { if(task) { $scope.dataService.setSelectedTaskId(task.id); - $scope.jumpToSelectedTask(); - defer.resolve(); + $scope.jumpToSelectedTasks(); + defer.resolve(task); + } else { + defer.resolve(undefined); } }); return defer.promise; @@ -865,8 +909,26 @@ dataControllerMod.controller('DataController', $scope.dataService.getTaskByMoMId(mom_id).then(function(task) { if(task) { $scope.dataService.setSelectedTaskId(task.id); - $scope.jumpToSelectedTask(); - defer.resolve(); + $scope.jumpToSelectedTasks(); + defer.resolve(task); + } else { + defer.resolve(undefined); + } + }); + return defer.promise; + }; + + $scope.loadTasksByMoMGroupIdSelectAndJumpIntoView = function(mom_group_id) { + var defer = $q.defer(); + $scope.dataService.getTasksByMoMGroupId(mom_group_id).then(function(tasks) { + if(tasks) { + var task_ids = tasks.map(function(t) { return t.id; }); + + $scope.dataService.setSelectedTaskIds(task_ids); + $scope.jumpToSelectedTasks(); + defer.resolve(tasks); + } else { + defer.resolve(undefined); } }); return defer.promise; @@ -879,7 +941,7 @@ dataControllerMod.controller('DataController', } }; - $scope.jumpToSelectedTask = function() { + $scope.jumpToSelectedTasks = function() { if(dataService.selected_task_ids == undefined) return; diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttprojectcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttprojectcontroller.js index 8a47ceca07c617fcc733ef6611afd26088996923..c14bb17ea2770b3f9846776cf7d6fb11cbb290e1 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttprojectcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/ganttprojectcontroller.js @@ -70,7 +70,7 @@ ganttProjectControllerMod.controller('GanttProjectController', ['$scope', 'dataS directiveElement.bind('dblclick', function(event) { if(directiveScope.task.model.raTask) { $scope.dataService.setSelectedTaskId(directiveScope.task.model.raTask.id); - $scope.jumpToSelectedTask(); + $scope.jumpToSelectedTasks(); } }); } diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js index ecd9a4d7585dd422904cd9fe52f77040e570d75c..4ad4e37b616a9acbfb188710148abe09f0308815 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/gridcontroller.js @@ -176,8 +176,17 @@ $scope.columns = [ if(mom_col && mom_col.filters.length && mom_col.filters[0].hasOwnProperty('term')) { var mom_id = mom_col.filters[0].term; - $scope.$parent.$parent.loadTaskByMoMIdSelectAndJumpIntoView(mom_id).then(function() { - mom_col.filters[0].term = null; + $scope.$parent.$parent.loadTaskByMoMIdSelectAndJumpIntoView(mom_id).then(function(task) { + if(task) { + mom_col.filters[0].term = null; + } else { + //getting the task by mom_id did not find a task + //maybe the entered id was a mom group_id? + //let's try to loadTasksByMoMGroupIdSelectAndJumpIntoView + $scope.$parent.$parent.loadTasksByMoMGroupIdSelectAndJumpIntoView(mom_id).then(function(tasks) { + mom_col.filters[0].term = null; + }); + } }); } } @@ -416,7 +425,8 @@ gridControllerMod.directive('contextMenu', ['$document', '$window', function($do ulElement.append(liElement); liElement.on('click', function() { closeContextMenu(); - dataService.selectTasksInSameGroup(task); + var dataCtrlScope = $scope.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent; + dataCtrlScope.loadTasksByMoMGroupIdSelectAndJumpIntoView(task.mom_object_group_id); }); if(task.type == 'observation' && dataService.config.inspection_plots_base_url) { diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js index a984d94472082661301132df0530c0a56a762e70..7f4c7306f3242c4c9e629389e650930763d2d59b 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/gantt-plugins/angular-gantt-contextmenu-plugin.js @@ -27,6 +27,7 @@ dElement.bind('contextmenu', function(event) { //TODO: remove link to dataService in this generic plugin var dataService = dScope.scope.dataService; + var dataCtrlScope = dScope.scope.$parent.$parent; var cleanupCtrl = dScope.scope.$parent.cleanupCtrl; var docElement = angular.element($document); @@ -74,7 +75,7 @@ ulElement.append(liElement); liElement.on('click', function() { closeContextMenu(); - dataService.selectTasksInSameGroup(task); + dataCtrlScope.loadTasksByMoMGroupIdSelectAndJumpIntoView(task.mom_object_group_id); }); if(task.type == 'observation' && dataService.config.inspection_plots_base_url) { diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py index d0065fe8eb66ced81217ae8c4f9c274d8d311cf1..56b5ccec688b42db93e3e8a53005b5bbd59e2c8b 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py @@ -266,6 +266,18 @@ def getTaskByMoMId(mom_id): return jsonify({'task': None}) +@app.route('/rest/tasks/mom/group/<int:mom_group_id>', methods=['GET']) +def getTasksByMoMGroupId(mom_group_id): + try: + mom_ids = momqueryrpc.getTaskIdsInGroup(mom_group_id)[str(mom_group_id)] + tasks = rarpc.getTasks(mom_ids=mom_ids) + + updateTaskMomDetails(tasks, momqueryrpc) + + return jsonify({'tasks': tasks}) + except Exception as e: + abort(404) + @app.route('/rest/tasks/<int:task_id>', methods=['PUT']) def putTask(task_id): if isProductionEnvironment():