diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/changelog.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..880688cff9487dd0f101f482685003c1ab08d1ea
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/changelog.xml
@@ -0,0 +1,11 @@
+<?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="create_VisitPlanTables.xml"/>
+                   <include relativeToChangelogFile="true" file="init_PersPointOfContact.xml"/>
+                   <include relativeToChangelogFile="true" file="init_VisitFrequency.xml"/>
+                   <include relativeToChangelogFile="true" file="init_VisitPlanEntryStatus.xml"/>
+                   <include relativeToChangelogFile="true" file="init_VisitPlanRecommendationPriority.xml"/>
+                   <include relativeToChangelogFile="true" file="init_VisitPlanRecommendationPrioSource.xml"/>
+                   <include relativeToChangelogFile="true" file="update_ActivityCategory_icon.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/create_VisitPlanTables.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/create_VisitPlanTables.xml
new file mode 100644
index 0000000000000000000000000000000000000000..04e0fa9f3cd843cf4f487e60519ba7d99c1b331c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/create_VisitPlanTables.xml
@@ -0,0 +1,38 @@
+<?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="863294b7-532b-47aa-84b6-94cfb637dd3a">
+        <createTable tableName="VISITPLANEMPLOYEEWEEK">
+            <column name="VISITPLANEMPLOYEEWEEKID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_VISITPLANEMPLOYEEWEEK_VISITPLANEMPLOYEEWEEKID"/>
+            </column>
+            <column name="VISITPLAN_YEAR" type="INT"/>
+            <column name="VISITPLAN_WEEK" type="INT"/>
+            <column name="CONTACT_ID" type="CHAR(36)"/>
+            <column name="INFO" type="NCLOB"/>
+        </createTable>
+        <createTable tableName="VISITPLANENTRY">
+            <column name="VISITPLANENTRYID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_VISITPLANENTRY_VISITPLANENTRYID"/>
+            </column>
+            <column name="ENTRYDATE" type="DATE"/>
+            <column name="BEGIN_TIME" type="TIME"/>
+            <column name="END_TIME" type="TIME"/>
+            <column name="ORGANISATION_ID" type="CHAR(36)"/>
+            <column name="VISITPLANEMPLOYEEWEEK_ID" type="CHAR(36)"/>
+            <column name="STATUS" type="CHAR(36)"/>
+            <column name="VISITRECOMMENDATION_ID" type="CHAR(36)"/>
+            <column name="APPOINTMENT_ID" type="CHAR(36)"/>
+        </createTable>
+        <createTable tableName="VISITRECOMMENDATION">
+            <column name="VISITRECOMMENDATIONID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_VISITRECOMMENDATION_VISITRECOMMENDATIONID"/>
+            </column>
+            <column name="DUE_DATE" type="DATETIME"/>
+            <column name="PRIORITY" type="CHAR(36)"/>
+            <column name="SOURCE" type="NVARCHAR(255)"/>
+            <column name="CONTACT_ID" type="CHAR(36)"/>
+            <column name="INFO" type="NCLOB"/>
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_PersPointOfContact.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_PersPointOfContact.xml
new file mode 100644
index 0000000000000000000000000000000000000000..52c0b26725f1b2968866416b7ce61e0b56e32e31
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_PersPointOfContact.xml
@@ -0,0 +1,51 @@
+<?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="16e3b4c9-ccb8-42ce-a7c4-54311b6651de">
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Visit frequency"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="59377864-0745-4a18-8d7b-57a0491a8116"/>
+            <column name="ATTRIBUTE_TYPE" value="COMBO                               "/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="a9575350-c1e7-4f96-b0ed-a8f52cc8b123"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Yearly"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="ATTRIBUTE_TYPE" value="COMBOVALUE                          "/>
+            <column name="SORTING" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="46d87ef7-a3fb-4918-98df-c8ed2cd3ca2b"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Semiannually"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="ATTRIBUTE_TYPE" value="COMBOVALUE                          "/>
+            <column name="SORTING" valueNumeric="2"/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="22722783-aa87-418f-9686-9b97c0639cae"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Quarterly"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="ATTRIBUTE_TYPE" value="COMBOVALUE                          "/>
+            <column name="SORTING" valueNumeric="3"/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="8c100817-1d2b-4fc7-8fdd-fd0370e19385"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Monthly"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="ATTRIBUTE_TYPE" value="COMBOVALUE                          "/>
+            <column name="SORTING" valueNumeric="4"/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTEUSAGE">
+            <column name="AB_ATTRIBUTEUSAGEID" value="c383d229-4abd-47b9-b131-cae340dafa59"/>
+            <column name="AB_ATTRIBUTE_ID" value="547b8b9d-88ba-4590-9e01-34d2a58116cc"/>
+            <column name="MAX_COUNT" valueNumeric="1"/>
+            <column name="OBJECT_TYPE" value="Organisation"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitFrequency.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitFrequency.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7111e45c969bc2417371c4febcd0453980956d50
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitFrequency.xml
@@ -0,0 +1,26 @@
+<?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="5f08fb9a-ec05-4a06-8809-1fc0629bd08b">
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="59377864-0745-4a18-8d7b-57a0491a8116"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Visit Planning"/>
+            <column name="ATTRIBUTE_TYPE" value="VOID                                "/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="7d78320a-31c6-4c24-992a-a583f47caeb5"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Point of Contact"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="59377864-0745-4a18-8d7b-57a0491a8116"/>
+            <column name="ATTRIBUTE_TYPE" value="BOOLEAN                             "/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTEUSAGE">
+            <column name="AB_ATTRIBUTEUSAGEID" value="24df9727-85ef-4344-a33d-7ac30218b481"/>
+            <column name="AB_ATTRIBUTE_ID" value="7d78320a-31c6-4c24-992a-a583f47caeb5"/>
+            <column name="MAX_COUNT" valueNumeric="1"/>
+            <column name="OBJECT_TYPE" value="Person"/>
+        </insert>
+
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanEntryStatus.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanEntryStatus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09490da478a39ff83928c9fb681ae24d18b3ab61
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanEntryStatus.xml
@@ -0,0 +1,33 @@
+<?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="06388d69-ae16-4655-bc51-b09ebbcc3ad5">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="9d427420-2c87-4ada-9349-a799972bda0f"/>
+            <column name="KEYID" value="VISITSTATUSPLANNED                  "/>
+            <column name="TITLE" value="planned"/>
+            <column name="CONTAINER" value="VisitPlanEntryStatus"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="2f740f93-12ed-4e22-a158-adba5da81b40"/>
+            <column name="KEYID" value="VISITSTATUSAPPPLANED                "/>
+            <column name="TITLE" value="Appointment planned"/>
+            <column name="CONTAINER" value="VisitPlanEntryStatus"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="dd276100-b867-489c-8128-a3b71aa7564f"/>
+            <column name="KEYID" value="VISITSTATUSREPORTCREATED            "/>
+            <column name="TITLE" value="Visitreport created"/>
+            <column name="CONTAINER" value="VisitPlanEntryStatus"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPrioSource.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPrioSource.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1de8b541b19371045dac349a748ca2e5fe0e20ec
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPrioSource.xml
@@ -0,0 +1,24 @@
+<?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="69bd60c9-22f4-4930-9c32-799a90394559">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="17905c4d-1c88-4cee-83da-164c13bbe848"/>
+            <column name="KEYID" value="VISITFREQUENCY                      "/>
+            <column name="TITLE" value="Visit Frequency"/>
+            <column name="CONTAINER" value="VisitRecommendationPrioSource"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="2f162837-868a-4517-810e-677cd423be56"/>
+            <column name="KEYID" value="MANUAL                              "/>
+            <column name="TITLE" value="Manual"/>
+            <column name="CONTAINER" value="VisitRecommendationPrioSource"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPriority.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPriority.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee9661433dbec349f609a8082879b11f2901f408
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/init_VisitPlanRecommendationPriority.xml
@@ -0,0 +1,51 @@
+<?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="4fd5a4b5-442a-4370-8567-0a1f5c227d96">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="91d7417e-fd45-429e-9ce9-a46f25c0c1d1"/>
+            <column name="KEYID" value="VISITPRIOCRITICAL                   "/>
+            <column name="TITLE" value="critical"/>
+            <column name="CONTAINER" value="VisitRecommendationPriority"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="c0147b73-f678-4136-b3c4-0fde7e943a84"/>
+            <column name="KEYID" value="VISITPRIOCVERYHIGH                  "/>
+            <column name="TITLE" value="very high"/>
+            <column name="CONTAINER" value="VisitRecommendationPriority"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="4ac4c7e1-d73b-4a26-9a6d-bc06505b9611"/>
+            <column name="KEYID" value="VISITPRIOHIGH                       "/>
+            <column name="TITLE" value="high"/>
+            <column name="CONTAINER" value="VisitRecommendationPriority"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="facb77a6-5bc1-4e2f-8dd0-72200b57c326"/>
+            <column name="KEYID" value="VISITPRIOMEDIUM                     "/>
+            <column name="TITLE" value="medium"/>
+            <column name="CONTAINER" value="VisitRecommendationPriority"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="036cbf6f-a8bd-4f25-b885-f1a689927bf1"/>
+            <column name="KEYID" value="VISITPRIOLOW                        "/>
+            <column name="TITLE" value="low"/>
+            <column name="CONTAINER" value="VisitRecommendationPriority"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/update_ActivityCategory_icon.xml b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/update_ActivityCategory_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b7a2f9a6e8795fde475b8079b57abab1427968c2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/VisitPlan/update_ActivityCategory_icon.xml
@@ -0,0 +1,13 @@
+<?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.goderbauer" id="47c6d047-4717-4583-aa2f-735b148c559b">
+        <update tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="CHAR_VALUE" value="VAADIN:CAR" />
+            <where>AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTERELATIONID = ?</where>
+            <whereParams>
+                <param value="9dfb126f-25ea-4a04-9603-c3e92fe74331" />
+            </whereParams>
+        </update>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/changelog.xml b/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
index a44528de1a83058b72e88bbe2bf0d93f79c12f15..814024a25bb0207b2b1a25243026256f39ae4aa5 100644
--- a/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
@@ -2,7 +2,8 @@
 <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 file="ExportTemplate/create_ExportTemplateTables.xml" relativeToChangelogFile="true"/>
-<include file="PermissionCalendar/changelog.xml" relativeToChangelogFile="true"/>
+    <include relativeToChangelogFile="true" file="VisitPlan/changelog.xml"/>
+    <include file="PermissionCalendar/changelog.xml" relativeToChangelogFile="true"/>
     <include file="DocumentTemplate/create_DocumentTemplatePlaceOfUse.xml" relativeToChangelogFile="true"/>
         <include relativeToChangelogFile="true" file="changeType_SALESORDER_PAID_UNPAID.xml"/>
     <include relativeToChangelogFile="true" file="changeType_SALESORDER_PAID_UNPAID.xml"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml
index 1bab6d642387531f868402cacc4ef202cb73721e..e6850dd5b6879f44ea9c7feba9b6bbefa4db5809 100644
--- a/.liquibase/Data_alias/basic/_demoData/changelog.xml
+++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml
@@ -50,4 +50,5 @@
   <include file="generatedData/exporttemplatefield.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/exporttemplateplaceofuse.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/documenttemplateplaceofuse.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/visitplan.xml" relativeToChangelogFile="true"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
new file mode 100644
index 0000000000000000000000000000000000000000..533d677a544e1912c5b0b7ba19a15e036f9cbfc3
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
@@ -0,0 +1,97 @@
+<?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="autogenerated" id="62ad16a9-7312-4dda-9e4b-460673b9af82">
+        
+        <insert tableName="VISITPLANEMPLOYEEWEEK">
+          <column name="VISITPLANEMPLOYEEWEEKID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
+          <column name="VISITPLAN_YEAR" valueNumeric="2020"/>
+          <column name="VISITPLAN_WEEK" valueNumeric="21"/>
+          <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+          <column name="INFO" value=""/>
+        </insert>
+
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="04e3cf2c-c367-4b3c-a65f-f729da96754f"/>
+          <column name="ENTRYDATE" valueDate="2020-05-18"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="9c6b378b-4738-47b6-9f19-3a1e26f3428e"/>
+          <column name="ENTRYDATE" valueDate="2020-05-19"/>
+          <column name="BEGIN_TIME" value="14:00"/>
+          <column name="END_TIME" value="17:00"/>
+          <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="bd7b38d1-9ae1-4424-8c65-d9b0f3b000ba"/>
+          <column name="ENTRYDATE" valueDate="2020-05-19"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="5102104c-6baa-404f-9c71-157a8c79663a"/>
+          <column name="ENTRYDATE" valueDate="2020-05-20"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        
+        <insert tableName="VISITPLANEMPLOYEEWEEK">
+          <column name="VISITPLANEMPLOYEEWEEKID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
+          <column name="VISITPLAN_YEAR" valueNumeric="2020"/>
+          <column name="VISITPLAN_WEEK" valueNumeric="22"/>
+          <column name="CONTACT_ID" value="1a67eaa7-21da-4a18-97ab-755ac5cb74f7"/>
+          <column name="INFO" value=""/>
+        </insert>
+
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="152c5f90-4c8b-40ee-8ff9-e2362340ba45"/>
+          <column name="ENTRYDATE" valueDate="2020-05-25"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="f799a0cd-31bb-4be3-9fd9-0cbd0a3d55ac"/>
+          <column name="ENTRYDATE" valueDate="2020-05-26"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+        <insert tableName="VISITPLANENTRY">
+          <column name="VISITPLANENTRYID" value="ad325402-616c-495e-a7f5-a5ae6def0399"/>
+          <column name="ENTRYDATE" valueDate="2020-05-27"/>
+          <column name="BEGIN_TIME" value="10:00"/>
+          <column name="END_TIME" value="11:00"/>
+          <column name="ORGANISATION_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+          <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
+          <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
+        </insert>
+
+
+        <insert tableName="VISITRECOMMENDATION">
+          <column name="VISITRECOMMENDATIONID" value="487eeff9-6807-41f6-95e9-5f0f61b45a05"/>
+          <column name="DUE_DATE" valueDate="2020-04-16T10:43:23"/>
+          <column name="PRIORITY" value="VISITPRIOMEDIUM                     "/>
+          <column name="SOURCE" value="MANUAL                              "/>
+          <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+          <column name="INFO" value="Kontrolltermin"/>
+        </insert>
+        
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
index ccfb7548604b4feca1399d0e7ce123cf38789047..515c28a780f8020041d40bd12ba6cc1aeb24c4b3 100644
--- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
+++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
@@ -133,6 +133,32 @@
           </entityNode>
         </childNodes>
       </entityNode>
+      <entityNode>
+        <name>Group12</name>
+        <kind v="123" />
+        <title>External Work</title>
+        <icon>VAADIN:CAR</icon>
+        <childNodes>
+          <entityNode>
+            <name>Group15</name>
+            <kind v="123" />
+            <childNodes>
+              <entityNode>
+                <name>VisitRecommendation</name>
+                <kind v="10077" />
+              </entityNode>
+              <entityNode>
+                <name>VisitPlanEmployeeWeek</name>
+                <kind v="10077" />
+              </entityNode>
+              <entityNode>
+                <name>INTERNAL_EVERYONE</name>
+                <kind v="159" />
+              </entityNode>
+            </childNodes>
+          </entityNode>
+        </childNodes>
+      </entityNode>
       <entityNode>
         <name>Marketing</name>
         <kind v="123" />
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index 97ca6191f20bb1f7668aa0d180f7734d5a09cfa4..687ca2399d29044e5f70d41e1d69df829482a289 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -51,6 +51,7 @@
       <consumer>KeywordCategories</consumer>
       <groupable v="true" />
       <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/category/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Activity_entity/entityfields/category/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -582,6 +583,18 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityParameter>
