From 7ee1d09652dbdff3c7b902d35143b61c2672a13b Mon Sep 17 00:00:00 2001 From: "a.schindlbeck" <a.schindlbeck@adito.de> Date: Tue, 12 Mar 2019 16:29:00 +0100 Subject: [PATCH] =?UTF-8?q?#1035776=20Serie=20=C3=A4nderbar=20+=20Calendar?= =?UTF-8?q?=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Appointment_entity/Appointment_entity.aod | 1 + .../children/appointmentid_param/code.js | 1 - .../entityfields/attendees/valueProcess.js | 15 + .../recordcontainers/jdito/contentProcess.js | 1 - .../recordcontainers/jdito/onInsert.js | 5 + .../recordcontainers/jdito/onUpdate.js | 328 +++--------------- 6 files changed, 63 insertions(+), 288 deletions(-) create mode 100644 entity/Appointment_entity/entityfields/attendees/valueProcess.js diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod index 632ee34458..68a22c6589 100644 --- a/entity/Appointment_entity/Appointment_entity.aod +++ b/entity/Appointment_entity/Appointment_entity.aod @@ -59,6 +59,7 @@ <entityField> <name>ATTENDEES</name> <possibleItemsProcess>%aditoprj%/entity/Appointment_entity/entityfields/attendees/possibleItemsProcess.js</possibleItemsProcess> + <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/attendees/valueProcess.js</valueProcess> </entityField> <entityField> <name>TRANSPARENCY</name> diff --git a/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/code.js b/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/code.js index 4caaf94026..53c1bcb86f 100644 --- a/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/code.js +++ b/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/code.js @@ -2,5 +2,4 @@ import("system.logging"); import("system.result"); import("system.vars"); -logging.log("SET: -" + vars.get("$field.UID") + "-") result.string(vars.get("$field.UID")); \ No newline at end of file diff --git a/entity/Appointment_entity/entityfields/attendees/valueProcess.js b/entity/Appointment_entity/entityfields/attendees/valueProcess.js new file mode 100644 index 0000000000..bc78b4d9d3 --- /dev/null +++ b/entity/Appointment_entity/entityfields/attendees/valueProcess.js @@ -0,0 +1,15 @@ +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(event[calendars.AFFECTEDUSERS]) + result.string(event[calendars.AFFECTEDUSERS]); +} \ No newline at end of file diff --git a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js index cdb013d534..469d54a167 100644 --- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js @@ -10,7 +10,6 @@ if(vars.exists("$param.Entry_param")) { var entry = JSON.parse(vars.getString("$param.Entry_param")); - logging.log(entry.toSource()) var masterEntry = null; if (vars.exists("$param.MasterEntry_param") && vars.get("$param.MasterEntry_param") != "") { diff --git a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js index 64df0562ab..c9605494a9 100644 --- a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js +++ b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js @@ -10,10 +10,13 @@ import("system.db"); import("system.result"); import("system.tools"); +logging.log("onInsert"); + var event = JSON.parse(vars.getString("$param.Entry_param")); 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. +logging.log("attendees: "+ vars.get("$field.ATTENDEES")); event[calendars.AFFECTEDUSERS] = vars.get("$field.ATTENDEES"); event[calendars.STATUS] = vars.getString("$field.STATUS"); event[calendars.SUMMARY] = vars.getString("$field.SUMMARY"); @@ -24,6 +27,8 @@ event[calendars.DTEND] = vars.get("$field.END"); event[calendars.CLASSIFICATION] = vars.get("$field.CLASSIFICATION"); event[calendars.TRANSPARENCY] = vars.get("$field.TRANSPARENCY"); event[calendars.CATEGORIES] = vars.get("$field.CATEGORIES"); +if(vars.get("$field.RRULE")) + event[calendars.RRULE] = [vars.get("$field.RRULE")]; if (vars.get("$field.REMINDER") != undefined && vars.get("$field.REMINDER") != "") { event[calendars.HASREMINDER] = "true"; diff --git a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js index b0b135b62a..2fe0a95ace 100644 --- a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js @@ -12,12 +12,26 @@ import("system.result"); import("system.tools"); +logging.log("onUpdate"); // Dieser Prozess speichert die im Frame angezeigten Daten // Je nach Modus (INSERT, EDIT) wird ein neuer Datensatz angelegt oder der alte editiert -if(vars.exists("$param.Entry_param") && vars.getString("$param.Entry_param") != "") +var event; + +if(vars.get("$field.SAFESCOPEFIELD") == "ALL" && vars.exists("$param.MasterEntry_param") && vars.getString("$param.MasterEntry_param") != "") +{ + event = JSON.parse(vars.getString("$param.MasterEntry_param")); + logging.log("safescope all"); +} +else if(vars.exists("$param.Entry_param") && vars.getString("$param.Entry_param") != "") { - var event = JSON.parse(vars.getString("$param.Entry_param")); + event = JSON.parse(vars.getString("$param.Entry_param")); + logging.log("safescope this"); +} + +if(event) +{ + var differencesDetected = areEventAndFieldsDifferent(event); //if ( calendars.getBackendType() == calendars.BACKEND_EXCHANGEWS && event[calendars.ORGANIZER2]["cn"] != event[calendars.USER2]["cn"]) // question.showMessage(translate.text("Ein Gruppentermin kann nur durch den Organisator bearbeitet werden.")); @@ -36,301 +50,43 @@ if(vars.exists("$param.Entry_param") && vars.getString("$param.Entry_param") != event[calendars.CATEGORIES] = vars.get("$field.CATEGORIES"); event[calendars.AFFECTEDUSERS] = vars.get("$field.ATTENDEES"); event[calendars.TRANSPARENCY] = vars.get("$field.TRANSPARENCY"); - if(vars.get("$field.REMINDER") != undefined && vars.get("$field.REMINDER") != "") + if(vars.get("$field.REMINDER")) { event[calendars.HASREMINDER] = "true"; event[calendars.REMINDER_DURATION] = vars.get("$field.REMINDER"); } - if(event[calendars.RRULE] != undefined) - event[calendars.RRULE] = vars.getString("$field.RRULE") - + + if(event[calendars.RRULE]) + event[calendars.RRULE] = [vars.getString("$field.RRULE")]; calendars.updateEntry(event); } -// Liefert die AffectedUsers -function getAffectedUsers( pEvent ) -{ - var affectedusers = vars.get("$context.affectedusers"); - var attendess = pEvent[calendars.ATTENDEES] - var calendarusers = []; - for ( var i = 0; i < affectedusers.length; i++) - { - var insert = true; - for ( var y = 0; y < attendess.length; y++) - { - // Teilnehmer schon vorhanden - if ( text.encodeMS( [attendess[y]["paramvalue"], "CN:" + attendess[y]["cn"]] ) == affectedusers[i][0] ) - { - var userparts = [attendess[y]["paramvalue"]]; - if ( affectedusers[i][1] != "" && affectedusers[i][1] != "UNKNOWN" ) attendess[y]["partstat"] = affectedusers[i][1]; - for ( var part in attendess[y] ) if ( part != "paramvalue") userparts.push(part + ":" + attendess[y][part] ) - calendarusers.push( text.encodeMS(userparts) ); - insert = false; - break; - } - } - if ( insert ) // Teilnehmer noch nicht im Termin vorhanden - { - var resource = db.cell("select THEME from THEME where THEMEID = '" + affectedusers[i][0] + "'"); - if( resource != "" && tools.existUsers(resource) ) - calendarusers.push(text.encodeMS(text.decodeMS(calendars.getCalendarUser(resource)).concat("CUTYPE:RESOURCE"))); - else calendarusers.push(affectedusers[i][0]); - } - } - return text.encodeMS( calendarusers ); - } -// 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("$comp.rec_end"); - - // Automatische Erkennung, was gewollt ist - if (rec_end == "") - { - if (vars.get("$comp.rec_end_count") != "") - rec_end = "Endet nach Anzahl Terminen"; - else if (vars.get("$comp.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("$comp.rec_end_count")); - } - else if (rec_end == "Endet am") - { - var dat = vars.get("$comp.rec_end_date"); - var start = vars.get("$comp.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("$comp.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("$comp.rec_yearly"); - var rec_yearly_month = vars.get("$comp.rec_yearly_month"); - var rec_yearly_day = vars.get("$comp.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("$comp.rec_yearly_day2") != "" && vars.get("$comp.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("$comp.rec_yearly_month2"); - day = vars.get("$comp.rec_yearly_day2"); - var number = vars.get("$comp.rec_yearly_number2"); - event[calendars.RRULE] = new Array("FREQ=YEARLY;BYMONTH="+month+";BYDAY="+number+day); - } -} -/***********************/ -function rec_monthly(event) -{ - var rec_month = vars.get("$comp.rec_month"); - var rec_monthly_day = vars.get("$comp.rec_monthly_day"); - var rec_monthly_interval = vars.get("$comp.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("$comp.rec_monthly_day2") != "" && vars.get("$comp.rec_monthly_interval2") != "" && vars.get("$comp.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("$comp.rec_monthly_day2"); - interval = vars.get("$comp.rec_monthly_interval2"); - var weekday = vars.get("$comp.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("$comp.rec_weekly_intervall"); - if (rec_weekly_intervall == "") - rec_weekly_intervall = "1"; - - var days = new Array(); - var count = 0; - if (vars.get("$comp.rec_weekly_mo") == "true") - { - days[count] = "MO"; - count++; - } - if (vars.get("$comp.rec_weekly_di") == "true") - { - days[count] = "TU"; - count++; - } - if (vars.get("$comp.rec_weekly_mi") == "true") - { - days[count] = "WE"; - count++; - } - if (vars.get("$comp.rec_weekly_do") == "true") - { - days[count] = "TH"; - count++; - } - if (vars.get("$comp.rec_weekly_fr") == "true") - { - days[count] = "FR"; - count++; - } - if (vars.get("$comp.rec_weekly_sa") == "true") - { - days[count] = "SA"; - count++; - } - if (vars.get("$comp.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++) +* checks if the entryParam has different values like the current fieldvalues +*/ +function areEventAndFieldsDifferent(event){ + + var different = false; + + if( event[calendars.ID] != vars.getString("$field.UID") || + event[calendars.TYPE] != calendars.VEVENT || + 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[calendars.HASREMINDER] != "false" || + event[calendars.CLASSIFICATION] != vars.get("$field.CLASSIFICATION") || + event[calendars.CATEGORIES] != vars.get("$field.CATEGORIES") || + event[calendars.AFFECTEDUSERS] != vars.get("$field.ATTENDEES") || + event[calendars.TRANSPARENCY] != vars.get("$field.TRANSPARENCY")) { - event[calendars.RRULE][0] += days[i]; - if (i+1 < count) - { - event[calendars.RRULE][0] += ","; - } + different = true; } - } -} -/***********************/ -function rec_daily(event) -{ - var rec_dailytype = vars.get("$comp.rec_dailytype"); - var rec_dailydays = vars.get("$comp.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); - } + + return different; } \ No newline at end of file -- GitLab