diff --git a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue index a6ae5cfa7fa958b6177889d570eeb01382342090..3bdd8ab8daa347c1c6156593a58690a2a71eb1d5 100644 --- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue +++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue @@ -237,8 +237,8 @@ export default { return { ...item, amends: this.selectedEvent.meta.id, - datetimeStart: this.selectedEvent.startDateTime.toISO(), - datetimeEnd: this.selectedEvent.endDateTime.toISO(), + datetimeStart: this.selectedEvent.startDateTime.toUTC().toISO(), + datetimeEnd: this.selectedEvent.endDateTime.toUTC().toISO(), }; }, transformPatchData(item) { diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index 86c32376280fa4f6193375282d3727b2226ab0a4..bdfe3ded908f1001f0ec13843ea3d2484e642476 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -57,7 +57,31 @@ class LessonEventType(DjangoObjectType): ) -class AmendLessonCreateMutation(DjangoCreateMutation): +class DatetimeTimezoneMixin: + """Handle datetimes for mutations with CalendarEvent objects. + + Since the client sends timezone information as ISO string + which only includes an offset (+00:00 UTC). Because an offset + is no valid timezone, we set UTC as timezone directly. + """ + + @classmethod + def handle_datetime_start(cls, value, name, info) -> int: + value = value.replace(tzinfo=timezone.utc) + return value + + @classmethod + def handle_datetime_end(cls, value, name, info) -> int: + value = value.replace(tzinfo=timezone.utc) + return value + + @classmethod + def before_save(cls, root, info, input, obj): + obj.timezone = obj.amends.timezone + return obj + + +class AmendLessonCreateMutation(DatetimeTimezoneMixin, DjangoCreateMutation): class Meta: model = LessonEvent permissions = ("chronos.edit_substitution_rule",) @@ -74,14 +98,13 @@ class AmendLessonCreateMutation(DjangoCreateMutation): ) -class AmendLessonPatchMutation(DjangoPatchMutation): +class AmendLessonPatchMutation(DatetimeTimezoneMixin, DjangoPatchMutation): class Meta: model = LessonEvent permissions = ("chronos.edit_substitution_rule",) only_fields = ("subject", "teachers", "groups", "rooms", "cancelled", "comment") - class TimetableType(graphene.Enum): TEACHER = "teacher" GROUP = "group"