diff --git a/aleksis/apps/alsijil/frontend/components/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/Coursebook.vue index 9efbcfa07b2576bcb739ead07c0a405fdfc21afc..961367a41396c7ee6f82b86d45190ea643db68b8 100644 --- a/aleksis/apps/alsijil/frontend/components/Coursebook.vue +++ b/aleksis/apps/alsijil/frontend/components/Coursebook.vue @@ -43,11 +43,16 @@ export default { props: { // Either as props OR route params // TODO: Remove default? - courseId: { + objId: { type: [Number, String], required: false, default: 0, }, + objType: { + type: String, + required: false, + default: "group", + }, // Next two in ISODate dateStart: { type: String, @@ -69,7 +74,8 @@ export default { gqlQueryArgs() { return { // Assure courseId is a number - courseId: Number(this.courseId), + objId: Number(this.objId), + objType: this.objType.toUpperCase(), dateStart: this.dateStart, dateEnd: this.dateEnd, }; diff --git a/aleksis/apps/alsijil/frontend/components/coursebook.graphql b/aleksis/apps/alsijil/frontend/components/coursebook.graphql index 2986bf96b5df99c937835a2a0102eba4e35f0d28..e2fb931a30146009d288086ca8cc3ac772af0e4b 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook.graphql @@ -1,5 +1,5 @@ -query gqlDocumentationsForCoursebook($courseId: ID!, $dateStart: Date!, $dateEnd: Date!) { - items: documentationsForCoursebook(courseId: $courseId, dateStart: $dateStart, dateEnd: $dateEnd) { +query gqlDocumentationsForCoursebook($objId: ID!, $objType: String!, $dateStart: Date!, $dateEnd: Date!) { + items: documentationsForCoursebook(objId: $objId, objType: $objType, dateStart: $dateStart, dateEnd: $dateEnd) { id course { id diff --git a/aleksis/apps/alsijil/frontend/index.js b/aleksis/apps/alsijil/frontend/index.js index fe62f3a331a29295380d5e33fd235364a978585c..aff43c39a20e2e398ba0b1a5542ed833a5af6a9a 100644 --- a/aleksis/apps/alsijil/frontend/index.js +++ b/aleksis/apps/alsijil/frontend/index.js @@ -394,19 +394,20 @@ export default { }, }, { - path: "coursebook/:courseId(\\d+)/", + path: "coursebook/:objType(group|course|teacher)/:objId(\\d+)/", component: () => import("./components/Coursebook.vue"), redirect: to => { console.log('redirect to', to); - return { name: "alsijil.coursebook_by_course_id_and_date", + return { name: "alsijil.coursebook_by_obj_id_and_date", params: { - courseId: to.params.courseId, + objType: to.params.objType, + objId: to.params.objId, dateStart: DateTime.now().toISODate(), dateEnd: DateTime.now().plus({ weeks: 1 }).toISODate(), }, }; }, - name: "alsijil.coursebook_by_course_id", + name: "alsijil.coursebook_by_obj_id", props: true, meta: { inMenu: true, diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index e325627b6895dcfa16a040eea9ed6c1b4b468e36..c407a6eff1a0ca6d9def074301bbd69cb0491efe 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -23,7 +23,8 @@ class Query(graphene.ObjectType): ) documentations_for_coursebook = FilterOrderList( DocumentationType, - course_id = graphene.ID(required=True), + obj_type = graphene.String(required=True), + obj_id = graphene.ID(required=True), date_start=graphene.Date(required=True), date_end=graphene.Date(required=True), ) @@ -34,12 +35,11 @@ class Query(graphene.ObjectType): ) return documentations - def resolve_documentations_for_coursebook(root, info, course_id, date_start, date_end, **kwargs): + def resolve_documentations_for_coursebook(root, info, obj_type, obj_id, date_start, date_end, **kwargs): datetime_start = datetime.combine(date_start, datetime.min.time()) datetime_end = datetime.combine(date_end, datetime.max.time()) - # TODO: later on, allow getting documentations for other types than courses, e.g. groups or persons - return Documentation.get_for_coursebook("COURSE", course_id, datetime_start, datetime_end, info.context) + return Documentation.get_for_coursebook(obj_type, obj_id, datetime_start, datetime_end, info.context) class Mutation(graphene.ObjectType):