From 05a82c6f8302e6e5e8f0eb8b70f2520654aff318 Mon Sep 17 00:00:00 2001
From: Sebastian Pongratz <s.pongratz@adito.de>
Date: Wed, 25 Mar 2020 10:11:00 +0000
Subject: [PATCH] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][TicketNr.:?=
 =?UTF-8?q?=201054054][Leadimport-R=C3=BCckg=C3=A4ng-Aktion]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Leadimport_entity/Leadimport_entity.aod   |  7 +++
 .../leadimportreset/onActionProcess.js        | 53 +++++++++++++++++++
 .../leadimportreset/stateProcess.js           | 14 +++++
 .../transferdata/onActionProcess.js           |  4 +-
 entity/Prod2prod_entity/Prod2prod_entity.aod  |  1 +
 process/ActivityTask_lib/process.js           |  5 +-
 process/Leadimport_lib/process.js             |  4 +-
 7 files changed, 82 insertions(+), 6 deletions(-)
 create mode 100644 entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
 create mode 100644 entity/Leadimport_entity/entityfields/leadimportreset/stateProcess.js

diff --git a/entity/Leadimport_entity/Leadimport_entity.aod b/entity/Leadimport_entity/Leadimport_entity.aod
index 1b7191a1c9..1820f57843 100644
--- a/entity/Leadimport_entity/Leadimport_entity.aod
+++ b/entity/Leadimport_entity/Leadimport_entity.aod
@@ -338,6 +338,13 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityActionField>
+      <name>LeadimportReset</name>
+      <title>Leadimport Reset</title>
+      <onActionProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js</onActionProcess>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadimportreset/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
new file mode 100644
index 0000000000..65d82c07a2
--- /dev/null
+++ b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
@@ -0,0 +1,53 @@
+import("Date_lib");
+import("system.logging");
+import("system.vars");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("system.db");
+
+let leadimportId = vars.get("$field.LEADIMPORTID");
+
+var dateADayBefore = new Date();
+dateADayBefore.setDate(dateADayBefore.getDate()-1);
+
+// Delets all Data, which was created in the last 24 hours by the Leadimport
+_deleteData("ORGANISATION", leadimportId, dateADayBefore);
+_deleteData("PERSON", leadimportId, dateADayBefore);
+_deleteData("ACTIVITY", leadimportId, dateADayBefore);
+_deleteData("ACTIVITYLINK", leadimportId, dateADayBefore);
+_deleteData("CONTACT", leadimportId, dateADayBefore);
+_deleteData("ADDRESS", leadimportId, dateADayBefore);
+_deleteData("COMMUNICATION", leadimportId, dateADayBefore);
+_deleteData("AB_ATTRIBUTERELATION", leadimportId, dateADayBefore);
+
+newWhere("LEADLOG.LEADIMPORT_ID", leadimportId)
+.and("LEADLOG.DATE_NEW", dateADayBefore.getTime(), "# >= ?")
+.from("LEADLOG")
+.deleteData();
+
+newWhere("LEAD.LEADIMPORT_ID", leadimportId)
+.and("LEAD.DATE_NEW", dateADayBefore.getTime(), "# >= ?")
+.from("LEAD")
+.deleteData();
+// Ändern des Status auf Created
+newWhere("LEADIMPORT.LEADIMPORTID", leadimportId).updateData(true, "LEADIMPORT", ["Status"], null, [$KeywordRegistry.importStatus$created()]);
+
+/**
+ * Deletes the Data with was created by the Leadimport of the given table
+ * 
+ * @param {String} pTableName the tabele of deleteing Data of the Date of the Leadimport
+ * @param {String} pleadimportId the ID of the current Leadimport
+ * @param {Date} pdateADayBefor 24 hours befor now
+ */
+function _deleteData (pTableName, pleadimportId, pdateADayBefor) 
+{
+    newWhere(pTableName + "." + pTableName + "ID", 
+        newSelect(pTableName + "." + pTableName + "ID")
+        .from(pTableName)
+        .join("LEADLOG", "LEADLOG.DATE_NEW = " + pTableName + ".DATE_NEW")
+        .where(pTableName + ".USER_NEW", "LEADLOG.USER_NEW")
+        .and("LEADLOG.LEADIMPORT_ID", pleadimportId)
+        .and("LEADLOG.DATE_NEW", pdateADayBefor.getTime(), "# >= ?"), SqlBuilder.IN())
+    .from(pTableName)
+    .deleteData();
+}
\ No newline at end of file
diff --git a/entity/Leadimport_entity/entityfields/leadimportreset/stateProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/stateProcess.js
new file mode 100644
index 0000000000..e017ead393
--- /dev/null
+++ b/entity/Leadimport_entity/entityfields/leadimportreset/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.logging");
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+
+var dateADayBefore = new Date();
+dateADayBefore.setDate(dateADayBefore.getDate()-1);
+
+let count = newSelect("count(*)").from("LEADLOG").where("LEADLOG.LEADIMPORT_ID", vars.get("$field.LEADIMPORTID")).and("LEADLOG.DATE_NEW", dateADayBefore.getTime(), "# >= ?").arrayColumn();
+if (count[0] > 0){
+    result.string("EDITABLE");
+} else {
+    result.string("INVISIBLE");
+}
\ No newline at end of file
diff --git a/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js b/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
index 36a4c97ee1..a3e187a8b6 100644
--- a/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
+++ b/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
@@ -22,7 +22,7 @@ if (binMetadatas.length > 0)
     var fieldSep = LeadImportUtils.getFieldSeparator(vars.get("$field.FIELDSEPARATOR"));
     var fieldLimit = LeadImportUtils.getFieldLimit(vars.get("$field.FIELDDELIMITERS"));
     var recordSep = LeadImportUtils.getRecordSeparator(vars.get("$field.SENTENCESEPARATOR"));
