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

Allow assigning subjects to supervisions

parent fcf0d1f6
No related branches found
No related tags found
1 merge request!2Resolve "Frontend for Models"
<script setup>
import CreateSubject from "aleksis.apps.cursus/components/CreateSubject.vue";
import ForeignKeyField from "aleksis.core/components/generic/forms/ForeignKeyField.vue";
import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";
import InlineCRUDList from "aleksis.core/components/generic/InlineCRUDList.vue";
import WeekDayField from "aleksis.core/components/generic/forms/WeekDayField.vue";
import TimeGridField from "../validity_range/TimeGridField.vue";
......@@ -93,6 +96,29 @@ import TimeGridField from "../validity_range/TimeGridField.vue";
</div>
</template>
<template #subject="{ item }">
<subject-chip v-if="item.subject" :subject="item.subject" />
</template>
<!-- eslint-disable-next-line vue/valid-v-slot -->
<template #subject.field="{ attrs, on }">
<foreign-key-field
v-bind="attrs"
v-on="on"
:fields="subject.fields"
:default-item="subject.defaultItem"
:gql-query="subject.gqlQuery"
:gql-patch-mutation="{}"
:gql-create-mutation="subject.gqlCreateMutation"
:get-create-data="subject.transformCreateData"
create-item-i18n-key="cursus.subject.create"
return-object
>
<template #createComponent="{ attrs, on }">
<create-subject v-bind="attrs" v-on="on"></create-subject>
</template>
</foreign-key-field>
</template>
<!--<template #filters="{ attrs, on }">-->
<!-- <time-grid-field-->
<!-- outlined-->
......@@ -118,6 +144,7 @@ import {
import { gqlTeachers } from "../helper.graphql";
import { rooms } from "aleksis.core/components/room/room.graphql";
import { breakSlots } from "../breaks_and_slots/break.graphql";
import { subjects, createSubject } from "aleksis.apps.cursus/components/subject.graphql";
import { RRule } from "rrule";
......@@ -138,6 +165,10 @@ export default {
text: this.$t("lesrooster.supervision.teachers"),
value: "teachers",
},
{
text: this.$t("lesrooster.supervision.subject"),
value: "subject",
},
],
i18nKey: "lesrooster.supervision",
createItemI18nKey: "lesrooster.supervision.create_supervision",
......@@ -151,7 +182,52 @@ export default {
teachers: [],
rooms: [],
},
required: [(value) => !!value || this.$t("forms.errors.required")],
subject: {
gqlQuery: subjects,
gqlCreateMutation: createSubject,
transformCreateData(item) {
return { ...item, parent: item.parent?.id };
},
defaultItem: {
name: "",
shortName: "",
parent: null,
colourFg: "",
colourBg: "",
},
fields: [
{
text: this.$t("cursus.subject.fields.name"),
value: "name",
},
{
text: this.$t("cursus.subject.fields.short_name"),
value: "shortName",
},
{
text: this.$t("cursus.subject.fields.parent"),
value: "parent",
},
{
text: this.$t("cursus.subject.fields.colour_fg"),
value: "colourFg",
},
{
text: this.$t("cursus.subject.fields.colour_bg"),
value: "colourBg",
},
{
text: this.$t("cursus.subject.fields.teachers"),
value: "teachers",
},
],
},
rules: {
required: [(value) => !!value || this.$t("forms.errors.required")],
subject: [
(subject) => !!subject || this.$t("cursus.errors.subject_required"),
],
},
};
},
apollo: {
......
......@@ -9,6 +9,12 @@ fragment supervisionFields on SupervisionType {
id
fullName
}
subject {
id
name
colourFg
colourBg
}
breakSlot {
id
name
......
......@@ -126,7 +126,8 @@
"create_supervision": "Aufsicht erstellen",
"break_slot": "Pause",
"rooms": "Räume",
"teachers": "Lehrkräfte"
"teachers": "Lehrkräfte",
"subject": "Fach"
}
},
"actions": {
......
......@@ -126,7 +126,8 @@
"create_supervision": "Create supervision",
"break_slot": "Break",
"rooms": "Rooms",
"teachers": "Teachers"
"teachers": "Teachers",
"subject": "Subject"
}
},
"actions": {
......
# Generated by Django 4.2.4 on 2023-09-13 18:50
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("cursus", "0001_initial"),
("lesrooster", "0011_alter_lesroosterglobalpermissions_options"),
]
operations = [
migrations.AddField(
model_name="supervision",
name="subject",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="lr_supervisions",
to="cursus.subject",
verbose_name="Subject",
),
),
migrations.AddField(
model_name="supervisionsubstitution",
name="subject",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="lr_supervision_substitutions",
to="cursus.subject",
verbose_name="Subject",
),
),
]
......@@ -393,6 +393,14 @@ class Supervision(TeacherPropertiesMixin, RoomPropertiesMixin, ExtensibleModel):
verbose_name=_("Break Slot"),
related_name="lr_supervisions",
)
subject = models.ForeignKey(
Subject,
on_delete=models.CASCADE,
verbose_name=_("Subject"),
related_name="lr_supervisions",
blank=True,
null=True,
)
# Recurrence rules allow to define a series of supervisions
# Common examples are weekly or every second week
......@@ -431,6 +439,7 @@ class Supervision(TeacherPropertiesMixin, RoomPropertiesMixin, ExtensibleModel):
supervision_event.datetime_start = datetime_start
supervision_event.datetime_end = datetime_end
supervision_event.subject = self.subject
supervision_event.published = self.break_slot.time_grid.validity_range.published
if self.recurrence:
......@@ -589,6 +598,14 @@ class SupervisionSubstitution(TeacherPropertiesMixin, ExtensibleModel):
related_name="lr_supervision_substitutions",
blank=True,
)
subject = models.ForeignKey(
Subject,
on_delete=models.CASCADE,
verbose_name=_("Subject"),
related_name="lr_supervision_substitutions",
blank=True,
null=True,
)
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled?"))
......@@ -623,6 +640,7 @@ class SupervisionSubstitution(TeacherPropertiesMixin, ExtensibleModel):
supervision_event.datetime_end = self.supervision.break_slot.get_datetime_end(week)
supervision_event.cancelled = self.cancelled
supervision_event.comment = self.comment
supervision_event.subject = self.subject
supervision_event.published = self.supervision.break_slot.time_grid.validity_range.published
supervision_event.save()
......
......@@ -22,6 +22,7 @@ supervision_filters = {
"id": ["exact"],
"rooms": ["in"],
"teachers": ["in"],
"subject": ["exact"],
"break_slot": ["exact"],
"break_slot__time_grid": ["exact"],
}
......@@ -36,6 +37,7 @@ class SupervisionType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType)
"id",
"rooms",
"teachers",
"subject",
"break_slot",
)
filter_fields = supervision_filters
......@@ -59,6 +61,7 @@ class SupervisionCreateMutation(DjangoCreateMutation):
"id",
"rooms",
"teachers",
"subject",
"break_slot",
"recurrence",
)
......@@ -87,6 +90,7 @@ class SupervisionBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchM
"id",
"rooms",
"teachers",
"subject",
"break_slot",
"recurrence",
)
......
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