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