From eb5be3f90ff82ad449a7b97dd0711fb0656f30cc Mon Sep 17 00:00:00 2001
From: Markus Escher <m.escher@adito.de>
Date: Mon, 26 Nov 2018 15:56:33 +0100
Subject: [PATCH] add document download/delete process add DocumentPreview_view

---
 entity/Document_entity/Document_entity.aod    |  9 ++--
 entity/Document_entity/contentProcess.js      | 16 ++++---
 .../downloadfilesaction/onActionProcess.js    |  8 +---
 entity/Document_entity/onDelete.js            |  2 +
 entity/Document_entity/onInsert.js            |  3 +-
 .../Document_context/Document_context.aod     |  5 +++
 .../DocumentPreview_view.aod                  | 20 +++++++++
 process/Document_lib/Document_lib.aod         |  6 +++
 process/Document_lib/process.js               | 43 +++++++++++++++++++
 9 files changed, 95 insertions(+), 17 deletions(-)
 create mode 100644 entity/Document_entity/onDelete.js
 create mode 100644 neonView/DocumentPreview_view/DocumentPreview_view.aod
 create mode 100644 process/Document_lib/Document_lib.aod
 create mode 100644 process/Document_lib/process.js

diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index 587d70e3db..51187c3cef 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -17,6 +17,7 @@
   <contentProcess>%aditoprj%/entity/Document_entity/contentProcess.js</contentProcess>
   <onInsert>%aditoprj%/entity/Document_entity/onInsert.js</onInsert>
   <onUpdate>%aditoprj%/entity/Document_entity/onUpdate.js</onUpdate>
+  <onDelete>%aditoprj%/entity/Document_entity/onDelete.js</onDelete>
   <entityFields>
     <entityIncomingField>
       <name>#INCOMING</name>
@@ -25,7 +26,6 @@
       <name>NAME</name>
       <title>Dateiname</title>
       <fieldName>FILENAME</fieldName>
-      <valueProcess>%aditoprj%/entity/Document_entity/entityfields/name/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>TYPE</name>
@@ -44,11 +44,10 @@
       <contentType>DATE</contentType>
     </entityField>
     <entityField>
-      <name>PREVIEW</name>
+      <name>PREVIEW_IMAGE</name>
       <title>Vorschau</title>
       <fieldName>PREVIEW</fieldName>
       <contentType>IMAGE</contentType>
-      <state>READONLY</state>
     </entityField>
     <entityIncomingField>
       <name>OrgDocument_dfi</name>
@@ -109,5 +108,9 @@
         </entityDependency>
       </dependencies>
     </entityIncomingField>
+    <entityField>
+      <name>ID</name>
+      <fieldName>UID</fieldName>
+    </entityField>
   </entityFields>
 </entity>
diff --git a/entity/Document_entity/contentProcess.js b/entity/Document_entity/contentProcess.js
index 0c280e38b4..eba3027b5c 100644
--- a/entity/Document_entity/contentProcess.js
+++ b/entity/Document_entity/contentProcess.js
@@ -1,4 +1,3 @@
-import("system.logging");
 import("system.vars");
 import("system.result");
 import("system.db");
@@ -11,15 +10,18 @@ if(vars.exists("$param.AssignmentTable_param") &&
     var assignmentName = vars.get("$param.AssignmentName_param");
     var assignmentRowId = vars.get("$param.AssignmentRowId_param");
     var alias = db.getCurrentAlias();
-
-    var tab = [];
-    metadata = db.getBinaryMetadata(assignmentTable, assignmentName, assignmentRowId, false, alias);
+    var documents = [];
     
-    // going through the metadata and push the data into the result array. get the bindata via db.getBinaryContent()
+    // Check for Selection
+    if(vars.exists("$local.idvalues") && vars.get("$local.idvalues") != '')
+        metadata = db.getBinaryMetadataForIds(vars.get("$local.idvalues"), true, alias)
+    else
+        metadata = db.getBinaryMetadata(assignmentTable, assignmentName, assignmentRowId, false, alias);    
+
     for( var i = 0; i < metadata.length; i++)
     {
-        tab.push( [metadata[i].id, metadata[i].filename, metadata[i].size, metadata[i].edit, metadata[i].preview, metadata[i].mimetype]);
+        documents.push( [metadata[i].id, metadata[i].filename, metadata[i].size, metadata[i].edit, metadata[i].preview, metadata[i].mimetype]);
     }
 
-    result.object(tab);
+    result.object(documents);
 }
