From 93c1e256051fb3d15f11ca5f700c6d15667237c6 Mon Sep 17 00:00:00 2001 From: Robert Loipfinger <r.loipfinger@adito.de> Date: Fri, 12 Oct 2018 13:12:32 +0200 Subject: [PATCH] =?UTF-8?q?AppointmentEntity=20f=C3=BCr=20param.entry=20an?= =?UTF-8?q?gepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Appointment_entity/contentProcess.js | 116 +-- .../attendees/possibleItemsProcess.js | 34 +- .../entityfields/categories/valueProcess.js | 13 +- entity/Appointment_entity/onDelete.js | 32 +- entity/Appointment_entity/onInsert.js | 724 ++++++++--------- entity/Appointment_entity/onUpdate.js | 748 +++++++++--------- 6 files changed, 834 insertions(+), 833 deletions(-) diff --git a/entity/Appointment_entity/contentProcess.js b/entity/Appointment_entity/contentProcess.js index 4d87fda0d0..6a57154016 100644 --- a/entity/Appointment_entity/contentProcess.js +++ b/entity/Appointment_entity/contentProcess.js @@ -1,58 +1,58 @@ -import("system.logging"); -import("system.result"); -import("system.vars"); -import("system.calendars"); -import("system.datetime"); -import("system.eMath"); -import("system.util"); - -if(vars.exists("$image.entry")) -{ - var entry = vars.get("$image.entry"); - - var uid = entry[calendars.ID]; - var summary = entry[calendars.SUMMARY]; - var attendees = entry[calendars.AFFECTEDUSERS]; - var startdate = entry[calendars.DTSTART]; - var enddate = entry[calendars.DTEND]; - var links = entry[calendars.LINKS]; - var description = entry[calendars.DESCRIPTION]; - var organizer = entry[calendars.ORGANIZER2]; - var status = entry[calendars.STATUS]; - var location = entry[calendars.LOCATION]; - var reminder = entry[calendars.REMINDER]; - var remindercheck = entry[calendars.HASREMINDER] - var classification = entry[calendars.CLASSIFICATION]; - var allday = entry[calendars]; - - //@TODO Icon - - result.object([ - [uid, '', '', attendees.length, startdate, enddate, summary, organizer, attendees, status, links, description, location, '', classification, allday] //, location, reminder, remindercheck - ]); -} -else -{ - var filter = ( vars.exists("$param.p_filter") - && vars.get("$param.p_filter") != null - && vars.get("$param.p_filter") != undefined) ? vars.get("$param.p_filter") : ""; - - //For the Tableview in Task_Date - //var events = getEvents(filter); - var cond = { - TYPE_1: calendars.VEVENT - ,USER_1: vars.get("$sys.user") - ,COUNT: "1" - }; - //var entries = calendars.getExpandedEntries(cond, new Long(datetime.date()), new Long(eMath.addInt(datetime.date(), datetime.ONE_DAY * 7))); - - //for (i = 0; i < events.length; i++) - //{ - // events[i].push([""]) - // var count = events[i][3]; - // var iconInfo = (count > 1 ? "gruppentermin" : "einzeltermin"); - // var icon = (getIcon("termine_aufgaben", iconInfo)); - // events[i] = events[i].concat(icon); - //} - //result.object(events); -} +import("system.logging"); +import("system.result"); +import("system.vars"); +import("system.calendars"); +import("system.datetime"); +import("system.eMath"); +import("system.util"); + +if(vars.exists("$param.entry")) +{ + var entry = JSON.parse(vars.getString("$param.entry")); + + var uid = entry[calendars.ID]; + var summary = entry[calendars.SUMMARY]; + var attendees = entry[calendars.AFFECTEDUSERS]; + var startdate = entry[calendars.DTSTART]; + var enddate = entry[calendars.DTEND]; + var links = entry[calendars.LINKS]; + var description = entry[calendars.DESCRIPTION]; + var organizer = entry[calendars.ORGANIZER2]; + var status = entry[calendars.STATUS]; + var location = entry[calendars.LOCATION]; + var reminder = entry[calendars.REMINDER]; + var remindercheck = entry[calendars.HASREMINDER] + var classification = entry[calendars.CLASSIFICATION]; + var allday = entry[calendars]; + + //@TODO Icon + + result.object([ + [uid, '', '', attendees.length, startdate, enddate, summary, organizer, attendees, status, links, description, location, '', classification, allday] //, location, reminder, remindercheck + ]); +} +else +{ + var filter = ( vars.exists("$param.p_filter") + && vars.get("$param.p_filter") != null + && vars.get("$param.p_filter") != undefined) ? vars.get("$param.p_filter") : ""; + + //For the Tableview in Task_Date + //var events = getEvents(filter); + var cond = { + TYPE_1: calendars.VEVENT + ,USER_1: vars.get("$sys.user") + ,COUNT: "1" + }; + //var entries = calendars.getExpandedEntries(cond, new Long(datetime.date()), new Long(eMath.addInt(datetime.date(), datetime.ONE_DAY * 7))); + + //for (i = 0; i < events.length; i++) + //{ + // events[i].push([""]) + // var count = events[i][3]; + // var iconInfo = (count > 1 ? "gruppentermin" : "einzeltermin"); + // var icon = (getIcon("termine_aufgaben", iconInfo)); + // events[i] = events[i].concat(icon); + //} + //result.object(events); +} diff --git a/entity/Appointment_entity/entityfields/attendees/possibleItemsProcess.js b/entity/Appointment_entity/entityfields/attendees/possibleItemsProcess.js index d02b24118f..1351b2e0f1 100644 --- a/entity/Appointment_entity/entityfields/attendees/possibleItemsProcess.js +++ b/entity/Appointment_entity/entityfields/attendees/possibleItemsProcess.js @@ -1,18 +1,18 @@ -import("system.vars"); -import("system.logging"); -import("system.result"); -import("system.calendars"); - -logging.log("attendees poss-items") - -var entry = vars.get("$image.entry"); -var allUsers = calendars.getFullCalendarUsers(calendars.RIGHT_WRITE); -var results = []; - -for (var i = 0; i < allUsers.length; i++) -{ - results[i] = [allUsers[i][0], allUsers[i][2].paramvalue]; -} -logging.log(results); - +import("system.vars"); +import("system.logging"); +import("system.result"); +import("system.calendars"); + +logging.log("attendees poss-items") + +var entry = JSON.parse(vars.getString("param.entry")); +var allUsers = calendars.getFullCalendarUsers(calendars.RIGHT_WRITE); +var results = []; + +for (var i = 0; i < allUsers.length; i++) +{ + results[i] = [allUsers[i][0], allUsers[i][2].paramvalue]; +} +logging.log(results); + result.object(results); \ No newline at end of file diff --git a/entity/Appointment_entity/entityfields/categories/valueProcess.js b/entity/Appointment_entity/entityfields/categories/valueProcess.js index 667d446691..6e54dcd0b4 100644 --- a/entity/Appointment_entity/entityfields/categories/valueProcess.js +++ b/entity/Appointment_entity/entityfields/categories/valueProcess.js @@ -1,6 +1,7 @@ -import("system.result"); -import("system.vars"); -import("system.calendars"); - -var categs = vars.get("$image.entry")[calendars.CATEGORIES]; -result.string(categs); \ No newline at end of file +import("system.logging"); +import("system.result"); +import("system.vars"); +import("system.calendars"); + +var categs = JSON.parse(vars.getString("param.entry"))[calendars.CATEGORIES]; +result.string(categs); diff --git a/entity/Appointment_entity/onDelete.js b/entity/Appointment_entity/onDelete.js index 21038088ed..39aa4153e2 100644 --- a/entity/Appointment_entity/onDelete.js +++ b/entity/Appointment_entity/onDelete.js @@ -1,17 +1,17 @@ -import("system.neon"); -import("system.calendars"); -import("system.vars"); - -if (vars.exists("$image.entry")) -{ - var entry = vars.get("$image.entry"); - var reccurenceid = entry[calendars.RECURRENCEID]; - if (reccurenceid == undefined) reccurenceid = null; - calendars.removeEntryByUID(calendars.VEVENT, vars.get("$sys.user"), entry[calendars.ID], reccurenceid) -} - -if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) -{ - neon.closeImage(vars.getString("$sys.currentimage"), true); - neon.refresh(vars.get("$sys.ancestorimageuid")); +import("system.neon"); +import("system.calendars"); +import("system.vars"); + +if (vars.exists("param.entry")) +{ + var entry = JSON.parse(vars.getString("param.entry")); + var reccurenceid = entry[calendars.RECURRENCEID]; + if (reccurenceid == undefined) reccurenceid = null; + calendars.removeEntryByUID(calendars.VEVENT, vars.get("$sys.user"), entry[calendars.ID], reccurenceid) +} + +if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) +{ + neon.closeImage(vars.getString("$sys.currentimage"), true); + neon.refresh(vars.get("$sys.ancestorimageuid")); } \ No newline at end of file diff --git a/entity/Appointment_entity/onInsert.js b/entity/Appointment_entity/onInsert.js index d727fdfa73..9eac4094d6 100644 --- a/entity/Appointment_entity/onInsert.js +++ b/entity/Appointment_entity/onInsert.js @@ -1,363 +1,363 @@ -import("system.logging"); -import("system.neon"); -import("system.calendars"); -import("system.vars"); -import("system.question"); -import("system.translate"); -import("system.text"); -import("system.datetime"); -import("system.db"); -import("system.result"); -import("system.tools"); - -logging.log("on insert"); - -// Dieser Prozess speichert die im Frame angezeigten Daten -// Je nach Modus (INSERT, EDIT) wird ein neuer Datensatz angelegt oder der alte editiert -var event = vars.get("$image.entry"); - -var ok = false; - -event[calendars.TYPE] = calendars.VEVENT; -event[calendars.ATTENDEES] = 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.STARTDATE"); -event[calendars.DTEND] = vars.get("$field.ENDDATE"); -event[calendars.HASREMINDER] = "false"; -var hasReminder = vars.get("$field.REMINDER_CHECK"); -if (hasReminder == "true") -{ - // Absolut nur, wenn auch gesetzt. Default ist relativ - if ( event[calendars.REMINDER_ABSOLUT] == "true") - { - var reminder_date = vars.get("$field.REMINDER"); - if ( reminder_date != "" ) - { - event[calendars.HASREMINDER] = "true"; - event[calendars.REMINDER_DATE] = reminder_date; - } - } -// else -// { -// var reminder_duration = vars.getString("$field.reminder_duration"); -// if ( reminder_duration != "") -// { -// event[calendars.HASREMINDER] = "true"; -// event[calendars.REMINDER_DURATION] = reminder_duration; -// } -// } -} -event[calendars.CLASSIFICATION] = vars.get("$field.CLASSIFICATION"); -// event[calendars.TRANSPARENCY] = vars.get("$field.transparency"); -//event[calendars.AFFECTEDUSERS] = getAffectedUsers( event ); -// event[calendars.CATEGORIES] = vars.get("$field.categories"); -//calcrecurrence(event); -//if (event[calendars.RRULE] != undefined) recurrencend(event); -// Links updaten -// swing.saveTableEdit("$field.links"); -// Entweder jetzt neu anlegen oder nur updaten -event[calendars.ID] = calendars.insert([event])[0]; -vars.set("$image.editmode", calendars.MODE_UPDATE); -ok = true; - -////Zwischenspeichern -//if(vars.exists("$image.dontClose") && vars.get("$image.dontClose") ) ok = false; //Maske offen lassen -//vars.set("$image.dontClose", false); // zurücksetzen, damit Klick auf Speichern noch funktioniert - -if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) -{ - neon.closeImage(vars.getString("$sys.currentimage"), true); - neon.refresh(vars.get("$sys.ancestorimageuid")); -} - - -// Liefert die AffectedUsers -function getAffectedUsers( pEvent ) -{ - var affectedusers = vars.get("$image.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]); - } - } - // a.showMessage(calendarusers.join("\n")) - 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("$image.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("Jährliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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("Monatliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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("Tägliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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); - } +import("system.logging"); +import("system.neon"); +import("system.calendars"); +import("system.vars"); +import("system.question"); +import("system.translate"); +import("system.text"); +import("system.datetime"); +import("system.db"); +import("system.result"); +import("system.tools"); + +logging.log("on insert"); + +// Dieser Prozess speichert die im Frame angezeigten Daten +// Je nach Modus (INSERT, EDIT) wird ein neuer Datensatz angelegt oder der alte editiert +var event = JSON.parse(vars.getString("param.entry")); + +var ok = false; + +event[calendars.TYPE] = calendars.VEVENT; +event[calendars.ATTENDEES] = 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.STARTDATE"); +event[calendars.DTEND] = vars.get("$field.ENDDATE"); +event[calendars.HASREMINDER] = "false"; +var hasReminder = vars.get("$field.REMINDER_CHECK"); +if (hasReminder == "true") +{ + // Absolut nur, wenn auch gesetzt. Default ist relativ + if ( event[calendars.REMINDER_ABSOLUT] == "true") + { + var reminder_date = vars.get("$field.REMINDER"); + if ( reminder_date != "" ) + { + event[calendars.HASREMINDER] = "true"; + event[calendars.REMINDER_DATE] = reminder_date; + } + } +// else +// { +// var reminder_duration = vars.getString("$field.reminder_duration"); +// if ( reminder_duration != "") +// { +// event[calendars.HASREMINDER] = "true"; +// event[calendars.REMINDER_DURATION] = reminder_duration; +// } +// } +} +event[calendars.CLASSIFICATION] = vars.get("$field.CLASSIFICATION"); +// event[calendars.TRANSPARENCY] = vars.get("$field.transparency"); +//event[calendars.AFFECTEDUSERS] = getAffectedUsers( event ); +// event[calendars.CATEGORIES] = vars.get("$field.categories"); +//calcrecurrence(event); +//if (event[calendars.RRULE] != undefined) recurrencend(event); +// Links updaten +// swing.saveTableEdit("$field.links"); +// Entweder jetzt neu anlegen oder nur updaten +event[calendars.ID] = calendars.insert([event])[0]; +vars.set("$image.editmode", calendars.MODE_UPDATE); +ok = true; + +////Zwischenspeichern +//if(vars.exists("$image.dontClose") && vars.get("$image.dontClose") ) ok = false; //Maske offen lassen +//vars.set("$image.dontClose", false); // zurücksetzen, damit Klick auf Speichern noch funktioniert + +if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) +{ + neon.closeImage(vars.getString("$sys.currentimage"), true); + neon.refresh(vars.get("$sys.ancestorimageuid")); +} + + +// Liefert die AffectedUsers +function getAffectedUsers( pEvent ) +{ + var affectedusers = vars.get("$image.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]); + } + } + // a.showMessage(calendarusers.join("\n")) + 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("$image.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("Jährliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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("Monatliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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("Tägliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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 diff --git a/entity/Appointment_entity/onUpdate.js b/entity/Appointment_entity/onUpdate.js index 6cc5cddf8e..9418f7f109 100644 --- a/entity/Appointment_entity/onUpdate.js +++ b/entity/Appointment_entity/onUpdate.js @@ -1,375 +1,375 @@ -import("system.logging"); -import("system.neon"); -import("system.calendars"); -import("system.vars"); -import("system.question"); -import("system.translate"); -import("system.text"); -import("system.swing"); -import("system.datetime"); -import("system.db"); -import("system.result"); -import("system.tools"); - - -logging.log("on update"); - -// 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("$image.entry")) -{ - var event = vars.get("$image.entry"); - - var ok = false; - 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.")); - ok = true; - } - else - { - - 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"); - var att = vars.get("$field.ATTENDEES"); - event[calendars.AFFECTEDUSERS] = att; - var hasReminder = vars.get("$field.REMINDER_CHECK"); - if (hasReminder == "true") - { - // Absolut nur, wenn auch gesetzt. Default ist relativ - if ( event[calendars.REMINDER_ABSOLUT] == "true") - { - var reminder_date = vars.get("$field.REMINDER"); - if ( reminder_date != "" ) - { - event[calendars.HASREMINDER] = "true"; - event[calendars.REMINDER_DATE] = reminder_date; - } - } - // else - // { - // var reminder_duration = vars.getString("$comp.reminder_duration"); - // if ( reminder_duration != "") - // { - // event[calendars.HASREMINDER] = "true"; - // event[calendars.REMINDER_DURATION] = reminder_duration; - // } - // } - } - // event[calendars.TRANSPARENCY] = vars.get("$comp.transparency"); - //event[calendars.AFFECTEDUSERS] = getAffectedUsers( event ); - // calcrecurrence(event); - // if (event[calendars.RRULE] != undefined) recurrencend(event); - // Links updaten - //swing.saveTableEdit("$comp.links"); - // Entweder jetzt neu anlegen oder nur updaten - - calendars.updateEntry(event); - - ok = true; - } - // //Zwischenspeichern - // if(vars.exists("$image.dontClose") && vars.get("$image.dontClose") ) ok = false; //Maske offen lassen - // vars.set("$image.dontClose", false); // zurücksetzen, damit Klick auf Speichern noch funktioniert - - - if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) - { - neon.closeImage(vars.getString("$sys.currentimage"), true); - neon.refresh(vars.get("$sys.ancestorimageuid")); - } -} -// Liefert die AffectedUsers -function getAffectedUsers( pEvent ) -{ - var affectedusers = vars.get("$image.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("$image.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("Jährliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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("Monatliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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++) - { - event[calendars.RRULE][0] += days[i]; - if (i+1 < count) - { - event[calendars.RRULE][0] += ","; - } - } - } -} -/***********************/ -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("Tägliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); - } - 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); - } +import("system.logging"); +import("system.neon"); +import("system.calendars"); +import("system.vars"); +import("system.question"); +import("system.translate"); +import("system.text"); +import("system.swing"); +import("system.datetime"); +import("system.db"); +import("system.result"); +import("system.tools"); + + +logging.log("on update"); + +// 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")) +{ + var event = JSON.parse(vars.getString("param.entry")); + + var ok = false; + 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.")); + ok = true; + } + else + { + + 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"); + var att = vars.get("$field.ATTENDEES"); + event[calendars.AFFECTEDUSERS] = att; + var hasReminder = vars.get("$field.REMINDER_CHECK"); + if (hasReminder == "true") + { + // Absolut nur, wenn auch gesetzt. Default ist relativ + if ( event[calendars.REMINDER_ABSOLUT] == "true") + { + var reminder_date = vars.get("$field.REMINDER"); + if ( reminder_date != "" ) + { + event[calendars.HASREMINDER] = "true"; + event[calendars.REMINDER_DATE] = reminder_date; + } + } + // else + // { + // var reminder_duration = vars.getString("$comp.reminder_duration"); + // if ( reminder_duration != "") + // { + // event[calendars.HASREMINDER] = "true"; + // event[calendars.REMINDER_DURATION] = reminder_duration; + // } + // } + } + // event[calendars.TRANSPARENCY] = vars.get("$comp.transparency"); + //event[calendars.AFFECTEDUSERS] = getAffectedUsers( event ); + // calcrecurrence(event); + // if (event[calendars.RRULE] != undefined) recurrencend(event); + // Links updaten + //swing.saveTableEdit("$comp.links"); + // Entweder jetzt neu anlegen oder nur updaten + + calendars.updateEntry(event); + + ok = true; + } + // //Zwischenspeichern + // if(vars.exists("$image.dontClose") && vars.get("$image.dontClose") ) ok = false; //Maske offen lassen + // vars.set("$image.dontClose", false); // zurücksetzen, damit Klick auf Speichern noch funktioniert + + + if(vars.exists("$sys.ancestorimageuid") && vars.get("$sys.ancestorimageuid") != null) + { + neon.closeImage(vars.getString("$sys.currentimage"), true); + neon.refresh(vars.get("$sys.ancestorimageuid")); + } +} +// Liefert die AffectedUsers +function getAffectedUsers( pEvent ) +{ + var affectedusers = vars.get("$image.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("$image.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("Jährliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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("Monatliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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++) + { + event[calendars.RRULE][0] += days[i]; + if (i+1 < count) + { + event[calendars.RRULE][0] += ","; + } + } + } +} +/***********************/ +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("Tägliche Serie nicht genauer spezifiziert. Ignoriere Serie.")); + } + 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