+      <name>Category_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>Entrydate_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>VisitPlanEntryId_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Activity_entity/entityfields/category/valueProcess.js b/entity/Activity_entity/entityfields/category/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b79cf6e3d6b03a857823fbb953a8246320f6d36c
--- /dev/null
+++ b/entity/Activity_entity/entityfields/category/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value") && 
+        vars.get("$param.Category_param"))
+        result.string(vars.get("$param.Category_param"));
diff --git a/entity/Activity_entity/entityfields/entrydate/valueProcess.js b/entity/Activity_entity/entityfields/entrydate/valueProcess.js
index 651bbe1ba274ee0bea9f70ef309afe11a883b175..91f909cd6717f1519d9ed47e19046434fe256d07 100644
--- a/entity/Activity_entity/entityfields/entrydate/valueProcess.js
+++ b/entity/Activity_entity/entityfields/entrydate/valueProcess.js
@@ -3,5 +3,8 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
-    result.string(datetime.date());
\ No newline at end of file
+if(vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    var presetValue = vars.get("$param.Entrydate_param") || datetime.date();
+    result.string(presetValue);
+}
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/onDBInsert.js b/entity/Activity_entity/recordcontainers/db/onDBInsert.js
index ea5eb09938ca215493e91e48c9882af3f79b8f3e..e67f7ab0878145e9347c096feb5d097432bf6222 100644
--- a/entity/Activity_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Activity_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,5 @@
+import("Sql_lib");
+import("KeywordRegistry_basic");
 import("Document_lib");
 import("ActivityTask_lib");
 import("system.vars");
@@ -20,6 +22,15 @@ else
 }
 if (documents)
     ActivityUtils.insertDocuments(vars.get("$local.uid"), documents);
