From 6d0d7347c9d7d0bf5d6ff0f88977e1a7b1b44223 Mon Sep 17 00:00:00 2001
From: Benjamin Ulrich <b.ulrich@adito.de>
Date: Tue, 23 Nov 2021 22:22:58 +0100
Subject: [PATCH] [Projekt: xRM-Sales][TicketNr.: 1086490][Werbemittelworkflows
 - Status...

---
 .../workflows/blob/advertisingShipment.xml    |  2 +-
 .../AdvertisingItem_entity.aod                | 23 +++----------------
 .../entityfields/sent/valueProcess.js         | 15 ------------
 .../grantCreateProcess.js                     |  5 ++++
 .../grantDeleteProcess.js                     |  5 ++++
 .../grantUpdateProcess.js                     |  5 ++++
 .../Advertising_entity/Advertising_entity.aod |  1 +
 .../recordcontainers/db/onDBDelete.js         |  4 ++++
 .../AdvertisingItemFilter_view.aod            |  4 ----
 .../AdvertisingItemSmallFilter_view.aod       |  4 ----
 process/Advertising_lib/process.js            | 18 +++++++++++++++
 .../process.js                                |  5 ++++
 12 files changed, 47 insertions(+), 44 deletions(-)
 delete mode 100644 entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js
 create mode 100644 entity/AdvertisingItem_entity/grantCreateProcess.js
 create mode 100644 entity/AdvertisingItem_entity/grantDeleteProcess.js
 create mode 100644 entity/AdvertisingItem_entity/grantUpdateProcess.js
 create mode 100644 entity/Advertising_entity/recordcontainers/db/onDBDelete.js

diff --git a/.liquibase/Data_alias/basic/workflows/blob/advertisingShipment.xml b/.liquibase/Data_alias/basic/workflows/blob/advertisingShipment.xml
index 260461ae91..2d97bd7749 100644
--- a/.liquibase/Data_alias/basic/workflows/blob/advertisingShipment.xml
+++ b/.liquibase/Data_alias/basic/workflows/blob/advertisingShipment.xml
@@ -5,7 +5,7 @@
     <documentation>Workflow for handling Advertisingmaterials</documentation>
     <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
     <exclusiveGateway id="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E"></exclusiveGateway>
-    <userTask id="sid-3EB74D83-9BE8-427C-A5E8-72D906429892" name="Test Post Versand" flowable:candidateGroups="PROJECT_OfficeStaff,PROJECT_Marketing" flowable:formFieldValidation="true">
+    <userTask id="sid-3EB74D83-9BE8-427C-A5E8-72D906429892" name="Post Versand" flowable:candidateGroups="PROJECT_OfficeStaff,PROJECT_Marketing" flowable:formFieldValidation="true">
       <extensionElements>
         <modeler:group-info-name-PROJECT_OfficeStaff xmlns:modeler="http://flowable.org/modeler"><![CDATA[Office staff]]></modeler:group-info-name-PROJECT_OfficeStaff>
         <modeler:group-info-name-PROJECT_Marketing xmlns:modeler="http://flowable.org/modeler"><![CDATA[Marketing]]></modeler:group-info-name-PROJECT_Marketing>
diff --git a/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod b/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod
index 36f2c6a32b..d7d3bc9237 100644
--- a/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod
+++ b/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod
@@ -4,6 +4,9 @@
   <title>Advertising item</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/AdvertisingItem_entity/documentation.adoc</documentation>
+  <grantCreateProcess>%aditoprj%/entity/AdvertisingItem_entity/grantCreateProcess.js</grantCreateProcess>
+  <grantUpdateProcess>%aditoprj%/entity/AdvertisingItem_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/AdvertisingItem_entity/grantDeleteProcess.js</grantDeleteProcess>
   <iconId>VAADIN:PACKAGE</iconId>
   <titlePlural>Advertising items</titlePlural>
   <recordContainer>db</recordContainer>
@@ -87,18 +90,6 @@
       <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js</valueProcess>
       <onValidation>%aditoprj%/entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js</onValidation>
     </entityField>
-    <entityField>
-      <name>SENT</name>
-      <title>Sent</title>
-      <contentType>BOOLEAN</contentType>
-      <mandatory v="false" />
-      <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>STATUS</name>
-      <title>Status</title>
-      <mandatory v="false" />
-    </entityField>
     <entityField>
       <name>TARGETAMOUNT</name>
       <title>Target amount</title>
@@ -283,14 +274,6 @@
           <name>QUANTITY.value</name>
           <recordfield>ADVERTISINGITEM.QUANTITY</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SENT.value</name>
-          <recordfield>ADVERTISINGITEM.SENT</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>STATUS.value</name>
-          <recordfield>ADVERTISINGITEM.STATUS</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TARGETAMOUNT.value</name>
           <recordfield>ADVERTISINGITEM.TARGETAMOUNT</recordfield>
diff --git a/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js
deleted file mode 100644
index 15dc711a7f..0000000000
--- a/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import("KeywordRegistry_basic");
-import("system.neon");
-import("system.vars");
-import("system.result");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
-{
-    var ret = 0; 
-    //when an item was handover personal the item is already at its destination
-    if(vars.get("$field.DELIVERY") == $KeywordRegistry.advertisingDelivery$personal())
-    {
-        ret = 1; 
-    }
-    result.string(ret);
-}
\ No newline at end of file
diff --git a/entity/AdvertisingItem_entity/grantCreateProcess.js b/entity/AdvertisingItem_entity/grantCreateProcess.js
new file mode 100644
index 0000000000..09af9c97e0
--- /dev/null
+++ b/entity/AdvertisingItem_entity/grantCreateProcess.js
@@ -0,0 +1,5 @@
+import("Advertising_lib");
+import("system.vars");
+import("system.result");
+
+result.string(AdvertisingUtils.isEditable(AdvertisingUtils.getStatus(vars.get("$param.AdvertisingId_param"))));
\ No newline at end of file
diff --git a/entity/AdvertisingItem_entity/grantDeleteProcess.js b/entity/AdvertisingItem_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000..09af9c97e0
--- /dev/null
+++ b/entity/AdvertisingItem_entity/grantDeleteProcess.js
@@ -0,0 +1,5 @@
+import("Advertising_lib");
+import("system.vars");
+import("system.result");
+
+result.string(AdvertisingUtils.isEditable(AdvertisingUtils.getStatus(vars.get("$param.AdvertisingId_param"))));
\ No newline at end of file
diff --git a/entity/AdvertisingItem_entity/grantUpdateProcess.js b/entity/AdvertisingItem_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000..09af9c97e0
--- /dev/null
+++ b/entity/AdvertisingItem_entity/grantUpdateProcess.js
@@ -0,0 +1,5 @@
+import("Advertising_lib");
+import("system.vars");
+import("system.result");
+
+result.string(AdvertisingUtils.isEditable(AdvertisingUtils.getStatus(vars.get("$param.AdvertisingId_param"))));
\ No newline at end of file
diff --git a/entity/Advertising_entity/Advertising_entity.aod b/entity/Advertising_entity/Advertising_entity.aod
index 6313f129f4..18010d96c7 100644
--- a/entity/Advertising_entity/Advertising_entity.aod
+++ b/entity/Advertising_entity/Advertising_entity.aod
@@ -251,6 +251,7 @@
       <name>db</name>
       <conditionProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <onDBDelete>%aditoprj%/entity/Advertising_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <alias>Data_alias</alias>
       <recordFieldMappings>
         <dbRecordFieldMapping>
diff --git a/entity/Advertising_entity/recordcontainers/db/onDBDelete.js b/entity/Advertising_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000..81ef885478
--- /dev/null
+++ b/entity/Advertising_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,4 @@
+import("Sql_lib");
+
+newWhere("ADVERTISINGITEM.ADVERTISING_ID", "$field.ADVERTISINGID")
+    .deleteData();
\ No newline at end of file
diff --git a/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod b/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod
index bca3120650..287e19b68a 100644
--- a/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod
+++ b/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod
@@ -47,10 +47,6 @@
           <name>e53a6f55-c4d4-49df-8785-55fa8ee8a657</name>
           <entityField>DELIVERY</entityField>
         </neonTableColumn>
-        <neonTableColumn>
-          <name>5f359ff4-06c6-4d6d-bf10-2f8dbf1fbb01</name>
-          <entityField>SENT</entityField>
-        </neonTableColumn>
         <neonTableColumn>
           <name>007e2ca8-d7c8-4f9e-891f-a53f3d0e6b5a</name>
           <entityField>INFO</entityField>
diff --git a/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod
index 392578f715..768304d0d5 100644
--- a/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod
+++ b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod
@@ -16,10 +16,6 @@
           <name>4f14ad89-679c-43c5-bf2d-9a7050a84b4c</name>
           <entityField>PRODUCT_ID</entityField>
         </neonTableColumn>
-        <neonTableColumn>
-          <name>9cc62b40-e77e-46d9-b44f-9f0ee42d7116</name>
-          <entityField>STATUS</entityField>
-        </neonTableColumn>
         <neonTableColumn>
           <name>a54cbe2d-b6d4-42b9-9998-48a92b157147</name>
           <entityField>DELIVERY</entityField>
diff --git a/process/Advertising_lib/process.js b/process/Advertising_lib/process.js
index db5d5c7422..5d51e25258 100644
--- a/process/Advertising_lib/process.js
+++ b/process/Advertising_lib/process.js
@@ -93,6 +93,24 @@ AdvertisingUtils.getNextItemPos = function (pAdvertisingId)
     }
     return itemPos;
 }
