diff --git a/.liquibase/Data_alias/basic/2021.0.0/addDiscountToOrder.xml b/.liquibase/Data_alias/basic/2021.0.0/addDiscountToOrder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7f6d604f6b36675cb71721a84f65dc9a47744c2a
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.0/addDiscountToOrder.xml
@@ -0,0 +1,12 @@
+<?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="j.luginger" id="fc76d687-c5d8-4b12-919c-0324eb7f8f72">
+        <addColumn tableName="SALESORDER">
+            <column name="DISCOUNT"  type="NUMERIC(14,2)" />
+            <column name="DISCOUNTED_NET"  type="NUMERIC(14,2)" />
+            <column name="DISCOUNTED_VAT"  type="NUMERIC(14,2)" />
+        </addColumn>
+    </changeSet> 
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.0/changelog.xml b/.liquibase/Data_alias/basic/2021.0.0/changelog.xml
index 21d9b6123c339868f578deb1c41f89eb8269b0d3..80893bba73690c101cfdd077ae199d371a9ad61c 100644
--- a/.liquibase/Data_alias/basic/2021.0.0/changelog.xml
+++ b/.liquibase/Data_alias/basic/2021.0.0/changelog.xml
@@ -15,4 +15,5 @@
     <include relativeToChangelogFile="true" file="KeywordMigration/changelog.xml"/>
     <include relativeToChangelogFile="true" file="addDateNewToSalesproject.xml"/>
     <include relativeToChangelogFile="true" file="EwsContactSync/create_ab_synccontact.xml"/>
+    <include relativeToChangelogFile="true" file="addDiscountToOrder.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_offer.xml b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_offer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6bac2781ff4b79979b1579392634f6b6a2cc1d2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_offer.xml
@@ -0,0 +1,49 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="05a0c26f-0753-41b3-adc5-25ae99f75dd7">
+    <renameColumn newColumnName="PROBABILITY_OLD" oldColumnName="PROBABILITY" tableName="OFFER"/>
+    <addColumn tableName="OFFER">
+      <column afterColumn="PROBABILITY_OLD" name="PROBABILITY" type="DECIMAL(6, 2)"/>
+    </addColumn>
+    
+    <update tableName="OFFER">
+      <column name="PROBABILITY" valueNumeric="0"/>
+      <where>OFFER.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="0"/>
+      </whereParams>
+    </update>
+    <update tableName="OFFER">
+      <column name="PROBABILITY" valueNumeric="25"/>
+      <where>OFFER.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="25"/>
+      </whereParams>
+    </update>
+    <update tableName="OFFER">
+      <column name="PROBABILITY" valueNumeric="50"/>
+      <where>OFFER.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="50"/>
+      </whereParams>
+    </update>
+    <update tableName="OFFER">
+      <column name="PROBABILITY" valueNumeric="75"/>
+      <where>OFFER.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="75"/>
+      </whereParams>
+    </update>
+    <update tableName="OFFER">
+      <column name="PROBABILITY" valueNumeric="100"/>
+      <where>OFFER.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="100"/>
+      </whereParams>
+    </update>
+    
+    <dropColumn tableName="OFFER">
+      <column name="PROBABILITY_OLD"/>
+    </dropColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_salesproject.xml b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_salesproject.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03b2cc484dc898ed3df714a5204d7feb6505788d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/alter_salesproject.xml
@@ -0,0 +1,49 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="dbee2caa-50f2-4516-b5ea-e7e1087e4456">
+    <renameColumn newColumnName="PROBABILITY_OLD" oldColumnName="PROBABILITY" tableName="SALESPROJECT"/>
+    <addColumn tableName="SALESPROJECT">
+      <column afterColumn="PROBABILITY_OLD" name="PROBABILITY" type="DECIMAL(6, 2)"/>
+    </addColumn>
+    
+    <update tableName="SALESPROJECT">
+      <column name="PROBABILITY" valueNumeric="0"/>
+      <where>SALESPROJECT.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="SALPROJPROB0"/>
+      </whereParams>
+    </update>
+    <update tableName="SALESPROJECT">
+      <column name="PROBABILITY" valueNumeric="25"/>
+      <where>SALESPROJECT.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="SALPROJPROB25"/>
+      </whereParams>
+    </update>
+    <update tableName="SALESPROJECT">
+      <column name="PROBABILITY" valueNumeric="50"/>
+      <where>SALESPROJECT.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="SALPROJPROB50"/>
+      </whereParams>
+    </update>
+    <update tableName="SALESPROJECT">
+      <column name="PROBABILITY" valueNumeric="75"/>
+      <where>SALESPROJECT.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="SALPROJPROB75"/>
+      </whereParams>
+    </update>
+    <update tableName="SALESPROJECT">
+      <column name="PROBABILITY" valueNumeric="100"/>
+      <where>SALESPROJECT.PROBABILITY_OLD = ?</where>
+      <whereParams>
+        <param value="SALPROJPROB100"/>
+      </whereParams>
+    </update>
+    
+    <dropColumn tableName="SALESPROJECT">
+      <column name="PROBABILITY_OLD"/>
+    </dropColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/changelog.xml b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b185aa275da764cf657ba3eec80e1d0bf3aafe7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/changelog.xml
@@ -0,0 +1,6 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <include file="delete_probabiliy_keyword.xml" relativeToChangelogFile="true"/>
+  <include file="alter_salesproject.xml" relativeToChangelogFile="true"/>
+  <include file="alter_offer.xml" relativeToChangelogFile="true"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/delete_probabiliy_keyword.xml b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/delete_probabiliy_keyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8e52b09b6711607a134dde0cc1aa5b523da71e8a
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/ProbabilityMigration/delete_probabiliy_keyword.xml
@@ -0,0 +1,80 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="p.neub" id="2ebeb8cb-09fb-495a-afed-6a7904e6f294">
+    <delete tableName="AB_KEYWORD_CATEGORY">
+      <where>AB_KEYWORD_CATEGORYID = '91e847b9-9c35-4e1e-8936-045eb7d4f90a'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_CATEGORY">
+      <where>AB_KEYWORD_CATEGORYID = '05fe9872-c1a8-41ab-bf0b-d0df0537fe4f'</where>
+    </delete>
+    
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = 'ab44bd2c-dffa-4731-8a24-fad31f069c46'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = 'e59169d3-c0d9-4718-b8b6-e315857948a0'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '415f1cf0-8c5b-4b6e-9900-0d0d6d72381c'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '6182cc48-df2b-4ba9-893a-bcedfd0e1e4b'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = 'f5b601a5-451b-4ab6-9167-b95077e90c62'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = 'e14fab55-4a85-48c2-a109-125eaed9dc3f'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '8f55a5e3-00a9-4691-ab79-309a3eda68ec'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '808a55bc-5876-4deb-a78f-bb352c41d712'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '941e60df-a4f5-4ae8-9ca1-d9f2b2d01d9d'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ENTRY">
+      <where>AB_KEYWORD_ENTRYID = '2f21341b-9991-4967-a785-60216ec8c25e'</where>
+    </delete>
+    
+    <delete tableName="AB_KEYWORD_ATTRIBUTE">
+      <where>AB_KEYWORD_ATTRIBUTEID = '2fabbd9a-89d2-49e3-b3aa-1dcbc77252c7'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTE">
+      <where>AB_KEYWORD_ATTRIBUTEID = 'b9766994-4e7d-4079-a0bc-f1397f93047f'</where>
+    </delete>
+    
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = '173b7c41-4f00-486d-8e24-8c7e9feb246b'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = '2d8b8da4-1241-4094-abf5-54d8cacadcaf'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = 'd02adcf4-fdc0-4614-ad44-88fa9de77a37'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = 'ad5da2d5-31ed-433d-8822-16ca9f763a9f'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = 'fde64249-12c6-4140-9f3f-19585c2ba8fd'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = '36fa5f86-6abf-4065-ae3d-e8e614985967'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = '8b719177-b9a1-44f8-bfba-34b678d84daa'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = 'a7cc397c-b246-4552-9bf4-537ad4d4476d'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = '1a233346-a284-49a8-ac51-c3a214474e88'</where>
+    </delete>
+    <delete tableName="AB_KEYWORD_ATTRIBUTERELATION">
+      <where>AB_KEYWORD_ATTRIBUTERELATIONID = 'f25f0406-998b-4b29-9432-4dafa378f1eb'</where>
+    </delete>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/changelog.xml b/.liquibase/Data_alias/basic/2021.0.1/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..177203074a8579de2393bf20ad25ddafc4fe6795
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/changelog.xml
@@ -0,0 +1,6 @@
+<?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">
+    <include relativeToChangelogFile="true" file="update_SalesOrderItemRemoveOptional.xml"/>
+    <include relativeToChangelogFile="true" file="ProbabilityMigration/changelog.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.0.1/update_SalesOrderItemRemoveOptional.xml b/.liquibase/Data_alias/basic/2021.0.1/update_SalesOrderItemRemoveOptional.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64bf902478621ef41504593718480ac0184474f6
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.0.1/update_SalesOrderItemRemoveOptional.xml
@@ -0,0 +1,10 @@
+<?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="b.ulrich" id="2bbb96a8-077f-43de-af4c-e279d993fff8">
+        <dropColumn tableName="SALESORDERITEM">
+            <column name="OPTIONAL"/>
+        </dropColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/offer.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/offer.xml
index 8be28d744ec1851598a06432416c573fc92450ab..fbd8e3bdb19a5a1e8730b7cc0fbdc13d15e02142 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/offer.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/offer.xml
@@ -14,7 +14,7 @@
       <column name="ADDRESS" value="Gfk AG  Wilhelm-Straße 4 80807 München"/>
       <column name="OFFERDATE" valueDate="2018-02-23T01:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="0"/>
+      <column name="PROBABILITY" valueNumeric="0"/>
       <column name="OFFERCODE" valueNumeric="1003"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
@@ -32,7 +32,7 @@
       <column name="ADDRESS" value="Gfk AG  Wilhelm-Straße 4 80807 München"/>
       <column name="OFFERDATE" valueDate="2018-08-12T02:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1001"/>
       <column name="VAT" valueNumeric="79.80"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
@@ -50,7 +50,7 @@
       <column name="ADDRESS" value="Gfk AG  Wilhelm-Straße 4 80807 München"/>
       <column name="OFFERDATE" valueDate="2018-11-21T01:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="100"/>
+      <column name="PROBABILITY" valueNumeric="100"/>
       <column name="OFFERCODE" valueNumeric="1000"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
@@ -72,7 +72,7 @@
       <column name="ADDRESS" value="Transatlantik Logistics GmbH&#10;Friedrichshafen 12&#10;88046 Friedrichshafen"/>
       <column name="OFFERDATE" valueDate="2020-05-20T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1008"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:03:46"/>
@@ -95,7 +95,7 @@
       <column name="ADDRESS" value="Industrial Steel AG&#10;Königstraße 4&#10;22767  Hamburg"/>
       <column name="OFFERDATE" valueDate="2020-03-16T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="75"/>
+      <column name="PROBABILITY" valueNumeric="75"/>
       <column name="OFFERCODE" valueNumeric="1013"/>
       <column name="VAT" valueNumeric="4750.00"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:04:28"/>
@@ -117,7 +117,7 @@
       <column name="ADDRESS" value="Bucher Unternehmensgruppe&#10;Julius-Leber-Straße 5&#10;22765 Hamburg"/>
       <column name="OFFERDATE" valueDate="2020-04-06T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="0"/>
+      <column name="PROBABILITY" valueNumeric="0"/>
       <column name="OFFERCODE" valueNumeric="1014"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="DATE_NEW" valueDate="2020-09-16T09:11:19"/>
@@ -140,7 +140,7 @@
       <column name="ADDRESS" value="Skyscraper Bau GmbH&#10;Bolzstraße 64&#10;70173 Stuttgart"/>
       <column name="OFFERDATE" valueDate="2020-07-06T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1011"/>
       <column name="VAT" valueNumeric="10165.00"/>
       <column name="DATE_NEW" valueDate="2019-05-22T11:40:03"/>
@@ -180,7 +180,7 @@
       <column name="ADDRESS" value="Gfk AG  Wilhelm-Straße 4 80807 München"/>
       <column name="OFFERDATE" valueDate="2018-06-14T02:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="75"/>
+      <column name="PROBABILITY" valueNumeric="75"/>
       <column name="OFFERCODE" valueNumeric="1002"/>
       <column name="VAT" valueNumeric="119.70"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
@@ -202,7 +202,7 @@
       <column name="ADDRESS" value="Skyscraper Bau GmbH&#10;Bolzstraße 64&#10;70173 Stuttgart"/>
       <column name="OFFERDATE" valueDate="2020-08-19T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="OFFERCODE" valueNumeric="1006"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="DATE_NEW" valueDate="2019-05-17T08:23:52"/>
@@ -225,7 +225,7 @@
       <column name="ADDRESS" value="Industrial Steel AG&#10;Königstraße 4&#10;22767  Hamburg"/>
       <column name="OFFERDATE" valueDate="2020-05-15T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="OFFERCODE" valueNumeric="1010"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:28:20"/>
@@ -248,7 +248,7 @@
       <column name="ADDRESS" value="Industrial Steel AG&#10;Königstraße 4&#10;22767  Hamburg"/>
       <column name="OFFERDATE" valueDate="2020-05-14T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1005"/>
       <column name="VAT" valueNumeric="39.90"/>
       <column name="DATE_NEW" valueDate="2019-05-16T01:35:17"/>