+    
+if(vars.get("$param.VisitPlanEntryId_param"))
+{    
+    var values = [$KeywordRegistry.visitPlanEntryStatus$Visitreportcreated()];
+    var columns = ["STATUS"];
+    var columnTypes = db.getColumnTypes("VISITPLANENTRY", columns, db.getCurrentAlias());
+    var update = newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$param.VisitPlanEntryId_param"))
+                            .updateData(true, "VISITPLANENTRY", columns, columnTypes, values);
+}
 
 if (vars.exists("$param.InsertLinks_param") && vars.get("$param.InsertLinks_param"))
 {
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index 4645d08bede5cf4032745659c003532e8998b2c4..ebeba91e961ff738a0b7c700280d670308265101 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -159,6 +159,12 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
           <fieldName>AnyContacts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>91db53ad-3748-4a24-8dba-11dc707c2d6b</name>
+          <entityName>VisitPlanEntry_entity</entityName>
+          <fieldName>AnyContacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 24d94e0b869e2cc7ebe234496dd08041c05a865f..36b66e6474ce7b35b2beb84a843ad6eb17b130d4 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -571,6 +571,18 @@
           <fieldName>ActivityTypeKeyword</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>6ac610a4-64a0-4396-8901-80711850129a</name>
+          <entityName>VisitPlanEntry_entity</entityName>
+          <fieldName>KeywordVisitPlanEntryStatus</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>eec28bd6-7631-4653-9335-511f0298f8b6</name>
+          <entityName>VisitRecommendation_entity</entityName>
+          <fieldName>KeywordVisitRecommendationPriority</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 55d3301e4daa41ccc4e76af052fa41d1181b125f..46d2089ce3d9647e80a532af78a0b20b598f32b7 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -129,6 +129,12 @@
           <fieldName>Organisations</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>308bf57b-0e80-48a7-be13-8cf0d5005118</name>
+          <entityName>VisitPlanEntry_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
@@ -259,6 +265,12 @@
           <fieldName>Organisations</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>e395c4fd-a885-4f73-899f-6899cd3aa294</name>
+          <entityName>VisitRecommendation_entity</entityName>
+          <fieldName>OrganisationConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityConsumer>
@@ -1050,6 +1062,18 @@
       <name>ORGANISATION_REPORT_DATA</name>
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/organisation_report_data/valueProcess.js</valueProcess>
     </entityField>
+    <entityActionField>
+      <name>newVisitRecommendation</name>
+      <title>New Visit Recommendation</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CALENDAR</iconId>
+    </entityActionField>
+    <entityActionField>
+      <name>newVisitPlanEntry</name>
+      <title>New Weekplanentry</title>
+      <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CAR</iconId>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js b/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4b75c65374cd0c2b158597b4afc565669916962
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js
@@ -0,0 +1,9 @@
+import("system.neon");
+import("system.vars");
+
+var params = {};
+
+params["NoVisitPlanEmployeeWeek_param"] = true;
+params["OrganisationId_param"] = vars.get("$field.CONTACTID");
+
+neon.openContext("VisitPlanEntry", "VisitPlanEntryEdit_view", null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js b/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ac12a1242e4fb78d2c686a05f7df8dfbddeb361
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+
+var params = {};
+
+params["ContactId_param"] = vars.getString("$field.CONTACTID");
+
+neon.openContext("VisitRecommendation", null, null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index 5e7827f70a6d8a8adc0182e2aeef07c9f58d0cf5..e1f97bf211f7c93131651b935e543a69fb73662b 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -274,6 +274,12 @@
           <fieldName>Persons</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>4baa56bc-f570-4c19-81b9-4ed9ba7f0cfb</name>
+          <entityName>VisitRecommendation_entity</entityName>
+          <fieldName>PersonConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
@@ -682,6 +688,12 @@
           <fieldName>PersonsConsumer</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>c98da62f-d6b2-4ddb-9101-92e9a60abdfb</name>
+          <entityName>VisitPlanEmployeeWeek_entity</entityName>
+          <fieldName>Persons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..0867671a3805c26c002b6fb881f88097809dbd5e
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.14" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.14">
+  <name>VisitPlanEmployeeWeek_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/documentation.adoc</documentation>
+  <title>Visitplan Weekly Overview</title>
+  <iconId>VAADIN:CAR</iconId>
+  <image>VAADIN:CAR</image>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>VISITPLANEMPLOYEEWEEKID</name>
+    </entityField>
+    <entityField>
+      <name>YEAR</name>
+      <title>Year</title>
+      <resolution>YEAR</resolution>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/year/valueProcess.js</valueProcess>
+      <onValidation>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/year/onValidation.js</onValidation>
+    </entityField>
+    <entityField>
+      <name>WEEK</name>
+      <title>Week</title>
+      <dropDownProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/week/dropDownProcess.js</dropDownProcess>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/week/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>INFO</name>
+      <title>Info</title>
+    </entityField>
+    <entityField>
+      <name>PERSON_ID</name>
+      <title>Employee</title>
+      <consumer>Persons</consumer>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>icon</name>
+      <contentType>IMAGE</contentType>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/icon/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>entriesplannedcount</name>
+      <title>Planned</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entriesplannedcount/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>entriescount</name>
+      <title>Entriescount</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entriescount/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>entries_appoint_count</name>
+      <title>Appointment Confirmed</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_appoint_count/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>entries_activity_count</name>
+      <documentation>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/documentation.adoc</documentation>
+      <title>Visitreport created</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/valueProcess.js</valueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Entries</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>VisitPlanEntry_entity</entityName>
+        <fieldName>Entries</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Entries_param</name>
+          <valueProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/entityfields/entries/children/entries_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>recommendations</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>VisitRecommendation_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Persons</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contacts</fieldName>
+      </dependency>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <conditionProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>3c138105-f800-4216-8b1e-42d08a20f1ae</name>
+          <tableName>VISITPLANEMPLOYEEWEEK</tableName>
+          <primaryKey>VISITPLANEMPLOYEEWEEKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>VISITPLANEMPLOYEEWEEKID.value</name>
+          <recordfield>VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>YEAR.value</name>
+          <recordfield>VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>WEEK.value</name>
+          <recordfield>VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>INFO.value</name>
+          <recordfield>VISITPLANEMPLOYEEWEEK.INFO</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ID.value</name>
+          <recordfield>VISITPLANEMPLOYEEWEEK.CONTACT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_ID.displayValue</name>
+          <expression>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/recordfieldmappings/person_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/VisitPlanEmployeeWeek_entity/documentation.adoc b/entity/VisitPlanEmployeeWeek_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..75dc132894bf2a70d744aab8b476a20536dcd970
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/documentation.adoc
@@ -0,0 +1,5 @@
+= VisitPlanEmployeeWeek_entity
+
+For Visitplanning using calendarweeks.
+Entity links both the VisitPlanEntry_entity and the VisitRecommendation_entity,
+aswell as the Person_entity (to show which employee created the Planning for which week).
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entries/children/entries_param/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries/children/entries_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40f3505a91b1b827a351be68559f48d204289883
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries/children/entries_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.VISITPLANEMPLOYEEWEEKID"));
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/documentation.adoc b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..75dc132894bf2a70d744aab8b476a20536dcd970
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/documentation.adoc
@@ -0,0 +1,5 @@
+= VisitPlanEmployeeWeek_entity
+
+For Visitplanning using calendarweeks.
+Entity links both the VisitPlanEntry_entity and the VisitRecommendation_entity,
+aswell as the Person_entity (to show which employee created the Planning for which week).
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ba1acbd50449b973f0df4078eec2ba4f6f72660
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_activity_count/valueProcess.js
@@ -0,0 +1,10 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("count(*)")
+            .from("VISITPLANENTRY")
+            .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$field.VISITPLANEMPLOYEEWEEKID"))
+            .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated())
+            .cell());
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_appoint_count/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_appoint_count/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3658b62b0ed026756287c596435c61d261a0b362
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entries_appoint_count/valueProcess.js
@@ -0,0 +1,10 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("count(*)")
+            .from("VISITPLANENTRY")
+            .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$field.VISITPLANEMPLOYEEWEEKID"))
+            .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged())
+            .cell());
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entriescount/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/entriescount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6b928569a904423b48c9e1f3f1b8ad432e3eed0
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entriescount/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("count(*)")
+                            .from("VISITPLANENTRY")
+                            .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$field.VISITPLANEMPLOYEEWEEKID"))
+                            .cell());
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/entriesplannedcount/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/entriesplannedcount/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2da415daa710e7124099dcb11b9f5c6608b8829a
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/entriesplannedcount/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("Sql_lib");
+
+result.string(newSelect("count(*)")
+                            .from("VISITPLANENTRY")
+                            .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$field.VISITPLANEMPLOYEEWEEKID"))
+                            .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
+                            .cell());
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/icon/displayValueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/icon/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f7a0067782f98510defc2090930c5cba3039227
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/icon/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var week = vars.get("$field.WEEK");
+if(week.length == 1)
+    week = "0" + week;
+
+result.string("TEXT:" + week);
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/displayValueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2161701ba3a4caa82d099c7a996759a6ce1d862a
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/displayValueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+//show the simple title since this will be later an employee-entry and therefore no organisation is needed
+var title = ContactUtils.getTitleByContactId(vars.get("$field.PERSON_ID"));
+result.string(title);
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bb4d7463fcdc9d1dc9e14fb04772208f00176f4
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/person_id/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("Employee_lib");
+import("system.vars");
+import("Sql_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(EmployeeUtils.getCurrentContactId());
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/week/dropDownProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/week/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a5e337bc642c43ab5f835125781c97cf217a31c
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/week/dropDownProcess.js
@@ -0,0 +1,20 @@
+import("system.vars");
+import("system.translate");
+import("system.result");
+import("system.text");
+
+values = [];
+var out;
+//no week component so combobox was needed
+if(vars.get("$sys.clientlanguage") == "de")
+{
+    for(let i = 1; i < 53; i++)
+        values.push([text.formatDouble(i, "#"), "KW " + text.formatDouble(i, "#")]);
+}
+else
+{
+    for(let i = 1; i < 53; i++)
+        values.push([text.formatDouble(i, "#"), "CW " + text.formatDouble(i, "#")]);
+}
+result.object(values);
+
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/week/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/week/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ce1ac6b726d70643ee730a703dd8c38a388cf9e
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/week/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.datetime");
+import("Employee_lib");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+//use current week if recordstate = new and this field empty
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(datetime.toDate(vars.get("$sys.date"), "w"));
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/year/onValidation.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/year/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..efe1ad7a3f2a0e8f24c0d5243d9e5cf21e13163b
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/year/onValidation.js
@@ -0,0 +1,10 @@
+import("system.eMath");
+import("system.datetime");
+import("system.translate");
+import("system.vars");
+import("system.result");
+
+var year = eMath.absInt(vars.get("$local.value"));                             //input
+var currentYear = eMath.absInt(datetime.toDate(vars.get("$sys.date"), "yyyy"));//2019
+if(year < currentYear || year >= 10000 )
+    result.string(translate.text("Invalid year!"));
diff --git a/entity/VisitPlanEmployeeWeek_entity/entityfields/year/valueProcess.js b/entity/VisitPlanEmployeeWeek_entity/entityfields/year/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c79b83acb5a542cb7b197d5e7eae812502f4a67f
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/entityfields/year/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.datetime");
+import("Employee_lib");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+//use current year if recordstate = new and this field empty
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(datetime.toDate(vars.get("$sys.date"), "yyyy"));
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/conditionProcess.js b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfed3430a9ea724ab52316ad51e4bbf11129d2ae
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,10 @@
+import("system.logging");
+import("Sql_lib");
+import("Employee_lib");
+import("system.result");
+
+var cond = newWhere();
+
+cond.and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", EmployeeUtils.getCurrentContactId());
+
+result.string(cond);
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/orderClauseProcess.js b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d4f68a11e357ecf6dd7a954247aafb10289c747
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.db");
+
+result.object({"VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR": db.ASCENDING,
+               "VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK": db.ASCENDING});
\ No newline at end of file
diff --git a/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/recordfieldmappings/person_id.displayvalue/expression.js b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/recordfieldmappings/person_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..b061026da323fff3513e5cf1b6162b3dbd804430
--- /dev/null
+++ b/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/recordfieldmappings/person_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("Person_lib");
+
+result.string(PersUtils.getResolvingDisplaySubSql("VISITPLANEMPLOYEEWEEK.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..cb8b237c253d5a21e68730fa3d62ea3296cad6bc
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.14" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.14">
+  <name>VisitPlanEntry_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/VisitPlanEntry_entity/documentation.adoc</documentation>
+  <title>Weekplan</title>
+  <grantCreateProcess>%aditoprj%/entity/VisitPlanEntry_entity/grantCreateProcess.js</grantCreateProcess>
+  <grantUpdateProcess>%aditoprj%/entity/VisitPlanEntry_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/VisitPlanEntry_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <onValidation>%aditoprj%/entity/VisitPlanEntry_entity/onValidation.js</onValidation>
+  <titlePlural></titlePlural>
+  <recordContainer>jDito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>VISITPLANEMPLOYEEWEEK_ID</name>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/uid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>KeywordVisitPlanEntryStatus</consumer>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ID</name>
+      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc</documentation>
+      <title>Contact</title>
+      <consumer>AnyContacts</consumer>
+      <linkedContextProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/linkedContextProcess.js</linkedContextProcess>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>ENTRYDATE</name>
+      <title>Date</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+      <outputFormat>dd.MM.yyyy</outputFormat>
+      <inputFormat>dd.MM.yyyy</inputFormat>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>END_TIME</name>
+      <title>Until</title>
+      <contentType>DATE</contentType>
+      <resolution>HOUR</resolution>
+      <outputFormat>HH:mm 'Uhr'</outputFormat>
+      <inputFormat>HH:mm</inputFormat>
+      <mandatory v="true" />
+      <dropDownProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/end_time/dropDownProcess.js</dropDownProcess>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/end_time/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>BEGIN_TIME</name>
+      <title>From</title>
+      <contentType>DATE</contentType>
+      <resolution>HOUR</resolution>
+      <outputFormat>HH:mm 'Uhr'</outputFormat>
+      <inputFormat>HH:mm</inputFormat>
+      <mandatory v="true" />
+      <dropDownProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/begin_time/dropDownProcess.js</dropDownProcess>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/begin_time/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>contactcontext</name>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/contactcontext/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionGroup>
+      <name>entityActionGroup</name>
+      <iconId>VAADIN:CALENDAR</iconId>
+      <children>
+        <entityActionField>
+          <name>NewActivity</name>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/documentation.adoc</documentation>
+          <title>Create Visitreport</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <iconId>VAADIN:HOURGLASS_END</iconId>
+          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js</stateProcess>
+          <tooltip>Create Visitreport</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>NewAppointment</name>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/documentation.adoc</documentation>
+          <title>New Appointment</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:CALENDAR</iconId>
+          <state>AUTO</state>
+          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js</stateProcess>
+          <tooltip>Create new Appointment</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>openroute</name>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/documentation.adoc</documentation>
+          <title>Open Route</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:MAP_MARKER</iconId>
+          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/stateProcess.js</stateProcess>
+          <tooltip>Open route</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityProvider>
+      <name>Entries</name>
+      <targetContextField>contactcontext</targetContextField>
+      <targetIdField>ORGANISATION_ID</targetIdField>
+      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entries/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>ed458b30-e642-4c89-925b-20938e3abfc6</name>
+          <entityName>VisitPlanEmployeeWeek_entity</entityName>
+          <fieldName>Entries</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityConsumer>
+      <name>Organisations</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordVisitPlanEntryStatus</name>
+      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/documentation.adoc</documentation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/children/containername_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AnyContacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>OnlySameCompany</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityParameter>
+      <name>Entries_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>OrganisationId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>NoVisitPlanEmployeeWeek_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>EntriesofCurrentWeek_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>PARENT_ID</name>
+    </entityField>
+    <entityField>
+      <name>PARENTNAME</name>
+      <title>Tag</title>
+    </entityField>
+    <entityField>
+      <name>ISGROUP</name>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityField>
+      <name>VISITRECOMMENDATION_ID</name>
+    </entityField>
+    <entityField>
+      <name>APPOINTMENT_ID</name>
+      <title></title>
+    </entityField>
+    <entityField>
+      <name>CONTACT_ORG_ID</name>
+    </entityField>
+    <entityField>
+      <name>CONTACT_PERSON_ID</name>
+    </entityField>
+    <entityParameter>
+      <name>VisitPlanEmployeeWeek_param</name>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_param/valueProcess.js</valueProcess>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>visitPlanEmployeeWeeks_Id</name>
+      <dependency>
+        <name>dependency</name>
+      </dependency>
+    </entityConsumer>
+    <entityParameter>
+      <name>ComingFromRecommendation_param</name>
+      <expose v="true" />
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jDito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/VisitPlanEntry_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess>
+      <onInsert>%aditoprj%/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/VisitPlanEntry_entity/recordcontainers/jdito/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ISGROUP.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PARENT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PARENTNAME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>BEGIN_TIME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>END_TIME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ORGANISATION_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CONTACT_ORG_ID.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ENTRYDATE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>STATUS.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>VISITPLANEMPLOYEEWEEK_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/VisitPlanEntry_entity/documentation.adoc b/entity/VisitPlanEntry_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..202b31e2f8f9aa493f717d896932c99aecfcaed1
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= VisitPlanEntry_entity
+
+For storing Visitentries with their information(date, time, contact, and most importantly: it's Status).
+Linked to VisitPlanEmployeeWeek_entity so you only see the entries in the chosen week.
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d0e1cf3f92832cd370bd8b960ddcbcf0ab74d82
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$param.ComingFromRecommendation_param") && vars.get("$param.ComingFromRecommendation_param"))
+result.string(vars.get("$field.ORGANISATION_ID"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/begin_time/dropDownProcess.js b/entity/VisitPlanEntry_entity/entityfields/begin_time/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5ef197dc6d959c10471831543b60f96634e9f9c
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/begin_time/dropDownProcess.js
@@ -0,0 +1,25 @@
+import("system.datetime");
+import("system.logging");
+import("system.util");
+import("system.result");
+import("system.text");
+
+values = [];
+var time;
+
+for(var i = 0; i < 24; i++)
+{
+    i = i.toString();
+    if(i.length == 1)
+    {
+        values.push([datetime.toLong("0" + i + ":00", "HH:mm"), "0" + i + ":00"]);
+        values.push([datetime.toLong("0" + i + ":30", "HH:mm"), "0" + i + ":30"]);
+    }
+    else
+    {
+        values.push([datetime.toLong(i + ":00", "HH:mm"), i + ":00"]);
+        values.push([datetime.toLong(i + ":30", "HH:mm"), i + ":30"]);
+    }
+}
+
+result.object(values);
diff --git a/entity/VisitPlanEntry_entity/entityfields/begin_time/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/begin_time/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f320a45527c475f10db0d36dea1edc224a2ed3f9
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/begin_time/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.logging");
+import("system.datetime");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+// 7am as default value if field is empty and recordstate = new
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
+{
+    result.string(datetime.toLong("07:00", "HH:mm"));
+}
diff --git a/entity/VisitPlanEntry_entity/entityfields/contactcontext/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/contactcontext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..80c6814e0f702b58103b38e5c9d0f4d22d3033a6
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/contactcontext/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+//gets either ORGANISATION or CONTACT depending on which kind of ID got saved in the ORGANISATION_ID field 
+//(visiting contacts might be needed in the future, but not yet implemented)
+result.string(ContactUtils.getContextByContactId(vars.getString("$field.ORGANISATION_ID")));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/end_time/dropDownProcess.js b/entity/VisitPlanEntry_entity/entityfields/end_time/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..fad1ff9a83ebe192458c199e819f2a8a4186a6aa
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/end_time/dropDownProcess.js
@@ -0,0 +1,25 @@
+import("system.datetime");
+import("system.logging");
+import("system.util");
+import("system.result");
+import("system.text");
+
+values = [];
+var time;
+
+for(var i = 0; i < 24; i++)
+{
+    i = i.toString();
+    if(i.length == 1)
+    {
+        values.push([datetime.toLong("0" + i + ":00", "HH:mm"), "0" + i + ":00"]);
+        values.push([datetime.toLong("0" + i + ":30", "HH:mm"), "0" + i + ":30"]);
+    }
+    else 
+    {
+        values.push([datetime.toLong(i + ":00", "HH:mm"), i + ":00"]);
+        values.push([datetime.toLong(i + ":30", "HH:mm"), i + ":30"]);
+    }
+}
+
+result.object(values);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/end_time/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/end_time/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..74bbed024fd3b43b1bbbd86ad272efd028439217
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/end_time/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.eMath");
+import("system.logging");
+import("system.datetime");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+//end_time is by default one hour after the start_time
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$field.BEGIN_TIME") && !vars.get("$this.value"))
+{
+    result.string(eMath.absInt(vars.get("$field.BEGIN_TIME")) + datetime.ONE_HOUR);
+}
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..2ea1e79efa780d0ebaf4451899e998220bcc17aa
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/documentation.adoc
@@ -0,0 +1 @@
+opens the editview of activity with category Visitreport
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca537a336ac04404c3bdf82bbad7af873c9d06d3
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
@@ -0,0 +1,45 @@
+import("Sql_lib");
+import("AttributeRegistry_basic");
+import("Communication_lib");
+import("system.db");
+import("KeywordRegistry_basic");
+import("Contact_lib");
+import("Employee_lib");
+import("system.logging");
+import("system.vars");
+import("ActivityTask_lib");
+
+var links = [];
+
+var pointOfContact = newSelect("CONTACT.CONTACTID", db.getCurrentAlias())
+                                .from("CONTACT")
+                                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                                .leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
+                                .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact()) 
+                                .and("CONTACT.CONTACTID", vars.get("$field.ORGANISATION_ID"))
+                                .cell();
+var context;
+
+if(pointOfContact)
+    links.push([ContactUtils.getContextByContactId(pointOfContact), pointOfContact]);
+else
+{
+    var contactId = vars.get("$field.ORGANISATION_ID");
+    context = ContactUtils.getContextByContactId(contactId);
+    if(context == 'Person')
+    {
+        var orgContactId = newSelect("CONTACTID")
+                                        .from("CONTACT")
+                                        .where("PERSON_ID is null")
+                                        .and("CONTACT.ORGANISATION_ID", newSelect("ORGANISATION_ID")
+                                                                            .from("CONTACT")
+                                                                            .where("CONTACT.CONTACTID", contactId)
+                                                                            .cell()).cell();
+        if(orgContactId)
+            links.push(["Organisation", orgContactId]);
+    }  
+    links.push([context, contactId]);
+}
+
+ActivityUtils.createNewActivity(null, links, null, null, null, null, $KeywordRegistry.activityDirection$outgoing(), null, $KeywordRegistry.activityCategory$visit(), vars.get("$field.ENTRYDATE"), vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..57b2f8280f91c2a73374d503c528b0d6075bbce8
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.datetime");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+var today = vars.get("$sys.date")
+
+if (vars.get("$field.ISGROUP") == "false" && vars.get("$field.ENTRYDATE") <= today && vars.get("$sys.selectionRows") != "")
+    state = neon.COMPONENTSTATE_EDITABLE;
+result.string(state);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/tooltipProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/tooltipProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b46a5034ca52edf127d8be225ada8a5759d09224
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/tooltipProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Create Visitreport"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..51e093f5d14cc0e2bf39de625536c213e16e22e8
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/documentation.adoc
@@ -0,0 +1 @@
+creates the Appointment-editview
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..29a02cbf84117b94c950075d7c09853e9c8c36e0
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
@@ -0,0 +1,77 @@
+import("KeywordRegistry_basic");
+import("system.translate");
+import("Sql_lib");
+import("AttributeRegistry_basic");
+import("system.datetime");
+import("system.logging");
+import("Communication_lib");
+import("system.db");
+import("system.vars");
+import("system.neon");
+import("system.calendars");
+import("Calendar_lib");
+import("system.date");
+import("Context_lib");
+import("system.util");
+import("system.eMath");
+import("system.text");
+
+
+var entry;
+var params = {};
+var pointOfContact;
+var mailAffectedUser = [];
+var uidAppointment;
+var values;
+var columns;
+var columnTypes;
+var update;
+
+var selectionRowData = vars.get("$sys.selectionRows");
+
+var uid = selectionRowData[0].UID;
+var isGroup = selectionRowData[0].ISGROUP; //not Bool
+var entryDateAsLong = selectionRowData[0].ENTRYDATE;
+var entryDate = datetime.toDate(entryDateAsLong, "dd-MM-yyyy");
+var startTime = selectionRowData[0].BEGIN_TIME;
+var endTime = selectionRowData[0].END_TIME;
+var organisation_id = selectionRowData[0].ORGANISATION_ID
+
+if(isGroup == "false") //No Group was selected
+{
+    pointOfContact = newSelect(["CONTACT.CONTACTID", "(" + CommUtil.getStandardSubSqlMail() + ")"])
+                                .from("CONTACT")
+                                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                                .leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
+                                .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact()) 
+                                .and("ORGANISATION.ORGANISATIONID", organisation_id)
+                                .table();
+
+    userMailto = [];
+
+    for(var i = 0; i < pointOfContact.length; i++)
+    {
+        userMailto.push("mailto:" + pointOfContact[i][1], "CN:" + pointOfContact[i][1]);
+        mailAffectedUser.push(text.encodeMS(userMailto));
+    }
+
+    var startdate = entryDate + " " + datetime.toDate(startTime, "HH:mm:ss.S");
+    startdate = datetime.toLong(startdate, "dd-MM-yyyy HH:mm:ss.S");
+
+    var duration = eMath.subInt(endTime, startTime);
+    entry = CalendarUtil.createEntry("", calendars.VEVENT, translate.text("Visit"), "", false, false, false, vars.get("$sys.user"), [vars.get("$sys.user")], startdate, duration, null, calendars.STATUS_TENTATIVE, null, null, mailAffectedUser);
+
+    params["Entry_param"] = JSON.stringify(entry);
+    uidAppointment = calendars.insert([entry]);
+    
+    values = [$KeywordRegistry.visitPlanEntryStatus$Appointmentarranged(), uidAppointment[0]];
+    columns = ["STATUS", "APPOINTMENT_ID"];
+    columnTypes = db.getColumnTypes("VISITPLANENTRY", columns, db.getCurrentAlias());
+    
+    update = newWhere("VISITPLANENTRY.VISITPLANENTRYID", uid)
+                        .updateData(true, "VISITPLANENTRY", columns, columnTypes, values);
+
+    neon.setFieldValue("$field.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged());
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..00cae70329680cdd31c029965dc471e53f65d642
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+if (vars.get("$field.ISGROUP") == "false" && vars.get("$sys.selectionRows") != "")
+    state = neon.COMPONENTSTATE_EDITABLE;
+result.string(state);
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/tooltipProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/tooltipProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea083fcb476a7c75a6494b1b17d913cc5a62ad90
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/tooltipProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Create new Appointment"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6fcdffce161a586e2475c42eac36b98a974296fd
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/documentation.adoc
@@ -0,0 +1 @@
+Opens the route to the location(s) via google-maps
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b926fc89ff6515951fc64f5cec927a60f8434174
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js
@@ -0,0 +1,77 @@
+import("Sql_lib");
+import("Employee_lib");
+import("system.datetime");
+import("system.db");
+import("system.text");
+import("system.neon");
+import("system.vars");
+import("Address_lib");
+
+var visitAddresses = [];
+var addressIdStart;
+var address;
+var user = EmployeeUtils.getCurrentContactId();
+
+//start homeaddress
+addressIdStart = newSelect("ADDRESSID")
+            .from("ADDRESS")
+            .where("ADDRESS.ADDR_TYPE", "HOMEADDR")
+            .and("ADDRESS.CONTACT_ID", user)
+            .cell();
+
+if(!addressIdStart)
+{
+    //start orgaddress
+    var orgID = newSelect("ORGANISATION_ID")
+            .from("CONTACT")
+            .where("CONTACT.CONTACTID", user)
+            .cell();
+    
+    addressIdStart = newSelect("ADDRESS_ID")
+                                .from("CONTACT")
+                                .where("CONTACT.ORGANISATION_ID", orgID)
+                                .and("CONTACT.PERSON_ID is null")
+                                .cell();
+}
+
+var addressStart = "";
+if(addressIdStart)
+{
+    addressStart = newSelect("ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY")
+                                .from("ADDRESS")
+                                .where("ADDRESS.ADDRESSID", addressIdStart)
+                                .arrayRow();
+
+    visitAddresses.push(addressStart.join("+"));
+}
+
+//address to visit
+var selectionRowData = vars.get("$sys.selectionRows");
+var UID = selectionRowData[0].UID;
+var isGroup = selectionRowData[0].ISGROUP; //not Bool
+var entrydateDB = datetime.toLong(UID.split("#")[1], "dd.MM.yyyy");
+
+if(vars.exists("$param.Entries_param") && vars.get("$param.Entries_param"))
+{
+
+    var entryid = vars.get("$param.Entries_param");
+    
+    var childAddresses = newSelect("ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY")
+                                    .from("ADDRESS")
+                                    .leftJoin("VISITPLANENTRY", "ADDRESS.ADDRESSID = (select ADDRESS_ID from CONTACT where CONTACT.CONTACTID \n\
+                                                = VISITPLANENTRY.ORGANISATION_ID)")
+                                    .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", entryid)
+                                    .and("VISITPLANENTRY.ENTRYDATE", entrydateDB)
+                                    .table();
+
+
+    for(let i = 0; i < childAddresses.length; i++)
+        visitAddresses.push(childAddresses[i].join("+"));
+
+    visitAddresses.push(addressStart.join("+"));
+}
+
+
+address = "https://www.google.com/maps/dir/" + visitAddresses.join("/");
+
+neon.openUrl(address, true);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..903ff9b70c0595a6b3b2fb40404d23b27a0a5525
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/stateProcess.js
@@ -0,0 +1,9 @@
+import("system.logging");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+if (vars.get("$field.ISGROUP") == "true" && vars.get("$sys.selectionRows") != "" && vars.get("$sys.selectionRows") != undefined)
+    state = neon.COMPONENTSTATE_EDITABLE;
+result.string(state);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/tooltipProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/tooltipProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e900bf13f51ad63a357e3e704533b10d9fa202b6
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/tooltipProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Open route"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entries/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/entries/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0e23ed881f313074b3c18c9603d010185eec84a3
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entries/documentation.adoc
@@ -0,0 +1 @@
+linked to VisitPlanEmployeeWeek for linking the view in the mainview
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/children/containername_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccc9743cd74df98bd6f2afb0dee8c7003bd294ad
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result"); 
+import("Keyword_lib"); 
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.visitPlanEntryStatus());
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1454ed8b3d845c7505d8d9ae6f8eb0df24d5c2d4
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/documentation.adoc
@@ -0,0 +1 @@
+Needed for the status keyword
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a069cec9dd05ddca04014ff4a5a534e07aff0fc
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Contact_lib");
+
+var contactid = vars.get("$field.ORGANISATION_ID");
+var res = ContactUtils.getFullTitleByContactId(contactid);
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c72b5691f3df7f331d9ccb7b6eae67e7118cc0af
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc
@@ -0,0 +1 @@
+dropdown of all contacts of the own organisation and all the other organisations
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/linkedContextProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..666b1349748541127d2977a28e6a140ccbf800b1
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/organisation_id/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+result.string(ContactUtils.getContextByPersOrg(vars.get("$field.CONTACT_PERSON_ID"), vars.get("$field.CONTACT_ORG_ID")));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e2ae6fb1b0bf9ab65352f918d3cdb1bd467de63
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.logging");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    result.string(vars.get("$param.OrganisationId_param"));
+}
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/status/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..da9d2bcd966a70656818b970eb8724cf08a847c9
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/status/displayValueProcess.js
@@ -0,0 +1,8 @@
+import("system.translate");
+import("system.logging");
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.visitPlanEntryStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/status/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0a03d16279164f85ca031d49c637a3305595d59
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,9 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
+{
+    result.string($KeywordRegistry.visitPlanEntryStatus$planned());
+}
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/uid/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/uid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..108183b514a537915c0292894b891518c0aab47d
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/uid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")  && vars.get("$this.value") == null) 
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_id/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8488cb5c1b9c9990b40620cd4678ee5dbdbd67e9
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_id/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.logging");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(vars.get("$param.Entries_param"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d19b8e7202d677770bc6b97fca4814428527f47
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.VISITPLANEMPLOYEEWEEK_ID"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/grantCreateProcess.js b/entity/VisitPlanEntry_entity/grantCreateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8533b964b4d96d4dde9236391793c29673b0e1c
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/grantCreateProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$field.ISGROUP") != "true" && vars.get("$param.EntriesofCurrentWeek_param") != "true");
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/grantDeleteProcess.js b/entity/VisitPlanEntry_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8533b964b4d96d4dde9236391793c29673b0e1c
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/grantDeleteProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$field.ISGROUP") != "true" && vars.get("$param.EntriesofCurrentWeek_param") != "true");
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/grantUpdateProcess.js b/entity/VisitPlanEntry_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c75adbde300dd0e7e6068c4a07dad9451fec7c8
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/grantUpdateProcess.js
@@ -0,0 +1,5 @@
+import("system.logging");
+import("system.vars");
+import("system.result");
+
+result.object(vars.get("$field.ISGROUP") != "true" && vars.get("$param.EntriesofCurrentWeek_param") != "true");
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/onValidation.js b/entity/VisitPlanEntry_entity/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..15c1007b0a9286bb7512a4c9dc0d510e59350624
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/onValidation.js
@@ -0,0 +1,26 @@
+import("system.eMath");
+import("Sql_lib");
+import("system.logging");
+import("system.datetime");
+import("system.db");
+import("system.translate");
+import("system.vars");
+import("system.result");
+
+var endTime = eMath.absInt(vars.get("$field.END_TIME"));
+var begin_time = eMath.absInt(vars.get("$field.BEGIN_TIME")); 
+
+if (endTime != "" && begin_time != "" && endTime < begin_time)
+    result.string(translate.text("The endtime can't be before begintime!"));
+
+if(vars.get("$param.NoVisitPlanEmployeeWeek_param") != "true")
+{
+        var week = newSelect("VISITPLAN_WEEK") 
+                                .from("VISITPLANEMPLOYEEWEEK")
+                                .where("VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID", vars.get("$field.VISITPLANEMPLOYEEWEEK_ID"))
+                                .cell();                
+    weekEntrydate = eMath.absInt(datetime.toDate(vars.get("$field.ENTRYDATE"), "w"))
+
+    if(week != weekEntrydate)
+        result.string(translate.text("Entrydate has to be in the selected calendar week!"));
+}
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd23121f3e4c85f9b0a4b49d18a0c73913be022c
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,82 @@
+import("Keyword_lib");
+import("Contact_lib");
+import("Employee_lib");
+import("KeywordRegistry_basic");
+import("system.calendars");
+import("system.datetime");
+import("system.translate");
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var items = [];
+var group = [];
+var entryData = "";
+
+var entrySQL = newSelect("ENTRYDATE, VISITPLANENTRYID, BEGIN_TIME, END_TIME, ORGANISATION_ID, STATUS, VISITPLANEMPLOYEEWEEK_ID")
+                            .from("VISITPLANENTRY");
+
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+{
+    entrySQL.where("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$local.idvalues"));
+}
+else if(vars.exists("$param.Entries_param") && vars.get("$param.Entries_param"))
+{
+    entrySQL.where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$param.Entries_param"));
+}
+else if(vars.exists("$param.EntriesofCurrentWeek_param") && vars.get("$param.EntriesofCurrentWeek_param") == "true")
+{
+    var currentWeek = datetime.toDate(vars.get("$sys.date"), "w");
+    var currentYear = datetime.toDate(vars.get("$sys.date"), "yyyy");
+    var currentUser = EmployeeUtils.getCurrentContactId();
+    
+    entrySQL.join("VISITPLANEMPLOYEEWEEK", "VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID = VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID")
+            .where("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", currentWeek)
+            .and("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", currentYear)
+            .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", currentUser);    
+}
+
+entrySQL.orderBy("ENTRYDATE, BEGIN_TIME");
+entryData = entrySQL.table();
+
+if(entryData.length > 0)
+{
+    for(var i = 0; i < entryData.length; i++)
+    {
+        var entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisation_id, status, visitplanemployeeweek_id;
+        [entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisation_id, status, visitplanemployeeweek_id] = entryData[i]
+        
+        var contactData = newSelect("CONTACT.ORGANISATION_ID, CONTACT.PERSON_ID")
+                                        .from("CONTACT")
+                                        .where("CONTACT.CONTACTID", organisation_id)
+                                        .arrayRow();
+        
+        
+        var orgname = OrganisationUtils.getNameByOrganisationId(contactData[0]);
+        var parentName = translate.text(datetime.toDate(entryDateRaw, "EEEE"));
+        entryDate = datetime.toDate(entryDateRaw, "dd.MM.yyyy");
+        
+
+        items.push([visitPlanEntryId, false, parentName + "#" + entryDate, "",  beginn_time
+            , end_time, organisation_id, orgname, entryDateRaw, status, visitplanemployeeweek_id]);
+
+        if(!vars.get("$local.idvalues"))
+        {
+            if(group.indexOf(parentName + "#" + entryDate) == -1)
+            {
+                items.push([parentName + "#" + entryDate, true, "", parentName + " " + entryDate, "", "",  "", "", "", "", ""]);
+                group.push(parentName + "#" + entryDate);
+            }
+        }
+    }
+}
+
+//add Display Value for Status
+for (let i = 0; i < items.length; i++)
+{
+    items[i][11] = KeywordUtils.getViewValue($KeywordRegistry.visitPlanEntryStatus(), items[i][9])
+}
+
+result.object(items);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onDelete.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..053a7f39e023be7246f83d5c5a43be027a45f283
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("Sql_lib");
+import("system.db");
+
+newWhereIfSet("VISITPLANENTRY.VISITPLANENTRYID", "$field.UID")
+    .deleteData();
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..398d44122293a9ba9d757d651896896aa4273a36
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,81 @@
+import("Sql_lib");
+import("system.neon");
+import("Employee_lib");
+import("system.datetime");
+import("system.logging");
+import("system.db");
+import("system.vars");
+import("system.util");
+
+var visitPlanEmployeeWeekID = "";
+var insertData = [];
+var user = EmployeeUtils.getCurrentContactId();
+if(vars.get("$param.Entries_param") != null)
+    visitPlanEmployeeWeekID = vars.get("$param.Entries_param");
+else
+{
+    var calendarWeek = datetime.toDate(vars.get("$field.ENTRYDATE"), "w");
+    var calendarYear = datetime.toDate(vars.get("$field.ENTRYDATE"), "yyyy");
+    var weekId = newSelect("VISITPLANEMPLOYEEWEEKID")
+                            .from("VISITPLANEMPLOYEEWEEK") 
+                            .where("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", calendarWeek)
+                            .and("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", calendarYear)
+                            .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", user)
+                            .cell();
+
+    if(weekId)
+        visitPlanEmployeeWeekID = weekId;
+    else
+    {
+        var newWeekId = util.getNewUUID();
+        
+        var valuesWeek = [
+            newWeekId,
+            calendarWeek,
+            calendarYear,
+            user
+        ];
+
+        var columnsWeek = [
+            "VISITPLANEMPLOYEEWEEKID",
+            "VISITPLAN_WEEK",
+            "VISITPLAN_YEAR",
+            "CONTACT_ID",
+        ];
+
+        var columnTypesWeek = db.getColumnTypes("VISITPLANEMPLOYEEWEEK", columnsWeek, db.getCurrentAlias());
+        
+        insertData.push(["VISITPLANEMPLOYEEWEEK", columnsWeek, columnTypesWeek, valuesWeek]);
+
+        visitPlanEmployeeWeekID = newWeekId;
+    }    
+}
+
+var rowData = vars.get("$local.rowdata");
+
+var valuesEntry = [
+    rowData["UID.value"],
+    rowData["ENTRYDATE.value"],
+    rowData["BEGIN_TIME.value"],
+    rowData["END_TIME.value"],
+    rowData["ORGANISATION_ID.value"],
+    visitPlanEmployeeWeekID,
+    rowData["STATUS.value"]
+];
+
+var columnsEntry = [
+    "VISITPLANENTRYID",
+    "ENTRYDATE",
+    "BEGIN_TIME",
+    "END_TIME",
+    "ORGANISATION_ID",
+    "VISITPLANEMPLOYEEWEEK_ID",
+    "STATUS"
+];
+
+
+var columnTypesEntry = db.getColumnTypes("VISITPLANENTRY", columnsEntry, db.getCurrentAlias());
+
+insertData.push(["VISITPLANENTRY", columnsEntry, columnTypesEntry, valuesEntry])
+
+db.inserts(insertData);
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..b689b3021904eba4df607ccb40bdb16b72cf746d
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,29 @@
+import("Sql_lib");
+import("system.logging");
+import("system.neon");
+import("system.db");
+import("system.vars");
+
+var rowData = vars.get("$local.rowdata");
+
+var valuesEntry = [
+    rowData["ENTRYDATE.value"],
+    rowData["BEGIN_TIME.value"],
+    rowData["END_TIME.value"],
+    rowData["ORGANISATION_ID.value"],
+    rowData["STATUS"]
+];
+
+var columns = [
+    "ENTRYDATE",
+    "BEGIN_TIME",
+    "END_TIME",
+    "ORGANISATION_ID",
+    "STATUS"
+];
+
+var columnTypes = db.getColumnTypes("VISITPLANENTRY", columns, db.getCurrentAlias());
+
+var cond = newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$field.UID"));
+
+db.updateData("VISITPLANENTRY", columns, columnTypes, values, cond);
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/rowCountProcess.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/rowCountProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..69e7e9c5f4b9b6ce95fceac9bbdf625bcacc9820
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/rowCountProcess.js
@@ -0,0 +1,42 @@
+import("Sql_lib");
+import("system.datetime");
+import("system.translate");
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.result");
+
+var group = [];
+var entryData = "";
+var entrySQL = "";
+var count = 0; 
+
+if(vars.exists("$param.Entries_param"))
+{
+    entrySQL = newSelect("ENTRYDATE")
+                        .from("VISITPLANENTRY")
+                        .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", vars.get("$param.Entries_param"));
+}
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+{
+    entrySQL.andIfSet("VISITPLANENTRYID", vars.get("$local.idvalues"));
+}
+entrySQL.orderBy("ENTRYDATE, BEGIN_TIME ");
+entryData = entrySQL.table();
+count += entryData.length;
+
+if(entryData.length > 0)
+{
+    for(var i = 0; i < entryData.length; i++)
+    {
+        var parentName = translate.text(datetime.toDate(entryData[i][0], "EEEE"));
+        if(!vars.exists("$local.idvalues") || !vars.get("$local.idvalues"))
+        {
+            if(group.indexOf(parentName) == -1)
+                group.push(parentName);
+            
+        }
+    }
+}
+count += group.length;
+result.string(count);
diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..24c14af1835318b0a97cac0cdd85cb41c575fb56
--- /dev/null
+++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.14" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.14">
+  <name>VisitRecommendation_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/VisitRecommendation_entity/documentation.adoc</documentation>
+  <title>Visit Recommendation</title>
+  <grantCreate v="true" />
+  <iconId>VAADIN:BRIEFCASE</iconId>
+  <image>VAADIN:BRIEFCASE</image>
+  <titlePlural>Visit Recommendations</titlePlural>
+  <recordContainer>jDito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <targetContextField>TARGET_CONTEXT</targetContextField>
+      <targetIdField>CONTACT_ID</targetIdField>
+      <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/#provider/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>d39ab3e0-0b61-4a6d-a6f9-5c5fef20a801</name>
+          <entityName>VisitPlanEmployeeWeek_entity</entityName>
+          <fieldName>recommendations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/contact_id/documentation.adoc</documentation>
+      <title>Contactperson</title>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/contact_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/uid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_NAME</name>
+      <title>Customer</title>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_POINT_OF_CONTACT</name>
+      <title>Organisation point Of Contact</title>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_ADDRESS</name>
+      <title>Address</title>
+    </entityField>
+    <entityField>
+      <name>PRIORITY</name>
+      <title>Priority</title>
+      <consumer>KeywordVisitRecommendationPriority</consumer>
+      <mandatory v="true" />
+      <displayValueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/priority/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>PRIORITY_SOURCE</name>
+      <title>Priority Source</title>
+    </entityField>
+    <entityField>
+      <name>DUE_DATE</name>
+      <title>Due Date</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+      <outputFormat>dd.MM.yyyy</outputFormat>
+      <inputFormat>dd.MM.yyyy</inputFormat>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>INFO</name>
+      <title>Info</title>
+    </entityField>
+    <entityField>
+      <name>DATE_PLANNED</name>
+      <title>Date Planned</title>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+    </entityField>
+    <entityField>
+      <name>USER_PLANNED</name>
+      <title>Planned By</title>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordVisitRecommendationPriority</name>
+      <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/documentation.adoc</documentation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/children/containername_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>OrganisationConsumer</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>PersonConsumer</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityParameter>
+      <name>ContactId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/contactid_param/documentation.adoc</documentation>
+    </entityParameter>
+    <entityActionGroup>
+      <name>newEntryGroup</name>
+      <children>
+        <entityActionField>
+          <name>NewVisitPlaneEntry</name>
+          <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/documentation.adoc</documentation>
+          <title>New Weekplanentry</title>
+          <onActionProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js</onActionProcess>
+          <iconId>NEON:EXPORT</iconId>
+          <state>AUTO</state>
+          <stateProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/stateProcess.js</stateProcess>
+          <tooltip>Create New Weekplanentry</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityField>
+      <name>PRIORITY_ICON</name>
+      <title></title>
+      <colorProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/priority_icon/colorProcess.js</colorProcess>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/priority_icon/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TARGET_CONTEXT</name>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jDito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <onInsert>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ORGANISATION_NAME.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ORGANISATION_POINT_OF_CONTACT.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ORGANISATION_ADDRESS.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PRIORITY.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PRIORITY_SOURCE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PRIORITY.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DUE_DATE.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>INFO.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PRIORITY_SOURCE.displayValue</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/VisitRecommendation_entity/documentation.adoc b/entity/VisitRecommendation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..9dc7ddd44659123d50ccd0f2ed6f75c4a49a4b05
--- /dev/null
+++ b/entity/VisitRecommendation_entity/documentation.adoc
@@ -0,0 +1,4 @@
+= VisitRecommendation_entity
+
+For the recommended visits with their information(customer, address, priority, priority-source, duedate and Info.
+Linked to VisitPlanEmployeeWeek_entity so you only see the entries in the chosen week.
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/#provider/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/#provider/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0e23ed881f313074b3c18c9603d010185eec84a3
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/#provider/documentation.adoc
@@ -0,0 +1 @@
+linked to VisitPlanEmployeeWeek for linking the view in the mainview
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/contact_id/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/contact_id/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..b8561badfe9a50219c1561e798d374f67768d2a4
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/contact_id/documentation.adoc
@@ -0,0 +1 @@
+in the future it could be possible that this feature should also be usable for the usage with contacts (not clear right now)
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/contact_id/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..683ba24292b07fb95f063e4d5e7a2c25bcfe1807
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/contact_id/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.logging");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && (vars.get("$this.value") == null || vars.get("$this.value") == undefined))
+    result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/contactid_param/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/contactid_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..891e06382943a519b1650fcbb4915bad036ce9e6
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/contactid_param/documentation.adoc
@@ -0,0 +1 @@
+needed for the ContactPersonField (CONTACT_ID)
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/children/containername_param/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c5170b85e976bb4b0f474536ab603f8f7c68296
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result"); 
+import("Keyword_lib"); 
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.visitRecommendationPriority());
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..bacaa7bf4ae25156388a021e8a2074ffce12f7c8
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/documentation.adoc
@@ -0,0 +1 @@
+Needed for the priority keyword
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cb90b44b24aeaa10d2a2516a74821433c31c6fae
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/documentation.adoc
@@ -0,0 +1 @@
+Creates a new Weekplanentry
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..18fed0aa2bf4948e022c030e7276e08d780977bd
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js
@@ -0,0 +1,11 @@
+import("system.db");
+import("system.neon");
+import("system.vars");
+
+var params = {};
+
+params["OrganisationId_param"] = vars.get("$field.CONTACT_ID")
+params["NoVisitPlanEmployeeWeek_param"] = true;
+params["ComingFromRecommendation_param"] = true;
+
+neon.openContext("VisitPlanEntry", null, null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/stateProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..380c6e5cecfc35c5005f3291970cd24da86988af
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+if (vars.get("$sys.selectionRows") != "")
+    state = neon.COMPONENTSTATE_EDITABLE;
+result.string(state);
diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/tooltipProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/tooltipProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..13967e50f1a7555e4a856ac9dde648b9501d5a4f
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/tooltipProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Create New Weekplanentry"));
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/priority/displayValueProcess.js b/entity/VisitRecommendation_entity/entityfields/priority/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..243402a8ecffc7405560a880187de642cb3b72a7
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/priority/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPriority(), vars.get("$field.PRIORITY")));
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/priority_icon/colorProcess.js b/entity/VisitRecommendation_entity/entityfields/priority_icon/colorProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab4b8c5257b11b9cb7bd3dc359c767708096fec2
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/priority_icon/colorProcess.js
@@ -0,0 +1,26 @@
+import("system.vars");
+import("KeywordRegistry_basic");
+import("system.result");
+import("system.neon");
+
+switch(vars.getString("$field.PRIORITY"))
+{
+    case $KeywordRegistry.taskPriority$none():
+        result.string(neon.PRIORITY_NONE_COLOR);
+        break;
+    case $KeywordRegistry.visitRecommendationPriority$low():
+        result.string(neon.PRIORITY_LOW_COLOR);
+        break;
+    case $KeywordRegistry.visitRecommendationPriority$medium():
+        result.string(neon.PRIORITY_MEDIUM_COLOR);
+        break;
+    case $KeywordRegistry.visitRecommendationPriority$high():
+        result.string(neon.PRIORITY_HIGH_COLOR);
+        break;
+    case $KeywordRegistry.visitRecommendationPriority$veryHigh():
+        result.string(neon.PRIORITY_HIGH_COLOR);
+        break;
+    case $KeywordRegistry.visitRecommendationPriority$critical():
+        result.string(neon.PRIORITY_HIGH_COLOR);
+        break;
+}
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/priority_icon/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/priority_icon/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e966de8384cdb82778eb0d4ac5be2e27f7d129ae
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/priority_icon/valueProcess.js
@@ -0,0 +1,5 @@
+import("ActivityTask_lib");
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string(TaskUtils.getStatusIcon($KeywordRegistry.taskStatus$new));
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a16a18c5851a7581712372aa29616de6b8ea61af
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("Organisation")
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/uid/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/uid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..97460e66d1006307c676d0323995539c460d72d6
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/uid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && (vars.get("$this.value") == null || vars.get("$this.value") == undefined))
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5045250e03171debf64617cf93a996892a825237
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,249 @@
+import("system.tools");
+import("PostalAddress_lib");
+import("system.translate");
+import("Contact_lib");
+import("KeywordRegistry_basic");
+import("system.logging");
+import("system.datetime");
+import("system.util");
+import("system.result");
+import("system.vars");
+import("system.db");
+import("Sql_lib");
+import("Keyword_lib");
+import("AttributeRegistry_basic");
+import("KeywordRegistry_basic");
+import("Util_lib");
+import("Address_lib");
+
+var sqlHelper = new SqlMaskingUtils(db.getCurrentAlias());
+
+var recommendationData = [];
+
+var activitySubQuery = "";
+
+activitySubQuery = newSelect("ENTRYDATE")
+                                .from("ACTIVITY")
+                                .join("ACTIVITYLINK", "ACTIVITYID = ACTIVITY_ID")
+                                .where("ACTIVITYLINK.OBJECT_ROWID", "CONTACTID")
+                                .and("ACTIVITY.CATEGORY", "VISIT")
+                                .orderBy("ENTRYDATE desc").cell()
+
+var idValues = false;
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+    idValues = true
+
+//dynamic Recommendations
+//recommended Organisations containing the attribute Visit Frequency
+
+    var visitFrequencyData = newSelect(["org.ORGANISATIONID", "NAME", 
+                                            newSelect("CONTACT.CONTACTID")
+                                                        .from("CONTACT")
+                                                        .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                                                        .leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
+                                                        .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                                        .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact())
+                                                        .cell(), AddressUtils.formatOnelineSql(), 
+                                                        "visitPlanFrequency.ID_VALUE", "'VISITFREQUENCY                      '", activitySubQuery, "CONTACTID",
+                                            newSelect("min(ENTRYDATE)")
+                                                        .from("VISITPLANENTRY") 
+                                                        .where("CONTACT.CONTACTID", "VISITPLANENTRY.ORGANISATION_ID") 
+                                                        .and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
+                                                            .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
+                                                        .and("VISITPLANENTRY.ENTRYDATE", newSelect("min(vp.ENTRYDATE)")
+                                                                                                    .from("VISITPLANENTRY", "vp")
+                                                                                                    .where(["VISITPLANENTRY", "ORGANISATION_ID", "vp"], "visitplanentry.ORGANISATION_ID")
+                                                                                                    .and(["VISITPLANENTRY", "ENTRYDATE", "vp"], datetime.today())
+                                                                                                    .and(newWhere(["VISITPLANENTRY", "STATUS", "vp"], 
+                                                                                                    $KeywordRegistry.visitPlanEntryStatus$planned())
+                                                                                                    .or(["VISITPLANENTRY", "STATUS", "vp"], 
+                                                                                                    $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
+                                                                                                    .cell())])
+                                        .from("CONTACT")
+                                        .join("ORGANISATION", "CONTACT.ORGANISATION_ID = org.ORGANISATIONID", "org")
+                                        .leftJoin("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID")
+                                        .join("ADDRESS", "ADDRESS_ID = ADDRESSID")
+                                        .join("AB_ATTRIBUTERELATION", "visitPlanFrequency.OBJECT_ROWID = CONTACT.CONTACTID", "visitPlanFrequency")
+                                        .where(["AB_ATTRIBUTERELATION", "AB_ATTRIBUTE_ID", "visitPlanFrequency"], $AttributeRegistry.visitPlanFrequency())
+                                        .table();
+
+var recommendationSQLData = newSelect(["VISITRECOMMENDATIONID", "VISITRECOMMENDATION.CONTACT_ID", "PRIORITY", "DUE_DATE", "SOURCE", "INFO", AddressUtils.formatOnelineSql(), 
+    newSelect("CONTACT.CONTACTID")
+                .from("CONTACT")
+                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                .leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
+                .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact())
+                .and("CONTACT.CONTACTID", "VISITRECOMMENDATION.CONTACT_ID")
+                .cell(),
+                
+    newSelect("min(ENTRYDATE)")
+                .from("VISITPLANENTRY")
+                .where("VISITPLANENTRY.ORGANISATION_ID", "VISITRECOMMENDATION.CONTACT_ID")
+                .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
+                .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged())
+                .and("VISITPLANENTRY.entrydate", datetime.today(), SqlBuilder.GREATER())
+                .cell(),
+                
+    newSelect("contact_id")
+                .from("VISITPLANEMPLOYEEWEEK, VISITPLANENTRY")
+                .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", "VISITPLANEMPLOYEEWEEKID")
+                .and("VISITRECOMMENDATION.CONTACT_ID", "VISITPLANENTRY.ORGANISATION_ID")
+                .and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
+                .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
+                .and("VISITPLANENTRY.entrydate", newSelect("min(vp.entrydate)")
+                                                                .from("visitplanentry", "VP")
+                                                                .where(["VISITPLANENTRY", "entrydate", "vp"], datetime.today(), SqlBuilder.GREATER())
+                                                                .and(["VISITPLANENTRY", "STATUS", "vp"], $KeywordRegistry.visitPlanEntryStatus$planned())
+                                                                .or(["VISITPLANENTRY", "STATUS", "vp"], $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()).cell())
+])
+        .from("VISITRECOMMENDATION")
+        .join("CONTACT", "VISITRECOMMENDATION.CONTACT_ID = CONTACT.CONTACTID")
+        .join("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID")
+        
+if(idValues == true)
+    recommendationSQLData.where("VISITRECOMMENDATION.VISITRECOMMENDATIONID",   vars.get("$local.idvalues"), SqlBuilder.IN())
+        
+recommendationSQLData = recommendationSQLData.table();
+
+for( let i = 0; i < recommendationSQLData.length; i++)
+{
+    var tmpData = [];
+
+    var organisationName = ContactUtils.getFullTitleByContactId(recommendationSQLData[i][1])
+    if(recommendationSQLData[i][2])
+        var prio = recommendationSQLData[i][2]
+
+    else if(recommendationSQLData[i][3])
+        prio = getPrioByDueDate(recommendationSQLData[i][3]);
+
+    else
+        prio = $KeywordRegistry.visitRecommendationPriority$low();  
+
+    
+    var title = "";
+    if(recommendationSQLData[i][9]){
+        var user = tools.getUserByAttribute(tools.CONTACTID, recommendationSQLData[i][9]);
+        title = user[tools.TITLE]
+    }
+
+    tmpData[0] = recommendationSQLData[i][0];               //UID
+    tmpData[1] = organisationName;                          //Organisation Name
+    tmpData[3] = recommendationSQLData[i][6];               //Address
+    tmpData[4] = prio; 
+    tmpData[5] = recommendationSQLData[i][4];               //Source of Priority
+    tmpData[7] = recommendationSQLData[i][3];               //Due Date
+    tmpData[8] = recommendationSQLData[i][5];               //Info
+    tmpData[9] = recommendationSQLData[i][1];               //CONTACT_ID
+    tmpData[2] = recommendationSQLData[i][8];               //Data_planned
+    
+
+    recommendationData.push(tmpData);
+}
+
+var monthly = datetime.ONE_DAY * 31;
+var semiannually = datetime.ONE_DAY * 183;
+var quarterly = datetime.ONE_DAY * 93;
+var yearly = datetime.ONE_DAY * 365;
+
+for (let i = 0; i < visitFrequencyData.length; i++)
+{
+    let tmpData = [];
+    
+    let title = "";
+   
+    if(visitFrequencyData[i][9])
+    {
+        let user = tools.getUserByAttribute(tools.CONTACTID, visitFrequencyData[i][9]);
+        title = user[tools.TITLE]
+    }
+
+    tmpData[0] = visitFrequencyData[i][0];                 //UID
+    tmpData[1] = visitFrequencyData[i][1];                 //Organisation Name
+    tmpData[3] = visitFrequencyData[i][2];                 //Address
+    tmpData[5] = visitFrequencyData[i][4];                 //Source of Priority
+    tmpData[8] = "";
+    tmpData[9] = visitFrequencyData[i][5];                 //CONTACT_ID
+    tmpData[2] = visitFrequencyData[i][6];                 //Date_Planned
+    var dueDate = "";
+    var lastVisitDate = "";
+
+    if((visitFrequencyData[i][6]).length == 0)
+    {
+        dueDate = datetime.date();
+    }
+    else
+    {
+        lastVisitDate = parseInt(visitFrequencyData[i][6]);
+        switch(visitFrequencyData[i][4])
+        {
+            case $AttributeRegistry.visitPlanFrequency$monthly():
+            {
+                dueDate = lastVisitDate + monthly;
+                break;
+            }
+            case $AttributeRegistry.visitPlanFrequency$quarterly():
+            {
+                dueDate = lastVisitDate + quarterly;
+                break;
+            }
+            case $AttributeRegistry.visitPlanFrequency$semiannually():
+            {
+                dueDate = lastVisitDate + semiannually;
+                break;
+            }
+            case $AttributeRegistry.visitPlanFrequency$yearly():
+            {
+                dueDate = lastVisitDate + yearly;
+                break;
+            }
+            default:
+            {
+                break;
+            }
+        }
+    }
+
+    
+    tmpData[7] = dueDate;                                       //Due Date
+    tmpData[4] = getPrioByDueDate(dueDate);                     //Priority
+
+    recommendationData.push(tmpData);
+}
+
+
+//add Display Value for Priority and PrioritySource
+for (let i = 0; i < recommendationData.length; i++)
+{
+    recommendationData[i][6] = KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPriority(), recommendationData[i][4])
+    recommendationData[i][10] = KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPrioSource(), recommendationData[i][5])
+}
+
+//sort Array by priority; highest priority first
+ArrayUtils.sort2d(recommendationData, 4, true)
+
+result.object(recommendationData);
+
+function getPrioByDueDate(pDueDate)
+{
+    var prio = "";
+    var currentDate = datetime.date();
+    
+    if(pDueDate != "")
+    {
+        var dateDifference = pDueDate - currentDate;
+
+        if(dateDifference < 0)
+            prio = $KeywordRegistry.visitRecommendationPriority$critical();
+        else if(dateDifference < datetime.ONE_DAY * 3)
+            prio = $KeywordRegistry.visitRecommendationPriority$veryHigh();
+        else if(dateDifference < datetime.ONE_DAY * 7)
+            prio = $KeywordRegistry.visitRecommendationPriority$high();
+        else if(dateDifference < datetime.ONE_DAY * 14)
+            prio = $KeywordRegistry.visitRecommendationPriority$medium();
+        else
+            prio = $KeywordRegistry.visitRecommendationPriority$low();
+    }
+    
+    return prio;
+}
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterConditionProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2625d5ed4d439e87d79d9519af1b917807fdb0b8
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("AttributeFilter_lib");
+import("system.result");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterValuesProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/onDelete.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..e63bd391cfc137ff9a12eaa47bef9002f2d79875
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,5 @@
+import("Sql_lib");
+import("system.vars");
+
+newWhere("AB_ATTRIBUTE.AB_ATTRIBUTEID", "$field.UID")
+    .deleteData();
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/onInsert.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..f362c1d033e797fd7ea14b2d7e1ea613f7661752
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,29 @@
+import("KeywordRegistry_basic");
+import("system.db");
+import("system.vars");
+
+var rowData = vars.get("$local.rowdata");
+var contact_id = rowData["CONTACT_ID.value"];
+var source = $KeywordRegistry.visitRecommendationPrioSource$manual();
+
+var values = [
+    rowData["UID.value"],
+    contact_id,
+    rowData["DUE_DATE.value"],
+    rowData["PRIORITY.value"],
+    source,
+    vars.get("$field.INFO")
+];
+
+var columns = [
+    "VISITRECOMMENDATIONID",
+    "CONTACT_ID",
+    "DUE_DATE",
+    "PRIORITY",
+    "SOURCE",
+    "INFO"
+];
+
+var columnTypes = db.getColumnTypes("VISITRECOMMENDATION", columns, db.getCurrentAlias());
+
+db.insertData("VISITRECOMMENDATION", columns, columnTypes, values);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/onUpdate.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..b27ed4d0483f8515f6552defc190addbb70cf8b1
--- /dev/null
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,23 @@
+import("Sql_lib");
+import("system.db");
+import("system.vars");
+
+var rowdata = vars.get("$local.rowdata");
+var dbFields = {
+    "ORGANISATION_NAME.value": "ORGANISATION_NAME",
+    "ORGANISATION_POINT_OF_CONTACT.value": "ORGANISATION_POINT_OF_CONTACT",
+    "ORGANISATION_ADDRESS.value" : "ORGANISATION_ADDRESS",
+    "PRIORITY.value" : "PRIORITY",
+    "DUE_DATE.value": "DUE_DATE",
+    "INFO.value": "INFO"
+};
+var fieldValues = {};
+vars.get("$local.changed").forEach(function (field)
+{
+    var dbField = dbFields[field];
+    if (dbField)
+        fieldValues[dbField] = rowdata[field] || "";
+});
+
+newWhere("VISITRECOMMENDATION.VISITRECOMMENDATIONID", "$field.UID")
+    .updateFields(fieldValues);
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index d3e8f8dd6476cf436131e40a8a7600492cce49e1..40442331cb09a2228a9317324e693dcb349c3e96 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -6315,11 +6315,202 @@
       <key>Finished tasks</key>
     </entry>
     <entry>
