From d61dafbd1f4aa90dc699952b94e43e9cae5be1e5 Mon Sep 17 00:00:00 2001 From: juanf <juanf@bsse-bs-dock-dhcp-490.ethz.ch> Date: Mon, 17 Sep 2018 14:59:39 +0200 Subject: [PATCH] SSDM-6377 : Split other lab notebooks by active/inactive users --- .../1/as/services/as-eln-lims-api/script.py | 25 ++++++++- .../js/views/SideMenu/SideMenuWidgetView.js | 55 ++++++++++++++----- 2 files changed, 66 insertions(+), 14 deletions(-) diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py index 4bd4dd2582c..9bb09b32942 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py @@ -7,6 +7,8 @@ def process(context, parameters): if method == "getNextSequenceForType": result = getNextSequenceForType(context, parameters); + if method == "doSpacesBelongToDisabledUsers": + result = doSpacesBelongToDisabledUsers(context, parameters); return result; @@ -27,4 +29,25 @@ def getNextSequenceForType(context, parameters): querySampleCount.setParameter("codePattern", "^" + sampleTypePrefix + "[0-9]+$"); sampleCount = querySampleCount.uniqueResult(); - return (sampleCount + 1) \ No newline at end of file + return (sampleCount + 1) + +def doSpacesBelongToDisabledUsers(context, parameters): + daoFactory = CommonServiceProvider.getApplicationContext().getBean(ComponentNames.DAO_FACTORY); + currentSession = daoFactory.getSessionFactory().getCurrentSession(); + + # TO-DO Replace generating SQL manually by variable substitution + + spaceCodes = parameters.get("spaceCodes"); + spaceCodesList = "(" + isFirst = True + for spaceCode in spaceCodes: + if not isFirst: + spaceCodesList = spaceCodesList + "," + else: + isFirst = False + spaceCodesList = spaceCodesList + "'" + spaceCode + "'" + spaceCodesList = spaceCodesList + ")" + + disabled_spaces = currentSession.createSQLQuery("SELECT sp.code FROM spaces sp WHERE sp.id IN(SELECT p.space_id FROM persons p WHERE p.space_id IN (SELECT s.id FROM spaces s WHERE s.code IN " + spaceCodesList + ") AND p.is_active = FALSE)"); + disabled_spaces_result = disabled_spaces.list() + return disabled_spaces_result \ No newline at end of file diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js index 5e46a44fe55..64d601b4896 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js @@ -254,8 +254,7 @@ function SideMenuWidgetView(sideMenuWidgetController, sideMenuWidgetModel) { var type = data.node.data.entityType; var permId = data.node.key; - switch(type) { - case "LAB_NOTEBOOK": + var showLabNotebooks = function(dfd, showEnabled, showDisabled) { var spaceRules = { entityKind : "SPACE", logicalOperator : "AND", rules : { } }; mainController.serverFacade.getPersons([mainController.serverFacade.getUserId()], function(persons) { mainController.serverFacade.searchForSpacesAdvanced(spaceRules, null, function(searchResult) { @@ -268,24 +267,45 @@ function SideMenuWidgetView(sideMenuWidgetController, sideMenuWidgetModel) { } var results = []; var spaces = searchResult.objects; + var nonInventoryNonHiddenSpaces = []; for (var i = 0; i < spaces.length; i++) { var space = spaces[i]; var isInventorySpace = profile.isInventorySpace(space.code); var isHiddenSpace = profile.isHiddenSpace(space.code); - if(!isInventorySpace && (space.code === HOME_SPACE) && !isHiddenSpace) { - var normalizedSpaceTitle = Util.getDisplayNameFromCode(space.code); - var spaceLink = _this.getLinkForNode("My Space (" + normalizedSpaceTitle + ")", space.getCode(), "showSpacePage", space.getCode()); - var spaceNode = { title : spaceLink, entityType: "SPACE", key : space.getCode(), folder : true, lazy : true, view : "showSpacePage", viewData: space.getCode() }; - results.push(spaceNode); + if(!isInventorySpace && (space.code !== HOME_SPACE) && !isHiddenSpace) { + nonInventoryNonHiddenSpaces.push(space.code); } } - results.push({ title : "Others", entityType: "LAB_NOTEBOOK_OTHERS", key : "LAB_NOTEBOOK_OTHERS", folder : true, lazy : true, view : "showLabNotebookPage" }); - dfd.resolve(results); + mainController.serverFacade.customELNASAPI({ + "method" : "doSpacesBelongToDisabledUsers", + "spaceCodes" : nonInventoryNonHiddenSpaces + }, function(disabledSpaces) { + for(var i = 0; i < nonInventoryNonHiddenSpaces.length; i++) { + var spaceCode = nonInventoryNonHiddenSpaces[i]; + var foundDisabled = $.inArray(spaceCode, disabledSpaces) !== -1; + + if(!showDisabled && foundDisabled) { + continue; //Skip disabled spaces + } + + if(!showEnabled && !foundDisabled) { + continue; //Skip enabled spaces + } + + var normalizedSpaceTitle = Util.getDisplayNameFromCode(spaceCode); + var spaceLink = _this.getLinkForNode(normalizedSpaceTitle, spaceCode, "showSpacePage", spaceCode); + var spaceNode = { title : spaceLink, entityType: "SPACE", key : space.getCode(), folder : true, lazy : true, view : "showSpacePage", viewData: space.getCode() }; + results.push(spaceNode); + } + dfd.resolve(results); + }); }); }); - break; - case "LAB_NOTEBOOK_OTHERS": + } + + switch(type) { + case "LAB_NOTEBOOK": var spaceRules = { entityKind : "SPACE", logicalOperator : "AND", rules : { } }; mainController.serverFacade.getPersons([mainController.serverFacade.getUserId()], function(persons) { mainController.serverFacade.searchForSpacesAdvanced(spaceRules, null, function(searchResult) { @@ -302,17 +322,26 @@ function SideMenuWidgetView(sideMenuWidgetController, sideMenuWidgetModel) { var space = spaces[i]; var isInventorySpace = profile.isInventorySpace(space.code); var isHiddenSpace = profile.isHiddenSpace(space.code); - if(!isInventorySpace && (space.code !== HOME_SPACE) && !isHiddenSpace) { + if(!isInventorySpace && (space.code === HOME_SPACE) && !isHiddenSpace) { var normalizedSpaceTitle = Util.getDisplayNameFromCode(space.code); - var spaceLink = _this.getLinkForNode(normalizedSpaceTitle, space.getCode(), "showSpacePage", space.getCode()); + var spaceLink = _this.getLinkForNode("My Space (" + normalizedSpaceTitle + ")", space.getCode(), "showSpacePage", space.getCode()); var spaceNode = { title : spaceLink, entityType: "SPACE", key : space.getCode(), folder : true, lazy : true, view : "showSpacePage", viewData: space.getCode() }; results.push(spaceNode); } } + + results.push({ title : "Others", entityType: "LAB_NOTEBOOK_OTHERS", key : "LAB_NOTEBOOK_OTHERS", folder : true, lazy : true, view : "showLabNotebookPage" }); + results.push({ title : "Others (disabled)", entityType: "LAB_NOTEBOOK_OTHERS_DISABLED", key : "LAB_NOTEBOOK_OTHERS_DISABLED", folder : true, lazy : true, view : "showLabNotebookPage" }); dfd.resolve(results); }); }); break; + case "LAB_NOTEBOOK_OTHERS": + showLabNotebooks(dfd, true, false); + break; + case "LAB_NOTEBOOK_OTHERS_DISABLED": + showLabNotebooks(dfd, false, true); + break; case "INVENTORY": var spaceRules = { entityKind : "SPACE", logicalOperator : "AND", rules : { } }; mainController.serverFacade.searchForSpacesAdvanced(spaceRules, null, function(searchResult) { -- GitLab