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

attendees partstat-update

parent f94214b3
No related branches found
No related tags found
No related merge requests found
Showing
with 193 additions and 54 deletions
......@@ -103,5 +103,36 @@
<name>TRANSPARENCY</name>
<fieldName>TRANSPARENCY</fieldName>
</entityField>
<entityActionGroup>
<name>PartStatActionGroup</name>
<children>
<entityActionField>
<name>accept</name>
<fieldType>ACTION</fieldType>
<onActionProcess>%aditoprj%/entity/Appointment_entity/entityfields/partstatactiongroup/children/accept/onActionProcess.js</onActionProcess>
<actionOrder v="0" />
<caption>zusagen</caption>
<icon>VAADIN:CHECK</icon>
<iconId>VAADIN:CHECK</iconId>
</entityActionField>
<entityActionField>
<name>decline</name>
<fieldType>ACTION</fieldType>
<description></description>
<onActionProcess>%aditoprj%/entity/Appointment_entity/entityfields/partstatactiongroup/children/decline/onActionProcess.js</onActionProcess>
<caption>absagen</caption>
<icon>VAADIN:CLOSE</icon>
<iconId>VAADIN:CLOSE</iconId>
</entityActionField>
<entityActionField>
<name>tentative</name>
<fieldType>ACTION</fieldType>
<onActionProcess>%aditoprj%/entity/Appointment_entity/entityfields/partstatactiongroup/children/tentative/onActionProcess.js</onActionProcess>
<caption>vielleicht</caption>
<icon>VAADIN:QUESTION</icon>
<iconId>VAADIN:QUESTION</iconId>
</entityActionField>
</children>
</entityActionGroup>
</entityFields>
</entity>
import("system.calendars");
import("system.vars");
import("system.text");
import("system.neon");
import("Appointment_lib");
var appointmentUtil = new AppointmentUtils();
var currentUserEncodedString = calendars.getCalendarUser(vars.getString("$sys.user"));
var currentUserDecodedArray = text.decodeMS(currentUserEncodedString);
var currentUserUri = currentUserDecodedArray[0];
var currentAttendees = vars.get("$field.ATTENDEES");
var updatedAttendees = appointmentUtil.setPartStat(currentUserUri, currentAttendees, "ACCEPTED");
appointmentUtil.sendExchangedAction(vars.get("$param.entry"));
neon.setFieldValue("$field.ATTENDEES", updatedAttendees);
import("system.calendars");
import("system.vars");
import("system.text");
import("system.neon");
import("Appointment_lib");
var appointmentUtil = new AppointmentUtils();
var currentUserEncodedString = calendars.getCalendarUser(vars.getString("$sys.user"));
var currentUserDecodedArray = text.decodeMS(currentUserEncodedString);
var currentUserUri = currentUserDecodedArray[0];
var currentAttendees = vars.get("$field.ATTENDEES");
var updatedAttendees = appointmentUtil.setPartStat(currentUserUri, currentAttendees, "DECLINED");
appointmentUtil.sendExchangedAction(vars.get("$param.entry"));
neon.setFieldValue("$field.ATTENDEES", updatedAttendees);
import("system.calendars");
import("system.vars");
import("system.text");
import("system.neon");
import("Appointment_lib");
var appointmentUtil = new AppointmentUtils();
var currentUserEncodedString = calendars.getCalendarUser(vars.getString("$sys.user"));
var currentUserDecodedArray = text.decodeMS(currentUserEncodedString);
var currentUserUri = currentUserDecodedArray[0];
var currentAttendees = vars.get("$field.ATTENDEES");
var updatedAttendees = appointmentUtil.setPartStat(currentUserUri, currentAttendees, "TENTATIVE");
appointmentUtil.sendExchangedAction(vars.get("$param.entry"));
neon.setFieldValue("$field.ATTENDEES", updatedAttendees);
\ No newline at end of file
......@@ -36,19 +36,19 @@ if (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;
// }
// }
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.TRANSPARENCY] = vars.get("$field.TRANSPARENCY");
event[calendars.CATEGORIES] = vars.get("$field.CATEGORIES");
//calcrecurrence(event);
//if (event[calendars.RRULE] != undefined) recurrencend(event);
......@@ -61,40 +61,6 @@ ok = true;
// 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()
{
......
......@@ -11,9 +11,6 @@ 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"))
......@@ -39,8 +36,8 @@ if(vars.exists("param.entry"))
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;
event[calendars.AFFECTEDUSERS] = vars.get("$field.ATTENDEES");
event[calendars.TRANSPARENCY] = vars.get("$field.TRANSPARENCY");
var hasReminder = vars.get("$field.REMINDER_CHECK");
if (hasReminder == "true")
{
......@@ -63,14 +60,13 @@ if(vars.exists("param.entry"))
// event[calendars.REMINDER_DURATION] = reminder_duration;
// }
// }
}
event[calendars.TRANSPARENCY] = vars.get("$field.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);
......@@ -131,7 +127,7 @@ function isWriteable(user, writeable)
{
for (var i = 0; i < writeable.length; i++)
{
if (writeable[i][0] == calendars.getCalendarUser(user))
if (writeable[i][0] == calendars.getCalendarUser(user))
return true;
}
return false;
......
......@@ -21,6 +21,7 @@
<categoriesField>CATEGORIES</categoriesField>
<alldayField>ALLDAY</alldayField>
<transparencyField>TRANSPARENCY</transparencyField>
<favoriteActionGroup1>PartStatActionGroup</favoriteActionGroup1>
<entityField>#ENTITY</entityField>
</appointmentEditViewTemplate>
</children>
......
......@@ -12,12 +12,16 @@
<name>AppointmentPreviewTemplate</name>
<summaryField>SUMMARY</summaryField>
<descriptionField>DESCRIPTION</descriptionField>
<beginField>BEGIN</beginField>
<endField>END</endField>
<periodField>STARTEND</periodField>
<attendeesField>ATTENDEES</attendeesField>
<privateField>CLASSIFICATION</privateField>
<transparencyField>TRANSPARENCY</transparencyField>
<statusField>STATUS</statusField>
<locationField>LOCATION</locationField>
<categoriesField>CATEGORIES</categoriesField>
<favoriteActionGroup1>PartStatActionGroup</favoriteActionGroup1>
<entityField>#ENTITY</entityField>
</appointmentPreviewViewTemplate>
</children>
......
......@@ -2,7 +2,7 @@
<preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.0.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.0.1">
<name>_____PREFERENCES_PROJECT</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<projectName>xRM-Basic</projectName>
<projectName>xRM-Basic 5</projectName>
<jditoMaxContentSize v="57671680" />
<calendarCategoriesEvent>
<entry>
......
<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.1.7">
<name>Appointment_lib</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<process>%aditoprj%/process/Appointment_lib/process.js</process>
</process>
import("system.neon");
import("system.logging");
import("system.text");
function AppointmentUtils()
{
/**
* Sets the partstat of the current users as given param state
* currentUserUri: string currentUserUri
* attendees: MSencoded calendarusers
* state: sets partstat
*/
this.setPartStat = function (currentUserUri, attendees, newState)
{
attendeesDecodedArray = text.decodeMS(attendees);
for(var i = 0; i < attendeesDecodedArray.length; i++)
{
var decoded = text.decodeMS(attendeesDecodedArray[i])
if(decoded[0] == currentUserUri)
{
var updated = new Array();
var isSet = false;
for (var j = 0; j < decoded.length; j++)
{
if (decoded[j].substr(0, 9) == "PARTSTAT:")
{
updated.push("PARTSTAT:" + newState);
isSet = true;
}
else
{
updated.push(decoded[j])
}
}
if (!isSet)
{
updated.push("PARTSTAT:" + newState);
}
// Updaten Attendees
var newAttendees = new Array();
for (var x = 0; x < attendeesDecodedArray.length; x++)
{
if (text.decodeMS(attendeesDecodedArray[x])[0] == currentUserUri)
{
newAttendees.push(text.encodeMS( updated))
}
else
{
newAttendees.push(attendeesDecodedArray[x])
}
}
break;
}
}
return text.encodeMS(newAttendees);
}
this.sendExchangedAction = function(event)
{
if( calendars.getBackendType() == calendars.BACKEND_EXCHANGEWS )
{
event["X-ADITO-STATUSACTION"] = "ACCEPT"; // "ACCEPT", "DECLINE", ""
event[calendars.AFFECTEDUSERS] = "";
calendars.updateEntry(event);
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.1.7">
<name>autostartNeon</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<process>%aditoprj%/process/autostartNeon/process.js</process>
</process>
import("system.calendars")
var users = ["Admin", "Birgit Leicht", "John Doe"]
calendars.addPermissions(users, calendars.VEVENT, ["READ", "WRITE"], null, false, calendars.SORTSTRATEGY_NATURAL);
\ 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