From 2eceded6d259752f21ee2c0ac704fdd7bab98c4e Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Tue, 21 Jan 2020 11:33:55 +0100
Subject: [PATCH] Serial letter generate and download optimized

---
 entity/Document_entity/Document_entity.aod    | 32 +++++++++++++++++
 .../assignmentname_param/valueProcess.js      |  3 ++
 .../disallowcreate_param/valueProcess.js      |  3 ++
 entity/Document_entity/grantCreateProcess.js  |  4 +++
 .../SerialLetter_entity.aod                   | 34 +++++++++++++++++--
 .../assignmentname_param/valueProcess.js      |  3 ++
 .../assignmentrowid_param/valueProcess.js     |  4 +++
 .../assignmenttable_param/valueProcess.js     |  3 ++
 .../downloadletter/iconIdProcess.js           |  7 ----
 .../downloadletter/onActionProcess.js         | 15 +++-----
 .../downloadletter/stateProcess.js            |  2 +-
 .../downloadletter/titleProcess.js            |  8 -----
 .../downloadletter/tooltipProcess.js          |  8 -----
 .../entityfields/generated/valueProcess.js    |  4 +--
 .../generateletter/onActionProcess.js         |  4 +++
 .../recordcontainers/db/onDBDelete.js         |  2 +-
 .../SerialLetterMain_view.aod                 |  5 +++
 .../SerialLetterPreview_view.aod              |  3 +-
 .../process.js                                |  2 +-
 19 files changed, 103 insertions(+), 43 deletions(-)
 create mode 100644 entity/Document_entity/entityfields/singledocument/children/assignmentname_param/valueProcess.js
 create mode 100644 entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js
 create mode 100644 entity/Document_entity/grantCreateProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/documents/children/assignmentname_param/valueProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
 delete mode 100644 entity/SerialLetter_entity/entityfields/downloadletter/iconIdProcess.js
 delete mode 100644 entity/SerialLetter_entity/entityfields/downloadletter/titleProcess.js
 delete mode 100644 entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/generateletter/onActionProcess.js

diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index a1c6f39ed6..4a82b97ccc 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -4,6 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Document_entity/documentation.adoc</documentation>
   <title>Document</title>
+  <grantCreateProcess>%aditoprj%/entity/Document_entity/grantCreateProcess.js</grantCreateProcess>
   <iconId>VAADIN:FILE</iconId>
   <titlePlural>Documents</titlePlural>
   <recordContainer>jdito</recordContainer>
@@ -308,6 +309,37 @@
           <name>AssignmentTable_param</name>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>DisallowCreate_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityParameter>
+      <name>DisallowCreate_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>SingleDocument</name>
+      <titlePlural>Document</titlePlural>
+      <dependencies>
+        <entityDependency>
+          <name>91f87622-d0e8-43c6-99a0-5f9cebf79aaf</name>
+          <entityName>SerialLetter_entity</entityName>
+          <fieldName>Documents</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>AssignmentName_param</name>
+          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/singledocument/children/assignmentname_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>DisallowCreate_param</name>
+          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
   </entityFields>
