diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index a52e76a53af318e15dbccf5125c202802dd66de7..582e6402cccd851b531c43f1bd2894b6c858ea34 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 0000000000000000000000000000000000000000..cddfb6d43c94f74e66d49f9444cbaf03415b07d2 --- /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 2e8efe2be5fecf6e058410ebe85732907514a80b..bc648ee740e589b072b4daad39cf7700d7a7e000 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 27fb2608603b2c96f3b38fef7b4c191f7d7a8699..cb6f839323b13a3704383a041c1fc4ecfe998a65 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 1e68696cfb16f1159c185d3d650cafaeb5e35c3f..aa09e4cbb8e9b07046af487e36e759d409f39e52 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 e0bc20e97a1fcf618f7bc89005c47ade6ac496d0..b36c8a2373c0003b4582c199462fffc280b5873f 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 b9a50c73f494bd24a9771afa8ffcc40ed2396a79..8d8252e5b45e4f81ac8c237e5e5fa94478c45bb2 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 bbfc15c251e6d76b1702f4eb712dc76cc8987d7f..f4121551b8f86159b971b9e69247f8749f2c2df6 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; +}