@@ -267,7 +267,7 @@
       <column name="ADDRESS" value="Gfk AG  Wilhelm-Straße 4 80807 München"/>
       <column name="OFFERDATE" valueDate="2017-11-09T01:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1004"/>
       <column name="VAT" valueNumeric="159.60"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
@@ -289,7 +289,7 @@
       <column name="ADDRESS" value="Industrial Steel AG&#10;Königstraße 4&#10;22767  Hamburg"/>
       <column name="OFFERDATE" valueDate="2020-03-23T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="OFFERCODE" valueNumeric="1012"/>
       <column name="VAT" valueNumeric="8550.00"/>
       <column name="DATE_NEW" valueDate="2019-05-23T09:00:44"/>
@@ -312,7 +312,7 @@
       <column name="ADDRESS" value="Transatlantik Logistics GmbH&#10;Friedrichshafen 12&#10;88046 Friedrichshafen"/>
       <column name="OFFERDATE" valueDate="2020-07-06T12:00:00"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="PROBABILITY" value="75"/>
+      <column name="PROBABILITY" valueNumeric="75"/>
       <column name="OFFERCODE" valueNumeric="1009"/>
       <column name="VAT" valueNumeric="0.00"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:27:12"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorderitem.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorderitem.xml
index a7f439b41f7bdd297ae3ae0cee4f264fe9614d9f..f2f54c736ff6a767c4726a7c57c50dfa5ad3eb65 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorderitem.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorderitem.xml
@@ -7,7 +7,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Klimaanlage 2-Zonen"/>
       <column name="SALESORDER_ID" value="9069d098-7237-4fed-a365-ad2e60bf740f"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -21,7 +20,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Turbolader"/>
       <column name="SALESORDER_ID" value="4eb43698-a4e7-4617-8150-1b279dcce9f2"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -34,7 +32,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Turbolader"/>
       <column name="SALESORDER_ID" value="1b9bd530-f45b-4074-872f-b8362cfc5ed0"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -45,7 +42,6 @@
     <insert tableName="salesorderitem">
       <column name="QUANTITY" valueNumeric="1.00"/>
       <column name="SALESORDER_ID" value="66f6ffc1-702a-4ebe-9158-6214884d658d"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="PRICE" valueNumeric="145000.00"/>
@@ -58,7 +54,6 @@
       <column name="ITEMNAME" value="AX45"/>
       <column name="SALESORDER_ID" value="373f28a5-a812-433b-8196-a6bf8bdd5656"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -71,7 +66,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Klimaanlage 4-Zonen"/>
       <column name="SALESORDER_ID" value="4eb43698-a4e7-4617-8150-1b279dcce9f2"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -85,7 +79,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP1                       "/>
       <column name="ITEMNAME" value="Stahlträger Standard"/>
       <column name="SALESORDER_ID" value="63a33308-4ae4-4de7-bd59-162f3677e819"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYKGS"/>
@@ -99,7 +92,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Klimaanlage 4-Zonen"/>
       <column name="SALESORDER_ID" value="1b9bd530-f45b-4074-872f-b8362cfc5ed0"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -113,7 +105,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Standard Gerüst"/>
       <column name="SALESORDER_ID" value="fc691949-4f61-485c-8e97-8f3d0d3d3962"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -127,7 +118,6 @@
       <column name="ITEMNAME" value="Ersatzteil 3"/>
       <column name="SALESORDER_ID" value="50c64e0f-6a21-4842-ab41-b27c70d0939a"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -141,7 +131,6 @@
       <column name="ITEMNAME" value="AX45"/>
       <column name="SALESORDER_ID" value="545ffd81-cfa5-4be6-b62c-df269909dcd4"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYHOUR"/>
@@ -155,7 +144,6 @@
       <column name="ITEMNAME" value="AX45"/>
       <column name="SALESORDER_ID" value="3ce30718-ecc6-4543-95c8-1b25e1b6db43"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -169,7 +157,6 @@
       <column name="ITEMNAME" value="WG2 Proudkt 3"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="3"/>
       <column name="ITEMPOSITION" value="3"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -183,7 +170,6 @@
       <column name="ITEMNAME" value="AX45"/>
       <column name="SALESORDER_ID" value="4b0e2423-d09d-47fc-b274-5a9fde013b64"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -197,7 +183,6 @@
       <column name="ITEMNAME" value="WG2 Produkt 5"/>
       <column name="SALESORDER_ID" value="e40eb96e-1f1f-4afa-9bd3-f70eff9041c0"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -211,7 +196,6 @@
       <column name="ITEMNAME" value="Förderanlage"/>
       <column name="SALESORDER_ID" value="63a33308-4ae4-4de7-bd59-162f3677e819"/>
       <column name="DISCOUNT" valueNumeric="5.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -224,7 +208,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP2                       "/>
       <column name="ITEMNAME" value="Bremsscheiben"/>
       <column name="SALESORDER_ID" value="9069d098-7237-4fed-a365-ad2e60bf740f"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -237,7 +220,6 @@
       <column name="GROUPCODEID" value="PRODUCTGROUP3                       "/>
       <column name="ITEMNAME" value="Gipsplatten"/>
       <column name="SALESORDER_ID" value="fc691949-4f61-485c-8e97-8f3d0d3d3962"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
@@ -251,7 +233,6 @@
       <column name="ITEMNAME" value="Service Einsatz"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="2"/>
       <column name="ITEMPOSITION" value="2"/>
       <column name="UNIT" value="QUANTITYHOUR"/>
@@ -265,7 +246,6 @@
       <column name="ITEMNAME" value="WG2 Produkt 4"/>
       <column name="SALESORDER_ID" value="5e082fe5-99d4-43be-aaad-e596f844fa8a"/>
       <column name="VAT" valueNumeric="19.00"/>
-      <column name="OPTIONAL" valueNumeric="0"/>
       <column name="ITEMSORT" valueNumeric="1"/>
       <column name="ITEMPOSITION" value="1"/>
       <column name="UNIT" value="QUANTITYPIECES"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
index 501abc4a8119a32b98be9512a91506f1fee1b5d7..e974404a483fca6b30869ed902b060c218cfa29b 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
@@ -7,7 +7,7 @@
       <column name="PHASE" value="SALPROJPHASESQO"/>
       <column name="ENDDATE" valueDate="2021-05-20T12:00:00"/>
       <column name="SALESPROJECTID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="PROJECTCODE" valueNumeric="1002"/>
       <column name="PROJECTTITLE" value="Erstprojekt"/>
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
@@ -20,7 +20,7 @@
       <column name="PHASE" value="SALPROJPHASESAL"/>
       <column name="ENDDATE" valueDate="2021-05-17T12:00:00"/>
       <column name="SALESPROJECTID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="PROJECTCODE" valueNumeric="1003"/>
       <column name="PROJECTTITLE" value="Skyscraper / Pilotprojekt"/>
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
@@ -33,7 +33,7 @@
       <column name="PHASE" value="SALPROJPHASEOFFER"/>
       <column name="ENDDATE" valueDate="2022-05-22T12:00:00"/>
       <column name="SALESPROJECTID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-      <column name="PROBABILITY" value="SALPROJPROB50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="PROJECTCODE" valueNumeric="1005"/>
       <column name="PROJECTTITLE" value="Kronen Pilotprojekt"/>
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
@@ -46,7 +46,7 @@
       <column name="PHASE" value="SALPROJPHASESAL"/>
       <column name="ENDDATE" valueDate="2022-05-18T12:00:00"/>
       <column name="SALESPROJECTID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="PROJECTCODE" valueNumeric="1004"/>
       <column name="PROJECTTITLE" value="Transatlantik Initialprojekt"/>
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
@@ -58,7 +58,7 @@
       <column name="PHASE" value="SALPROJPHASENQC"/>
       <column name="ENDDATE" valueDate="2021-11-26T12:00:00"/>
       <column name="SALESPROJECTID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-      <column name="PROBABILITY" value="SALPROJPROB50"/>
+      <column name="PROBABILITY" valueNumeric="50"/>
       <column name="PROJECTCODE" valueNumeric="1007"/>
       <column name="PROJECTTITLE" value="Projekt 123"/>
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
@@ -71,7 +71,7 @@
       <column name="PHASE" value="SALPROJPHASEMQC"/>
       <column name="ENDDATE" valueDate="2022-05-22T12:00:00"/>
       <column name="SALESPROJECTID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-      <column name="PROBABILITY" value="SALPROJPROB25"/>
+      <column name="PROBABILITY" valueNumeric="25"/>
       <column name="PROJECTCODE" valueNumeric="1006"/>
       <column name="PROJECTTITLE" value="Buchner Neuprojekt"/>
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index 12d0865aebe1c4bc81cb8563000a34e896ec8998..0e119a8ff0c966e6cc4761f641a92445cdc95ecb 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -20,6 +20,7 @@
     <include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.2.3/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2021.0.0/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="basic/2021.0.1/changelog.xml"/>
 
     <!--enable this only when you definetly want to overwrite the existing data with demo records:-->
     <!--<include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>-->
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index c11813dbb29225d87cc86ba13b661a200c04c77d..2175c22884be38146d736ca8d19f523168fa5210 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -2723,9 +2723,9 @@
                 <name>PROBABILITY</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
-                <scale v="0" />
+                <columnType v="3" />
+                <size v="6" />
+                <scale v="2" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -3712,9 +3712,9 @@
                 <name>PROBABILITY</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
-                <scale v="0" />
+                <columnType v="3" />
+                <size v="6" />
+                <scale v="2" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -4914,6 +4914,48 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_VAT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISCOUNTED_NET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2" />
+                <size v="14" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -5096,32 +5138,6 @@
                   </customBooleanProperty>
                 </customProperties>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>OPTIONAL</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="5" />
-                <size v="5" />
-                <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title>Optional</title>
-                <description></description>
-                <customProperties>
-                  <customBooleanProperty>
-                    <name>log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                  <customBooleanProperty>
-                    <name>autoMapTrueFalse4Log</name>
-                    <global v="false" />
-                    <property v="true" />
-                  </customBooleanProperty>
-                </customProperties>
-              </entityFieldDb>
               <entityFieldDb>
                 <name>GROUPCODEID</name>
                 <dbName></dbName>
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
index a962faa8460527ec241f6d7d408b0191a62a8215..50b80a7140e7174360fc74fd7532e1ae3c65d0a2 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js
@@ -4,6 +4,7 @@ import("system.result");
 import("system.vars");
 import("Campaign_lib");
 import("FilterViewAction_lib");
+import("Util_lib");
 
 var res = "";
 var resNotAdded = "\n";
@@ -11,7 +12,7 @@ var resNotAdded = "\n";
 if(vars.get("$field.CAMPAIGN_ID") && vars.get("$field.campaignparticipantContactIds") && !vars.get("$sys.validationerrors"))
 {
     var selectedIds;
-    var isUpdate = vars.get("$param.isUpdate_param");
+    var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param"));
     var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length;
     var comingfrom = vars.get("$param.dataSourceTableName_param");
     
diff --git a/entity/Campaign_entity/entityfields/status/valueProcess.js b/entity/Campaign_entity/entityfields/status/valueProcess.js
index c3b6c3a036232875d3123ed76e88d24c518a0e7f..709bac7b561d6b2c1196a79c7cdf68a6fb14e5c6 100644
--- a/entity/Campaign_entity/entityfields/status/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/status/valueProcess.js
@@ -1,7 +1,10 @@
-import("KeywordRegistry_basic");
 import("system.neon");
 import("system.vars");
 import("system.result");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
-    result.string($KeywordRegistry.campaignState$planning);
\ No newline at end of file
+{
+    result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignState(), $KeywordRegistry.campaignState$planning()));
+}
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 0604749d96591ca6bcac5da852be07f170278f69..1fd447f2c7fd885bb1c2fa5c3de283de3e3acfb2 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -253,24 +253,12 @@
           <fieldName>KeywordAttributeTypes</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>718fe5a2-c75f-49ed-b67e-fc4fbf63ff1d</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>KeywordProbabilties</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>a44375e9-917c-4db8-9aa8-de0625caf78f</name>
           <entityName>Activity_entity</entityName>
           <fieldName>KeywordCategories</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>f442a641-4dff-4860-bf4c-cfddc054e075</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>KeywordProbabilities</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>fa831dac-3287-422a-8f28-504fc525876a</name>
           <entityName>Communication_entity</entityName>
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index d03d338d99b497acd580e820f5cb8713eb9c53c1..89c126aae63a6c4ca813d6384d10c1c3c19d27df 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -75,12 +75,14 @@
     <entityField>
       <name>PROBABILITY</name>
       <title>Probability</title>
-      <consumer>KeywordProbabilities</consumer>
       <contentType>NUMBER</contentType>
+      <maxValue v="100" />
+      <minValue v="0" />
+      <outputFormat>0.00'%'</outputFormat>
       <groupable v="true" />
+      <dropDownProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/dropDownProcess.js</dropDownProcess>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>STATUS</name>
@@ -344,21 +346,6 @@
         <fieldName>ISO3Name</fieldName>
       </dependency>
     </entityConsumer>
-    <entityConsumer>
-      <name>KeywordProbabilities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordprobabilities/children/containername_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityConsumer>
       <name>Activities</name>
       <dependency>
@@ -1032,22 +1019,22 @@
       <displayValueProcess>%aditoprj%/entity/Offer_entity/entityfields/discounted_vat/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