-      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+      <key>very high</key>
+    </entry>
+    <entry>
+      <key>External Service</key>
+    </entry>
+    <entry>
+      <key>Their Permissions</key>
+    </entry>
+    <entry>
+      <key>Complete tasks</key>
+    </entry>
+    <entry>
+      <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
+      <key>File from this template could not be found anymore. </key>
+    </entry>
+    <entry>
+      <key>show visit planning of the week</key>
+    </entry>
+    <entry>
+      <key>Export columns using a exporttemplate</key>
+    </entry>
+    <entry>
+      <key>Entriescount</key>
+    </entry>
+    <entry>
+      <key>Organisation point Of Contact</key>
+    </entry>
+    <entry>
+      <key>Appointment Confirmed</key>
+    </entry>
+    <entry>
+      <key>delete linked permissions and hierarchies</key>
+    </entry>
+    <entry>
+      <key>critical</key>
+    </entry>
+    <entry>
+      <key>Week</key>
+    </entry>
+    <entry>
+      <key>Start time</key>
+    </entry>
+    <entry>
+      <key>SqlBuilder: The pagesize is not set or is not a number.</key>
+    </entry>
+    <entry>
+      <key>Child Roles</key>
+    </entry>
+    <entry>
+      <key>Visitentry Made</key>
+    </entry>
+    <entry>
+      <key>The endtime can't be before begintime!</key>
+    </entry>
+    <entry>
+      <key>rights of access</key>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+    </entry>
+    <entry>
+      <key>Create notification</key>
+    </entry>
+    <entry>
+      <key>Set attribute</key>
+    </entry>
+    <entry>
+      <key>Parent Roles</key>
     </entry>
     <entry>
       <key>Export workflow</key>
     </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>SqlBuilder: The provided callback function is not a function.</key>
