From e886b7c1809155b477e4dadd978783f5d16a472f Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Thu, 21 Feb 2019 10:30:39 +0100
Subject: [PATCH] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][TicketNr.:?=
 =?UTF-8?q?=201035070][Vertriebsprojekt=20-=20Inaktivt=C3=A4t=20abh=C3=A4n?=
 =?UTF-8?q?gig=20von=20der=20letzten=20Historie=20anzeigen]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Salesproject_entity.aod                   |  9 +++++--
 .../days_notactive/valueProcess.js            | 11 +++++++++
 .../_____LANGUAGE_EXTRA.aod                   | 15 ++++++++++++
 .../_____LANGUAGE_de/_____LANGUAGE_de.aod     | 12 ++++++++++
 .../_____LANGUAGE_en/_____LANGUAGE_en.aod     | 15 ++++++++++++
 .../SalesprojectPreview_view.aod              | 10 ++++++++
 process/Activity_lib/process.js               | 24 +++++++++++++++++++
 process/Date_lib/process.js                   | 22 ++++++++++++++++-
 8 files changed, 115 insertions(+), 3 deletions(-)
 create mode 100644 entity/Salesproject_entity/entityfields/days_notactive/valueProcess.js

diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index a52e76a53a..582e6402cc 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -3,7 +3,6 @@
   <name>Salesproject_entity</name>
   <title>Salesproject</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/entity/Salesproject_entity/documentation.adoc</documentation>
   <iconId>VAADIN:BOOK_DOLLAR</iconId>
   <titleProcess>%aditoprj%/entity/Salesproject_entity/titleProcess.js</titleProcess>
   <recordContainer>db</recordContainer>
@@ -112,7 +111,7 @@
     </entityField>
     <entityConsumer>
       <name>SalesprojectSources</name>
-      <title>Source</title>
+      <title>Touchpoints</title>
       <fieldType>DEPENDENCY_OUT</fieldType>
       <dependency>
         <name>dependency</name>
@@ -395,6 +394,12 @@
       <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
       <iconId>NEON:HISTORY</iconId>
     </entityActionField>
+    <entityField>
+      <name>DAYS_NOTACTIVE</name>
+      <title>Days inactive</title>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/days_notactive/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Salesproject_entity/entityfields/days_notactive/valueProcess.js b/entity/Salesproject_entity/entityfields/days_notactive/valueProcess.js
new file mode 100644
index 0000000000..cddfb6d43c
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/days_notactive/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("Activity_lib");
+import("Date_lib");
+
+var entryDate = ActivityUtils.getLastActivityDate(vars.get("$field.SALESPROJECTID"));
+var daysPassed = DateUtils.getDayDifference(entryDate);
+
+if (daysPassed != null)
+    result.string(daysPassed);
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 2e8efe2be5..bc648ee740 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -2346,6 +2346,21 @@
     <entry>
       <key>Level</key>
     </entry>
+    <entry>
+      <key>Touchpoint</key>
+    </entry>
+    <entry>
+      <key>Touchpoints</key>
+    </entry>
+    <entry>
+      <key>Day</key>
+    </entry>
+    <entry>
+      <key>Days</key>
+    </entry>
+    <entry>
+      <key>Days inactive</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 27fb260860..cb6f839323 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -14,6 +14,10 @@
       <key>Turnover</key>
       <value>Umsatz</value>
     </entry>
+    <entry>
+      <key>Days</key>
+      <value>Tage</value>
+    </entry>
     <entry>
       <key>E-Mail</key>
       <value>E-Mail</value>
@@ -78,6 +82,10 @@
       <key>${SALESPROJECT_MEMBER}</key>
       <value>Projektteam</value>
     </entry>
+    <entry>
+      <key>Days inactive</key>
+      <value>Tage inaktiv</value>
+    </entry>
     <entry>
       <key>Active</key>
       <value>Aktiv</value>