+
+/*
+* Returns the status of an advertising
+* 
+*  @param {String} pAdvertisingId the advertising id
+*  
+*  @return {String} Status
+ */
+AdvertisingUtils.getStatus = function(pAdvertisingId)
+{
+    var status = newSelect("ADVERTISING.STATUS")
+            .from("ADVERTISING")
+            .where("ADVERTISING.ADVERTISINGID", pAdvertisingId)
+            .cell();
+
+    return status;
+}
+
 /*
 * checks if the advertising is editable, currently it's editable when it's not sent and not followed up
 * 
diff --git a/process/UpdateAdvertisingItem_workflowService/process.js b/process/UpdateAdvertisingItem_workflowService/process.js
index 5d279eb586..a0d3b4281a 100644
--- a/process/UpdateAdvertisingItem_workflowService/process.js
+++ b/process/UpdateAdvertisingItem_workflowService/process.js
@@ -1,3 +1,4 @@
+import("KeywordRegistry_basic");
 import("Sql_lib");
 import("system.vars");
 
@@ -8,4 +9,8 @@ if (variables.targetContext && variables.targetContext == "Advertising" && varia
     newWhere("ADVERTISINGITEM.ADVERTISING_ID", variables.targetId).and("ADVERTISINGITEM.DELIVERY", variables.handover).updateFields({
         "SENT": '1'
     });
+    
+    newWhere("ADVERTISING.ADVERTISINGID", variables.targetId).updateFields({
+        "STATUS": $KeywordRegistry.advertisingStatus$Sent()
+    });
 }
\ No newline at end of file
-- 
GitLab