+    </entry>
+    <entry>
+      <key>Visit Planning</key>
+    </entry>
+    <entry>
+      <key>My Permissions</key>
+    </entry>
+    <entry>
+      <key>Workflow management</key>
+    </entry>
+    <entry>
+      <key>my visit planning</key>
+    </entry>
+    <entry>
+      <key>Update offer</key>
+    </entry>
+    <entry>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>Send email</key>
+    </entry>
+    <entry>
+      <key>Activites</key>
+    </entry>
+    <entry>
+      <key>Dispatch as mail</key>
+      <key>New Visit Recommendation</key>
+    </entry>
+    <entry>
+      <key>New Visitplan Entry</key>
+    </entry>
+    <entry>
+      <key>Monthly</key>
+    </entry>
+    <entry>
+      <key>Yearly</key>
+    </entry>
+    <entry>
+      <key>Until</key>
+    </entry>
+    <entry>
+      <key>Entrydate has to be in the selected calendar week!</key>
+    </entry>
+    <entry>
+      <key>Invalid year!</key>
+    </entry>
+    <entry>
+      <key>high</key>
+    </entry>
+    <entry>
+      <key>Send email</key>
+    </entry>
+    <entry>
+      <key>Point of Contact</key>
+    </entry>
+    <entry>
+      <key>From</key>
+    </entry>
+    <entry>
+      <key>Contactperson</key>
+    </entry>
+    <entry>
+      <key>Date Planned</key>
+    </entry>
+    <entry>
+      <key>Priority Source</key>
+    </entry>
+    <entry>
+      <key>Planned By</key>
+    </entry>
+    <entry>
+      <key>Due Date</key>
+    </entry>
+    <entry>
+      <key>planned</key>
+    </entry>
+    <entry>
+      <key>Appointment arranged</key>
+    </entry>
+    <entry>
+      <key>Visitreport created</key>
+    </entry>
+    <entry>
+      <key>Visit Recommendation</key>
+    </entry>
+    <entry>
+      <key>Visitplan Weekly Overview</key>
+    </entry>
+    <entry>
+      <key>Visitplan Entry</key>
+    </entry>
+    <entry>
+      <key>Linked Appointment</key>
+    </entry>
+    <entry>
+      <key>Visitplan Entries</key>
+    </entry>
+    <entry>
+      <key>Visit Recommendations</key>
+    </entry>
+    <entry>
+      <key>Besuchsreport erstellt</key>
+    </entry>
+    <entry>
+      <key>geplant</key>
+    </entry>
+    <entry>
+      <key>Termin vereinbart</key>
+    </entry>
+    <entry>
+      <key>Contactreport</key>
+    </entry>
+    <entry>
+      <key>Appointment planned</key>
+    </entry>
+    <entry>
+      <key>Visitreport</key>
+    </entry>
     <entry>
       <key>Their Permissions</key>
     </entry>