diff --git a/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js b/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js
index 872aa053d0..a09e33e8f5 100644
--- a/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js
+++ b/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js
@@ -1,6 +1,2 @@
-import("system.result");
-import("system.db");
-import("system.logging");
-import("system.vars");
-
-//logging.log(db.getBinaryContent(vars.get("$local.idvalue"), null));
\ No newline at end of file
+import("Document_lib");
+DocumentUtil.downloadSelectedDocuments();
diff --git a/entity/Document_entity/onDelete.js b/entity/Document_entity/onDelete.js
new file mode 100644
index 0000000000..74fe702632
--- /dev/null
+++ b/entity/Document_entity/onDelete.js
@@ -0,0 +1,2 @@
+import("Document_lib");
+DocumentUtil.deleteCurrentDocument();
diff --git a/entity/Document_entity/onInsert.js b/entity/Document_entity/onInsert.js
index 456dd89531..5f9dddf1cc 100644
--- a/entity/Document_entity/onInsert.js
+++ b/entity/Document_entity/onInsert.js
@@ -9,4 +9,5 @@ var bindata = vars.get("$field.BINDATA_UPLOAD");
 var filename = vars.get("$field.NAME");
 var alias = db.getCurrentAlias();
 
-db.insertBinary(assignmentTable, assignmentName, assignmentRowId, "", bindata, filename, "", "", alias);
+if(bindata != '' && filename != '')    
+    db.insertBinary(assignmentTable, assignmentName, assignmentRowId, "", bindata, filename, "", "", alias);
diff --git a/neonContext/Document_context/Document_context.aod b/neonContext/Document_context/Document_context.aod
index 145dcfcc46..fb1cc864f9 100644
--- a/neonContext/Document_context/Document_context.aod
+++ b/neonContext/Document_context/Document_context.aod
@@ -6,6 +6,7 @@
   <icon>VAADIN:FILE_TEXT_O</icon>
   <filterview>DocumentFilter_view</filterview>
   <editview>DocumentEdit_view</editview>
+  <preview>DocumentPreview_view</preview>
   <entity>Document_entity</entity>
   <references>
     <neonViewReference>
@@ -16,5 +17,9 @@
       <name>fcc99fdd-5524-4f32-a418-a88a4b7c0c09</name>
       <view>DocumentEdit_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>c3a522f3-897e-4d02-862b-6e44c4873714</name>
+      <view>DocumentPreview_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/DocumentPreview_view/DocumentPreview_view.aod b/neonView/DocumentPreview_view/DocumentPreview_view.aod
new file mode 100644
index 0000000000..3e40deed86
--- /dev/null
+++ b/neonView/DocumentPreview_view/DocumentPreview_view.aod
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.0.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.0.0">
+  <name>DocumentPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>DocumentPreview_card</name>
+      <iconField>PREVIEW_IMAGE</iconField>
+      <titleField>NAME</titleField>
+      <descriptionField>DATE_EDIT</descriptionField>
+      <favoriteAction1>downloadFilesAction</favoriteAction1>
+      <entityField>#ENTITY</entityField>
+    </cardViewTemplate>
+  </children>
+</neonView>
diff --git a/process/Document_lib/Document_lib.aod b/process/Document_lib/Document_lib.aod
new file mode 100644
index 0000000000..3dba7e9213
--- /dev/null
+++ b/process/Document_lib/Document_lib.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.1.7">
+  <name>Document_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/Document_lib/process.js</process>
+</process>
diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js
new file mode 100644
index 0000000000..0e53a27da4
--- /dev/null
+++ b/process/Document_lib/process.js
@@ -0,0 +1,43 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("system.neon");
+
+function DocumentUtil(){    
+}
+
+DocumentUtil.downloadSelectedDocuments = function(){
+    var alias = db.getCurrentAlias();
+    
+    // Multiple Files (=not oppened)
+    if(vars.exists("$local.uids"))
+    {
+        var rows = JSON.parse(vars.get("$local.rows"));
+        var uids = JSON.parse(vars.get("$local.uids"));   
+        var binaryContents = db.getBinaryContents(uids, alias);     
+
+        for(var i = 0; i < binaryContents.length; i++)
+        {   
+            var base64data = binaryContents[i];
+            var filename = rows[i]["NAME"];
+            neon.download(base64data, filename);        
+        }
+    }
+    // Single File (=already opened)
+    else if(vars.exists("$field.ID"))
+    {
+        var id = vars.get("$field.ID");
+        var name = vars.get("$field.NAME");
+        var binaryContent = db.getBinaryContent(id, alias); 
+        neon.download(binaryContent, name);
+    }
+}
+
+DocumentUtil.deleteCurrentDocument = function(){
+    if(vars.exists("$local.uid"))
+    {
+        var uid = vars.get("$local.uid");   
+        var alias = db.getCurrentAlias();
+        db.deleteBinary(uid, alias);
+    }
+}
-- 
GitLab