Skip to content
Snippets Groups Projects
Commit 9ff315e4 authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Introduce new URL scheme with my/all filtering

parent afa83852
No related branches found
No related tags found
2 merge requests!352Draft: Resolve "Add dialog with each lesson's students",!350Resolve "Add simple course book list"
Pipeline #171094 failed
......@@ -19,6 +19,13 @@
hide-details
:loading="selectLoading"
@input="changeSelection"
@click:clear="changeSelection"
/>
<v-switch
:loading="selectLoading"
:label="$t('alsijil.coursebook.filter.own')"
:input-value="filterType === 'my'"
@change="changeSelection({ filterType: $event ? 'my' : 'all', type: objType, id: objId })"
/>
</template>
<template #default="{ items }">
......@@ -98,15 +105,19 @@ export default {
props: {
// Either as props OR route params
// TODO: Remove default?
filterType: {
type: String,
required: true,
},
objId: {
type: [Number, String],
required: false,
default: 0,
default: null,
},
objType: {
type: String,
required: false,
default: "group",
default: null,
},
// Next two in ISODate
dateStart: {
......@@ -141,8 +152,9 @@ export default {
gqlQueryArgs() {
return {
// Assure courseId is a number
objId: Number(this.objId),
objType: this.objType.toUpperCase(),
own: this.filterType === "all" ? false : true,
objId: this.objId ? Number(this.objId) : null,
objType: this.objType?.toUpperCase(),
dateStart: this.dateStart,
dateEnd: this.dateEnd,
};
......@@ -163,8 +175,9 @@ export default {
methods: {
changeSelection(selection) {
this.$router.push({
name: "alsijil.coursebook_by_obj_id_and_date",
name: "alsijil.coursebook_by_type_and_date",
params: {
filterType: selection.filterType ? selection.filterType : this.filterType,
objType: selection.type,
objId: selection.id,
dateStart: this.dateStart,
......
......@@ -17,12 +17,14 @@ query coursesOfTeacher {
}
query documentationsForCoursebook(
$objId: ID!
$objType: String!
$own: Boolean!
$objId: ID
$objType: String
$dateStart: Date!
$dateEnd: Date!
) {
items: documentationsForCoursebook(
own: $own
objId: $objId
objType: $objType
dateStart: $dateStart
......
......@@ -387,21 +387,19 @@ export default {
},
},
{
path: "coursebook/:objType(group|course|teacher)/:objId(\\d+)/",
path: "coursebook/",
component: () => import("./components/Coursebook.vue"),
redirect: (to) => {
console.log("redirect to", to);
return {
name: "alsijil.coursebook_by_obj_id_and_date",
name: "alsijil.coursebook_by_type_and_date",
params: {
objType: to.params.objType,
objId: to.params.objId,
dateStart: DateTime.now().toISODate(),
dateEnd: DateTime.now().plus({ weeks: 1 }).toISODate(),
filterType: "my",
},
};
},
name: "alsijil.coursebook_by_obj_id",
name: "alsijil.coursebook",
props: true,
meta: {
inMenu: true,
......@@ -413,9 +411,9 @@ export default {
},
children: [
{
path: ":dateStart(\\d\\d\\d\\d-\\d\\d-\\d\\d)/:dateEnd(\\d\\d\\d\\d-\\d\\d-\\d\\d)/",
path: ":dateStart(\\d\\d\\d\\d-\\d\\d-\\d\\d)/:dateEnd(\\d\\d\\d\\d-\\d\\d-\\d\\d)/:filterType(my|all)/:objType(group|course|teacher)?/:objId(\\d+)?/",
component: () => import("./components/Coursebook.vue"),
name: "alsijil.coursebook_by_obj_id_and_date",
name: "alsijil.coursebook_by_type_and_date",
meta: {
titleKey: "alsijil.coursebook.menu_title",
toolbarTitle: "alsijil.coursebook.menu_title",
......
......@@ -47,6 +47,9 @@
"value": "Gruppennotiz: {groupNote}",
"empty": "Keine Gruppennotiz"
}
},
"filter": {
"own": "Nur eigene Stunden anzeigen"
}
}
}
......
......@@ -47,6 +47,9 @@
"value": "Group note: {groupNote}",
"empty": "No group note"
}
},
"filter": {
"own": "Only show own lessons"
}
}
}
......
......@@ -518,11 +518,12 @@ class Documentation(CalendarEvent):
@classmethod
def get_for_coursebook(
cls,
obj_type: str,
obj_id: str,
own: bool,
date_start: datetime,
date_end: datetime,
request: HttpRequest,
obj_type: Optional[str],
obj_id: Optional[str],
) -> list:
"""Get all the documentations for an object and a time frame.
......@@ -530,15 +531,21 @@ class Documentation(CalendarEvent):
"""
# 1. Find all LessonEvents for all Lessons of this Course in this date range
event_params = {
"own": own,
"not_amended": True,
}
if obj_type is not None and obj_id is not None:
event_params.update({
"type": obj_type,
"id": obj_id,
})
events = LessonEvent.get_single_events(
date_start,
date_end,
request,
{
"type": obj_type,
"id": obj_id,
"not_amended": True,
},
event_params,
with_reference_object=True,
)
# (1.5 filter them by permissions)
......
......@@ -26,8 +26,9 @@ class Query(graphene.ObjectType):
)
documentations_for_coursebook = FilterOrderList(
DocumentationType,
obj_type=graphene.String(required=True),
obj_id=graphene.ID(required=True),
own=graphene.Boolean(required=True),
obj_type=graphene.String(required=False),
obj_id=graphene.ID(required=False),
date_start=graphene.Date(required=True),
date_end=graphene.Date(required=True),
)
......@@ -39,7 +40,7 @@ class Query(graphene.ObjectType):
return documentations
def resolve_documentations_for_coursebook(
root, info, obj_type, obj_id, date_start, date_end, **kwargs
root, info, own, date_start, date_end, obj_type=None, obj_id=None, **kwargs
):
datetime_start = datetime.combine(date_start, datetime.min.time())
datetime_end = datetime.combine(date_end, datetime.max.time())
......@@ -67,7 +68,7 @@ class Query(graphene.ObjectType):
raise PermissionDenied()
return Documentation.get_for_coursebook(
obj_type, obj_id, datetime_start, datetime_end, info.context
own, datetime_start, datetime_end, info.context, obj_type, obj_id
)
......
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