@@ -6329,6 +6520,111 @@
     <entry>
       <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
     </entry>
+    <entry>
+      <key>Create new Visitreport</key>
+    </entry>
+    <entry>
+      <key>Create new Appointment</key>
+    </entry>
+    <entry>
+      <key>Create new Visitplanentry</key>
+    </entry>
+    <entry>
+      <key>Open route</key>
+    </entry>
+    <entry>
+      <key>External Work</key>
+    </entry>
+    <entry>
+      <key>New Weekplanentry</key>
+    </entry>
+    <entry>
+      <key>Open Route</key>
+    </entry>
+    <entry>
+      <key>Create Visitreport</key>
+    </entry>
+    <entry>
+      <key>Weekplan</key>
+    </entry>
+    <entry>
+      <key>Create New Weekplanentry</key>
+    </entry>
+    <entry>
+      <key>Visit Frequency</key>
+    </entry>
+    <entry>
+      <key>Event gateway</key>
+    </entry>
+    <entry>
+      <key>Complete tasks</key>
+    </entry>
+    <entry>
+      <key>Parallel gateway</key>
+    </entry>
+    <entry>
+      <key>Intermediate throwing event</key>
+    </entry>
+    <entry>
+      <key>End event</key>
+    </entry>
+    <entry>
+      <key>Start time</key>
+    </entry>
+    <entry>
+      <key>Receive task</key>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+    </entry>
+    <entry>
+      <key>Inclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Exclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Service task</key>
+    </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>User task</key>
+    </entry>
+    <entry>
+      <key>Intermediate catching event</key>
+    </entry>
+    <entry>
+      <key>Business rule task</key>
+    </entry>
+    <entry>
+      <key>Sequence flow</key>
+    </entry>
+    <entry>
+      <key>Manual task</key>
+    </entry>
+    <entry>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>Start event</key>
+    </entry>
+    <entry>
+      <key>Boundary event</key>
+    </entry>
+    <entry>
+      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+    </entry>
+    <entry>
+      <key>Script task</key>
+    </entry>
+    <entry>
+      <key>Activites</key>
+    </entry>
+    <entry>
+      <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
+    </entry>
     <entry>
       <key>Start time</key>
     </entry>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 75c71b883609f89ed79cc092c9690cd17ec8e896..3623b312126735b2520c4a4dfa2572a8e1985f75 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -12,7 +12,6 @@
     </entry>
     <entry>
       <key>Signals</key>
-      <value>Signale</value>
     </entry>
     <entry>
       <key>Open modeler</key>
@@ -7763,6 +7762,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>low</key>
+      <value>niedrig</value>
     </entry>
     <entry>
       <key>Show only own</key>
@@ -7790,6 +7790,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Manual</key>
+      <value>manuell</value>
     </entry>
     <entry>
       <key>QuickEntry</key>
@@ -8144,6 +8145,207 @@ Bitte Datumseingabe prüfen</value>
       <key>Add new Department Permission</key>
       <value>Neue Abteilungs-Berechtigung hinzufügen</value>
     </entry>
+    <entry>
+      <key>very high</key>
+      <value>sehr hoch</value>
+    </entry>
+    <entry>
+      <key>External Service</key>
+    </entry>
+    <entry>
+      <key>show visit planning of the week</key>
+      <value>Zeig die Besuchsplanung der Woche</value>
+    </entry>
+    <entry>
+      <key>Entriescount</key>
+      <value>Anzahl Einträge</value>
+    </entry>
+    <entry>
+      <key>Organisation point Of Contact</key>
+      <value>Kontaktperson</value>
+    </entry>
+    <entry>
+      <key>Appointment Confirmed</key>
+      <value>Bestätigt</value>
+    </entry>
+    <entry>
+      <key>critical</key>
+      <value>kritisch
+</value>
+    </entry>
+    <entry>
+      <key>Week</key>
+      <value>Woche</value>
+    </entry>
+    <entry>
+      <key>Start time</key>
+    </entry>
+    <entry>
+      <key>SqlBuilder: The pagesize is not set or is not a number.</key>
+    </entry>
+    <entry>
+      <key>Visitentry Made</key>
+      <value>Bericht erfasst</value>
+    </entry>
+    <entry>
+      <key>The endtime can't be before begintime!</key>
+    </entry>
+    <entry>
+      <key>Rights of access</key>
+      <value>Zugriffsrechte</value>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+    </entry>
+    <entry>
+      <key>Create notification</key>
+    </entry>
+    <entry>
+      <key>Set attribute</key>
+    </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>Visit Planning</key>
+      <value>Besuchsplanung</value>
+    </entry>
+    <entry>
+      <key>Workflow management</key>
+      <key>SqlBuilder: The provided callback function is not a function.</key>
+    </entry>
+    <entry>
+      <key>my visit planning</key>
+      <value>Meine Besuchsplanung</value>
+    </entry>
+    <entry>
+      <key>Update offer</key>
+      <key>My Permissions</key>
+      <value>Meine Berechtigungen</value>
+    </entry>
+    <entry>
+      <key>New Visit Recommendation</key>
+      <value>Neuer Besuchsvorschlag</value>
+      <key>Workflow management</key>
+    </entry>
+    <entry>
+      <key>New Visitplan Entry</key>
+      <value>Besuch eintragen</value>
+      <key>Update offer</key>
+    </entry>
+    <entry>
+      <key>Monthly</key>
+      <value>monatlich</value>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>Yearly</key>
+      <value>jährlich</value>
+    </entry>
+    <entry>
+      <key>Until</key>
+      <value>Bis</value>
+    </entry>
+    <entry>
+      <key>Entrydate has to be in the selected calendar week!</key>
+      <value>Eingangsdatum muss in der ausgewählten Kalenderwoche liegen!</value>
+    </entry>
+    <entry>
+      <key>Invalid year!</key>
+      <value>Ungültiges jahr!</value>
+    </entry>
+    <entry>
+      <key>high</key>
+      <value>hoch</value>
+    </entry>
+    <entry>
+      <key>Send email</key>
+    </entry>
+    <entry>
+      <key>Activites</key>
+      <key>Point of Contact</key>
+    </entry>
+    <entry>
+      <key>Export process</key>
+    </entry>
+    <entry>
+      <key>From</key>
+      <value>Von
+</value>
+    </entry>
+    <entry>
+      <key>Contactperson</key>
+      <value>Ansprechpartner</value>
+    </entry>
+    <entry>
+      <key>Date Planned</key>
+    </entry>
+    <entry>
+      <key>Priority Source</key>
+      <value>Prioritätsquelle</value>
+    </entry>
+    <entry>
+      <key>Planned By</key>
+    </entry>
+    <entry>
+      <key>Due Date</key>
+      <value>Fälligkeitsdatum</value>
+    </entry>
+    <entry>
+      <key>planned</key>
+      <value>geplant</value>
+    </entry>
+    <entry>
+      <key>Appointment arranged</key>
+    </entry>
+    <entry>
+      <key>Visitreport created</key>
+      <value>Besuchsbericht erstellt</value>
+    </entry>
+    <entry>
+      <key>Visit Recommendation</key>
+      <value>Besuchsvorschlag</value>
+    </entry>
+    <entry>
+      <key>Visitplan Weekly Overview</key>
+      <value>Besuchsplanung</value>
+    </entry>
+    <entry>
+      <key>Visitplan Entry</key>
+      <value>Besuchseintrag</value>
+    </entry>
+    <entry>
+      <key>Linked Appointment</key>
+    </entry>
+    <entry>
+      <key>Visitplan Entries</key>
+      <value>Besuchseinträge</value>
+    </entry>
+    <entry>
+      <key>Visit Recommendations</key>
+      <value>Besuchsvorschläge</value>
+    </entry>
+    <entry>
+      <key>Besuchsreport erstellt</key>
+    </entry>
+    <entry>
+      <key>geplant</key>
+    </entry>
+    <entry>
+      <key>Termin vereinbart</key>
+    </entry>
+    <entry>
+      <key>Contactreport</key>
+      <value>Kontaktbericht</value>
+    </entry>
+    <entry>
+      <key>Appointment planned</key>
+      <value>Termin vereinbart</value>
+    </entry>
+    <entry>
+      <key>Visitreport</key>
+      <value>Besuchsbericht</value>
+    </entry>
     <entry>
       <key>Export coloumns using a exporttemplate</key>
     </entry>
@@ -8157,7 +8359,125 @@ Bitte Datumseingabe prüfen</value>
       <key>ankle of</key>
     </entry>
     <entry>