-        <name>Products</name>
-        <children>
-            <entityParameter>
-                <name>OrderOfferInformations_param</name>
-                <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/products/children/orderofferinformations_param/valueProcess.js</valueProcess>
-            </entityParameter>
-            <entityParameter>
-                <name>ShownInOfferMainView_param</name>
-                <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/products/children/showninoffermainview_param/valueProcess.js</valueProcess>
-            </entityParameter>
-        </children>
-        <dependency>
-            <name>dependency</name>
-            <entityName>Product_entity</entityName>
-            <fieldName>Products</fieldName>
-        </dependency>
+      <name>Products</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Product_entity</entityName>
+        <fieldName>Products</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>OrderOfferInformations_param</name>
+          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/products/children/orderofferinformations_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ShownInOfferMainView_param</name>
+          <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/products/children/showninoffermainview_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
     </entityConsumer>
     <entityActionGroup>
       <name>observeActionGroup</name>
@@ -1235,10 +1222,6 @@
           <name>STATUS.displayValue</name>
           <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>PROBABILITY.displayValue</name>
-          <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PAYMENTTERMS.value</name>
           <recordfield>OFFER.PAYMENTTERMS</recordfield>
@@ -1344,10 +1327,6 @@
           <recordfield>OFFER.OFFERID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
-        <aggregateFieldDbMapping>
-          <name>PROBABILITY_aggregate.value</name>
-          <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability_aggregate.value/expression.js</expression>
-        </aggregateFieldDbMapping>
         <dbRecordFieldMapping>
           <name>OFFER_ID.value</name>
           <recordfield>OFFER.OFFER_ID</recordfield>
@@ -1368,6 +1347,11 @@
           <name>DISCOUNTED_VAT.value</name>
           <recordfield>OFFER.DISCOUNTED_VAT</recordfield>
         </dbRecordFieldMapping>
+        <aggregateFieldDbMapping>
+          <name>PROBABILITY_aggregate.value</name>
+          <recordfield>OFFER.PROBABILITY</recordfield>
+          <aggregateType>AVG</aggregateType>
+        </aggregateFieldDbMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
index e833fd2b232711df202d9d8fc5a8ce87a3437dcb..3eb3a981bf7b535d0a5452b4fac94a1f0a788cf1 100644
--- a/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
+++ b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
@@ -4,8 +4,7 @@ import("system.neon");
 import("system.vars");
 
 //the value of this field can also be changed by CONTACT_ID.onValueChange
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("this.value") == null)
 {
     var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID"));
     if (defaultAddressId)
diff --git a/entity/Offer_entity/entityfields/contact_id/onValueChange.js b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
index 74fa8e077b78ed95d1e417ae9326c2ae2ff2d837..b4795cd6992949c03f9a7174a6b2c74bee969827 100644
--- a/entity/Offer_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
@@ -6,8 +6,9 @@ import("system.db");
 import("Util_lib");
 import("Entity_lib");
 import("Contact_lib");
+import("system.datetime");
 
-var contactid = vars.get("local.value");
+var contactid = vars.get("$local.value");
 if(contactid != "")
 {
     //Language Preset
@@ -16,22 +17,43 @@ if(contactid != "")
                     .where("CONTACT.CONTACTID", contactid)
                     .cell();
     if(lang != "") 
-        neon.setFieldValue("field.ISOLANGUAGE", lang);
+    {
+        neon.setFieldValue("$field.ISOLANGUAGE", lang);
+    }
     
+    //Address Preset
     var defaultAddressId = ContactUtils.getDefaultAddressId(contactid);
     if (defaultAddressId)
     {
-        neon.setFieldValue("field.ChosenAddress", defaultAddressId);
-            neon.setFieldValue("$field.ADDRESS", AddressUtils.getAddressById(defaultAddressId));
+        neon.setFieldValue("$field.ChosenAddress", defaultAddressId);
+        neon.setFieldValue("$field.ADDRESS", AddressUtils.getAddressById(defaultAddressId));
     }
     var addrobj = new AddrObject(contactid);
     var salutation = addrobj.getFormattedAddress(false, "{letter_salutation},");
     if (salutation != "Err.,")
+    {
         neon.setFieldValue("field.LETTERSALUTATION", salutation);
+    }
     
     // set $field.CONTATCT_ORG_ID per contactid
     var orgid = ContactUtils.getPersOrgIds(contactid);
     neon.setFieldValue("$field.CONTACT_ORG_ID", orgid[2]);
+    
+    //Salesproject Preset
+    if(vars.get("$field.OBJECT_TYPE") == "Salesproject")
+    {
+        var today = datetime.today();
+        var salesProjectId = newSelect("SALESPROJECT.SALESPROJECTID")
+                                        .from("SALESPROJECT")
+                                        .where("SALESPROJECT.CONTACT_ID",  contactid)
+                                        .and(newWhere("SALESPROJECT.STARTDATE", today, SqlBuilder.GREATER_OR_EQUAL()).or("SALESPROJECT.STARTDATE is null"))
+                                        .cell();
+        if(salesProjectId)
+        {
+            neon.setFieldValue("$field.OBJECT_ROWID", salesProjectId);
+        }
+    }
+
 } 
 else
 {
@@ -39,7 +61,7 @@ else
     neon.setFieldValue("$field.ISOLANGUAGE", "");
 }
 
-if(!vars.get("$param.ObjectRowId_param"))
+if(!vars.get("$param.ObjectRowId_param") && !(vars.get("$field.OBJECT_TYPE") == "Salesproject" && vars.get("$field.OBJECT_ROWID")))
 {
     neon.setFieldValue("$field.OBJECT_ROWID", "");
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/keywordprobabilities/children/containername_param/valueProcess.js b/entity/Offer_entity/entityfields/keywordprobabilities/children/containername_param/valueProcess.js
deleted file mode 100644
index 5201e2bd086a135a79c013249a4e96128c326955..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/entityfields/keywordprobabilities/children/containername_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string($KeywordRegistry.offerProbability());
diff --git a/entity/Offer_entity/entityfields/neworder/onActionProcess.js b/entity/Offer_entity/entityfields/neworder/onActionProcess.js
index dbaec31a9aeba19cb139de45ab7bb2a7c975d943..4caa7f1855881b334607e4424879d882f87f31b0 100644
--- a/entity/Offer_entity/entityfields/neworder/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/neworder/onActionProcess.js
@@ -9,6 +9,7 @@ var currency = vars.getString("$field.CURRENCY");
 var language = vars.getString("$field.ISOLANGUAGE");
 var address = vars.getString("$field.ADDRESS");
 var offerId = vars.getString("$field.OFFERID");
+var discount = vars.getString("$field.DISCOUNT");
 
-OfferUtils.copyToOrder(offerId, pContext, pRowId, contactId, language, currency, address);
+OfferUtils.copyToOrder(offerId, pContext, pRowId, contactId, language, currency, address, discount);
     
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/probability/displayValueProcess.js b/entity/Offer_entity/entityfields/probability/displayValueProcess.js
deleted file mode 100644
index 888f3e80c6b6961d0e3b7caf8820bc54a7f17cba..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/entityfields/probability/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.offerProbability(), vars.get("$field.PROBABILITY")));
diff --git a/entity/Offer_entity/entityfields/probability/dropDownProcess.js b/entity/Offer_entity/entityfields/probability/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ce6525ee92048543d83d251c2b289e710aa5e01
--- /dev/null
+++ b/entity/Offer_entity/entityfields/probability/dropDownProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+
+result.object([
+    ["0.00", "0%"],
+    ["25.00", "25%"],
+    ["50.00", "50%"],
+    ["75.00", "75%"],
+    ["100.00", "100%"]
+]);
diff --git a/entity/Offer_entity/entityfields/probability/valueProcess.js b/entity/Offer_entity/entityfields/probability/valueProcess.js
index 410c669a772468381243551aa7d9577c25f4d07c..ad82690b022e8c95df71cc2a924d30b643efcacc 100644
--- a/entity/Offer_entity/entityfields/probability/valueProcess.js
+++ b/entity/Offer_entity/entityfields/probability/valueProcess.js
@@ -1,13 +1,8 @@
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-import("AttributeRegistry_basic");
 import("system.neon");
 import("system.result");
 import("system.vars");
-import("Attribute_lib");
-import("Contact_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    result.string(KeywordUtils.getFirst($KeywordRegistry.offerProbability()));
+    result.string("0.00");
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
deleted file mode 100644
index e9591dca90a38b8354700b428504eec663a4afeb..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.offerProbability(), "OFFER.PROBABILITY");
-result.string(sql);
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability_aggregate.value/expression.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability_aggregate.value/expression.js
deleted file mode 100644
index 25f76f180180bfc8602cee9566751078ba280678..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability_aggregate.value/expression.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.SQLTYPES");
-import("system.result");
-import("Sql_lib");
-
-var helper = new SqlMaskingUtils();
-result.string("AVG("+ helper.cast("OFFER.PROBABILITY", SQLTYPES.INTEGER)  + ")");
\ No newline at end of file
diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod
index ad9892139f1fd85ceec66e62b2b6d490095a13b0..f9d3dd60f06a287133e98358fda08d724f3316c6 100644
--- a/entity/Order_entity/Order_entity.aod
+++ b/entity/Order_entity/Order_entity.aod
@@ -87,6 +87,7 @@
       <title>Total VAT</title>
       <contentType>NUMBER</contentType>
       <state>READONLY</state>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/vat/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/vat/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -108,6 +109,11 @@
     <entityConsumer>
       <name>Orderitems</name>
       <description></description>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Orderitem_entity</entityName>
+        <fieldName>Orderitems</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>OrderId_param</name>
@@ -132,12 +138,11 @@
           <expose v="true" />
           <mandatory v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>Discount_param</name>
+          <valueProcess>%aditoprj%/entity/Order_entity/entityfields/orderitems/children/discount_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Orderitem_entity</entityName>
-        <fieldName>Orderitems</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>NET</name>
@@ -199,6 +204,11 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -209,15 +219,15 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>MainDocuments</name>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -228,28 +238,28 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Salesprojects</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>Salesprojects</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>Salesprojects</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>KeywordCurrencies</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -257,14 +267,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -272,11 +282,6 @@
           <expose v="false" />
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -295,6 +300,11 @@
     </entityParameter>
     <entityConsumer>
       <name>Activities</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -309,11 +319,6 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/activities/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>OFFER_ID</name>
@@ -327,6 +332,11 @@
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -341,15 +351,15 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Order_entity/entityfields/attributes/onValidation.js</onValidation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -360,15 +370,15 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>AttributeTree</name>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/stateProcess.js</stateProcess>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -379,25 +389,20 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>LogHistories</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>ORDERTYPE</name>
@@ -473,31 +478,31 @@
     </entityField>
     <entityConsumer>
       <name>KeywordOrderTypes</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keywordordertypes/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDunningLevels</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDunningLevels</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keyworddunninglevels/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>OBJECT_ROWID</name>
@@ -525,6 +530,11 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -535,14 +545,14 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Contexts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
@@ -553,11 +563,6 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
-      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>PossibleConnectionTypes</name>
@@ -610,46 +615,46 @@
     </entityField>
     <entityConsumer>
       <name>KeywordPaymentTerms</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keywordpaymentterms/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDeliveryTerms</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDeliveryTerms</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keyworddeliveryterms/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>PossibleAddresses</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc</documentation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAndContactAddresses</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/possibleaddresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAndContactAddresses</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>NOTICE</name>
@@ -666,20 +671,25 @@
     </entityField>
     <entityConsumer>
       <name>Offers</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Offer_entity</entityName>
+        <fieldName>ContactOffers</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Offer_entity</entityName>
-        <fieldName>ContactOffers</fieldName>
-      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>DocumentTemplateTexHeader</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -690,14 +700,14 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documenttemplatetexheader/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DocumentTemplateTexFooter</name>
       <dependency>
         <name>dependency</name>
         <entityName>DocumentTemplate_entity</entityName>
         <fieldName>DocumentTemplateProvider</fieldName>
       </dependency>
-    </entityConsumer>
-    <entityConsumer>
-      <name>DocumentTemplateTexFooter</name>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -708,11 +718,6 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documenttemplatetexfooter/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
     </entityConsumer>
     <entityField>
       <name>ChosenTexHeader</name>
@@ -957,6 +962,11 @@
     </entityActionField>
     <entityConsumer>
       <name>Products</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Product_entity</entityName>
+        <fieldName>Products</fieldName>
+      </dependency>
       <children>
         <entityParameter>
           <name>OrderOfferInformations_param</name>
@@ -967,12 +977,47 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/products/children/showninordermainview_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Product_entity</entityName>
-        <fieldName>Products</fieldName>
-      </dependency>
     </entityConsumer>
+    <entityField>
+      <name>DISCOUNT</name>
+      <title>Discount</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>0.00'%'</outputFormat>
+      <inputFormat>0.00</inputFormat>
+      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/discount/valueProcess.js</valueProcess>
+      <onValueChange>%aditoprj%/entity/Order_entity/entityfields/discount/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+      <onValidation>%aditoprj%/entity/Order_entity/entityfields/discount/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>DISCOUNTED_NET</name>
+      <title>discounted Price</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+      <inputFormat>#,##0.00</inputFormat>
+      <state>READONLY</state>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/discounted_net/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/discounted_net/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>DISCOUNTED_VAT</name>
+      <title>discounted Vat</title>
+      <contentType>NUMBER</contentType>
+      <outputFormat>#,##0.00</outputFormat>
+      <inputFormat>#,##0.00</inputFormat>
+      <state>READONLY</state>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/discounted_vat/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/discounted_vat/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>DiscountChanged</name>
+    </entityField>
+    <entityParameter>
+      <name>Discount_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1185,6 +1230,18 @@
           <recordfield>SALESORDER.INFO</recordfield>
           <isFilterable v="true" />
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DISCOUNT.value</name>
+          <recordfield>SALESORDER.DISCOUNT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DISCOUNTED_NET.value</name>
+          <recordfield>SALESORDER.DISCOUNTED_NET</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DISCOUNTED_VAT.value</name>
+          <recordfield>SALESORDER.DISCOUNTED_VAT</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Order_entity/entityfields/contact_id/onValueChange.js b/entity/Order_entity/entityfields/contact_id/onValueChange.js
index b0695547e1c2b02e41ad59aa861999bd9747ca51..87c7d317e21e3ee037a3e97de36109bf8b378b2a 100644
--- a/entity/Order_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Order_entity/entityfields/contact_id/onValueChange.js
@@ -1,7 +1,42 @@
+import("PostalAddress_lib");
+import("Sql_lib");
+import("system.datetime");
 import("system.neon");
 import("system.vars");
 import("Contact_lib");
 
