From f94e947ce21d7499e8747bd6bf9a732b7efd4a3c Mon Sep 17 00:00:00 2001
From: "a.schindlbeck" <a.schindlbeck@adito.de>
Date: Thu, 1 Aug 2019 15:02:25 +0200
Subject: [PATCH] Kalender: Organizer Fix #1

---
 .../Appointment_entity/Appointment_entity.aod |   1 +
 .../entityfields/organizer/valueProcess.js    |  19 ++
 .../recordcontainers/jdito/onInsert.js        | 272 +-----------------
 3 files changed, 24 insertions(+), 268 deletions(-)
 create mode 100644 entity/Appointment_entity/entityfields/organizer/valueProcess.js

diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index ea2da9459f..8df4714f50 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -124,6 +124,7 @@
     </entityParameter>
     <entityField>
       <name>ORGANIZER</name>
+      <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/organizer/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>RRULE</name>
diff --git a/entity/Appointment_entity/entityfields/organizer/valueProcess.js b/entity/Appointment_entity/entityfields/organizer/valueProcess.js
new file mode 100644
index 0000000000..6b6bc2ad59
--- /dev/null
+++ b/entity/Appointment_entity/entityfields/organizer/valueProcess.js
@@ -0,0 +1,19 @@
+import("system.logging");
+import("system.neon");
+import("system.vars");
+import("system.calendars");
+import("system.result");
+
+/**
+ * Following if() is only for passing param-parts from "new Appointment"-Dialog to AppointmentEditViewTemplate
+ */
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.Entry_param"))
+{
+    var event = JSON.parse(vars.getString("$param.Entry_param"));
+
+    if(vars.get("$this.value"))
+        result.object(vars.get("$this.value"));
+    
+    else if(event[calendars.ORGANIZER2])
+        result.object(event[calendars.ORGANIZER2]["paramvalue"]);
+}
\ No newline at end of file
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
index 48de276e37..0fae64a0fc 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.neon");
 import("system.calendars");
 import("system.vars");
@@ -15,18 +16,6 @@ var fields = vars.get("$local.rowdata");
 
 event[calendars.TYPE] = calendars.VEVENT;
 event[calendars.ID] = ""; //wenn hier neue id erstellt und mitgegeben wird, wird versucht einen termin mit dieser id zu finden, den es nicht gibt. also leer.
-//event[calendars.AFFECTEDUSERS] = vars.get("$field.ATTENDEES");
-//event[calendars.STATUS] = vars.getString("$field.STATUS");
-//event[calendars.SUMMARY] = vars.getString("$field.SUMMARY");
-//event[calendars.LOCATION] = vars.get("$field.LOCATION");
-//event[calendars.DESCRIPTION] = vars.get("$field.DESCRIPTION");
-//event[calendars.DTSTART] = vars.get("$field.BEGIN");
-//event[calendars.DTEND] = vars.get("$field.END");
-//event["X-ADITO-ISALLDAYEVENT"] = vars.get("$field.ALLDAY");
-//event[calendars.CLASSIFICATION] = vars.get("$field.CLASSIFICATION");
-//event[calendars.TRANSPARENCY] = vars.get("$field.TRANSPARENCY"); 
-//event[calendars.CATEGORIES] = vars.get("$field.CATEGORIES");
-
 event[calendars.AFFECTEDUSERS] = fields["ATTENDEES.value"];
 event[calendars.STATUS] = fields["STATUS.value"];
 event[calendars.SUMMARY] = fields["SUMMARY.value"];
@@ -38,6 +27,7 @@ event["X-ADITO-ISALLDAYEVENT"] = fields["ALLDAY.value"];
 event[calendars.CLASSIFICATION] = fields["CLASSIFICATION.value"];
 event[calendars.TRANSPARENCY] = fields["TRANSPARENCY.value"];
 event[calendars.CATEGORIES] = fields["CATEGORIES.value"];
+event[calendars.ORGANIZER] = fields["ORGANIZER.value"];
 
 if(fields["RRULE.value"])
     event[calendars.RRULE] = [fields["RRULE.value"]];
@@ -46,264 +36,10 @@ if (fields["REMINDER.value"])
     event[calendars.HASREMINDER] = "true";
     event[calendars.REMINDER_DURATION] = fields["REMINDER.value"];
 }