-      <key>Export process</key>
+      <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
+    </entry>
+    <entry>
+      <key>Create new Visitreport</key>
+      <value>Besuchsbericht erstellen</value>
+    </entry>
+    <entry>
+      <key>Create new Appointment</key>
+      <value>Termin erstellen</value>
+    </entry>
+    <entry>
+      <key>Create new Visitplanentry</key>
+      <value>Besuchseintrag erstellen</value>
+    </entry>
+    <entry>
+      <key>Open route</key>
+      <value>Route öffnen</value>
+    </entry>
+    <entry>
+      <key>External Work</key>
+      <value>Aussendienst</value>
+    </entry>
+    <entry>
+      <key>New Weekplanentry</key>
+      <value>Neuer Wochenplaneintrag</value>
+    </entry>
+    <entry>
+      <key>Open Route</key>
+      <value>Route öffnen</value>
+    </entry>
+    <entry>
+      <key>Create Visitreport</key>
+      <value>Besuchsbericht erstellen</value>
+    </entry>
+    <entry>
+      <key>Weekplan</key>
+      <value>Wochenplan</value>
+    </entry>
+    <entry>
+      <key>Create New Weekplanentry</key>
+      <value>neuen Wochenplaneintrag erstellen</value>
+    </entry>
+    <entry>
+      <key>Visit Frequency</key>
+      <value>Besuchsfrequenz</value>
+    </entry>
+    <entry>
+      <key>Event gateway</key>
+    </entry>
+    <entry>
+      <key>Complete tasks</key>
+    </entry>
+    <entry>
+      <key>Parallel gateway</key>
+    </entry>
+    <entry>
+      <key>Intermediate throwing event</key>
+    </entry>
+    <entry>
+      <key>End event</key>
+    </entry>
+    <entry>
+      <key>Start time</key>
+      <key>Dispatch as mail</key>
+      <value>Als Email versenden</value>
+    </entry>
+    <entry>
+      <key>Receive task</key>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+      <key>Show offer</key>
+      <value>Angebot anzeigen</value>
+    </entry>
+    <entry>
+      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+      <key>Inclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Exclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Service task</key>
+    </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>User task</key>
+    </entry>
+    <entry>
+      <key>Intermediate catching event</key>
+    </entry>
+    <entry>
+      <key>Business rule task</key>
+    </entry>
+    <entry>
+      <key>Sequence flow</key>
+    </entry>
+    <entry>
+      <key>Manual task</key>
+    </entry>
+    <entry>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>Start event</key>
+    </entry>
+    <entry>
+      <key>Boundary event</key>
+    </entry>
+    <entry>
+      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+    </entry>
+    <entry>
+      <key>Script task</key>
+    </entry>
+    <entry>
+      <key>Activites</key>
     </entry>
     <entry>
       <key>Their Permissions</key>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index bcd6cfe7e3bb75bc736fd029f53845d5ce6afebb..64d2ab7f0efa8e3cda4eb68140abcb93b9b09529 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6377,7 +6377,7 @@
       <key>Finished tasks</key>
     </entry>
     <entry>
-      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+      <key>very high</key>
       <value>Lead quick acquisition</value>
     </entry>
     <entry>
@@ -6390,19 +6390,282 @@
       <key>Child Roles</key>
     </entry>
     <entry>
-      <key>Parent Roles</key>
+      <key>External Service</key>
     </entry>
     <entry>
       <key>Export columns using a exporttemplate</key>
     </entry>
+    <entry>
+      <key>show visit planning of the week</key>
+    </entry>
+    <entry>
+      <key>Entriescount</key>
+      <key>Their Permissions</key>
+    </entry>
+    <entry>
+      <key>Complete tasks</key>
+    </entry>
+    <entry>
+      <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
+    </entry>
+    <entry>
+      <key>Start time</key>
+    </entry>
+    <entry>
+      <key>SqlBuilder: The pagesize is not set or is not a number.</key>
+    </entry>
+    <entry>
+      <key>Visitentry Made</key>
+    </entry>
+    <entry>
+      <key>The endtime can't be before begintime!</key>
+    </entry>
+    <entry>
+      <key>rights of access</key>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+    </entry>
+    <entry>
+      <key>Create notification</key>
+    </entry>
+    <entry>
+      <key>Set attribute</key>
+    </entry>
+    <entry>
+      <key>Parent Roles</key>
+    </entry>
     <entry>
       <key>Export workflow</key>
     </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>SqlBuilder: The provided callback function is not a function.</key>
+    </entry>
+    <entry>
+      <key>Visit Planning</key>
+    </entry>
+    <entry>
+      <key>My Permissions</key>
+    </entry>
+    <entry>
+      <key>Workflow management</key>
+    </entry>
+    <entry>
+      <key>my visit planning</key>
+    </entry>
+    <entry>
+      <key>Update offer</key>
+    </entry>
+    <entry>
+      <key>New Visit Recommendation</key>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>New Visitplan Entry</key>
+    </entry>
+    <entry>
+      <key>Monthly</key>
+    </entry>
+    <entry>
+      <key>Yearly</key>
+    </entry>
+    <entry>
+      <key>Until</key>
+    </entry>
+    <entry>
+      <key>Entrydate has to be in the selected calendar week!</key>
+    </entry>
+    <entry>
+      <key>Invalid year!</key>
+    </entry>
+    <entry>
+      <key>high</key>
+    </entry>
+    <entry>
+      <key>Send email</key>
+    </entry>
+    <entry>
+      <key>Point of Contact</key>
+    </entry>
+    <entry>
+      <key>From</key>
+    </entry>
+    <entry>
+      <key>Contactperson</key>
+    </entry>
+    <entry>
+      <key>Date Planned</key>
+    </entry>
+    <entry>
+      <key>Priority Source</key>
+    </entry>
+    <entry>
+      <key>Planned By</key>
+    </entry>
+    <entry>
+      <key>Due Date</key>
+    </entry>
+    <entry>
+      <key>planned</key>
+    </entry>
+    <entry>
+      <key>Appointment arranged</key>
+    </entry>
+    <entry>
+      <key>Visitreport created</key>
+    </entry>
+    <entry>
+      <key>Visit Recommendation</key>
+    </entry>
+    <entry>
+      <key>Visitplan Weekly Overview</key>
+    </entry>
+    <entry>
+      <key>Visitplan Entry</key>
+    </entry>
+    <entry>
+      <key>Linked Appointment</key>
+    </entry>
+    <entry>
+      <key>Visitplan Entries</key>
+    </entry>
+    <entry>
+      <key>Visit Recommendations</key>
+    </entry>
+    <entry>
+      <key>Besuchsreport erstellt</key>
+    </entry>
+    <entry>
+      <key>geplant</key>
+    </entry>
+    <entry>
+      <key>Termin vereinbart</key>
+    </entry>
+    <entry>
+      <key>Contactreport</key>
+    </entry>
+    <entry>
+      <key>Appointment planned</key>
+    </entry>
+    <entry>
+      <key>Visitreport</key>
+    </entry>
     <entry>
       <key>Their Permissions</key>
     </entry>
     <entry>
       <key>Complete tasks</key>
+      <key>Activites</key>
+    </entry>
+    <entry>
+      <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
+    </entry>
+    <entry>
+      <key>Create new Visitreport</key>
+    </entry>
+    <entry>
+      <key>Create new Appointment</key>
+    </entry>
+    <entry>
+      <key>Create new Visitplanentry</key>
+    </entry>
+    <entry>
+      <key>Open route</key>
+    </entry>
+    <entry>
+      <key>External Work</key>
+    </entry>
+    <entry>
+      <key>New Weekplanentry</key>
+    </entry>
+    <entry>
+      <key>Open Route</key>
+    </entry>
+    <entry>
+      <key>Create Visitreport</key>
+    </entry>
+    <entry>
+      <key>Weekplan</key>
+    </entry>
+    <entry>
+      <key>Create New Weekplanentry</key>
+    </entry>
+    <entry>
+      <key>Visit Frequency</key>
+    </entry>
+    <entry>
+      <key>Event gateway</key>
+    </entry>
+    <entry>
+      <key>Complete tasks</key>
+    </entry>
+    <entry>
+      <key>Parallel gateway</key>
+    </entry>
+    <entry>
+      <key>Intermediate throwing event</key>
+    </entry>
+    <entry>
+      <key>End event</key>
+    </entry>
+    <entry>
+      <key>Start time</key>
+      <key>Dispatch as mail</key>
+    </entry>
+    <entry>
+      <key>Receive task</key>
+    </entry>
+    <entry>
+      <key>Leadimport Reset</key>
+      <key>Show offer</key>
+    </entry>
+    <entry>
+      <key>Inclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Exclusive gateway</key>
+    </entry>
+    <entry>
+      <key>Service task</key>
+    </entry>
+    <entry>
+      <key>End time</key>
+    </entry>
+    <entry>
+      <key>User task</key>
+    </entry>
+    <entry>
+      <key>Intermediate catching event</key>
+    </entry>
+    <entry>
+      <key>Business rule task</key>
+    </entry>
+    <entry>
+      <key>Sequence flow</key>
+    </entry>
+    <entry>
+      <key>Manual task</key>
+    </entry>
+    <entry>
+      <key>Duration</key>
+    </entry>
+    <entry>
+      <key>Start event</key>
+    </entry>
+    <entry>
+      <key>Boundary event</key>
+    </entry>
+    <entry>
+      <key>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</key>
+    </entry>
+    <entry>
+      <key>Script task</key>
+    </entry>
+    <entry>
+      <key>Activites</key>
     </entry>
     <entry>
       <key>pComingFrom is not defined. 'ExportTemplateUtils.buildExport:66'</key>