+var contactId = vars.get("$local.value");
 
-neon.setFieldValue("$field.ChosenPaymentAddress", ContactUtils.getDefaultAddressId(vars.get("local.value")));
-neon.setFieldValue("$field.ChosenDeliveryAddress", ContactUtils.getDefaultAddressId(vars.get("local.value")));
\ No newline at end of file
+neon.setFieldValue("$field.ChosenPaymentAddress", ContactUtils.getDefaultAddressId(contactId));
+neon.setFieldValue("$field.ChosenDeliveryAddress", ContactUtils.getDefaultAddressId(contactId));
+
+if(contactId != "")
+{
+    //Language Preset
+    var lang = newSelect("ISOLANGUAGE")
+                    .from("CONTACT")
+                    .where("CONTACT.CONTACTID", contactId)
+                    .cell();
+    if(lang != "") 
+        neon.setFieldValue("field.ISOLANGUAGE", lang);
+    
+    //Address Preset
+    var defaultAddressId = ContactUtils.getDefaultAddressId(contactId);
+    if (defaultAddressId)
+    {
+        neon.setFieldValue("$field.ChosenPaymentAddress", defaultAddressId);
+        neon.setFieldValue("$field.PAYMENTADDRESS", AddressUtils.getAddressById(defaultAddressId));
+        neon.setFieldValue("$field.ChosenDeliveryAddress", defaultAddressId);
+        neon.setFieldValue("$field.DELIVERYADDRESS", AddressUtils.getAddressById(defaultAddressId));
+    }
+    
+    //Salesproject Preset
+    var today = datetime.today();
+    var salesProjectId = newSelect("SALESPROJECT.SALESPROJECTID")
+                                    .from("SALESPROJECT")
+                                    .where("SALESPROJECT.CONTACT_ID",  contactId)
+                                    .and(newWhere("SALESPROJECT.STARTDATE", today, SqlBuilder.GREATER_OR_EQUAL()).or("SALESPROJECT.STARTDATE is null"))
+                                    .cell();
+    if(salesProjectId)
+        neon.setFieldValue("$field.OBJECT_ROWID", salesProjectId);
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/copyorder/onActionProcess.js b/entity/Order_entity/entityfields/copyorder/onActionProcess.js
index 57c33c7f0149a55843b44c007ac0c13ab4645ede..08aa313af34c0b6b2a2f65389221f8a893139fc7 100644
--- a/entity/Order_entity/entityfields/copyorder/onActionProcess.js
+++ b/entity/Order_entity/entityfields/copyorder/onActionProcess.js
@@ -23,7 +23,8 @@ var fieldValues = {
     dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
     orderType: vars.getString("$field.ORDERTYPE"),
     cancellation: vars.getString("$field.CANCELLATION"),
-    orderStatus:vars.getString("$field.ORDERSTATUS")
+    orderStatus:vars.getString("$field.ORDERSTATUS"),
+    discount:vars.getString("$field.DISCOUNT")
 };
 
 OrderUtils.copyOrder(orderId, fieldValues);
diff --git a/entity/Order_entity/entityfields/discount/onValidation.js b/entity/Order_entity/entityfields/discount/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4f36ca91dd7ba266045b1623af7f1e934044812
--- /dev/null
+++ b/entity/Order_entity/entityfields/discount/onValidation.js
@@ -0,0 +1,12 @@
+import("system.result");
+import("system.vars");
+import("Util_lib");
+import("Entity_lib");
+
+var value = vars.get("local.value");
+var validationResult = NumberUtils.validateIsBetweenFloat("Discount", value, 0, 100);
+
+if (validationResult)
+{
+    result.string(validationResult);
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discount/onValueChange.js b/entity/Order_entity/entityfields/discount/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..5fc7651884946ad0f59a3f5c51b5bb93f0505c30
--- /dev/null
+++ b/entity/Order_entity/entityfields/discount/onValueChange.js
@@ -0,0 +1,5 @@
+import("system.neon");
+import("system.vars");
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon. OPERATINGSTATE_EDIT){
+    neon.setFieldValue("$field.DiscountChanged", "true");
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discount/valueProcess.js b/entity/Order_entity/entityfields/discount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa96d16798f8258f091583613760f918dc4a8126
--- /dev/null
+++ b/entity/Order_entity/entityfields/discount/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+    
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.Discount_param")
+    && vars.get("$param.Discount_param")){
+    result.string(vars.get("$param.Discount_param"));
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discounted_net/displayValueProcess.js b/entity/Order_entity/entityfields/discounted_net/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7473e812c66616164442674dc87bdd5282dc50d
--- /dev/null
+++ b/entity/Order_entity/entityfields/discounted_net/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("Util_lib");
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.DISCOUNTED_NET"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discounted_net/stateProcess.js b/entity/Order_entity/entityfields/discounted_net/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..73fcdafe7c5bd47935d3f961a106bd995308316b
--- /dev/null
+++ b/entity/Order_entity/entityfields/discounted_net/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+var discount = vars.get("$field.DISCOUNT");
+
+if(parseInt(discount) == 0 || !discount)
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else 
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discounted_vat/displayValueProcess.js b/entity/Order_entity/entityfields/discounted_vat/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..730396f16084a8c954d9cd54640efdd758e8cb52
--- /dev/null
+++ b/entity/Order_entity/entityfields/discounted_vat/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("Util_lib");
+import("system.vars");
+import("system.translate");
+import("system.result");
+
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.DISCOUNTED_VAT"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/discounted_vat/stateProcess.js b/entity/Order_entity/entityfields/discounted_vat/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..73fcdafe7c5bd47935d3f961a106bd995308316b
--- /dev/null
+++ b/entity/Order_entity/entityfields/discounted_vat/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+var discount = vars.get("$field.DISCOUNT");
+
+if(parseInt(discount) == 0 || !discount)
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else 
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/orderitems/children/discount_param/valueProcess.js b/entity/Order_entity/entityfields/orderitems/children/discount_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4bcbd3537e07fda683ae496cd386d37657089d7
--- /dev/null
+++ b/entity/Order_entity/entityfields/orderitems/children/discount_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.DISCOUNT"));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/totalgross/valueProcess.js b/entity/Order_entity/entityfields/totalgross/valueProcess.js
index 6e374c8f50a610ed0f50b89319726224167631d0..2177ad85cf1f90944d9ef3dc5f5f546dda75c990 100644
--- a/entity/Order_entity/entityfields/totalgross/valueProcess.js
+++ b/entity/Order_entity/entityfields/totalgross/valueProcess.js
@@ -2,7 +2,8 @@ import("system.result");
 import("system.vars");
 import("system.eMath");
 
-var netValue = vars.get("$field.NET");
-var vatValue = vars.get("$field.VAT");
+var discount = vars.get("$field.DISCOUNT");
+var netValue = discount && parseInt(discount) != 0 ? vars.get("$field.DISCOUNTED_NET") : vars.get("$field.NET");
+var vatValue = discount && parseInt(discount) != 0 ? vars.get("$field.DISCOUNTED_VAT") : vars.get("$field.VAT");
 
-result.string( eMath.addDec(netValue, vatValue) );
\ No newline at end of file
+result.string(eMath.addDec(netValue, vatValue));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js b/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
index d45901068c7376e9d81aa1f6d8998326c3de4d43..c9992080475e9d6cd0f950b670f8079072395fb5 100644
--- a/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
+++ b/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
@@ -4,23 +4,27 @@ import("Order_lib");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-var contactId = vars.getString("$field.CONTACT_ID");
-var currency = vars.getString("$field.CURRENCY");
-var language = vars.getString("$field.ISOLANGUAGE");
-var header = vars.getString("$field.HEADER");
-var footer = vars.getString("$field.FOOTER");
-var offerId = vars.getString("$field.OFFER_ID");
-var deliveryTerm = vars.getString("$field.DELIVERYTERMS");
-var paymentTerm = vars.getString("$field.PAYMENTTERMS");
-var deliveryAddress = vars.getString("$field.DELIVERYADDRESS");
-var paymentAddress = vars.getString("$field.PAYMENTADDRESS");
-var rowId = vars.getString("$field.OBJECT_ROWID");
-var objectType = vars.getString("$field.OBJECT_TYPE");
-var dunningDate = vars.getString("$field.DUNNINGDATE");
-var dunningLevel = vars.getString("$field.DUNNINGLEVEL");
-var orderType= $KeywordRegistry.orderType$deliverynote();
-var cancellation= vars.getString("$field.CANCELLATION");
-var orderStatus=vars.getString("$field.ORDERSTATUS");
 
-OrderUtils.copyOrder(offerId, contactId, orderType, language, currency, header, footer, deliveryTerm, paymentTerm, paymentAddress, deliveryAddress, objectType, rowId, dunningDate, dunningLevel, cancellation, orderStatus);
-    
\ No newline at end of file
+var orderId = vars.get("$field.SALESORDERID");
+var fieldValues = {
+    contactId: vars.getString("$field.CONTACT_ID"),
+    currency: vars.getString("$field.CURRENCY"),
+    language: vars.getString("$field.ISOLANGUAGE"),
+    header: vars.getString("$field.HEADER"),
+    footer: vars.getString("$field.FOOTER"),
+    offerId: vars.getString("$field.OFFER_ID"),
+    deliveryTerm: vars.getString("$field.DELIVERYTERMS"),
+    paymentTerm: vars.getString("$field.PAYMENTTERMS"),
+    paymentAddress: vars.getString("$field.PAYMENTADDRESS"),
+    deliveryAddress: vars.getString("$field.DELIVERYADDRESS"),
+    objectRowId: vars.getString("$field.OBJECT_ROWID"),
+    objectType: vars.getString("$field.OBJECT_TYPE"),
+    dunningDate: vars.getString("$field.DUNNINGDATE"),
+    dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
+    orderType: $KeywordRegistry.orderType$deliverynote(),
+    cancellation: vars.getString("$field.CANCELLATION"),
+    orderStatus:vars.getString("$field.ORDERSTATUS"),
+    discount:vars.getString("$field.DISCOUNT")
+};
+
+OrderUtils.copyOrder(orderId, fieldValues);
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js b/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
index 8c722274346b912365e016e416bdf8548cf26234..85054a19bf5183650c8b136f844dd133934e998b 100644
--- a/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
+++ b/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
@@ -4,22 +4,27 @@ import("Order_lib");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-var contactId = vars.getString("$field.CONTACT_ID");
-var currency = vars.getString("$field.CURRENCY");
-var language = vars.getString("$field.ISOLANGUAGE");
-var header = vars.getString("$field.HEADER");
-var footer = vars.getString("$field.FOOTER");
-var offerId = vars.getString("$field.OFFER_ID");
-var deliveryTerm = vars.getString("$field.DELIVERYTERMS");
-var paymentTerm = vars.getString("$field.PAYMENTTERMS");
-var deliveryAddress = vars.getString("$field.DELIVERYADDRESS");
-var paymentAddress = vars.getString("$field.PAYMENTADDRESS");
-var rowId = vars.getString("$field.OBJECT_ROWID");
-var objectType = vars.getString("$field.OBJECT_TYPE");
-var dunningDate = vars.getString("$field.DUNNINGDATE");
-var dunningLevel = vars.getString("$field.DUNNINGLEVEL");
-var orderType= $KeywordRegistry.orderType$invoice();
-var cancellation= vars.getString("$field.CANCELLATION");
-var orderStatus=vars.getString("$field.ORDERSTATUS");
 
-OrderUtils.copyOrder(offerId, contactId, orderType, language, currency, header, footer, deliveryTerm, paymentTerm, paymentAddress, deliveryAddress, objectType, rowId, dunningDate, dunningLevel, cancellation, orderStatus);
\ No newline at end of file
+var orderId = vars.get("$field.SALESORDERID");
+var fieldValues = {
+    contactId: vars.getString("$field.CONTACT_ID"),
+    currency: vars.getString("$field.CURRENCY"),
+    language: vars.getString("$field.ISOLANGUAGE"),
+    header: vars.getString("$field.HEADER"),
+    footer: vars.getString("$field.FOOTER"),
+    offerId: vars.getString("$field.OFFER_ID"),
+    deliveryTerm: vars.getString("$field.DELIVERYTERMS"),
+    paymentTerm: vars.getString("$field.PAYMENTTERMS"),
+    paymentAddress: vars.getString("$field.PAYMENTADDRESS"),
+    deliveryAddress: vars.getString("$field.DELIVERYADDRESS"),
+    objectRowId: vars.getString("$field.OBJECT_ROWID"),
+    objectType: vars.getString("$field.OBJECT_TYPE"),
+    dunningDate: vars.getString("$field.DUNNINGDATE"),
+    dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
+    orderType: $KeywordRegistry.orderType$invoice(),
+    cancellation: vars.getString("$field.CANCELLATION"),
+    orderStatus:vars.getString("$field.ORDERSTATUS"),
+    discount:vars.getString("$field.DISCOUNT")
+};
+
+OrderUtils.copyOrder(orderId, fieldValues);
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/vat/stateProcess.js b/entity/Order_entity/entityfields/vat/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..58cd7c749ad71ae22fb4df03fbd71aed82ed7b6e
--- /dev/null
+++ b/entity/Order_entity/entityfields/vat/stateProcess.js
@@ -0,0 +1,14 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+var discount = vars.get("$field.DISCOUNT");
+
+if(discount && parseInt(discount) != 0)
+{
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+}
+else 
+{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/onDBInsert.js b/entity/Order_entity/recordcontainers/db/onDBInsert.js
index bd3c2bb14b920b17de3b9bfba245f260f445b66d..3815f3cacf937dcf70ea327686f39f7a066140dc 100644
--- a/entity/Order_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Order_entity/recordcontainers/db/onDBInsert.js
@@ -1,14 +1,23 @@
+import("Offer_lib");
 import("Workflow_lib");
 import("Order_lib");
 import("system.neon");
 import("system.vars");
 
 //@TODO: OfferId_param is also set by 'copy order' -> the items of the offer are copied. What should happen?
+var rowdata = vars.get("$local.rowdata");
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    if (vars.exists("$param.OfferId_param") && vars.get("$param.OfferId_param"))
-        OrderUtils.copyOfferItemsToOrder(vars.get("$param.OfferId_param"), vars.get("$local.uid"));
+    var discount = rowdata["OFFER.DISCOUNT"];
+    if (vars.get("$param.OfferId_param") || vars.get("$field.OFFER_ID"))
+    {
+        let offerId = vars.get("$param.OfferId_param") || vars.get("$field.OFFER_ID");
+        OrderUtils.copyOfferItemsToOrder(offerId, vars.get("$local.uid"), discount);
+    }
     if (vars.exists("$param.SourceOrderId_param") && vars.get("$param.SourceOrderId_param"))
-        OrderUtils.copyOrderItems(vars.get("$param.SourceOrderId_param"), vars.get("$local.uid"));
+    {
+        OrderUtils.copyOrderItems(vars.get("$param.SourceOrderId_param"), vars.get("$local.uid"), discount);
+    }
 }
+
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/onDBUpdate.js b/entity/Order_entity/recordcontainers/db/onDBUpdate.js
index 2e53f3cad9a9edf21cc5bbc6fdecc00c5001dfee..de5f68bc141ec452ccbfc58ab1a6762919698d5a 100644
--- a/entity/Order_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Order_entity/recordcontainers/db/onDBUpdate.js
@@ -1,3 +1,38 @@
+import("Order_lib");
+import("system.entities");
+import("system.vars");
 import("Workflow_lib");
 
+var rowdata = vars.get("$local.rowdata");
+var oid = rowdata["SALESORDER.SALESORDERID"];
+
+if(vars.get("$field.DiscountChanged") == "true" && oid){
+    var discount = rowdata["SALESORDER.DISCOUNT"];
+    var oiUtils = new OrderItemUtils(oid);  
+    
+    var vals = oiUtils.getNetAndVat();
+    var discountedVals = OrderItemUtils.getDiscountedNet(null, oid, discount);
+    
+    let config = entities.createConfigForUpdatingRows();
+    config.entity("Order_entity");
+    if(discountedVals){
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1],
+            "DISCOUNTED_NET": discountedVals[0],
+            "DISCOUNTED_VAT": discountedVals[1]
+        });
+    }
+    else 
+    {
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1]
+        });
+    }
+
+    config.uid(oid);
+    entities.updateRow(config);
+
+}
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod
index a13602e73007dc54da4338f78b349e91415c0e0e..11dd85372cf2c28d72012ade4ff7def203fa3874 100644
--- a/entity/Orderitem_entity/Orderitem_entity.aod
+++ b/entity/Orderitem_entity/Orderitem_entity.aod
@@ -243,6 +243,10 @@
       <name>ProductId_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityParameter>
