diff --git a/aleksis/apps/chronos/frontend/components/Timetable.vue b/aleksis/apps/chronos/frontend/components/Timetable.vue index 3a7471f6210136eeb59d4aa81f8fa061c0c3c56f..e7d7f47bd9eb59d5c7bc5f78157a23665e73dc2f 100644 --- a/aleksis/apps/chronos/frontend/components/Timetable.vue +++ b/aleksis/apps/chronos/frontend/components/Timetable.vue @@ -1,20 +1,14 @@ <script> import { gqlAvailableTimetables } from "./timetables.graphql"; import NoTimetableCard from "./NoTimetableCard.vue"; +import CalendarWithControls from "aleksis.core/components/calendar/CalendarWithControls.vue"; export default { name: "Timetable", - components: { NoTimetableCard }, + components: { NoTimetableCard, CalendarWithControls }, apollo: { availableTimetables: { query: gqlAvailableTimetables, - result(data) { - console.log( - data.data.availableTimetables.map((a) => { - return a.id + a.name; - }) - ); - }, }, }, data() { @@ -107,7 +101,7 @@ export default { <template> <div> <v-row> - <v-col cols="3"> + <v-col cols="2"> <v-card> <v-card-text class="mb-0"> <!-- Search field for timetables --> @@ -178,7 +172,7 @@ export default { </v-data-iterator> </v-card> </v-col> - <v-col cols="9" class="full-height"> + <v-col cols="10" class="full-height"> <!-- No timetable card--> <no-timetable-card v-if="selectedFull == null" /> @@ -211,6 +205,10 @@ export default { </v-btn> </div> </div> + <calendar-with-controls + :calendar-feeds="[{ name: 'lesson' }]" + :params="{ type: selectedFull.type, id: selectedFull.objId }" + /> </v-card> </v-col> </v-row> 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 7448d65cbd3f83b5161d08c4a008009920857a32..93f11a92a7a5ad93a9a3f80c4b4e1393b7f63bf6 100644 --- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue +++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue @@ -48,7 +48,7 @@ </v-list-item-icon> <v-list-item-content> <v-list-item-title> - <span v-if="teachers.length === 0">{{ + <span v-if="teachers.length === 0" class="body-2 text--secondary">{{ $t("chronos.event.no_teacher") }}</span> <lesson-related-object-chip diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 47cbd7ba588faaf026473662319dab68c92d021c..7cc450ef1af44b75c51bb1315206f5487f8a103e 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1582,9 +1582,38 @@ class LessonEvent(CalendarEvent): } @classmethod - def get_objects(cls, request) -> Iterable: + def get_objects(cls, request, params=None) -> Iterable: """Return all objects that should be included in the calendar.""" - objs = super().get_objects(request) + objs = super().get_objects(request, params) + print(params) + if params: + obj_id = int(params.get("id", 0)) + type = params.get("type", None) + print(obj_id, type) + + if type and obj_id: + if type == "TEACHER": + amended = objs.filter( + Q(amended_by__isnull=False) & (Q(teachers=obj_id)) + ).values_list("amended_by__pk", flat=True) + return objs.filter(Q(teachers=obj_id) | Q(pk__in=amended)).distinct() + elif type == "GROUP": + amended = objs.filter( + Q(amended_by__isnull=False) & (Q(groups=obj_id)) + ).values_list("amended_by__pk", flat=True) + print( + objs.filter( + Q(groups=obj_id) | Q(groups__parent_groups=obj_id) | Q(pk__in=amended) + ).distinct() + ) + return objs.filter( + Q(groups=obj_id) | Q(groups__parent_groups=obj_id) | Q(pk__in=amended) + ).distinct() + elif type == "ROOM": + amended = objs.filter( + Q(amended_by__isnull=False) & (Q(roms=obj_id)) + ).values_list("amended_by__pk", flat=True) + return objs.filter(Q(rooms=obj_id) | Q(pk__in=amended)).distinct() amended = objs.filter( Q(amended_by__isnull=False) & (Q(teachers=request.user.person) | Q(groups__members=request.user.person))