From 7000311c91dda7440fed2c8ca3f552caeca032ad Mon Sep 17 00:00:00 2001
From: "S.Listl" <S.Listl@SLISTL.aditosoftware.local>
Date: Wed, 21 Aug 2019 11:57:05 +0200
Subject: [PATCH] grantDelete processes optimized

---
 .../alter_BulkMailRecipient_problem.xml       |   9 +
 .../Data_alias/basic/2019.2.1/changelog.xml   |   3 +
 .../insert_BulkMailProblem_keyword.xml        |  22 +
 aliasDefinition/Data_alias/Data_alias.aod     | 569 ++++++++----------
 entity/BulkMail_entity/BulkMail_entity.aod    |   7 +
 .../entityfields/bindata/onValidation.js      |  26 +-
 .../downloadtemplate/onActionProcess.js       |   7 +
 .../downloadtemplate/stateProcess.js          |   8 +
 .../CampaignStep_entity/grantDeleteProcess.js |   6 +-
 entity/Campaign_entity/grantDeleteProcess.js  |   8 +-
 entity/Contract_entity/grantDeleteProcess.js  |   8 +-
 .../KeywordEntry_entity.aod                   |   6 +
 entity/Offer_entity/grantDeleteProcess.js     |  10 +-
 .../Organisation_entity.aod                   |   5 +
 .../entityfields/opentasks/valueProcess.js    |   6 +
 .../Organisation_entity/grantDeleteProcess.js |   8 +-
 entity/Person_entity/grantDeleteProcess.js    |   8 +-
 entity/Product_entity/grantDeleteProcess.js   |   6 +-
 .../Salesproject_entity/grantDeleteProcess.js |   8 +-
 .../SerialLetter_entity.aod                   |  22 +
 .../status/displayValueProcess.js             |   6 +
 .../entityfields/status/valueProcess.js       |   9 +
 .../containername_param/valueProcess.js       |   4 +
 .../status.displayvalue/expression.js         |   6 +
 .../BulkMailEdit_view/BulkMailEdit_view.aod   |  18 +-
 .../BulkMailFilter_view.aod                   |   8 +
 neonView/LetterEdit_view/LetterEdit_view.aod  |  16 +-
 .../OrganisationPreview_view.aod              |   4 +-
 .../SerialLetterEdit_view.aod                 |  24 +-
 .../SerialLetterFilter_view.aod               |   4 +
 .../SerialLetterPreview_view.aod              |   5 +
 process/Context_lib/process.js                |   2 +-
 process/DocumentTemplate_lib/process.js       |   2 +-
 process/KeywordRegistry_basic/process.js      |   4 +-
 process/MimeType_lib/process.js               |  11 +-
 process/Sql_lib/process.js                    |  17 +-
 36 files changed, 532 insertions(+), 360 deletions(-)
 create mode 100644 .liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml
 create mode 100644 .liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml
 create mode 100644 entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js
 create mode 100644 entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
 create mode 100644 entity/Organisation_entity/entityfields/opentasks/valueProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/status/displayValueProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/status/valueProcess.js
 create mode 100644 entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
 create mode 100644 entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js

diff --git a/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml b/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml
new file mode 100644
index 0000000000..ee05b957ba
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2.1/alter_BulkMailRecipient_problem.xml
@@ -0,0 +1,9 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.listl" id="b8a37d10-90db-497a-b2a7-69a25eff27ba">
+        <addColumn tableName="BULKMAILRECIPIENT">
+            <column name="PROBLEM" type="CHAR(36)"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.2.1/changelog.xml b/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
index 5293ca3573..f2b544658c 100644
--- a/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
+++ b/.liquibase/Data_alias/basic/2019.2.1/changelog.xml
@@ -8,4 +8,7 @@
     <include relativeToChangelogFile="true" file="insert_AttributeType_Theme_keyword.xml"/>
     
     <include relativeToChangelogFile="true" file="alter_Campaign_currency.xml"/>