@@ -756,6 +764,10 @@
       <key>Show open salesprojects</key>
       <value>Offene Vertriebsprojekte anzeigen</value>
     </entry>
+    <entry>
+      <key>Day</key>
+      <value>Tag</value>
+    </entry>
     <entry>
       <key>Receipt number</key>
       <value>Belegnummer</value>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 1e68696cfb..aa09e4cbb8 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -2370,6 +2370,21 @@
     <entry>
       <key>Level</key>
     </entry>
+    <entry>
+      <key>Touchpoint</key>
+    </entry>
+    <entry>
+      <key>Touchpoints</key>
+    </entry>
+    <entry>
+      <key>Day</key>
+    </entry>
+    <entry>
+      <key>Days</key>
+    </entry>
+    <entry>
+      <key>Days inactive</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
index e0bc20e97a..b36c8a2373 100644
--- a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
+++ b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
@@ -76,5 +76,15 @@
       <entityField>MainDocuments</entityField>
       <view>DocumentList_view</view>
     </neonViewReference>
+    <scoreCardViewTemplate>
+      <name>SalesprojectScore_template</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>79490331-6be4-422f-9450-da0db56f0654</name>
+          <entityField>DAYS_NOTACTIVE</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
   </children>
 </neonView>
diff --git a/process/Activity_lib/process.js b/process/Activity_lib/process.js
index b9a50c73f4..8d8252e5b4 100644
--- a/process/Activity_lib/process.js
+++ b/process/Activity_lib/process.js
@@ -31,4 +31,28 @@ ActivityUtils.createNewActivity = function(pRowId)
     params["ObjectId_param"] = ContextUtils.getCurrentContextId();
     params["RowId_param"] = pRowId;
     neon.openContext("Activity", null, null, neon.OPERATINGSTATE_NEW, params);
+}
+
+/*
+ * Gets the date of the last activity
+ * 
+ * @param {String} pRowId the rowid of the dataset
+ * 
+ * @return {number|null} the date of the last actvity as long
+ */
+ActivityUtils.getLastActivityDate = function (pRowId)
+{
+    var context = ContextUtils.getCurrentContextId();
+    var sqlUtil = new SqlMaskingUtils();
+    var activitySql = "select " + sqlUtil.max("ENTRYDATE") + " from ACTIVITY "
+        + " join ACTIVITYLINK on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID";
+    activitySql = SqlCondition.begin()
+        .andPrepare("ACTIVITYLINK.OBJECT_TYPE", context)
+        .andPrepare("ACTIVITYLINK.OBJECT_ROWID", pRowId)
+        .buildSql(activitySql);
+    
+    var entryDate = db.cell(activitySql);
+    if (entryDate != "")
+        return parseInt(entryDate);
+    return null;
 }
\ No newline at end of file
diff --git a/process/Date_lib/process.js b/process/Date_lib/process.js
index bbfc15c251..f4121551b8 100644
--- a/process/Date_lib/process.js
+++ b/process/Date_lib/process.js
@@ -74,4 +74,24 @@ DateUtils.getMonthName = function(pMonth) {
     
     
     return monthNames[pMonth];
-}
\ No newline at end of file
+}
+
+/**
+ * Calculates the passed days between two dates.
+ * 
+ *  @param {Number} pPastDate the first timestamp
+ *  @param {Number} [pCurrentDate=currentTimestamp] the second timestamp
+ *  
+ *  @return {Number|null} the amount of days (value is always positive) or null if pPastDate is null
+ */
+DateUtils.getDayDifference = function (pPastDate, pCurrentDate)
+{
+    if (pPastDate == null)
+        return null;
+    if (pCurrentDate == null)
+        pCurrentDate = datetime.date();
+    var millisecDiff = Math.abs(pCurrentDate - pPastDate);
+    var dayDiff = Math.floor(millisecDiff / datetime.ONE_DAY);
+    
+    return dayDiff;
+}
-- 
GitLab