-    
+    var currDate = vars.get("$sys.date");
 
     var params = 
     {
@@ -34,7 +34,7 @@ if (binMetadatas.length > 0)
         fieldLimit: fieldLimit,
         user: user,
         source: vars.getString("$field.IMPORTSOURCE"),
-        currDate:  vars.get("$sys.date"),
+        currDate:  currDate,
         userId: EmployeeUtils.getCurrentUserId(),
         importName: name
     }
diff --git a/entity/Prod2prod_entity/Prod2prod_entity.aod b/entity/Prod2prod_entity/Prod2prod_entity.aod
index 232bb1da69..967049bcb5 100644
--- a/entity/Prod2prod_entity/Prod2prod_entity.aod
+++ b/entity/Prod2prod_entity/Prod2prod_entity.aod
@@ -131,6 +131,7 @@
       <name>jdito</name>
       <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
       <isRequireContainerFiltering v="true" />
+      <isSortable v="true" />
       <contentProcess>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
       <hasDependentRecords v="true" />
       <onInsert>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js</onInsert>
diff --git a/process/ActivityTask_lib/process.js b/process/ActivityTask_lib/process.js
index 4c80e2cc42..d053672085 100644
--- a/process/ActivityTask_lib/process.js
+++ b/process/ActivityTask_lib/process.js
@@ -50,20 +50,21 @@ function ActivityUtils() {}
  *                                  for example:
  *                                  <pre>[["number.txt", "MDExOCA5OTkgODgxIDk5OSAxMTkgNzI1IDM", true]]</pre>
  * @param {String} [pDbAlias=current db alias] database alias where the activity shall be inserted
+ * @param {Date} [pDateNew] The Date which one is in the DB the DATE_NEW
  * 
  * @return {Object} js object where the following are filled:
  *                                  <ul>
  *                                  <li>activityId</li>
  *                                  </ul>
  */
-ActivityUtils.insertNewActivity = function(pDataPreset, pActivityLinks, pDocuments, pDbAlias)
+ActivityUtils.insertNewActivity = function(pDataPreset, pActivityLinks, pDocuments, pDbAlias, pDateNew)
 {
     var dataPreset = pDataPreset || {};
     var dbAlias = pDbAlias || db.getCurrentAlias();
     var insertStatements = [];
     
     var creationUser = dataPreset.userNew || vars.get("$sys.user");
-    var creationDate = datetime.date();
+    var creationDate = pDateNew || datetime.date();
     
     var activityId = dataPreset.activityId || util.getNewUUID();
     var entrydate = dataPreset.entrydate || creationDate;
diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js
index 2d1f9d68d5..74e6adc119 100644
--- a/process/Leadimport_lib/process.js
+++ b/process/Leadimport_lib/process.js
@@ -198,9 +198,9 @@ LeadImportUtils.importData = function(pDataFields, pDataTypes, pFieldDef, pField
     };
     //  History for organisation and person
     if (orgContactId != "" && orgRet[3])
-        ActivityUtils.insertNewActivity(activityData, new Array(new Array(orgObjID, orgContactId)));//org
+        ActivityUtils.insertNewActivity(activityData, new Array(new Array(orgObjID, orgContactId)),undefined, undefined, pDate);//org
     if (persContactId != "")
-        ActivityUtils.insertNewActivity(activityData, new Array(new Array(persObjID, persContactId)));//pers
+        ActivityUtils.insertNewActivity(activityData, new Array(new Array(persObjID, persContactId)), undefined, undefined, pDate);//pers
     
     LeadValues["LEADIMPORT_ID"] = pImportDefID;
     LeadValues["ORGANISATION_ID"] = orgid;
-- 
GitLab