+    
+    <include relativeToChangelogFile="true" file="alter_BulkMailRecipient_problem.xml"/>
+    <include relativeToChangelogFile="true" file="insert_BulkMailProblem_keyword.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml b/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml
new file mode 100644
index 0000000000..bce88c20a3
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2019.2.1/insert_BulkMailProblem_keyword.xml
@@ -0,0 +1,22 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.listl" id="8f2b7dca-9035-4f0c-a83f-1d16b5e57e81">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="a18e7a37-c5f6-4f7b-8db6-3018dedbd43f"/>
+            <column name="KEYID" value="MAILADDRESSDOESNOTEXIST             "/>
+            <column name="TITLE" value="Email address does not exist"/>
+            <column name="CONTAINER" value="BulkMailProblem"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="9f11c52f-4c79-4027-877a-0f6eb828fa22"/>
+            <column name="KEYID" value="MAILBLOCKED                         "/>
+            <column name="TITLE" value="Email blocked"/>
+            <column name="CONTAINER" value="BulkMailProblem"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index b56cd2af80..fa179fffd9 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -4203,58 +4203,6 @@
                   </customBooleanProperty>
                 </customProperties>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>SALESPROJECT_ID</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title>Salesproject</title>
-                <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                  <customJDitoProperty>
-                    <name>translate4Log</name>
-                    <global v="false" />
-                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/salesproject_id/customproperties/translate4log/property.js</property>
-                  </customJDitoProperty>
-                </customProperties>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>STATUS</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title>Status</title>
-                <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                  <customStringProperty>
-                    <name>keyword</name>
-                    <global v="false" />
-                    <property>SalesorderState</property>
-                  </customStringProperty>
-                </customProperties>
-              </entityFieldDb>
               <entityFieldDb>
                 <name>SALESORDERDATE</name>
                 <dbName></dbName>
@@ -4359,17 +4307,17 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>ADDRESS</name>
+                <name>OFFER_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="2005" />
-                <size v="2147483647" />
+                <columnType v="1" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
-                <title>Address</title>
+                <title>Offer</title>
                 <description></description>
                 <customProperties>
                   <customBooleanProperty>
@@ -4380,7 +4328,119 @@
                 </customProperties>
               </entityFieldDb>
               <entityFieldDb>
-                <name>OFFER_ID</name>
+                <name>ISOLANGUAGE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>NOTICE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYDUEDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CANCELLATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUNNINGTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>UNPAID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DUNNINGLEVEL</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="1" />
@@ -4390,22 +4450,127 @@
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
-                <title>Offer</title>
+                <title></title>
                 <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
-                <name>ISOLANGUAGE</name>
+                <name>DUNNINGDATE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENTTERMS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="1" />
-                <size v="3" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DELIVERYTERMS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAYMENTADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORDERTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PAID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DELIVERYADDRESS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ORDERSTATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -8233,13 +8398,27 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>STATUS</name>
+                <name>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CURRENCY</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -9299,230 +9478,6 @@
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -9920,6 +9875,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>PROBLEM</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -10284,20 +10253,6 @@
                 <name>MAIL</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-              <entityFieldDb>
-                <name>CURRENCY</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="1" />
-                <size v="36" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
                 <columnType v="2005" />
                 <size v="2147483647" />
                 <scale v="0" />
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index fc46b70b76..41ade9877e 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -212,6 +212,13 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityActionField>
+      <name>downloadTemplate</name>
+      <title>Download template</title>
+      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:FILE_FONT</iconId>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/BulkMail_entity/entityfields/bindata/onValidation.js b/entity/BulkMail_entity/entityfields/bindata/onValidation.js
index 015947cbe0..3bcd60e91c 100644
--- a/entity/BulkMail_entity/entityfields/bindata/onValidation.js
+++ b/entity/BulkMail_entity/entityfields/bindata/onValidation.js
@@ -1,13 +1,15 @@
-import("system.translate");
-import("Bulkmail_lib");
-import("system.result");
-import("system.vars");
-import("Document_lib");
+//import("system.translate");
+//import("Bulkmail_lib");
+//import("system.result");
+//import("system.vars");
+//import("Document_lib");
+//
+//var bindata = vars.get("$local.value");
+//if (bindata)
+//{
+//    let mimeType = DocumentUtil.getMimeTypeFromUpload(bindata);
+//    if (!BulkMailUtils.isValidMimeType(mimeType))
+//        result.string(translate.text("Invalid file type"));
+//}
 
