From e4335c90c53c7236faa6cab116c5f8472a5985b3 Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Mon, 29 Apr 2019 10:57:26 +0200
Subject: [PATCH] address: do not validate mandatory if fields are empty

---
 entity/Address_entity/Address_entity.aod      |  9 +++-----
 .../entityfields/address/mandatoryProcess.js  | 13 +++++++++++-
 .../entityfields/city/mandatoryProcess.js     | 13 +++++++++++-
 .../contact_id/mandatoryProcess.js            | 15 +++++++++++++
 .../entityfields/country/mandatoryProcess.js  | 15 +++++++++++++
 .../entityfields/state/mandatoryProcess.js    | 13 +++++++++++-
 .../entityfields/zip/mandatoryProcess.js      | 13 +++++++++++-
 process/Entity_lib/process.js                 | 21 +++++++++++++++++++
 8 files changed, 102 insertions(+), 10 deletions(-)
 create mode 100644 entity/Address_entity/entityfields/contact_id/mandatoryProcess.js
 create mode 100644 entity/Address_entity/entityfields/country/mandatoryProcess.js

diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index 511c4edff3..2855ca7414 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -28,6 +28,7 @@
       <documentation>%aditoprj%/entity/Address_entity/entityfields/addr_type/documentation.adoc</documentation>
       <title>Addresstype</title>
       <consumer>KeywordAddressTypes</consumer>
+      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/addr_type/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/addr_type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -49,6 +50,7 @@
       <title>Country</title>
       <consumer>Countries</consumer>
       <mandatory v="true" />
+      <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/country/mandatoryProcess.js</mandatoryProcess>
       <valueProcess>%aditoprj%/entity/Address_entity/entityfields/country/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/country/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -63,6 +65,7 @@
     <entityField>
       <name>CONTACT_ID</name>
       <mandatory v="true" />
+      <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/contact_id/mandatoryProcess.js</mandatoryProcess>
       <valueProcess>%aditoprj%/entity/Address_entity/entityfields/contact_id/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -337,12 +340,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityParameter>
-      <name>ReloadWorkaround_param</name>
-      <expose v="true" />
-      <triggerRecalculation v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Address_entity/entityfields/address/mandatoryProcess.js b/entity/Address_entity/entityfields/address/mandatoryProcess.js
index e1e8e5fe1e..e3fe2aaca0 100644
--- a/entity/Address_entity/entityfields/address/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/address/mandatoryProcess.js
@@ -1,4 +1,15 @@
+import("Entity_lib");
 import("system.result");
 import("AddressEntity_lib");
 
-result.string(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/mandatoryProcess.js b/entity/Address_entity/entityfields/city/mandatoryProcess.js
index e1e8e5fe1e..e3fe2aaca0 100644
--- a/entity/Address_entity/entityfields/city/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/city/mandatoryProcess.js
@@ -1,4 +1,15 @@
+import("Entity_lib");
 import("system.result");
 import("AddressEntity_lib");
 
-result.string(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/contact_id/mandatoryProcess.js b/entity/Address_entity/entityfields/contact_id/mandatoryProcess.js
new file mode 100644
index 0000000000..9f96f58a0f
--- /dev/null
+++ b/entity/Address_entity/entityfields/contact_id/mandatoryProcess.js
@@ -0,0 +1,15 @@
+import("Entity_lib");
+import("system.result");
+import("AddressEntity_lib");
+
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], true));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/country/mandatoryProcess.js b/entity/Address_entity/entityfields/country/mandatoryProcess.js
new file mode 100644
index 0000000000..9f96f58a0f
--- /dev/null
+++ b/entity/Address_entity/entityfields/country/mandatoryProcess.js
@@ -0,0 +1,15 @@
+import("Entity_lib");
+import("system.result");
+import("AddressEntity_lib");
+
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], true));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/state/mandatoryProcess.js b/entity/Address_entity/entityfields/state/mandatoryProcess.js
index e1e8e5fe1e..e3fe2aaca0 100644
--- a/entity/Address_entity/entityfields/state/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/state/mandatoryProcess.js
@@ -1,4 +1,15 @@
+import("Entity_lib");
 import("system.result");
 import("AddressEntity_lib");
 
-result.string(AddressEntityValidation.isMandatoryField());
\ No newline at end of file
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/mandatoryProcess.js b/entity/Address_entity/entityfields/zip/mandatoryProcess.js
index d12bb3e05d..e3fe2aaca0 100644
--- a/entity/Address_entity/entityfields/zip/mandatoryProcess.js
+++ b/entity/Address_entity/entityfields/zip/mandatoryProcess.js
@@ -1,4 +1,15 @@
+import("Entity_lib");
 import("system.result");
 import("AddressEntity_lib");
 
-result.string(AddressEntityValidation.isMandatoryField());
+result.object(ProcessHandlingUtils.getMandatoryIgnoreAllEmpty([
+        "$field.ADDR_TYPE",
+        "$field.ADDRESS",
+        "$field.BUILDINGNO",
+        "$field.ZIP",
+        "$field.CITY",
+        "$field.COUNTRY",
+        "$field.STATE",
+        "$field.REGION",
+        "$field.ADDRIDENTIFIER"
+    ], AddressEntityValidation.isMandatoryField()));
\ No newline at end of file
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index 6db3b2deba..5c7dfbf781 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.result");
 import("system.neon");
 import("system.vars");
@@ -47,6 +48,26 @@ ProcessHandlingUtils.initialParamToResult = function(pParamVarName)
     
 }
 
+ProcessHandlingUtils.getMandatoryIgnoreAllEmpty = function(pFields, pIsMandatory)
+{
+    var allEmpty = true;
+    logging.log("-------------")
+    pFields.forEach(function(pField) {
+        logging.log(pField + " " + vars.getString(pField))
+        if (vars.getString(pField))
+        {
+            
+            allEmpty = false;
+        }
+    });
+    logging.log(allEmpty)
+    logging.log(pIsMandatory)
+    logging.log(!allEmpty && pIsMandatory)
+    
+    logging.log("-------------")
+    return !allEmpty && pIsMandatory;
+}
+
 /**
  * Workaround for detecting field changes of fields not managed by record containers. 
  * Should be fixed in the future: Ticket 1030023
-- 
GitLab