+
+
 var idstringarray = calendars.insert([event]);
 event[calendars.ID] = idstringarray[0];
 neon.setFieldValue("$field.UID", event[calendars.ID]);
 
 vars.set("$context.editmode", calendars.MODE_UPDATE);
-
-
-
-// Liefert die Benutzer zurück, auf die keine Schreibrechte bestehen
-function getReadOnlyUser()
-{
-    var writeable = calendars.getFullCalendarUsers(calendars.RIGHT_WRITE);	
-    var affectedusers = vars.get("$context.affectedusers");
-    var readonly = new Array();
-
-    for ( i = 0; i < affectedusers.length; i++)
-    {
-        var user = affectedusers[i][0];
-        if (!isWriteable(user, writeable))
-            readonly.push(affectedusers[i][3]);
-    }	
-    return readonly;	
-}
-
-// Liefert TRUE, wenn der Benutzer bei denen mit Schreibberechtigungen enthalten ist
-function isWriteable(user, writeable)
-{
-    for (var i = 0; i < writeable.length; i++)
-    {
-        if (writeable[i][0] == calendars.getCalendarUser(user))		
-            return true;
-    }	
-    return false;
-}
-
-// Berechnet das Ende der Recurrence
-function recurrencend(event)
-{
-    var rec_end = vars.getString("$field.rec_end");
-
-    // Automatische Erkennung, was gewollt ist
-    if (rec_end == "")
-    {
-        if (vars.get("$field.rec_end_count") != "")
-            rec_end = "Endet nach Anzahl Terminen";
-        else if (vars.get("$field.rec_end_date") != "")
-            rec_end = "Endet am";
-    }
-
-    if (rec_end == "" || rec_end == "Kein Enddatum")
-    {
-    // Nichts
-    }
-    else if (rec_end == "Endet nach Anzahl Terminen")
-    {
-        event[calendars.RRULE][0] += (";COUNT=" + vars.get("$field.rec_end_count"));
-    }
-    else if (rec_end == "Endet am")
-    {
-        var dat = vars.get("$field.rec_end_date");
-        var start = vars.get("$field.start_date");
-        var localTime = datetime.toDate(dat, translate.text("yyyyMMdd")) + datetime.toDate(start, "HHmmss");
-        var utcTime = datetime.toLong(localTime, "yyyyMMddHHmmss");
-        event[calendars.RRULE][0] += (";UNTIL=" + datetime.toDate(utcTime, "yyyyMMdd\'T\'HHmmss\'Z\'", "UTC"));
-    }
-}
-
-/**
- * Berechnet die Wiederholung
- *
- * @param event Das fertige Event. Hier die Reccurrence speichern
- */
-function calcrecurrence(event)
-{
-    var rec_type = vars.get("$field.rec_type");
-
-    if (rec_type == "")
-    {
-    // Nichts
-    }
-    else if (rec_type == "Keine")
-    {
-    }
-    else if (rec_type == "Täglich")
-    {
-        rec_daily(event);
-    }
-    else if (rec_type == "Wöchentlich")
-    {
-        rec_weekly(event);
-    }
-    else if (rec_type == "Monatlich")
-    {
-        rec_monthly(event);
-    }
-    else if (rec_type == "Jährlich")
-    {
-        rec_yearly(event);
-    }
-    else
-    {
-        question.showMessage("Internal (1) " + rec_type);
-    }
-}
-/***********************/
-function rec_yearly(event)
-{
-    var rec_year = vars.get("$field.rec_yearly");
-    var rec_yearly_month = vars.get("$field.rec_yearly_month");
-    var rec_yearly_day = vars.get("$field.rec_yearly_day");
-    var month;
-    var day;
-
-    if (rec_year == "")
-    {
-        if (rec_yearly_month != "" && rec_yearly_day != "")
-            rec_year = "Jeden # #";
-        else if (rec_yearly_month != "" && vars.get("$field.rec_yearly_day2") != "" && vars.get("$field.rec_yearly_number2") != "")
-            rec_year = "Am #. # im #";
-    }
-
-    if (rec_year == "" || (rec_yearly_month == "" && rec_yearly_day == "" ))
-    {
-        question.showMessage(translate.text("yearly series not specified"));
-    }
-    else if (rec_year == "Jeden # #")
-    {
-        month = rec_yearly_month;
-        day = rec_yearly_day;
-        event[calendars.RRULE] = new Array("FREQ=YEARLY;BYMONTHDAY="+day+";BYMONTH="+month);
-    }
-    else if (rec_year == "Am #. # im #")
-    {
-        month = vars.get("$field.rec_yearly_month2");
-        day = vars.get("$field.rec_yearly_day2");
-        var number = vars.get("$field.rec_yearly_number2");
-        event[calendars.RRULE] = new Array("FREQ=YEARLY;BYMONTH="+month+";BYDAY="+number+day);
-    }
-}
-/***********************/
-function rec_monthly(event)
-{
-    var rec_month = vars.get("$field.rec_month");
-    var rec_monthly_day = vars.get("$field.rec_monthly_day");
-    var rec_monthly_interval = vars.get("$field.rec_monthly_interval");
-    var day;
-    var interval;
-
-    if (rec_month == "")
-
-    {
-        if (rec_monthly_day != "" && rec_monthly_interval != "")
-            rec_month = "Am #. jedes #. Monat";
-        else if (vars.get("$field.rec_monthly_day2") != "" && vars.get("$field.rec_monthly_interval2") != "" && vars.get("$field.rec_monthly_weekday2") != "")
-            rec_month = "Am #. # jeden #. Monat";
-    }
-
-    if (rec_month == "" || (rec_monthly_day == "" && rec_monthly_interval != ""))
-    {
-        question.showMessage(translate.text("Ignore series"));
-    }
-    else if (rec_month == "Am #. jedes #. Monat")
-    {
-        day = rec_monthly_day;
-        interval = rec_monthly_interval;
-        event[calendars.RRULE] = new Array("FREQ=MONTHLY;INTERVAL=" + interval + ";BYMONTHDAY=" + day);
-    }
-    else if(rec_month == "Am #. # jeden #. Monat")
-    {
-        day = vars.get("$field.rec_monthly_day2");
-        interval = vars.get("$field.rec_monthly_interval2");
-        var weekday = vars.get("$field.rec_monthly_weekday2");
-        event[calendars.RRULE] = new Array("FREQ=MONTHLY;INTERVAL=" + interval + ";BYDAY=" + day + weekday);
-    }
-}
-/***********************/
-function rec_weekly(event)
-{
-
-    var rec_weekly_intervall = vars.get("$field.rec_weekly_intervall");
-    if (rec_weekly_intervall == "")
-        rec_weekly_intervall = "1";
-
-    var days = new Array();
-    var count = 0;
-    if (vars.get("$field.rec_weekly_mo") == "true")
-    {
-        days[count] = "MO";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_di") == "true")
-    {
-        days[count] = "TU";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_mi") == "true")
-    {
-        days[count] = "WE";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_do") == "true")
-    {
-        days[count] = "TH";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_fr") == "true")
-    {
-        days[count] = "FR";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_sa") == "true")
-    {
-        days[count] = "SA";
-        count++;
-    }
-    if (vars.get("$field.rec_weekly_so") == "true")
-    {
-        days[count] = "SU";
-        count++;
-    }
-    if (count > 0)
-    {
-        event[calendars.RRULE] = new Array("FREQ=WEEKLY;INTERVAL=" + rec_weekly_intervall + ";WKST=MO;BYDAY=");
-        for (var i = 0; i < count; i++)
-        {
-            event[calendars.RRULE][0] += days[i];
-            if (i+1 < count)
-            {
-                event[calendars.RRULE][0] += ",";
-            }
-        }
-    }
-}
-/***********************/
-function rec_daily(event)
-{
-    var rec_dailytype = vars.get("$field.rec_dailytype");
-    var rec_dailydays = vars.get("$field.rec_daily_days");
-    if (rec_dailytype == "")
-    {
-        if (rec_dailydays != "")
-            rec_dailytype = "Alle # Tage";
-    }
-
-    if (rec_dailytype == "" || rec_dailydays == "")
-    {
-        question.showMessage(translate.text("Ignore daily series"));
-    }
-    else if (rec_dailytype == "Alle # Tage")
-    {
-        event[calendars.RRULE] = new Array("FREQ=DAILY;INTERVAL=" + rec_dailydays);
-    }
-    else if (rec_dailytype == "Jeden Arbeitstag")
-    {
-        event[calendars.RRULE][0] = new Array("FREQ=WEEKLY;WKST=MO;BYDAY=MO,TU,WE,TH,FR");
-    }
-    else
-    {
-        question.showMessage(translate.text("Internal (2)") + " " + rec_dailytype);
-    }
-}
\ No newline at end of file
-- 
GitLab