Skip to content
Snippets Groups Projects
Commit 7ee1d096 authored by Andreas Schindlbeck's avatar Andreas Schindlbeck
Browse files

#1035776 Serie änderbar + Calendar fixes

parent b6f7d944
No related branches found
No related tags found
No related merge requests found
......@@ -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>
......
......@@ -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
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
......@@ -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") != "") {
......
......@@ -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";
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment