From 7c63ba8542e8901c7b9e2faf95c94548625b09ee Mon Sep 17 00:00:00 2001
From: Javier Etxarri <javier.echarri@openbravo.com>
Date: Fri, 26 Mar 2021 10:04:49 +0100
Subject: [PATCH] Before trying to iterate throught all the organizations
 checking general ledger configuration, verify that any of them has the
 configuration

---
 .../openbravo/base/secureApp/LoginUtils.java  | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/org/openbravo/base/secureApp/LoginUtils.java b/src/org/openbravo/base/secureApp/LoginUtils.java
index f4faeffe37..094bfbcd24 100644
--- a/src/org/openbravo/base/secureApp/LoginUtils.java
+++ b/src/org/openbravo/base/secureApp/LoginUtils.java
@@ -26,12 +26,14 @@ import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.hibernate.criterion.Restrictions;
 import org.openbravo.authentication.hashing.PasswordHash;
 import org.openbravo.base.HttpBaseUtils;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.exception.OBSecurityException;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.security.OrganizationStructureProvider;
+import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
 import org.openbravo.dal.xml.XMLUtil;
@@ -48,6 +50,7 @@ import org.openbravo.model.ad.access.RoleOrganization;
 import org.openbravo.model.ad.access.User;
 import org.openbravo.model.ad.domain.Preference;
 import org.openbravo.model.ad.system.Client;
+import org.openbravo.model.common.enterprise.Organization;
 import org.openbravo.service.db.DalConnectionProvider;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -298,7 +301,8 @@ public class LoginUtils {
         }
 
         // Get General Ledger of context organizations
-        if (ArrayUtils.isEmpty(attr)) {
+        // Before going for all organizations, check if any org has an accounting schema
+        if (ArrayUtils.isEmpty(attr) && ledgerConfigured()) {
           String[] orgList = Utility.getContext(conn, vars, "#User_Org", "LoginHandler")
               .replace("'", "")
               .split(",");
@@ -336,6 +340,7 @@ public class LoginUtils {
             vars.setSessionValue("$Element_" + attr[i].elementtype, "Y");
           }
         }
+
         attr = null;
 
         // Compute accounting dimensions visibility session variables
@@ -349,6 +354,7 @@ public class LoginUtils {
             vars.setSessionValue(entry.getKey(), entry.getValue());
           }
         }
+
         // Load session variables for computing read only logic for accounting dimension
         // configuration in in Client window
         Map<String, String> readOnlySessionVariableMap = DimensionDisplayUtility
@@ -375,6 +381,7 @@ public class LoginUtils {
             vars.setSessionValue("#" + ds[i].columnname, value);
           }
         }
+
         vars.setSessionValue("#Date", Utility.getContext(conn, vars, "#Date", "LoginHandler"));
         vars.setSessionValue("#ShowTrl", Utility.getPreference(vars, "ShowTrl", ""));
         vars.setSessionValue("#ShowAcct", Utility.getPreference(vars, "ShowAcct", ""));
@@ -417,6 +424,16 @@ public class LoginUtils {
     return true;
   }
 
+  private static boolean ledgerConfigured() {
+
+    OBCriteria<Organization> orgCriteria = OBDal.getInstance().createCriteria(Organization.class);
+    orgCriteria.setFilterOnReadableOrganization(false);
+    orgCriteria.add(Restrictions.isNotNull(Organization.PROPERTY_GENERALLEDGER));
+    orgCriteria.setMaxResults(1);
+
+    return orgCriteria.uniqueResult() != null;
+  }
+
   /**
    * Obtains defaults defined for a user and throws DefaultValidationException in case they are not
    * correct.
-- 
2.27.0