+      <name>Discount_param</name>
+      <expose v="true" />
+    </entityParameter>
     <entityActionGroup>
       <name>group</name>
       <children>
diff --git a/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js b/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js
index 6fdaf11a98f6cbbe12ed2e89a69b169a8c6e6db2..23d5cc030038257a4b6ef7d593867dd0a5a851fd 100644
--- a/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,4 @@
+import("system.entities");
 import("system.datetime");
 import("system.neon");
 import("system.vars");
@@ -15,14 +16,34 @@ if(oid != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
     var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : "";
-    var oiUtils = new OrderItemUtils(rowdata["SALESORDERITEM.SALESORDER_ID"]);
+    var discount = vars.exists("$param.Discount_param") ? vars.get("$param.Discount_param"): "";
+    var oiUtils = new OrderItemUtils(oid);
     oiUtils.insertPartsList(rowdata["SALESORDERITEM.PRODUCT_ID"], vars.get("$local.uid"), curr, contactid, vars.get("$param.Language_param"));
     oiUtils.reOrgItems();
     
     //update order price
-    var cols = ["NET", "VAT"];
     var vals = oiUtils.getNetAndVat();
+    var discountedVals = OrderItemUtils.getDiscountedNet(null, oid,  discount);
     
-    newWhere("SALESORDER.SALESORDERID", oid)
-        .updateData(true, "SALESORDER", cols, null, vals);
-}
+    let config = entities.createConfigForUpdatingRows()
+    config.entity("Order_entity");
+
+    if(discountedVals){
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1],
+            "DISCOUNTED_NET": discountedVals[0],
+            "DISCOUNTED_VAT": discountedVals[1]
+        });
+    }
+    else
+    {
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1]
+        });
+
+    }
+    config.uid(oid);
+    entities.updateRow(config);
+}
\ No newline at end of file
diff --git a/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js b/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js
index 62ae2c66e33bb89cdbcc1c99fe8a0d6df93bd283..a763dd4a6bcb8cc0232ef42817f0d777f5cab1ec 100644
--- a/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js
@@ -1,3 +1,4 @@
+import("system.entities");
 import("system.vars");
 import("system.db");
 import("system.neon");
@@ -7,10 +8,29 @@ import("Sql_lib");
 var oid = vars.get("$local.rowdata")["SALESORDERITEM.SALESORDER_ID"];
 if(oid != "")
 {
-    var cols = ["NET", "VAT"];
+    var discount = vars.exists("$param.Discount_param") ? vars.get("$param.Discount_param"): "";
     var oiUtils = new OrderItemUtils(oid);
     var vals = oiUtils.getNetAndVat();
+    var discountedVals = OrderItemUtils.getDiscountedNet(null, oid, discount);
     
-    newWhere("SALESORDER.SALESORDERID", oid)
-        .updateData(true, "SALESORDER", cols, null, vals);
+    let config = entities.createConfigForUpdatingRows()
+    config.entity("Order_entity");
+    
+    if(discountedVals){
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1],
+            "DISCOUNTED_NET": discountedVals[0],
+            "DISCOUNTED_VAT": discountedVals[1]
+        });
+    }
+    else
+    {
+        config.fieldValues({
+            "NET": vals[0],
+            "VAT": vals[1]
+        });
+    }
+    config.uid(oid);
+    entities.updateRow(config);
 }
\ No newline at end of file
diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod
index 32ad155d4473c1621475321e718f8af1d08e71be..c75679705aabe4204eebe96948fae4b0e356a9dd 100644
--- a/entity/Productprice_entity/Productprice_entity.aod
+++ b/entity/Productprice_entity/Productprice_entity.aod
@@ -64,7 +64,6 @@
       <mandatory v="true" />
       <stateProcess>%aditoprj%/entity/Productprice_entity/entityfields/product_id/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/product_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>CONTACT_ID</name>
@@ -324,6 +323,10 @@
           <name>FROMQUANTITY.displayValue</name>
           <expression>%aditoprj%/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PRODUCT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js b/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js
deleted file mode 100644
index 62dfdaf791091cabb2983bad7ed5f34dd09272ba..0000000000000000000000000000000000000000
--- a/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("system.result");
-import("system.db");
-import("Sql_lib");
-
-// TODO: Wenn es möglich ist, den anzeigenamen des Produkts über die Entity beziehung zu laden, dann umbauen...!!!
-result.string(newSelect("PRODUCTNAME")
-    .from("PRODUCT")
-    .whereIfSet("PRODUCT.PRODUCTID", "$field.PRODUCT_ID")
-    .cell(true));
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/vat/valueProcess.js b/entity/Productprice_entity/entityfields/vat/valueProcess.js
index 20e9d87a63c30b2ad2bf4937fcf74160202978c8..543a56a83e80c0367a2e74f7a5460cf30660a3c1 100644
--- a/entity/Productprice_entity/entityfields/vat/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/vat/valueProcess.js
@@ -2,14 +2,18 @@ import("Product_lib");
 import("system.vars");
 import("system.result");
 import("system.neon");
+import("system.project");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
+    var defaultVAT = project.getPreferenceValue("custom.sales.vat", "0");
     if (vars.get("$field.PRODUCT_ID"))
     {
         var price = ProductUtils.getCurrentProductPrice(vars.get("$field.PRODUCT_ID"), "SP", true);
-        result.string(price[2] || "0");
+        result.string(price[2] || defaultVAT);
     }
     else
-        result.string("0");
-}
\ No newline at end of file
+    {
+        result.string(defaultVAT);
+    }
+}
diff --git a/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js b/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbc5d9d359d33fe622b4e9052b1038a67111ffdb
--- /dev/null
+++ b/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("system.result");
+
+result.string("select PRODUCTNAME from PRODUCT \n\
+        where PRODUCT.PRODUCTID = PRODUCTPRICE.PRODUCT_ID");
\ No newline at end of file
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index bcfcc3b972f3bdd1ccc586d49c2ed66fbad84d63..d463af5044cad07e970d56230d13fe5ee1860c1d 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -139,9 +139,12 @@
     <entityField>
       <name>PROBABILITY</name>
       <title>Probability</title>
-      <consumer>KeywordProbabilties</consumer>
+      <contentType>NUMBER</contentType>
+      <maxValue v="100" />
+      <minValue v="0" />
+      <outputFormat>0.00'%'</outputFormat>
       <groupable v="true" />
-      <displayValueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/probability/displayValueProcess.js</displayValueProcess>
+      <dropDownProcess>%aditoprj%/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js</dropDownProcess>
     </entityField>
     <entityConsumer>
       <name>SalesprojectSources</name>
@@ -367,22 +370,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityConsumer>
-      <name>KeywordProbabilties</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-          <title></title>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityConsumer>
       <name>KeywordStates</name>
       <dependency>
@@ -871,6 +858,16 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityAggregateField>
+      <name>PROBABILITY_aggregate</name>
+      <parentField>PROBABILITY</parentField>
+      <title>Ø Probability</title>
+    </entityAggregateField>
+    <entityAggregateField>
+      <name>VOLUME_aggregate</name>
+      <parentField>VOLUME</parentField>
+      <title>Volume</title>
+    </entityAggregateField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -945,10 +942,6 @@
           <name>CONTACT_ID.displayValue</name>
           <recordfield>ORGANISATION.NAME</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>PROBABILITY.displayValue</name>
-          <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PHASE.displayValue</name>
           <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/phase.displayvalue/expression.js</expression>
@@ -1009,6 +1002,16 @@
           <name>ACTIVE.value</name>
           <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
         </dbRecordFieldMapping>