diff --git a/neonContext/VisitPlanEmployeeWeek/VisitPlanEmployeeWeek.aod b/neonContext/VisitPlanEmployeeWeek/VisitPlanEmployeeWeek.aod
new file mode 100644
index 0000000000000000000000000000000000000000..27d3d785959414af527c025d977a7f7817aea659
--- /dev/null
+++ b/neonContext/VisitPlanEmployeeWeek/VisitPlanEmployeeWeek.aod
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>VisitPlanEmployeeWeek</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <mainView>VisitPlanEmployeeWeekMain_view</mainView>
+  <filterView>VisitPlanEmployeeWeekFilter_view</filterView>
+  <editView>VisitPlanEmployeeWeekEdit_view</editView>
+  <previewView>VisitPlanEmployeeWeekPreview_view</previewView>
+  <entity>VisitPlanEmployeeWeek_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>47464ab4-f6aa-4cd1-b271-a8248f70afc1</name>
+      <view>VisitPlanEmployeeWeekMain_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>efd7d80e-6c04-483a-b3eb-c3e1ed46d5cb</name>
+      <view>VisitPlanEmployeeWeekFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>ea3d5671-c003-4ef3-a01a-255217599980</name>
+      <view>VisitPlanEmployeeWeekEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>1b86e5b1-b03a-4cdf-95ba-32071aedc8c7</name>
+      <view>VisitPlanEmployeeWeekPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/VisitPlanEntry/VisitPlanEntry.aod b/neonContext/VisitPlanEntry/VisitPlanEntry.aod
new file mode 100644
index 0000000000000000000000000000000000000000..93caf6dc86dedfdcdb44b471b655d98610f88eb2
--- /dev/null
+++ b/neonContext/VisitPlanEntry/VisitPlanEntry.aod
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>VisitPlanEntry</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>VisitPlanEntryFilter_view</filterView>
+  <editView>VisitPlanEntryEdit_view</editView>
+  <entity>VisitPlanEntry_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>87a6923a-71b5-4432-904f-07c1d49a4590</name>
+      <view>VisitPlanEntryFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>9f5ad319-7c06-4161-bbec-581ac86b0a0d</name>
+      <view>VisitPlanEntryEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/VisitRecommendation/VisitRecommendation.aod b/neonContext/VisitRecommendation/VisitRecommendation.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6c3505a44e0d4cbaf19d8b24ee6ff5d0c2146f66
--- /dev/null
+++ b/neonContext/VisitRecommendation/VisitRecommendation.aod
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>VisitRecommendation</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>VisitRecommendationFilter_view</filterView>
+  <editView>VisitRecommendationEdit_view</editView>
+  <entity>VisitRecommendation_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>4823b7e1-5abf-4b80-89df-58f80b2aaf2d</name>
+      <view>VisitRecommendationFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>8825d26d-c7d8-4efb-a751-361078985eb9</name>
+      <view>VisitRecommendationEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod b/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
index e4133db6340e686d0a203192a00fd781bb882d36..e19f1da0f82985fe301ad938c70cd9df35f5b7cf 100644
--- a/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
+++ b/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
@@ -1,27 +1,27 @@
-<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ActivityLinkMultiEdit_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <genericMultipleViewTemplate>
-      <name>MultipleEdit</name>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-      <columns>
-        <neonGenericMultipleTableColumn>
-          <name>b7f68733-33f2-4ed7-a222-4298491b5cb0</name>
-          <entityField>OBJECT_TYPE</entityField>
-        </neonGenericMultipleTableColumn>
-        <neonGenericMultipleTableColumn>
-          <name>3d98edbb-44aa-4d85-97fe-9260081292c3</name>
-          <entityField>OBJECT_ROWID</entityField>
-        </neonGenericMultipleTableColumn>
-      </columns>
-    </genericMultipleViewTemplate>
-  </children>
-</neonView>
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ActivityLinkMultiEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>MultipleEdit</name>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>b7f68733-33f2-4ed7-a222-4298491b5cb0</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>3d98edbb-44aa-4d85-97fe-9260081292c3</name>
+          <entityField>OBJECT_ROWID</entityField>
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod b/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
index 5c2c983cfa116d834a212e26a57237ace7b25e58..5327f5fd86e2440636c94a44cf3c3a557c94b8a2 100644
--- a/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
+++ b/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
@@ -1,22 +1,22 @@
-<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ActivityLinkPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <headerFooterLayout>
-      <name>layout</name>
-    </headerFooterLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>Links</name>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>3b3315d6-0872-447f-ac8a-0653a92bbf2d</name>
-          <entityField>OBJECT_ROWID</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ActivityLinkPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Links</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>3b3315d6-0872-447f-ac8a-0653a92bbf2d</name>
+          <entityField>OBJECT_ROWID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ActivityPreview_view/ActivityPreview_view.aod b/neonView/ActivityPreview_view/ActivityPreview_view.aod
index e3f5358ad42b16583e158713012cb91ab9e75646..7b82a42582a8444dbfbc726077467d458358ae33 100644
--- a/neonView/ActivityPreview_view/ActivityPreview_view.aod
+++ b/neonView/ActivityPreview_view/ActivityPreview_view.aod
@@ -1,64 +1,64 @@
-<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ActivityPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <headerFooterLayout>
-      <name>layout</name>
-      <header>Header</header>
-    </headerFooterLayout>
-  </layout>
-  <children>
-    <cardViewTemplate>
-      <name>Header</name>
-      <iconField>ICON</iconField>
-      <titleField>SUBJECT</titleField>
-      <descriptionField>ENTRYDATE</descriptionField>
-      <favoriteAction1>newActivity</favoriteAction1>
-      <entityField>#ENTITY</entityField>
-    </cardViewTemplate>
-    <genericViewTemplate>
-      <name>Info</name>
-      <showDrawer v="true" />
-      <drawerCaption>Details</drawerCaption>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>84dac619-4438-492c-a6b4-61b285dc80fe</name>
-          <entityField>DIRECTION</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>ad41c89c-2f4a-414c-90c8-d5a5df24aeaa</name>
-          <entityField>CATEGORY</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>c4569e50-223e-4b99-8253-e8fa72ef45a0</name>
-          <entityField>RESPONSIBLE</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>4c365613-81c5-4518-8953-751b5ae35cc2</name>
-      <entityField>Links</entityField>
-      <view>ActivityLinkPreviewList_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>43167618-e4dc-429b-a264-3ea95bd647f9</name>
-      <entityField>MainDocuments</entityField>
-      <view>DocumentList_view</view>
-    </neonViewReference>
-    <genericViewTemplate>
-      <name>Description</name>
-      <showDrawer v="true" />
-      <drawerCaption>Description</drawerCaption>
-      <hideLabels v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>cfdae746-0433-49fa-877d-0c5ca93024e3</name>
-          <entityField>INFO</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-  </children>
-</neonView>
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ActivityPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Header</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Header</name>
+      <iconField>ICON</iconField>
+      <titleField>SUBJECT</titleField>
+      <descriptionField>ENTRYDATE</descriptionField>
+      <favoriteAction1>newActivity</favoriteAction1>
+      <entityField>#ENTITY</entityField>
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Info</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>84dac619-4438-492c-a6b4-61b285dc80fe</name>
+          <entityField>DIRECTION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>ad41c89c-2f4a-414c-90c8-d5a5df24aeaa</name>
+          <entityField>CATEGORY</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>c4569e50-223e-4b99-8253-e8fa72ef45a0</name>
+          <entityField>RESPONSIBLE</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>4c365613-81c5-4518-8953-751b5ae35cc2</name>
+      <entityField>Links</entityField>
+      <view>ActivityLinkPreviewList_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>43167618-e4dc-429b-a264-3ea95bd647f9</name>
+      <entityField>MainDocuments</entityField>
+      <view>DocumentList_view</view>
+    </neonViewReference>
+    <genericViewTemplate>
+      <name>Description</name>
+      <showDrawer v="true" />
+      <drawerCaption>Description</drawerCaption>
+      <hideLabels v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>cfdae746-0433-49fa-877d-0c5ca93024e3</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/AppointmentEdit_view/AppointmentEdit_view.aod b/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
index f60b1f0653c25464c6d9a61847e717b2180dcba4..9490ed3a36aacd3d0e9b519468f441b564bfb6ba 100644
--- a/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
+++ b/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
@@ -1,41 +1,41 @@
-<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>AppointmentEdit_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/neonView/AppointmentEdit_view/documentation.adoc</documentation>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <appointmentEditViewTemplate>
-      <name>Edit</name>
-      <summaryField>SUMMARY</summaryField>
-      <descriptionField>DESCRIPTION</descriptionField>
-      <beginField>BEGIN</beginField>
-      <endField>END</endField>
-      <attendeesField>ATTENDEES</attendeesField>
-      <privateField>CLASSIFICATION</privateField>
-      <statusField>STATUS</statusField>
-      <locationField>LOCATION</locationField>
-      <categoriesField>CATEGORIES</categoriesField>
-      <alldayField>ALLDAY</alldayField>
-      <transparencyField>TRANSPARENCY</transparencyField>
-      <organizerField>ORGANIZER</organizerField>
-      <favoriteActionGroup1>PartStatActionGroup</favoriteActionGroup1>
-      <rruleField>RRULE</rruleField>
-      <recurrenceIdField>RECURRENCEID</recurrenceIdField>
-      <saveScopeField>SAFESCOPEFIELD</saveScopeField>
-      <masterBeginField>MASTERBEGIN</masterBeginField>
-      <masterEndField>MASTEREND</masterEndField>
-      <reminderField>REMINDER</reminderField>
-      <entityField>#ENTITY</entityField>
-    </appointmentEditViewTemplate>
-    <neonViewReference>
-      <name>39802b49-f67c-4796-ba05-105aa073d60c</name>
-      <entityField>AppointmentLinks</entityField>
-      <view>AppointmentLinkEdit_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>AppointmentEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/neonView/AppointmentEdit_view/documentation.adoc</documentation>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <appointmentEditViewTemplate>
+      <name>Edit</name>
+      <summaryField>SUMMARY</summaryField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <beginField>BEGIN</beginField>
+      <endField>END</endField>
+      <attendeesField>ATTENDEES</attendeesField>
+      <privateField>CLASSIFICATION</privateField>
+      <statusField>STATUS</statusField>
+      <locationField>LOCATION</locationField>
+      <categoriesField>CATEGORIES</categoriesField>
+      <alldayField>ALLDAY</alldayField>
+      <transparencyField>TRANSPARENCY</transparencyField>
+      <organizerField>ORGANIZER</organizerField>
+      <favoriteActionGroup1>PartStatActionGroup</favoriteActionGroup1>
+      <rruleField>RRULE</rruleField>
+      <recurrenceIdField>RECURRENCEID</recurrenceIdField>
+      <saveScopeField>SAFESCOPEFIELD</saveScopeField>
+      <masterBeginField>MASTERBEGIN</masterBeginField>
+      <masterEndField>MASTEREND</masterEndField>
+      <reminderField>REMINDER</reminderField>
+      <entityField>#ENTITY</entityField>
+    </appointmentEditViewTemplate>
+    <neonViewReference>
+      <name>39802b49-f67c-4796-ba05-105aa073d60c</name>
+      <entityField>AppointmentLinks</entityField>
+      <view>AppointmentLinkEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod b/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..36b89a250e33f257ffba7003cb5a65c36524f87a
--- /dev/null
+++ b/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod
@@ -0,0 +1,37 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEmployeeWeekEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <isEditable v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>a066671d-5efb-4123-afe6-a4a420342b17</name>
+          <entityField>PERSON_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>fb5eb7db-38f3-46d7-8694-8c11a05a3d74</name>
+          <entityField>WEEK</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>87301217-235e-4b4e-9182-ccf839dd7944</name>
+          <entityField>YEAR</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6e656a20-41a5-4fe7-9b4a-ba2e3629ade1</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod b/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..84584b718e513b36cea457f6e6fd19a00751b40d
--- /dev/null
+++ b/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod
@@ -0,0 +1,55 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEmployeeWeekFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="false" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>a3f48ebd-9472-4388-8525-8351bdc90715</name>
+          <entityField>icon</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>e3525190-e8a5-4635-968a-aa446727074c</name>
+          <entityField>WEEK</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>41e665d5-0bcf-4e33-8080-809d839da15d</name>
+          <entityField>YEAR</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>92095268-0400-462d-9a6c-227d9f6966d4</name>
+          <entityField>PERSON_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>a5b55587-841d-42d5-b4b7-eff55f6f6858</name>
+          <entityField>entriescount</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2cf050be-90e5-4c39-b610-695433b7237e</name>
+          <entityField>entriesplannedcount</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>510c71cf-e0f6-4841-be76-91fdfedd6731</name>
+          <entityField>entries_appoint_count</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f2c7c7a7-3111-4f24-b44f-b733f18c932b</name>
+          <entityField>entries_activity_count</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7957501f-6771-4ac5-a5ef-92da2b36ffe8</name>
+          <entityField>INFO</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod b/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6bd22ba2b15c5b858651e3df4a95f1b69100c5d1
--- /dev/null
+++ b/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod
@@ -0,0 +1,28 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEmployeeWeekMain_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <masterSlaveLayout>
+      <name>layout</name>
+      <master>96cdcf22-793e-4bd5-82db-a952ced1a9ba</master>
+    </masterSlaveLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>96cdcf22-793e-4bd5-82db-a952ced1a9ba</name>
+      <entityField>#ENTITY</entityField>
+      <view>VisitPlanEmployeeWeekPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>a46e4f5e-341f-4a0b-9ec8-8b949803a590</name>
+      <entityField>Entries</entityField>
+      <view>VisitPlanEntryFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c7679a66-61e9-4ecc-9c6b-6fea98a13522</name>
+      <entityField>recommendations</entityField>
+      <view>VisitRecommendationFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod b/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3e4bee135d241994a1210b5afbef05d6bf67a818
--- /dev/null
+++ b/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod
@@ -0,0 +1,57 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEmployeeWeekPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <footer>Score_Card</footer>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <iconField>icon</iconField>
+      <titleField>PERSON_ID</titleField>
+      <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>5dcc40c3-a5e9-4030-a0bd-50282c361c0e</name>
+          <entityField>WEEK</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>e75e5ce2-9702-4885-a12d-64afe780b728</name>
+          <entityField>YEAR</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9e6bca10-ce10-4f90-a5e5-f70c680edb25</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <scoreCardViewTemplate>
+      <name>Score_Card</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>edd06fcc-b9a1-45e6-b8f6-351aa7a89368</name>
+          <entityField>entriescount</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d8a33f1d-ad7b-4a5d-9f0f-161b52749d6f</name>
+          <entityField>entriesplannedcount</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>93915027-a3cc-428c-905e-792ab8787f26</name>
+          <entityField>entries_appoint_count</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..28604879e7108ad50dd857e98fea28e94e177984
--- /dev/null
+++ b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod
@@ -0,0 +1,37 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEntryEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <isEditable v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>6cb39117-71cf-432b-afe7-b3446921d89e</name>
+          <entityField>ORGANISATION_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8347bc87-30f2-4335-b824-23e107b949b5</name>
+          <entityField>ENTRYDATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>99cbd482-b7c7-4d5b-a17e-62f9ab49db8a</name>
+          <entityField>BEGIN_TIME</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>75e0b2e9-2cd9-4d27-a696-2494ec79daa4</name>
+          <entityField>END_TIME</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8db62ce75af057e94f32bbb8eba63f4c70819676
--- /dev/null
+++ b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
@@ -0,0 +1,66 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitPlanEntryFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="false" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>currentWeek</name>
+      <title>my visit planning</title>
+      <description>show visit planning of the week</description>
+      <fragment>VisitPlanEntry/filter</fragment>
+      <singleton v="true" />
+      <storeRoles>
+        <element>PROJECT_FieldStaff</element>
+      </storeRoles>
+      <icon>VAADIN:CAR</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>External Service</name>
+          <title>External Service</title>
+        </neonDashletCategory>
+      </categories>
+      <parameters>
+        <neonDashletParameter>
+          <name>EntriesofCurrentWeek_param</name>
+          <value>true</value>
+        </neonDashletParameter>
+      </parameters>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <parentField>PARENT_ID</parentField>
+      <favoriteActionGroup1>entityActionGroup</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTreeTableColumn>
+          <name>d728f2d9-c223-47fd-9372-6f49203f68fd</name>
+          <entityField>PARENTNAME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>860f55a7-8153-4744-b664-73016719cbe1</name>
+          <entityField>BEGIN_TIME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>1f85b23f-aad0-429b-af97-fc310aed9554</name>
+          <entityField>END_TIME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>646193df-c713-4b40-85cc-0fbe6f8cb316</name>
+          <entityField>ORGANISATION_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>ca75adc7-5405-40af-bda0-52ae38e61f76</name>
+          <entityField>STATUS</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod b/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e23697e9b2c4a7c34be6387a84308d922cb82600
--- /dev/null
+++ b/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod
@@ -0,0 +1,33 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitRecommendationEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <isEditable v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>f4c34f77-c8cd-4eeb-a172-2f22a6de4029</name>
+          <entityField>DUE_DATE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7fcdef72-e823-43cc-a5d1-f6a8e81efd04</name>
+          <entityField>PRIORITY</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7349c883-e682-449b-8023-2a60f95fd68c</name>
+          <entityField>INFO</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fd33a5b5de963a569ebacd15c97033f1dd756857
--- /dev/null
+++ b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
@@ -0,0 +1,51 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>VisitRecommendationFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <favoriteActionGroup1>newEntryGroup</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <isCreatable v="true" />
+      <isDeletable v="true" />
+      <isEditable v="true" />
+      <columns>
+        <neonTableColumn>
+          <name>a87306f5-45b1-4969-ab2b-c6d17b54c4de</name>
+          <entityField>PRIORITY_ICON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>44659323-f1b5-4b29-afbf-eac2e7219e30</name>
+          <entityField>ORGANISATION_NAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>703fad3a-2d5f-47b4-8cc3-edf14c08afef</name>
+          <entityField>ORGANISATION_ADDRESS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>964bed99-4474-4017-b3cf-d6d51eb5b445</name>
+          <entityField>PRIORITY</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>96ff7755-4d9f-4706-982c-aeafda8b0618</name>
+          <entityField>PRIORITY_SOURCE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>85536cbf-d252-486e-a7ca-74b3ee9486c5</name>
+          <entityField>DUE_DATE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>e11dc9c2-73fe-4b21-96cb-01bbe69f6bd7</name>
+          <entityField>INFO</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/process/AttributeRegistry_basic/process.js b/process/AttributeRegistry_basic/process.js
index 141c192f3f3cccfc5f424b8e2b3f1fb94fa9679d..cacb5a18c5652984a98533ed93ff819bc030ed6e 100644
--- a/process/AttributeRegistry_basic/process.js
+++ b/process/AttributeRegistry_basic/process.js
@@ -18,3 +18,10 @@ $AttributeRegistry.targetGroup$competitior = function(){return "1d30d0ab-6103-49
 $AttributeRegistry.departments = function(){return "87d4ff5b-0ab6-4534-be26-76c6ef486072";};
 $AttributeRegistry.salesprojectType = function(){return "fd3963bc-8e60-411a-9911-b97eb73e5cf7";};
 $AttributeRegistry.responsibleADsupervisor = function(){return "c0b26482-c0aa-413d-a9c3-f44c56bd04a9";};
+
+$AttributeRegistry.visitPlanFrequency = function(){return "547b8b9d-88ba-4590-9e01-34d2a58116cc";};
+$AttributeRegistry.visitPlanFrequency$monthly = function(){return "8c100817-1d2b-4fc7-8fdd-fd0370e19385";};
+$AttributeRegistry.visitPlanFrequency$semiannually = function(){return "46d87ef7-a3fb-4918-98df-c8ed2cd3ca2b";};
+$AttributeRegistry.visitPlanFrequency$quarterly = function(){return "22722783-aa87-418f-9686-9b97c0639cae";};
+$AttributeRegistry.visitPlanFrequency$yearly = function(){return "a9575350-c1e7-4f96-b0ed-a8f52cc8b123";};
+$AttributeRegistry.visitPlanPointOfContact = function(){return "7d78320a-31c6-4c24-992a-a583f47caeb5";};
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index ef388740925395165fe54ddfa16363c629e6312c..bd18dea7a28be466e76b93d3dd453952f5d69764 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -16,6 +16,9 @@
  * $KeywordRegistry.activityDirection()
  */
 function $KeywordRegistry(){}
+// this function can also be found as StringUtils.pad36() in Util_lib and is just here to avoid an import because this registry is heavily used.
+$KeywordRegistry._autoPad = function(pKey){return (pKey + "                                    ").slice(0, 36)}; 
+
 $KeywordRegistry.attributeType = function(){return "AttributeType";};
 $KeywordRegistry.keywordAttributeType = function(){return "KeywordAttributeType";};
 $KeywordRegistry.contractPayment = function(){return "ContractPayment";};
@@ -95,6 +98,7 @@ $KeywordRegistry.salesprojectProbability = function(){return "SalesprojectProbab
 $KeywordRegistry.activityCategory = function(){return "ActivityCategory";};
 $KeywordRegistry.activityCategory$mail = function(){return "MAIL";};
 $KeywordRegistry.activityCategory$letter = function(){return "LETTER";};
+$KeywordRegistry.activityCategory$visit = function(){return "VISIT";};
 
 $KeywordRegistry.addressType = function(){return "AddressType";};
 $KeywordRegistry.addressType$private = function(){return "HOMEADDR";};
@@ -266,3 +270,20 @@ $KeywordRegistry.workflowActivityType$eventBasedGateway = function(){return "eve
 $KeywordRegistry.workflowActivityType$boundaryEvent = function(){return "boundaryEvent";};
 $KeywordRegistry.workflowActivityType$intermediateCatchEvent = function(){return "intermediateCatchEvent";};
 $KeywordRegistry.workflowActivityType$intermediateThrowEvent = function(){return "intermediateThrowEvent";};
+$KeywordRegistry.exportTemplateSeparator$tab = function(){return "TAB";};
+
+$KeywordRegistry.visitRecommendationPriority = function(){return $KeywordRegistry._autoPad("VisitRecommendationPriority");};
+$KeywordRegistry.visitRecommendationPriority$critical = function(){return $KeywordRegistry._autoPad("VISITPRIOCRITICAL");};
+$KeywordRegistry.visitRecommendationPriority$veryHigh = function(){return $KeywordRegistry._autoPad("VISITPRIOCVERYHIGH");};
+$KeywordRegistry.visitRecommendationPriority$high = function(){return $KeywordRegistry._autoPad("VISITPRIOHIGH");};
+$KeywordRegistry.visitRecommendationPriority$medium = function(){return $KeywordRegistry._autoPad("VISITPRIOMEDIUM");};
+$KeywordRegistry.visitRecommendationPriority$low = function(){return $KeywordRegistry._autoPad("VISITPRIOLOW");};
+
+$KeywordRegistry.visitPlanEntryStatus = function(){return $KeywordRegistry._autoPad("VisitPlanEntryStatus");};
+$KeywordRegistry.visitPlanEntryStatus$planned = function(){return $KeywordRegistry._autoPad("VISITSTATUSPLANNED");};
+$KeywordRegistry.visitPlanEntryStatus$Appointmentarranged = function(){return $KeywordRegistry._autoPad("VISITSTATUSAPPPLANED");};
+$KeywordRegistry.visitPlanEntryStatus$Visitreportcreated = function(){return $KeywordRegistry._autoPad("VISITSTATUSREPORTCREATED");};
+
+$KeywordRegistry.visitRecommendationPrioSource = function(){return $KeywordRegistry._autoPad("VisitRecommendationPrioSource");};
+$KeywordRegistry.visitRecommendationPrioSource$visitFrequency = function(){return $KeywordRegistry._autoPad("VISITFREQUENCY");};
+$KeywordRegistry.visitRecommendationPrioSource$manual = function(){return $KeywordRegistry._autoPad("MANUAL");};
\ No newline at end of file