diff --git a/entity/Document_entity/entityfields/singledocument/children/assignmentname_param/valueProcess.js b/entity/Document_entity/entityfields/singledocument/children/assignmentname_param/valueProcess.js
new file mode 100644
index 0000000000..3e4bf7585b
--- /dev/null
+++ b/entity/Document_entity/entityfields/singledocument/children/assignmentname_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("DOCUMENT");
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js b/entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js
new file mode 100644
index 0000000000..40effa0178
--- /dev/null
+++ b/entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Document_entity/grantCreateProcess.js b/entity/Document_entity/grantCreateProcess.js
new file mode 100644
index 0000000000..e6afa18182
--- /dev/null
+++ b/entity/Document_entity/grantCreateProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(!vars.get("$param.DisallowCreate_param"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod
index 0125d03905..df2c15d998 100644
--- a/entity/SerialLetter_entity/SerialLetter_entity.aod
+++ b/entity/SerialLetter_entity/SerialLetter_entity.aod
@@ -149,10 +149,8 @@
       <title>Download letter</title>
       <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:DOWNLOAD_ALT</iconId>
-      <iconIdProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/iconIdProcess.js</iconIdProcess>
       <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js</stateProcess>
-      <titleProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/titleProcess.js</titleProcess>
-      <tooltipProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js</tooltipProcess>
+      <tooltip>Download letter</tooltip>
     </entityActionField>
     <entityActionField>
       <name>downloadTemplate</name>
@@ -172,6 +170,36 @@
       <name>generated</name>
       <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/generated/valueProcess.js</valueProcess>
     </entityField>
+    <entityConsumer>
+      <name>Documents</name>
+      <refreshParent v="true" />
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>SingleDocument</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>AssignmentRowId_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentTable_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentName_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/documents/children/assignmentname_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityActionField>
+      <name>generateLetter</name>
+      <title>Generate letter</title>
+      <onActionProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/generateletter/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:FILE_PROCESS</iconId>
+      <tooltip>Generate letter</tooltip>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/SerialLetter_entity/entityfields/documents/children/assignmentname_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/documents/children/assignmentname_param/valueProcess.js
new file mode 100644
index 0000000000..642fa1338e
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/documents/children/assignmentname_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("SERIALLETTERFILE");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
new file mode 100644
index 0000000000..35957a3e3b
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.SERIALLETTERID"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
new file mode 100644
index 0000000000..f7c562b9ec
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("SERIALLETTER");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/iconIdProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/iconIdProcess.js
deleted file mode 100644
index e06faf34c6..0000000000
--- a/entity/SerialLetter_entity/entityfields/downloadletter/iconIdProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.vars");
-import("system.result");
-
-if (vars.get("$field.generated") == "1")
-    result.string("VAADIN:DOWNLOAD_ALT");
-else
-    result.string("VAADIN:FILE_PROCESS");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
index bdee8964fe..11b5418889 100644
--- a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
+++ b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
@@ -8,19 +8,12 @@ import("system.notification");
 import("Employee_lib");
 
 var letterId = vars.get("$field.SERIALLETTERID");
-if (vars.get("$field.generated") == "1")
+if (vars.get("$field.generated"))
 {
-    var metadata = SingleBinaryUtils.getMetadata("SERIALLETTER", "DOWNLOADFILE", letterId);
+    var metadata = SingleBinaryUtils.getMetadata("SERIALLETTER", "SERIALLETTERFILE", letterId);
     if (metadata)
     {
-        var document = SingleBinaryUtils.get("SERIALLETTER", "DOWNLOADFILE", letterId);
-        SingleBinaryUtils.remove("SERIALLETTER", "DOWNLOADFILE", letterId);
+        var document = SingleBinaryUtils.get("SERIALLETTER", "SERIALLETTERFILE", letterId);
         neon.download(document, metadata.filename);
-        neon.setFieldValue("$field.generated", "2");
-        //neon.refreshAll();
     }
-}
-else
-{
-    SerialLetterUtils.buildSerialLetterOnServer(letterId);
-}
+}
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js
index 4728777c05..55c3f88f34 100644
--- a/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js
+++ b/entity/SerialLetter_entity/entityfields/downloadletter/stateProcess.js
@@ -2,4 +2,4 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.generated") == "2" ? neon.COMPONENTSTATE_DISABLED : neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
+result.string(vars.get("$field.generated") ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/titleProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/titleProcess.js
deleted file mode 100644
index 8cb111c559..0000000000
--- a/entity/SerialLetter_entity/entityfields/downloadletter/titleProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.vars");
-import("system.translate");
-import("system.result");
-
-if (vars.get("$field.generated") == "1")
-    result.string(translate.text("Download letter"));
-else
-    result.string(translate.text("Generate letter"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js
deleted file mode 100644
index a100945064..0000000000
--- a/entity/SerialLetter_entity/entityfields/downloadletter/tooltipProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.vars");
-import("system.translate");
-import("system.result");
-
-if (vars.get("$field.generated") == "1")
-    result.string(translate.text("Download letter"));
-else
-    result.string(translate.text("Generate letter"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/generated/valueProcess.js b/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
index 226641e5a0..72d106321d 100644
--- a/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
+++ b/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && SingleBinaryUtils.checkExistsOneTime("SERIALLETTER", "DOWNLOADFILE", vars.get("$field.SERIALLETTERID"))
-    ? "1" : "0");
\ No newline at end of file
+result.string(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && SingleBinaryUtils.checkExistsOneTime("SERIALLETTER", "SERIALLETTERFILE", vars.get("$field.SERIALLETTERID"))
+    ? "true" : "");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/generateletter/onActionProcess.js b/entity/SerialLetter_entity/entityfields/generateletter/onActionProcess.js
new file mode 100644
index 0000000000..dde33c1f54
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/generateletter/onActionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("Bulkmail_lib");
+
+SerialLetterUtils.buildSerialLetterOnServer(vars.get("$field.SERIALLETTERID"));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js b/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
index 97c264a6ab..2a7c513ef7 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBDelete.js
@@ -6,4 +6,4 @@ newWhere("LETTERRECIPIENT.SERIALLETTER_ID", "$local.uid").deleteData();
 
 var uid = vars.get("$local.uid");
 SingleBinaryUtils.remove("SERIALLETTER", "DOCUMENT", uid);
-SingleBinaryUtils.remove("SERIALLETTER", "DOWNLOADFILE", uid);
\ No newline at end of file
+SingleBinaryUtils.remove("SERIALLETTER", "SERIALLETTERFILE", uid);
\ No newline at end of file
diff --git a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
index 2fcb861bd5..79137d917d 100644
--- a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
+++ b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
@@ -24,6 +24,11 @@
       <entityField>Activities</entityField>
       <view>ActivityFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>88fb3d1b-585b-4289-92c9-4a5c70e3748a</name>
+      <entityField>Documents</entityField>
+      <view>DocumentFilter_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>5cba2de9-e00b-4548-8477-5fc76b1e3cb6</name>
       <entityField>LogHistories</entityField>
diff --git a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
index 4347328c11..7752f7627c 100644
--- a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
+++ b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
@@ -13,7 +13,8 @@
       <iconField>ICON</iconField>
       <titleField>TITLE</titleField>
       <subtitleField>STATUS</subtitleField>
-      <favoriteAction1>downloadLetter</favoriteAction1>
+      <favoriteAction1>generateLetter</favoriteAction1>
+      <favoriteAction2>downloadLetter</favoriteAction2>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
     <genericViewTemplate>
diff --git a/process/buildSerialLetter_serverProcess/process.js b/process/buildSerialLetter_serverProcess/process.js
index 275dc5a265..1bf95d3e4a 100644
--- a/process/buildSerialLetter_serverProcess/process.js
+++ b/process/buildSerialLetter_serverProcess/process.js
@@ -17,7 +17,7 @@ var document = SerialLetterUtils.buildSerialLetter(letterId, recipientIds)
 //if (document)
 //    neon.download(document, template.filename);
 
-SingleBinaryUtils.set("SERIALLETTER", "DOWNLOADFILE", letterId, document.content, document.filename, "");
+SingleBinaryUtils.set("SERIALLETTER", "SERIALLETTERFILE", letterId, document.content, document.filename, "");
 
 var message = translate.text("Download ready");
 var description = translate.withArguments("Serial letter \"%0\" can now be downloaded", [document.title]);
-- 
GitLab