+        <aggregateFieldDbMapping>
+          <name>VOLUME_aggregate.value</name>
+          <recordfield>SALESPROJECT.VOLUME</recordfield>
+          <aggregateType>SUM</aggregateType>
+        </aggregateFieldDbMapping>
+        <aggregateFieldDbMapping>
+          <name>PROBABILITY_aggregate.value</name>
+          <recordfield>SALESPROJECT.PROBABILITY</recordfield>
+          <aggregateType>AVG</aggregateType>
+        </aggregateFieldDbMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/valueProcess.js b/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/valueProcess.js
deleted file mode 100644
index ac59463181f9370f389bb466248fb9696b50449d..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/entityfields/keywordprobabilties/children/containername_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string($KeywordRegistry.salesprojectProbability());
diff --git a/entity/Salesproject_entity/entityfields/probability/displayValueProcess.js b/entity/Salesproject_entity/entityfields/probability/displayValueProcess.js
deleted file mode 100644
index 883b399d257f7806caa70c5004c07847d77163e9..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/entityfields/probability/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.salesprojectProbability(), vars.get("$field.PROBABILITY")));
diff --git a/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js b/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ce6525ee92048543d83d251c2b289e710aa5e01
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+
+result.object([
+    ["0.00", "0%"],
+    ["25.00", "25%"],
+    ["50.00", "50%"],
+    ["75.00", "75%"],
+    ["100.00", "100%"]
+]);
diff --git a/entity/Salesproject_entity/entityfields/projecttitle/valueProcess.js b/entity/Salesproject_entity/entityfields/projecttitle/valueProcess.js
index 9753cbeb1be78e2dfe22996ff2da440325580ef4..da045df984042ff2f93d1b1174827862a7e825c9 100644
--- a/entity/Salesproject_entity/entityfields/projecttitle/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/projecttitle/valueProcess.js
@@ -2,5 +2,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.PresetTitle_param"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.PresetTitle_param") && !vars.get("$this.value"))
     result.string(vars.get("$param.PresetTitle_param"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
deleted file mode 100644
index f5ef49dc97e054a1378a98f5cf434622dd068c45..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/probability.displayvalue/expression.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectProbability(), "SALESPROJECT.PROBABILITY");
-result.string(sql);
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 1afd8f40e37c8b1f742a131679a3769426a24d06..10640fbd76559db3afd6f39c4dbb01949eb0e493 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -6735,7 +6735,7 @@
     </entry>
     <entry>
       <key>Choose payment address</key>
-      <value>Zahlungsadresse auswählen</value>
+      <value>Rechnungsadresse auswählen</value>
     </entry>
     <entry>
       <key>Paid</key>
@@ -9307,7 +9307,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>%0 new participants will be added to the campaign.</key>
-      <value>Der Kampagne werden %0 neue Empfänger hinzugefügt.</value>
+      <value>Der Kampagne werden %0 neue Teilnehmer hinzugefügt.</value>
     </entry>
     <entry>
       <key>%0 of the chosen records are already recipients or don't have an e-mail set</key>
@@ -10644,6 +10644,10 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>HTML Editor</key>
     </entry>
+    <entry>
+      <key>Participant is already participating</key>
+      <value>Teilnehmer nimmt bereits teil.</value>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/Salesproject/Salesproject.aod b/neonContext/Salesproject/Salesproject.aod
index 57dc7485b7ab4a0cf110be281c8993df2c7663ec..92def56f1a35869471d27551d86b8e0b6362c374 100644
--- a/neonContext/Salesproject/Salesproject.aod
+++ b/neonContext/Salesproject/Salesproject.aod
@@ -8,6 +8,7 @@
   <filterView>SalesprojectFilter_view</filterView>
   <editView>SalesprojectEdit_view</editView>
   <previewView>SalesprojectPreview_view</previewView>
+  <previewMultipleView>SalesprojectPreviewMultiple_view</previewMultipleView>
   <lookupView>SalesprojectFilter_view</lookupView>
   <entity>Salesproject_entity</entity>
   <references>
@@ -75,5 +76,9 @@
       <name>b50928ae-ad07-40ea-87e7-4f82daf9715c</name>
       <view>SalesprojectActivity_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>407d9b32-c379-428b-b1e1-d92a820971fd</name>
+      <view>SalesprojectPreviewMultiple_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/OrderEdit_view/OrderEdit_view.aod b/neonView/OrderEdit_view/OrderEdit_view.aod
index 576ed09e070e3a3a4006d823f10de1c2cd198487..7ad8037635ed21259aab3e15150b9adc86152afa 100644
--- a/neonView/OrderEdit_view/OrderEdit_view.aod
+++ b/neonView/OrderEdit_view/OrderEdit_view.aod
@@ -44,6 +44,10 @@
           <name>64cb7376-3a7c-4ce9-99e8-e70bc91b41d0</name>
           <entityField>CURRENCY</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>9f357666-930f-41c5-81dc-c5bf1e57aced</name>
+          <entityField>DISCOUNT</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>5b75296a-a0c0-469e-a9ab-2f279c4fca48</name>
           <entityField>ISOLANGUAGE</entityField>
diff --git a/neonView/OrderPreview_view/OrderPreview_view.aod b/neonView/OrderPreview_view/OrderPreview_view.aod
index 8710a68db4050c688bf06956d5603a725dd7fec9..b29cb9ac7650c362802bf6a09ced75f3d339bcf4 100644
--- a/neonView/OrderPreview_view/OrderPreview_view.aod
+++ b/neonView/OrderPreview_view/OrderPreview_view.aod
@@ -43,6 +43,10 @@
           <name>1be56d96-0a47-4895-a73f-2e01855da628</name>
           <entityField>ISOLANGUAGE</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>65f77f9f-1117-4cf9-8711-95166ca80a1f</name>
+          <entityField>DISCOUNT</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>fecf7457-825d-40a3-b330-bace7ed75ddc</name>
           <entityField>DUNNINGDATE</entityField>
@@ -75,10 +79,18 @@
           <name>d7ca2b66-5e7a-4951-a89b-fbeab0f4f798</name>
           <entityField>NET</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>4baf8275-e96d-4b26-9808-17fc1e515134</name>
+          <entityField>DISCOUNTED_NET</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>c50dec3f-5468-4196-be88-a413ae3947de</name>
           <entityField>VAT</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>2b919444-e34e-4f89-9894-8916da00a709</name>
+          <entityField>DISCOUNTED_VAT</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>43972a26-67f7-4fb5-9107-111731d326af</name>
           <entityField>TotalGross</entityField>
diff --git a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
index 0a0b6d9d563c258bef7bd4ec2435fb2598d8aa0f..8149fa636066fe7f47e27e290d848834dcc53e1c 100644
--- a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
+++ b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
@@ -43,9 +43,6 @@
           <name>2b38de6e-85de-479c-99fd-27ff0d2e1c33</name>
           <entityField>DISCOUNT</entityField>
         </entityFieldLink>
-        <entityFieldLink>
-          <name>242825ab-fd74-4be5-b8c8-bf945a501494</name>
-        </entityFieldLink>
         <entityFieldLink>
           <name>ff49cd49-d539-4c43-b9c7-822360ae6881</name>
           <entityField>TotalPrice</entityField>
diff --git a/neonView/OrderitemPreview_view/OrderitemPreview_view.aod b/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
index f2c8a1df6c9a02c7e097ec3a1d42cf388491f381..ccbae0155b998c96d98076d0597ea1652664d847 100644
--- a/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
+++ b/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
@@ -46,9 +46,6 @@
           <name>e679761b-c004-4bd8-940c-b12e8b209762</name>
           <entityField>DISCOUNT</entityField>
         </entityFieldLink>
-        <entityFieldLink>
-          <name>1cfd6a95-4789-43aa-941c-6f69eeedd6b2</name>
-        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod b/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
index 82ff3fd5782ed9701bfaef2fd191edced58649c4..0d6dc9443854e14fba5468cf3e324dc9b1ca7f9a 100644
--- a/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
+++ b/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
@@ -12,6 +12,14 @@
       <name>GenericMultiple</name>
       <entityField>#ENTITY</entityField>
       <columns>
+        <neonGenericMultipleTableColumn>
+          <name>f0dcda2f-c8a9-4d7c-a605-b94456c6ce1d</name>
+          <entityField>PROJECTTITLE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>cbd92642-5ff5-490c-af7a-4f325937de75</name>
+          <entityField>PHASE</entityField>
+        </neonGenericMultipleTableColumn>
         <neonGenericMultipleTableColumn>
           <name>2a2cfc4f-cdd1-4ff5-8bb6-fd8a16777cf6</name>
           <entityField>PROJECTTYPE</entityField>
diff --git a/neonView/SalesprojectPreviewMultiple_view/SalesprojectPreviewMultiple_view.aod b/neonView/SalesprojectPreviewMultiple_view/SalesprojectPreviewMultiple_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..74e22b5b5dc75e2259a2e60420678e6c1c25c681
--- /dev/null
+++ b/neonView/SalesprojectPreviewMultiple_view/SalesprojectPreviewMultiple_view.aod
@@ -0,0 +1,56 @@
+<?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.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>SalesprojectPreviewMultiple_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <footer>ScoreCard</footer>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <dynamicMultiDataChartViewTemplate>
+      <name>Chart</name>
+      <chartType>BAR</chartType>
+      <shareParent v="false" />
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>2ee7797d-d358-4915-afd0-e71d800563f3</name>
+          <entityField>VOLUME</entityField>
+          <aggregateEntityField>VOLUME_aggregate</aggregateEntityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <defaultGroupFields>
+        <element>PHASE</element>
+      </defaultGroupFields>
+      <columns>
+        <neonTreeTableColumn>
+          <name>3cc7232e-4092-4a94-9b69-256d4b955cc9</name>
+          <entityField>VOLUME</entityField>
+          <aggregateEntityField>VOLUME_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>7032ecbc-200c-47d8-b14c-389e83bb4090</name>
+          <entityField>PROBABILITY</entityField>
+          <aggregateEntityField>PROBABILITY_aggregate</aggregateEntityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+    <scoreCardViewTemplate>
+      <name>ScoreCard</name>
+      <fields>
+        <entityFieldLink>
+          <name>e6aa37dc-bb86-4e0e-80b9-a24da11e6453</name>
+          <entityField>VOLUME</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>b98eceb0-3154-48a0-9a57-d07112cfda43</name>
+          <entityField>PROBABILITY</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+  </children>
+</neonView>
diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
index 15de760a6f958e6b3c19f38029aaf0620a1bd3f6..f48aa4fd1691d2091d0b8e3a25243074e083743e 100644
--- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
+++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
@@ -33,6 +33,7 @@
   <neonClientPermissionsEnabled v="true" />
   <clientFeedbackMailaddress />
   <blobHandlingMethod>DATABASE</blobHandlingMethod>
+  <databaseAuditProcessLoggerUser>Admin</databaseAuditProcessLoggerUser>
   <databaseAuditGetOldValueLobs v="false" />
   <indexsearchGlobalEnabled v="true" />
   <indexsearchUseLegacyConfiguration v="false" />
@@ -163,5 +164,10 @@
       <description>Whether the observations are enabled or not</description>
       <property v="false" />
     </customBooleanProperty>
+    <customStringProperty>
+      <name>sales.vat</name>
+      <description>Default VAT in percent</description>
+      <property>19</property>
+    </customStringProperty>
   </customProperties>
 </preferences>
diff --git a/process/AISalesproject_lib/process.js b/process/AISalesproject_lib/process.js
index e0ceec91ec4f07fe072160f85fdbf3133a09ca71..0cca5549c0492f2c1442d39bb62bd8ff8daf13f8 100644
--- a/process/AISalesproject_lib/process.js
+++ b/process/AISalesproject_lib/process.js
@@ -185,13 +185,12 @@ AISalesprojectUtil.getVolumeClassification = function (pVolume)
 
 AISalesprojectUtil.getProbabilityValue = function (pProbId)
 {
-    if(pProbId == "SALPROJPROB0" || pProbId == "SALPROJPROB25") 
+    var prob = parseInt(pProbId);
+    if(prob <= 25) 
         return "negative";
-    else if(pProbId == "SALPROJPROB50")
-        return "neutral";
-    else if(pProbId == "SALPROJPROB75" || pProbId == "SALPROJPROB100")
+    else if(prob >= 75)
         return "positive";
-    return "";
+    return "neutral";
 };
 
 AISalesprojectUtil.getClassificationValues = function (pClassificationType, pObjectType, pObjectRowid, pScoreType)
diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js
index d95e132e9d51ab5497e510d19b032ba92921d027..496eda6a2e822c72af1122829932e0e468d28d38 100644
--- a/process/ChecklistEntryRegistry_basic/process.js
+++ b/process/ChecklistEntryRegistry_basic/process.js
@@ -351,7 +351,7 @@ $ChecklistEntryRegistry.salesprojectProb100 = function(){
         verifierFn: function(pSalesprojectId){
             
             var spRows = _getRows(pSalesprojectId, "Salesproject_entity", ["PROBABILITY"], null, "NoPhaseRequirementLoading");
-            if(spRows[0]["PROBABILITY"] && spRows[0]["PROBABILITY"] == "SALPROJPROB100") 
+            if(spRows[0]["PROBABILITY"] && parseInt(spRows[0]["PROBABILITY"]) == 100) 
             {
                 return true;
             }
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 3a514e016762cc93feda22a8be23e51c0899bbcd..b3ec321e8045f8908f42fc5c07996703ef549cb0 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -106,7 +106,6 @@ $KeywordRegistry.salesorderState$lost = function(){return "SALORDERSTATLOST";};
 
 $KeywordRegistry.salesprojectWonLost = function(){return "SalesprojectWonLost";};
 $KeywordRegistry.stockWarehouse = function(){return "StockWarehouse";};
-$KeywordRegistry.salesprojectProbability = function(){return "SalesprojectProbability";};
 
 $KeywordRegistry.activityCategory = function(){return "ActivityCategory";};
 $KeywordRegistry.activityCategory$mail = function(){return "MAIL";};
@@ -118,8 +117,6 @@ $KeywordRegistry.addressType$private = function(){return "HOMEADDR";};
 $KeywordRegistry.addressType$office = function(){return "OFFICEADDR";};
 $KeywordRegistry.addressType$post = function(){return "POSTADDR";};
 
-$KeywordRegistry.offerProbability = function(){return "OfferProbability";};
-
 $KeywordRegistry.communicationMedium = function(){return "CommunicationMedium";};
 $KeywordRegistry.communicationMedium$mail = function(){return "COMMEMAIL";};
 $KeywordRegistry.communicationMedium$mobil = function(){return "COMMMOBIL";};
diff --git a/process/Neon_lib/process.js b/process/Neon_lib/process.js
index 18402adc55753b73d0fe427c881e0b50e9333cfa..68c68fe321122b78933d1c8980d1f86cdf513dc9 100644
--- a/process/Neon_lib/process.js
+++ b/process/Neon_lib/process.js
@@ -89,10 +89,14 @@ CopyModuleUtils.copyModule = function(pInputMapping)
     var AliasDefinitionStructure = project.getAliasDefinitionStructure("Data_alias", null);
     var ModulesMapping = {};
     var statements = [];
-
+    
+    if(pInputMapping["OFFERITEM"]["destinationModuleName"] == "SALESORDERITEM") //SalesOrder and Offer don't have the exact smae structure anymore: Order don't have the field "optional"
+    {
+        delete AliasDefinitionStructure["tables"]["OFFERITEM"]["columns"]["OPTIONAL"];
+    }
     buildMapping( pInputMapping );
     buildStatements( ModulesMapping );
-
+    
     if(statements.length > 0)
         db.inserts( statements ); 
 
diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js
index 49477739fd0a0b2931359ff565701150edf9108a..594266a6cd93c5e17443f58660b1c8781e8858a8 100644
--- a/process/OfferOrder_lib/process.js
+++ b/process/OfferOrder_lib/process.js
@@ -103,9 +103,12 @@ ItemUtils.prototype.getNetAndVat = function(pExcludedItemIds) {
     // TODO: Bessere Möglichkeit als per SQL die zugehörigen Posten aus der DB zu holen?
     var sum = 0;
     var vat = 0;
-
-
-    var orderItems = newSelect("QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL")
+    var columns = "QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL";
+    
+    if(this.tableName == "SALESORDER")
+        columns = "QUANTITY, PRICE, DISCOUNT, VAT, 0";
+    
+    var orderItems = newSelect(columns)
                             .from(this.tableName + "ITEM")
                             .where(this.tableName + "ITEM." + this.tableName + "_ID", this.offerOrderId)
                             .andIfSet(this.tableName + "ITEM." + this.tableName + "ITEMID", pExcludedItemIds, SqlBuilder.NOT_IN())
@@ -157,6 +160,7 @@ ItemUtils.prototype.getItemSum = function(pQuantity, pPrice, pDiscount, pOptiona
     pQuantity = pQuantity || 0;
     pPrice = pPrice || 0;
     pDiscount = pDiscount || 0;
+    pOptional = pOptional || "0";
 
     return pOptional == "0" ? (MoneyUtils.getNet(parseFloat(pPrice), parseFloat(pQuantity), parseFloat(pDiscount)))
                     : 0;
@@ -170,6 +174,8 @@ ItemUtils.prototype.getItemVAT = function(pQuantity, pPrice, pDiscount, pVat, pO
     pPrice = pPrice || 0;
     pDiscount = pDiscount || 0;
     pVat = pVat || 0;
+    pOptional = pOptional || "0";
+    
     return pOptional == "0" ? (MoneyUtils.getVat(parseFloat(pVat), parseFloat(pPrice), parseFloat(pQuantity), parseFloat(pDiscount))) 
                     : 0;
 }
diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index 19ceed323e4bba20dc3ed7c185078fec5e35afc0..32b5a3a56f20c0bb76da1a2ad5d3d319571cc14d 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -1,3 +1,4 @@
+import("system.project");
 import("system.SQLTYPES");
 import("system.vars");
 import("system.util");
@@ -442,8 +443,9 @@ OfferUtils.copyOfferItems = function (pSourceOfferId, pTargetOfferId, pDiscount)
  * @param pLanguage {String} language
  * @param pCurrency {String} [currency=""]
  * @param pAddress {String} [address=""]
+ * @param pDiscount {String} discount
  */
-OfferUtils.copyToOrder = function (pOfferId, pContextId, pRowId, pContactId, pLanguage, pCurrency, pAddress)
+OfferUtils.copyToOrder = function (pOfferId, pContextId, pRowId, pContactId, pLanguage, pCurrency, pAddress, pDiscount)
 {  
     var fieldparams = 
     {
@@ -453,7 +455,8 @@ OfferUtils.copyToOrder = function (pOfferId, pContextId, pRowId, pContactId, pLa
         "$field.CURRENCY" : pCurrency || "",
         "$field.PAYMENTADDRESS" : pAddress || "",
         "$field.OBJECT_TYPE" : pContextId || "",
-        "$field.OBJECT_ROWID" : pRowId || ""
+        "$field.OBJECT_ROWID" : pRowId || "",
+        "$field.DISCOUNT" : pDiscount || ""
     };
     
     var params = {};
diff --git a/process/Order_lib/process.js b/process/Order_lib/process.js
index 5c4d7f122ab9714f382ab2a4fdc1b81350c070f7..f6012eb211dfc3eaa9bfbf1d64c757d09f49bd9e 100644
--- a/process/Order_lib/process.js
+++ b/process/Order_lib/process.js
@@ -1,3 +1,5 @@
+import("Offer_lib");
+import("system.project");
 import("Context_lib");
 import("KeywordRegistry_basic");
 import("Neon_lib");
@@ -126,7 +128,8 @@ OrderUtils.copyOrder = function (pSourceOrderId, pOrderData)
         "$field.DUNNINGDATE": pOrderData.dunningDate || "",
         "$field.DUNNINGLEVEL": pOrderData.dunningLevel || "",
         "$field.CANCELLATION": pOrderData.cancellation || "",
-        "$field.ORDERSTATUS": pOrderData.orderStatus || ""
+        "$field.ORDERSTATUS": pOrderData.orderStatus || "",
+        "$field.DISCOUNT": pOrderData.discount || ""
     };
     
     var params = {
@@ -143,8 +146,9 @@ OrderUtils.copyOrder = function (pSourceOrderId, pOrderData)
  * 
  * @param {String} pSourceOfferId the offer to get the items from
  * @param {String} pOrderId the order to create the items for
+ * @param {Number} pDiscount
  */
-OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
+OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId, pDiscount)
 {
     var inputMapping = {
         "OFFERITEM": {
@@ -158,8 +162,7 @@ OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
                 "PRODUCT_ID" : "PRODUCT_ID", 
                 "QUANTITY" : "QUANTITY", 
                 "ITEMSORT" : "ITEMSORT", 
-                "ITEMNAME" : "ITEMNAME", 
-                "OPTIONAL" : "OPTIONAL", 
+                "ITEMNAME" : "ITEMNAME",
                 "DISCOUNT" : "DISCOUNT", 
                 "PRICE" : "PRICE", 
                 "UNIT" : "UNIT", 
@@ -174,14 +177,30 @@ OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
     };
     CopyModuleUtils.copyModule(inputMapping);
     
-    var oiUtils = new OrderItemUtils(pOrderId);
+    
+    var oiUtils = new OfferItemUtils(pSourceOfferId);
     
     //update order price
-    cols = ["NET", "VAT"];
-    var vals = oiUtils.getNetAndVat();
+    var [netPrice, vat] = oiUtils.getNetAndVat();
+    var discountedVals = OfferItemUtils.getDiscountedNet(null, pSourceOfferId,  pDiscount);
     
-    newWhere("SALESORDER.SALESORDERID", pOrderId)
-        .updateData(true, "SALESORDER", cols, null, vals);
+    if(discountedVals){
+        newWhere("SALESORDER.SALESORDERID", pTargetOfferId)
+        .updateFields({
+            "NET": netPrice,
+            "VAT": vat,
+            "DISCOUNTED_NET": discountedVals[0],
+            "DISCOUNTED_VAT": discountedVals[1]
+        });
+    }
+    else
+    {
+        newWhere("SALESORDER.SALESORDERID", pTargetOfferId)
+        .updateFields({
+            "NET": netPrice,
+            "VAT": vat
+        });
+    }
 }
 
 /**
@@ -189,8 +208,9 @@ OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
  * 
  * @param {String} pSourceOrderId the order to get the items from
  * @param {String} pTargetOrderId the order to create the items for
+ * @param {Number} pDiscount
  */
-OrderUtils.copyOrderItems = function (pSourceOrderId, pTargetOrderId)
+OrderUtils.copyOrderItems = function (pSourceOrderId, pTargetOrderId, pDiscount)
 {
     var inputMapping = {
         "SALESORDERITEM": {
@@ -205,13 +225,27 @@ OrderUtils.copyOrderItems = function (pSourceOrderId, pTargetOrderId)
     var oiUtils = new OrderItemUtils(pTargetOrderId);
     
     //update order price
-    var [netValue, vat] = oiUtils.getNetAndVat();
+    var [netPrice, vat] = oiUtils.getNetAndVat();
+    var discountedVals = OrderItemUtils.getDiscountedNet(null, pSourceOrderId,  pDiscount);
     
-    newWhere("SALESORDER.SALESORDERID", pTargetOrderId)
+    if(discountedVals){
+        newWhere("SALESORDER.SALESORDERID", pTargetOfferId)
+        .updateFields({
+            "NET": netPrice,
+            "VAT": vat,
+            "DISCOUNTED_NET": discountedVals[0],
+            "DISCOUNTED_VAT": discountedVals[1]
+        });
+    }
+    else
+    {
+        newWhere("SALESORDER.SALESORDERID", pTargetOfferId)
         .updateFields({
-            "NET": netValue,
+            "NET": netPrice,
             "VAT": vat
         });
+    }
+    
 }
 
 /**
@@ -261,15 +295,14 @@ OrderUtils.buildOrderReport = function (pOrderID)
         "SALESORDERITEM.ASSIGNEDTO",
         "SALESORDERITEM.PRODUCT_ID", 
         "SALESORDERITEM.ITEMNAME" , 
-        "SALESORDERITEM.OPTIONAL",  //4
         "SALESORDERITEM.ITEMPOSITION", 
         "PRODUCT.PRODUCTCODE", 
         "PRODUCT.PRODUCTID", 
-        "SALESORDERITEM.UNIT", //8
+        "SALESORDERITEM.UNIT", //7
         sqlUtil.isNull("SALESORDERITEM.QUANTITY", "0"), 
         sqlUtil.isNull("SALESORDERITEM.PRICE", "0"),
         sqlUtil.isNull("SALESORDERITEM.DISCOUNT", "0"), 
-        sqlUtil.isNull("SALESORDERITEM.VAT", "0"), //12
+        sqlUtil.isNull("SALESORDERITEM.VAT", "0"), //11
         "SALESORDERITEM.SALESORDER_ID",
         "SALESORDERITEM.ITEMSORT",
         "0", 
@@ -296,50 +329,48 @@ OrderUtils.buildOrderReport = function (pOrderID)
     itemData = itemData.map(function (item)
     {
         //quantity * price
-        fullPrice = eMath.mulDec(parseFloat(item[9]), parseFloat(item[10])); //price without discount
+        fullPrice = eMath.mulDec(parseFloat(item[8]), parseFloat(item[9])); //price without discount
         
-        if (item[4] != "1") //optional
-        {
-            //itemSum = (fullPrice * (100 - discount)) / 100
-            itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, item[11])), 100), 2, eMath.ROUND_HALF_EVEN); //sum of the item (with discount)
-            sumItemSum += itemSum; //total sum (without vat) 
-        }
+
+        //itemSum = (fullPrice * (100 - discount)) / 100
+        itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, item[10])), 100), 2, eMath.ROUND_HALF_EVEN); //sum of the item (with discount)
+        sumItemSum += itemSum; //total sum (without vat) 
+
         //vatsum = itemSum * vat / 100
-        vatsum = eMath.divDec(eMath.mulDec(itemSum, item[12]), 100); //vat per product
-        if (item[12] > 0) 
-            sums.push([item[12], vatsum]); //MWSteuerwerte für Map vorbereiten
+        vatsum = eMath.divDec(eMath.mulDec(itemSum, item[11]), 100); //vat per product
+        if (item[11] > 0) 
+            sums.push([item[11], vatsum]); //MWSteuerwerte für Map vorbereiten
         
         // sumItemSum + vat
         total = eMath.addDec(sumItemSum, orderData[9]); //total sum with vat
         
-        if (!printDiscount && item[11] > 0)
+        if (!printDiscount && item[10] > 0)
             printDiscount = true;
         
         return [
-            item[7],        //productid
+            item[6],        //productid
             orderData[6],   //currency
             orderData[7],   //offerdate
             pOrderID,       //offerId
             item[0],        //info
             item[1],        //assignedTo
             item[3],        //itemname
-            item[4],        //optional
-            item[5],        //itemposition
-            item[6],        //productcode
+            item[4],        //itemposition
+            item[5],        //productcode
             orderData[8],   //header 
             orderData[13],   //footer 
-            text.formatDouble(item[9], "#,##0", true),          //quantity
-            text.formatDouble(item[10], "#,##0.00", true),      //price
-            text.formatDouble(item[11], "0.00", true),          //discount
+            text.formatDouble(item[8] || "0.0", "#,##0", true),          //quantity
+            text.formatDouble(item[9] || "0.0", "#,##0.00", true),      //price
+            text.formatDouble(item[10] || "0.0", "0.00", true),          //discount
             orderData[5],   //offercode
-            text.formatDouble(orderData[9], "#,##0.00", true),      //vat
-            text.formatDouble(itemSum, "#,##0.00", true),       //itemsum
-            KeywordUtils.getViewValue($KeywordRegistry.quantityUnit(), item[8]), //unittext
+            text.formatDouble(orderData[9] || "0.0", "#,##0.00", true),      //vat
+            text.formatDouble(itemSum || "0.0", "#,##0.00", true),       //itemsum
+            KeywordUtils.getViewValue($KeywordRegistry.quantityUnit(), item[7]), //unittext
             item[2],
+            item[12],
+            item[7],
             item[13],
-            item[8],
-            item[14],
-            text.formatDouble(item[12], "#,##0.00", true) 
+            text.formatDouble(item[11] || "0.0", "#,##0.00", true) 
         ];
     });
 
@@ -397,17 +428,16 @@ OrderUtils.buildOrderReport = function (pOrderID)
             "SALESORDERITEM_INFO", 
             "SALESORDERITEM_ASSIGNEDTO", //4
             "ITEMNAME" , 
-            "SALESORDERITEM_OPTIONAL", 
             "SALESORDERITEM_ITEMPOSITION", 
-            "PRODUCTCODE", //8
+            "PRODUCTCODE", //7
             "HEADER", 
             "FOOTER", 
             "QUANTITY", 
             "PRICE", 
-            "ORDERITEM.DISCOUNT", //13
+            "ORDERITEM.DISCOUNT", //12
             "ORDERCODE", 
             "SALESORDER.VAT", 
-            "ITEMSUM", // 17
+            "ITEMSUM", // 16
             "UNITTEXT",
             "PRODUCT_ID",
             "ORDERITEM.SALESORDER_ID",
@@ -484,15 +514,14 @@ OrderUtils.buildReminderReport = function (pOrderID)
         "SALESORDERITEM.ASSIGNEDTO",
         "SALESORDERITEM.PRODUCT_ID", 
         "SALESORDERITEM.ITEMNAME" , 
-        "SALESORDERITEM.OPTIONAL",  //4
         "SALESORDERITEM.ITEMPOSITION", 
         "PRODUCT.PRODUCTCODE", 
         "PRODUCT.PRODUCTID", 
-        "SALESORDERITEM.UNIT", //8
+        "SALESORDERITEM.UNIT", //7
         sqlUtil.isNull("SALESORDERITEM.QUANTITY", "0"), 
         sqlUtil.isNull("SALESORDERITEM.PRICE", "0"),
         sqlUtil.isNull("SALESORDERITEM.DISCOUNT", "0"), 
-        sqlUtil.isNull("SALESORDERITEM.VAT", "0"), //12
+        sqlUtil.isNull("SALESORDERITEM.VAT", "0"), //11
         "SALESORDERITEM.SALESORDER_ID",
         "SALESORDERITEM.ITEMSORT",
         "0", 
@@ -507,7 +536,9 @@ OrderUtils.buildReminderReport = function (pOrderID)
 
 
     if (itemData.length == 0)
+    {
         return null;
+    }
     
     var fullPrice = 0;
     var itemSum = 0;
@@ -520,31 +551,32 @@ OrderUtils.buildReminderReport = function (pOrderID)
     itemData = itemData.map(function (item)
     {
         //quantity * price
-        fullPrice = eMath.mulDec(parseFloat(item[9]), parseFloat(item[10])); //price without discount
+        fullPrice = eMath.mulDec(parseFloat(item[8]), parseFloat(item[9])); //price without discount
+        
+        //itemSum = (fullPrice * (100 - discount)) / 100
+        itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, item[10])), 100), 2, eMath.ROUND_HALF_EVEN); //sum of the item (with discount)
+        sumItemSum += itemSum; //total sum (without vat) 
         
-        if (item[4] != "1") //optional
+        //vatsum = itemSum * vat / 100
+        vatsum = eMath.divDec(eMath.mulDec(itemSum, item[11]), 100); //vat per product
+        if (item[11] > 0) 
         {
-            //itemSum = (fullPrice * (100 - discount)) / 100
-            itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, item[11])), 100), 2, eMath.ROUND_HALF_EVEN); //sum of the item (with discount)
-            sumItemSum += itemSum; //total sum (without vat) 
+            sums.push([item[11], vatsum]); //MWSteuerwerte für Map vorbereiten
         }
-        //vatsum = itemSum * vat / 100
-        vatsum = eMath.divDec(eMath.mulDec(itemSum, item[12]), 100); //vat per product
-        if (item[12] > 0) 
-            sums.push([item[12], vatsum]); //MWSteuerwerte für Map vorbereiten
         
         // sumItemSum + vat
         total = eMath.addDec(sumItemSum, orderData[9]); //total sum with vat
         
-        if (!printDiscount && item[11] > 0)
+        if (!printDiscount && item[10] > 0)
+        {
             printDiscount = true;
-        
+        }
         return [
             orderData[15],        //payed
             pOrderID,   //relationid
             orderData[6],   //currency
             orderData[7],   //orderdate
-            text.formatDouble(orderData[9], "#,##0.00", true), //vat
+            text.formatDouble(orderData[9] || "0.0", "#,##0.00", true), //vat
             orderData[10], //ordercode
             orderData[16],       //net      
             text.formatDouble(grossPrice, "#,##0.00", true),//grossPrice
@@ -651,15 +683,15 @@ OrderItemUtils.prototype.initItemTree = function() {
 /**
  * For documentation, see class ItemUtils.
  */
-OrderItemUtils.prototype.getItemSum = function(pQuantity, pPrice, pDiscount, pOptional) {
+OrderItemUtils.prototype.getItemSum = function(pQuantity, pPrice, pDiscount) {
     return ItemUtils.prototype.getItemSum.apply(this, [pQuantity, pPrice, pDiscount, false]);
 }
 
 /**
  * For documentation, see class ItemUtils.
  */
-OrderItemUtils.prototype.getItemVAT = function(pQuantity, pPrice, pDiscount, pVAT, pOptional) {
-    return ItemUtils.prototype.getItemVAT.apply(this, [pQuantity, pPrice, pDiscount, pVAT, pOptional]);
+OrderItemUtils.prototype.getItemVAT = function(pQuantity, pPrice, pDiscount, pVAT) {
+    return ItemUtils.prototype.getItemVAT.apply(this, [pQuantity, pPrice, pDiscount, pVAT]);
 }
 
 /**
@@ -685,7 +717,6 @@ OrderItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCu
                 , "PRICE"
                 , "VAT"
                 , "QUANTITY"
-                , "OPTIONAL"
                 , "ITEMPOSITION"
                 , "ITEMSORT"];
 
@@ -726,4 +757,57 @@ OrderItemUtils.prototype.reOrgItems = function() {
     this.initItemTree();
     
     ItemUtils.prototype.reOrgItems.apply(this);
-}
\ No newline at end of file
+}
+
+
+OrderItemUtils.getDiscountedNet = function(pExcludedIs, pOrderId, pDiscount, pExcludedProductgroups){
+    pDiscount = pDiscount || 0;
+    var ret;
+    var sum = 0;
+    var sumExcluded = 0;
+    var vat = 0;
+    var vatExcluded = 0;
+    if(pOrderId){
+        var orderitemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT")
+        .from("SALESORDERITEM")
+        .where("SALESORDERITEM.SALESORDER_ID", pOrderId)
+        .andIfSet("SALESORDERITEM.GROUPCODEID", pExcludedProductgroups, SqlBuilder.NOT_IN())
+        .andIfSet("SALESORDERITEM.SALESORDERITEMID", pExcludedIs, SqlBuilder.NOT_IN())
+        .table();
+        
+        for (var i = 0; i < orderitemData.length; i++)
+        {
+            sum = eMath.addDec(sum, ItemUtils.prototype.getItemSum(orderitemData[i][0], orderitemData[i][1], orderitemData[i][2]));
+            vat = eMath.addDec(vat, ItemUtils.prototype.getItemVAT(orderitemData[i][0], orderitemData[i][1], orderitemData[i][2], orderitemData[i][3]));
+        }
+       
+        sum = eMath.subDec(sum, eMath.divDec(eMath.mulDec(sum, pDiscount), "100"));
+        vat = eMath.subDec(vat, eMath.divDec(eMath.mulDec(vat, pDiscount), "100"));
+        
+        
+        if(pExcludedProductgroups)
+        {
+            var excludedOrderitemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT")
+            .from("SALESORDERITEM")
+            .where("SALESORDERITEM.SALESORDERITEM_ID", pOrderId)
+            .and("SALESORDERITEM.GROUPCODEID", pExcludedProductgroups, SqlBuilder.IN())
+            .andIfSet("OFFERITEM.SALESORDERITEMID", pExcludedIs, SqlBuilder.NOT_IN())
+            .table();
+            
+            excludedOrderitemData.forEach(function(excludedOrderItem){
+                sumExcluded = eMath.addDec(sumExcluded, ItemUtils.prototype.getItemSum(excludedOrderItem[0], excludedOrderItem[1], excludedOrderItem[2]));
+                vatExcluded = eMath.addDec(vatExcluded, ItemUtils.prototype.getItemVAT(excludedOrderitemData[i][0], excludedOrderitemData[i][1], excludedOrderitemData[i][2], excludedOrderitemData[i][3]));
+            });
+        }
+        if(sumExcluded)
+        {
+            sum = eMath.addDec(sum, sumExcluded);
+        }
+        if(vatExcluded)
+        {
+            vat = eMath.addDec(vat, vatExcluded);
+        }
+    }
+    ret = [sum, vat];
+    return ret;
+}
diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js
index b070a1a6605c5a3c5d63ef49760af0709429cf9c..c2f5c6c9de86aaacfe8646551301282a2b085ce7 100644
--- a/process/Turnover_lib/process.js
+++ b/process/Turnover_lib/process.js
@@ -48,7 +48,6 @@ TurnoverUtil.getTurnoverData = function (pMaxYear, pYearCount, pSalesprojectId)
         .where("SALESORDER.ORDERTYPE", "ORDTYPEINVO")
         .and("SALESORDER.ORDERSTATUS", "1")
         .and("SALESORDER.CANCELLATION", "1", SqlBuilder.NOT_EQUAL())
-        .and("SALESORDERITEM.OPTIONAL", "1", SqlBuilder.NOT_EQUAL())
         .and("SALESORDER.SALESORDERDATE", pMaxYear, sqlMask.yearFromDate("#") + " <= ?", SQLTYPES.INTEGER)
         .and("SALESORDER.SALESORDERDATE", minYear, sqlMask.yearFromDate("#") + " >= ?", SQLTYPES.INTEGER)
         .andIfSet("SALESORDER.SALESPROJECT_ID", pSalesprojectId)
diff --git a/process/migrateProbabilities/documentation.adoc b/process/migrateProbabilities/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ae05f3bb7b2abeca84bc12a2cccf5389e3bdfe8f
--- /dev/null
+++ b/process/migrateProbabilities/documentation.adoc
@@ -0,0 +1,2 @@
+= Probability Migration
+This process can be used to directly migrate the sales probabilities in the database, without the use of liquibase scripts.
diff --git a/process/migrateProbabilities/migrateProbabilities.aod b/process/migrateProbabilities/migrateProbabilities.aod
new file mode 100644
index 0000000000000000000000000000000000000000..db4161fc0de18dd38568aa658c0bc1e36c21cba6
--- /dev/null
+++ b/process/migrateProbabilities/migrateProbabilities.aod
@@ -0,0 +1,12 @@
+<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>migrateProbabilities</name>
+  <title>Migrate Probabilities</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/migrateProbabilities/documentation.adoc</documentation>
+  <process>%aditoprj%/process/migrateProbabilities/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/migrateProbabilities/process.js b/process/migrateProbabilities/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f28c6efd57099eb4f9f73f20bf8dc0f525fb5d5
--- /dev/null
+++ b/process/migrateProbabilities/process.js
@@ -0,0 +1,62 @@
+import("system.fileIO");
+import("system.db");
+import("system.SQLTYPES");
+import("system.logging");
+import("system.util");
+import("system.vars");
+import("Sql_lib");
+import("Util_lib");
+import("Liquibase_lib");
+
+var categoryIds = newSelect("AB_KEYWORD_CATEGORYID")
+    .from("AB_KEYWORD_CATEGORY")
+    .where("AB_KEYWORD_CATEGORY.NAME", ["SalesprojectProbability", "OfferProbability"], SqlBuilder.IN())
+    .arrayColumn();
+var entryIds = newSelect("AB_KEYWORD_ENTRYID")
+    .from("AB_KEYWORD_ENTRY")
+    .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryIds, SqlBuilder.IN())
+    .arrayColumn();
+var attributeIds = newSelect("AB_KEYWORD_ATTRIBUTEID")
+    .from("AB_KEYWORD_ATTRIBUTE")
+    .where("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryIds, SqlBuilder.IN())
+    .arrayColumn();
+var attributeRelationIds = newSelect("AB_KEYWORD_ATTRIBUTERELATIONID")
+    .from("AB_KEYWORD_ATTRIBUTERELATION")
+    .where("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID", entryIds, SqlBuilder.IN())
+    .arrayColumn();
+
+newWhere("AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID",
+    categoryIds, SqlBuilder.IN()).deleteData();
+newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID",
+    entryIds, SqlBuilder.IN()).deleteData();
+newWhere("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID",
+    attributeIds, SqlBuilder.IN()).deleteData();
+newWhere("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTERELATIONID",
+    attributeRelationIds, SqlBuilder.IN()).deleteData();
+    
+// dbms independent rename
+// no use of SqlBuilder becasue alter and update using computed values are currently not supported
+
+db.runStatement("alter table SALESPROJECT add PROBABILITY_OLD VARCHAR(36)");
+db.runStatement("update SALESPROJECT set PROBABILITY_OLD = PROBABILITY");
+db.runStatement("alter table SALESPROJECT drop column PROBABILITY");
+db.runStatement("alter table SALESPROJECT add PROBABILITY DECIMAL(6, 2)");
+var sWhenBlock = "";
+for(let i = 0; i <= 100; i += 25)
+{
+    sWhenBlock += "when SALESPROJECT.PROBABILITY_OLD = 'SALPROJPROB" + i + "' then " + i + " ";
+}
+db.runStatement("update SALESPROJECT set PROBABILITY = case " + sWhenBlock + "end");
+
+db.runStatement("alter table OFFER add PROBABILITY_OLD VARCHAR(36)");
+db.runStatement("update OFFER set PROBABILITY_OLD = PROBABILITY");
+db.runStatement("alter table OFFER drop column PROBABILITY");
+db.runStatement("alter table OFFER add PROBABILITY DECIMAL(6, 2)");
+var oWhenBlock = "";
+for(let i = 0; i <= 100; i += 25)
+{
+    oWhenBlock += "when OFFER.PROBABILITY_OLD = '" + i + "' then " + i + " ";
+}
+db.runStatement("update OFFER set PROBABILITY = case " + oWhenBlock + "end");
+    
+logging.log("Probabilities migrated succesfully");