From 6b22eab70bd16eee4fd1f1a9348db7243c9f97d3 Mon Sep 17 00:00:00 2001
From: jetxarri <javier.echarri@openbravo.com>
Date: Fri, 1 Oct 2021 13:49:34 +0200
Subject: [PATCH] Fixes issue NOE-5132: CRM connector config at org level
 should be used for all children orgs by default

---
 ...lBusinessPartnerConfigurationProvider.java | 33 ++++++++++++++++---
 1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/org/openbravo/mobile/core/login/ExternalBusinessPartnerConfigurationProvider.java b/src/org/openbravo/mobile/core/login/ExternalBusinessPartnerConfigurationProvider.java
index 174d4c73..129f8a0e 100644
--- a/src/org/openbravo/mobile/core/login/ExternalBusinessPartnerConfigurationProvider.java
+++ b/src/org/openbravo/mobile/core/login/ExternalBusinessPartnerConfigurationProvider.java
@@ -52,11 +52,10 @@ public class ExternalBusinessPartnerConfigurationProvider {
 
   public JSONObject getJsonObject() throws JSONException, ServletException {
     ExternalBusinessPartnerConfig externalBusinessPartnerConfig = null;
-    Organization organization = OBDal.getInstance()
-        .get(Organization.class, OBContext.getOBContext().getCurrentOrganization().getId());
-    if (organization.isExtbpEnabled() && organization.getExtbpConfig() != null) {
-      externalBusinessPartnerConfig = organization.getExtbpConfig();
-    } else {
+    externalBusinessPartnerConfig = getOrganizationTreeConfiguration(
+        OBContext.getOBContext().getCurrentOrganization());
+
+    if (externalBusinessPartnerConfig == null) {
       Client currentClient = OBDal.getInstance()
           .get(Client.class, OBContext.getOBContext().getCurrentClient().getId());
       ClientInformation clientInfoFromDb = OBDal.getInstance()
@@ -68,6 +67,30 @@ public class ExternalBusinessPartnerConfigurationProvider {
     return this.getJsonObject(externalBusinessPartnerConfig);
   }
 
+  private ExternalBusinessPartnerConfig getOrganizationTreeConfiguration(
+      Organization organization) {
+
+    Organization loopOrganization = organization;
+    ExternalBusinessPartnerConfig result = null;
+
+    while (result == null) {
+      if (loopOrganization.isExtbpEnabled()) {
+        result = loopOrganization.getExtbpConfig();
+      }
+
+      Organization parentOrg = OBContext.getOBContext()
+          .getOrganizationStructureProvider()
+          .getParentOrg(loopOrganization);
+
+      if (parentOrg != null && result == null) {
+        loopOrganization = parentOrg;
+      } else if (parentOrg == null) {
+        break;
+      }
+    }
+    return result;
+  }
+
   public JSONObject getJsonObject(ExternalBusinessPartnerConfig businessPartnerConfig)
       throws JSONException, ServletException {
     JSONObject dataObj = new JSONObject();
-- 
2.31.0