-var bindata = vars.get("$local.value");
-if (bindata)
-{
-    let mimeType = DocumentUtil.getMimeTypeFromUpload(bindata);
-    if (!BulkMailUtils.isValidMimeType(mimeType))
-        result.string(translate.text("Invalid file type"));
-}
\ No newline at end of file
+//TODO: this should be validated with the code above, waiting for ticket #1042587
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js b/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js
new file mode 100644
index 0000000000..9a29cf50ed
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/downloadtemplate/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("DocumentTemplate_lib");
+
+var template = DocumentTemplate.loadTemplate(vars.get("$field.DOCUMENTTEMPLATE_ID"));
+if (template.type)
+    neon.download(template.content, template.filename);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js b/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
new file mode 100644
index 0000000000..70de594731
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/downloadtemplate/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$field.DOCUMENTTEMPLATE_ID"))
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+else
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/grantDeleteProcess.js b/entity/CampaignStep_entity/grantDeleteProcess.js
index 87f22c8c68..c9a9ccc60b 100644
--- a/entity/CampaignStep_entity/grantDeleteProcess.js
+++ b/entity/CampaignStep_entity/grantDeleteProcess.js
@@ -1,7 +1,9 @@
+import("system.neon");
 import("Context_lib");
 import("system.vars");
 import("ActivityTask_lib");
 import("system.result");
 
