From 4643057d6dcf2563d83937ad782565f6458694da Mon Sep 17 00:00:00 2001
From: Johannes Hoermann <j.hoermann@adito.de>
Date: Mon, 15 Apr 2019 13:14:02 +0200
Subject: [PATCH] Offer preset address with default address

---
 entity/Offer_entity/Offer_entity.aod                  |  3 +++
 .../entityfields/chosenaddress/displayValueProcess.js |  5 +++++
 .../entityfields/chosenaddress/valueProcess.js        | 11 +++++++++++
 process/Contact_lib/process.js                        | 11 +++++++++++
 4 files changed, 30 insertions(+)
 create mode 100644 entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
 create mode 100644 entity/Offer_entity/entityfields/chosenaddress/valueProcess.js

diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 3e594fdf6c..51dc0bd7bf 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -359,9 +359,12 @@
       <title>Choose address</title>
       <consumer>PossibleAddresses</consumer>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/chosenaddress/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/Offer_entity/entityfields/chosenaddress/onValueChange.js</onValueChange>
       <onValueChangeTypes>
         <element>MASK</element>
+        <element>PROCESS</element>
       </onValueChangeTypes>
     </entityField>
     <entityConsumer>
diff --git a/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js b/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
new file mode 100644
index 0000000000..698ddd2192
--- /dev/null
+++ b/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("PostalAddress_lib");
+import("system.result");
+
+result.string(AddressUtils.getFormattedOnlineAddressById(vars.get("$this.value")))
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
new file mode 100644
index 0000000000..6ebcf9a49b
--- /dev/null
+++ b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
@@ -0,0 +1,11 @@
+import("Contact_lib");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && !vars.get("$field.ADDRESS"))
+{
+    var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID"));
+    if (defaultAddressId)
+        result.string(defaultAddressId);
+}
\ No newline at end of file
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 7539546b86..f533b09e7c 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -332,6 +332,17 @@ ContactUtils.getFullContactString = function()
     + " left join ADDRESS on ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID";
 }
 
+/**
+ * get the addressid of the default address
+ *
+ * @return {String} the ID or "" if no default address exists
+ */
+ContactUtils.getDefaultAddressId = function(pContactId)
+{
+    return db.cell(SqlCondition.begin().andPrepare("CONTACT.CONTACTID", pContactId)
+                               .buildSql("select ADDRESS_ID from CONTACT", "1=2"));
+}
+
 /**
  * object for handling of a single contact
  * provides static- and instance-functions
-- 
GitLab