-result.string(!TaskUtils.hasTasks(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!TaskUtils.hasTasks(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Campaign_entity/grantDeleteProcess.js b/entity/Campaign_entity/grantDeleteProcess.js
index 8f6dbd3f5f..dce6326056 100644
--- a/entity/Campaign_entity/grantDeleteProcess.js
+++ b/entity/Campaign_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CAMPAIGN", null, vars.get("$field.CAMPAIGNID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("CAMPAIGN", null, vars.get("$field.CAMPAIGNID"))
+        && !TaskUtils.hasTasks(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.CAMPAIGNID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Contract_entity/grantDeleteProcess.js b/entity/Contract_entity/grantDeleteProcess.js
index 36b39de078..7c268463d6 100644
--- a/entity/Contract_entity/grantDeleteProcess.js
+++ b/entity/Contract_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTRACT", null, vars.get("$field.CONTRACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("CONTRACT", null, vars.get("$field.CONTRACTID"))
+        && !TaskUtils.hasTasks(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 609c83dc2e..4afab95d61 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -505,6 +505,12 @@
           <fieldName>KeywordDeliveryTerms</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>b4238087-6333-453a-a501-760732c68f5d</name>
+          <entityName>SerialLetter_entity</entityName>
+          <fieldName>StatusKeyword</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Offer_entity/grantDeleteProcess.js b/entity/Offer_entity/grantDeleteProcess.js
index 287fe52612..93fe93b75b 100644
--- a/entity/Offer_entity/grantDeleteProcess.js
+++ b/entity/Offer_entity/grantDeleteProcess.js
@@ -1,3 +1,4 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
@@ -5,7 +6,8 @@ import("system.vars");
 import("system.result");
 import("Offer_lib");
 
-result.string(OfferUtils.isDeletable(vars.get("$field.STATUS")) 
-    && !DocumentUtil.hasDocuments("OFFER", null, vars.get("$field.OFFERID"))
-    && !TaskUtils.hasTasks(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(OfferUtils.isDeletable(vars.get("$field.STATUS")) 
+        && !DocumentUtil.hasDocuments("OFFER", null, vars.get("$field.OFFERID"))
+        && !TaskUtils.hasTasks(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 71d0fc9328..1785ee9b62 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -899,6 +899,11 @@
       <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess>
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>OpenTasks</name>
+      <title>Open tasks</title>
+      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/opentasks/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/opentasks/valueProcess.js b/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
new file mode 100644
index 0000000000..496146a737
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("Context_lib");
+import("ActivityTask_lib");
+import("system.result");
+
+result.string(TaskUtils.getOpenTaskCount(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Organisation_entity/grantDeleteProcess.js b/entity/Organisation_entity/grantDeleteProcess.js
index c4ebf40c41..062489e598 100644
--- a/entity/Organisation_entity/grantDeleteProcess.js
+++ b/entity/Organisation_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
+        && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Person_entity/grantDeleteProcess.js b/entity/Person_entity/grantDeleteProcess.js
index c4ebf40c41..062489e598 100644
--- a/entity/Person_entity/grantDeleteProcess.js
+++ b/entity/Person_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("CONTACT", null, vars.get("$field.CONTACTID"))
+        && !TaskUtils.hasTasks(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Product_entity/grantDeleteProcess.js b/entity/Product_entity/grantDeleteProcess.js
index e60a76ed2f..2aa4ac0fb0 100644
--- a/entity/Product_entity/grantDeleteProcess.js
+++ b/entity/Product_entity/grantDeleteProcess.js
@@ -3,6 +3,8 @@ import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
+import("system.neon");
 
-result.string(!DocumentUtil.hasDocuments("PRODUCT", null, vars.get("$field.PRODUCTID"))
-    && !ActivityUtils.hasActivities(vars.get("$field.PRODUCTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("PRODUCT", null, vars.get("$field.PRODUCTID"))
+        && !ActivityUtils.hasActivities(vars.get("$field.PRODUCTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/grantDeleteProcess.js b/entity/Salesproject_entity/grantDeleteProcess.js
index 66d8dcc67d..fd4a209f50 100644
--- a/entity/Salesproject_entity/grantDeleteProcess.js
+++ b/entity/Salesproject_entity/grantDeleteProcess.js
@@ -1,9 +1,11 @@
+import("system.neon");
 import("Context_lib");
 import("ActivityTask_lib");
 import("Document_lib");
 import("system.vars");
 import("system.result");
 
-result.string(!DocumentUtil.hasDocuments("SALESPROJECT", null, vars.get("$field.SALESPROJECTID"))
-    && !TaskUtils.hasTasks(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId())
-    && !ActivityUtils.hasActivities(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
+    result.string(!DocumentUtil.hasDocuments("SALESPROJECT", null, vars.get("$field.SALESPROJECTID"))
+        && !TaskUtils.hasTasks(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId())
+        && !ActivityUtils.hasActivities(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod
index dd4c7fd86f..9eb7eb739c 100644
--- a/entity/SerialLetter_entity/SerialLetter_entity.aod
+++ b/entity/SerialLetter_entity/SerialLetter_entity.aod
@@ -101,6 +101,9 @@
     <entityField>
       <name>STATUS</name>
       <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityActionField>
       <name>downloadTemplate</name>
@@ -109,6 +112,20 @@
       <iconId>VAADIN:FILE_FONT</iconId>
       <stateProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/downloadtemplate/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityConsumer>
+      <name>StatusKeyword</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -161,6 +178,11 @@
         <dbRecordFieldMapping>
           <name>STATUS.value</name>
           <recordfield>SERIALLETTER.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js b/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000..1daf1e1399
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/status/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Keyword_lib");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.serialLetterStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/status/valueProcess.js b/entity/SerialLetter_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000..3df487964a
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,9 @@
+import("KeywordRegistry_basic");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    result.string($KeywordRegistry.serialLetterStatus$notSent());
+}
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000..d04ca40915
--- /dev/null
+++ b/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.serialLetterStatus());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
new file mode 100644
index 0000000000..a46009f04b
--- /dev/null
+++ b/entity/SerialLetter_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.serialLetterStatus(), "SERIALLETTER.STATUS");
+result.string(sql);
diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
index 6673a4671b..0e84b40866 100644
--- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
+++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
@@ -9,14 +9,28 @@
   </layout>
   <children>
     <genericViewTemplate>
-      <name>BulkMail</name>
+      <name>Generic</name>
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>b68c65de-4ecd-4a23-9242-f85e7b708b1e</name>
+          <name>55842e88-7e2b-41ee-b564-3c2e3fb04125</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>BulkMail</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
           <name>40628318-2c0e-4324-b676-f7bda2740166</name>
           <entityField>bindata</entityField>
diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
index 619e5a065c..dfcd3692b1 100644
--- a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
+++ b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
@@ -29,6 +29,14 @@
           <name>9ad2e3dd-5496-43f4-b6ff-5b2b8c1fb6db</name>
           <entityField>SUBJECT</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>735b4d0d-3730-4bd4-bf29-a3651b5e1e3c</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6bb9e1df-af54-45a5-a9b5-69bfe45e3491</name>
+          <entityField>DOCUMENTTEMPLATE_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>d8f9dce6-8c10-4235-b3c3-2d15d01586bc</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/LetterEdit_view/LetterEdit_view.aod b/neonView/LetterEdit_view/LetterEdit_view.aod
index 1feaa0b0cd..55ce2aa295 100644
--- a/neonView/LetterEdit_view/LetterEdit_view.aod
+++ b/neonView/LetterEdit_view/LetterEdit_view.aod
@@ -18,8 +18,22 @@
           <name>5919fb0b-13d8-4cd3-8110-89722d97f4e1</name>
           <entityField>DOCUMENT_TEMPLATE</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
-          <name>6513b2f4-d7c8-4bbe-b31a-290cf9bf7ded</name>
+          <name>352a7304-2308-4eea-8076-72e9d5c02a50</name>
           <entityField>bindata</entityField>
         </entityFieldLink>
       </fields>
diff --git a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
index 086e32cace..9781eefd46 100644
--- a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
+++ b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
@@ -82,8 +82,8 @@
           <entityField>LastActivity</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>cc143e94-006f-4059-925a-212e91c1ece7</name>
-          <entityField>CountActivity</entityField>
+          <name>f367d831-d594-4dc1-8e1e-b7c3bf45e2ad</name>
+          <entityField>OpenTasks</entityField>
         </entityFieldLink>
       </fields>
     </scoreCardViewTemplate>
diff --git a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
index a7414e5f27..7ec3125b62 100644
--- a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
+++ b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
@@ -9,22 +9,40 @@
   </layout>
   <children>
     <genericViewTemplate>
-      <name>Generic</name>
+      <name>Generic2</name>
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>98b1c32e-8f7e-45f9-bbc8-048851133048</name>
+          <name>9d341919-1306-40d1-bc3d-5cce3c2d5c04</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>downloadTemplate</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
         <entityFieldLink>
-          <name>057f064d-53fd-4d80-a43e-20a4a40d4ffb</name>
+          <name>a1a56052-1afa-4fa2-8aa9-1bc22148d8eb</name>
           <entityField>bindata</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>b33a8886-75b0-4644-890d-97a8133079ea</name>
           <entityField>TITLE</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>8b6a5de0-d1dc-4cdd-9f3b-a38cddce88ef</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>1845ae78-7132-4efc-aba0-737dc4d7fc9b</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
index 3ee26598c9..4d31906c0f 100644
--- a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
+++ b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
@@ -21,6 +21,10 @@
           <name>81088f4a-4ce6-43fc-8dab-7ecf1aec0386</name>
           <entityField>TITLE</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>73a5b1ea-913f-4562-aed1-95c6e665cd19</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>84aedf68-f90e-479c-912d-55cd499523cb</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
diff --git a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
index f81ecaef08..8b5f0701e9 100644
--- a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
+++ b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
@@ -12,6 +12,7 @@
       <name>Card</name>
       <iconField>ICON</iconField>
       <titleField>TITLE</titleField>
+      <subtitleField>STATUS</subtitleField>
       <favoriteAction1>downloadLetter</favoriteAction1>
       <entityField>#ENTITY</entityField>
     </cardViewTemplate>
@@ -24,6 +25,10 @@
           <name>b66a9401-6218-4b64-b233-06c878d86b21</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>272dc0ad-c6c1-434b-82c2-4bbcd4b4b088</name>
+          <entityField>STATUS</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>c8702eb8-3638-47a6-acf7-402c88c529cd</name>
           <entityField>DESCRIPTION</entityField>
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index 91628d6ace..c0ad201f69 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -440,7 +440,7 @@ ContextUtils.getSelectMap  = function()
                                                         ], "", false))
                                      .setContactIdField("CONTACT_ID")
                                      .setCreationDateField("SALESORDERDATE")
-                                     .setStateField("STATUS")
+                                     .setStateField("ORDERSTATUS")
                                      .setActiveStates([$KeywordRegistry.salesorderState$checked, $KeywordRegistry.salesorderState$sent])
             ,"Product": ContextSelector.create("PRODUCT", "PRODUCTID")
                                        .setTitleExpression(maskingUtils.concat([
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index 7d7e3f1492..ae480c4932 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -154,7 +154,7 @@ DocumentTemplate.fromUpload = function (pUploadValue)
     var type;
     
     //if the mimetype couldn't be determined, check the file extension
-    if (mimeType == "application/octet-stream")
+    if (mimeType == MimeTypes.BIN())
         type = DocumentTemplate.types.fromFileExtension(DocumentUtil.getFileExtensionFromUpload(filename));
     else
         type = DocumentTemplate.types.fromMimeType(mimeType);
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index dc11d8a098..948d4fe8aa 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -212,4 +212,6 @@ $KeywordRegistry.orderType$deliverynote = function(){return $KeywordRegistry._au
 $KeywordRegistry.orderType$invoice = function(){return $KeywordRegistry._autoPad("ORDTYPEINVO");};
 $KeywordRegistry.orderType$credit = function(){return $KeywordRegistry._autoPad("ORDTYPECRED");};
 $KeywordRegistry.orderType$cancellation = function(){return $KeywordRegistry._autoPad("ORDTYPECANC");};
-$KeywordRegistry.dunningLevel = function(){return "DunningLevel";};
\ No newline at end of file
+$KeywordRegistry.dunningLevel = function(){return "DunningLevel";};
+
+$KeywordRegistry.bulkMailProblem = function(){return "BulkMailProblem";};
\ No newline at end of file
diff --git a/process/MimeType_lib/process.js b/process/MimeType_lib/process.js
index 91d2403cd3..6f075f2fe3 100644
--- a/process/MimeType_lib/process.js
+++ b/process/MimeType_lib/process.js
@@ -1,15 +1,17 @@
 /**
  * Object for the enumeration of mime types.
- * This includes commonly used ones, if something is missing, feel free to add it.
+ * This is an incomplete list and includes commonly used types, if something is missing, feel free to add it.
  */
 function MimeTypes () {}
 
 /* application */
+MimeTypes.BIN = function () {return "application/octet-stream";};
 MimeTypes.ODT = function () {return "application/vnd.oasis.opendocument.text";};
 MimeTypes.PDF = function () {return "application/pdf";};
 MimeTypes.DOC = function () {return "application/msword";};
 MimeTypes.DOCX = function() {return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";};
 MimeTypes.XLS = function () {return "application/vnd.ms-excel";};
+MimeTypes.XLSX = function() {return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";};
 MimeTypes.PPT = function () {return "application/vnd.ms-powerpoint";};
 MimeTypes.MDB = function () {return "application/x-msaccess";};
 MimeTypes.RTF = function () {return "application/rtf";};
@@ -17,6 +19,8 @@ MimeTypes.JS = function  () {return "application/javascript";};
 MimeTypes.JSON = function() {return "application/json";};
 MimeTypes.ZIP = function () {return "application/zip";};
 MimeTypes.MSG = function () {return "application/vnd.ms-outlook";};
+MimeTypes.TAR = function () {return "application/x-tar";};
+MimeTypes.XHTML = function() {return "application/xhtml+xml";};
 
 /* text */
 MimeTypes.TXT = function () {return "text/plain";};
@@ -37,13 +41,18 @@ MimeTypes.JPEG = function() {return "image/jpeg";};
 MimeTypes.TIFF = function() {return "image/tiff";};
 MimeTypes.PNG = function () {return "image/png";};
 MimeTypes.SVG = function () {return "image/svg+xml";};
+MimeTypes.WEBP = function() {return "image/webp";};
 
 /* audio */
 MimeTypes.MP3 = function () {return "audio/mpeg";};
+MimeTypes.AAC = function () {return "audio/aac";};
 MimeTypes.OGG = function () {return "audio/ogg";};
 MimeTypes.WAV = function () {return "audio/x-wav";};
+MimeTypes.WEBA = function() {return "audio/webm";};
 
 /* video */
 MimeTypes.MPEG = function() {return "video/mpeg";};
 MimeTypes.MP4 = function () {return "video/mp4";};
 MimeTypes.AVI = function () {return "video/x-msvideo";};
+MimeTypes.OGV = function () {return "video/ogg";};
+MimeTypes.WEBM = function() {return "video/webm";};
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 12b84dc591..7d70bd0408 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -625,7 +625,7 @@ SqlCondition.equalsNot = function(pField, pValue, pAlternativeCond, pAlias) {
  * Object for building sqls. The main purpose of this is to make it
  * possible to use SqlCondition objects inside join conditions or sub sqls.
  * This can also be useful to build complex sqls where parts should be added
- * dynamically while keeping the code clear.
+ * dynamically while keeping the code clean.
  * 
  * @class
  */
@@ -658,13 +658,18 @@ function SqlBuilder ()
  *   .leftJoin("ORGANISATION", SqlCondition.begin()
  *       .and("CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID")
  *       .andPrepare("ORGANISATION.NAME", "S%", "# like ?")
- *       .build("1=2))
+ *       .build("1=2"))
  *   .where(SqlCondition.begin()
  *       .andPrepare("CONTACT.STATUS", $KeywordRegistry.contactStatus$active())
- *       .build("1=2))
- *   .build();
- *
- * var data = db.table(query);
+ *       .build("1=2"));
+ * 
+ * if (getCountry) //changing and adding parts
+ * {
+ *   query.select("ORGANISATION.NAME, FIRSTNAME, LASTNAME, COUNTRY");
+ *   query.leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID");
+ * }
+ *   
+ * var data = db.table(query.build());
  */
 SqlBuilder.begin = function ()
 {
-- 
GitLab