diff --git a/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.graphql b/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.graphql index 9e9c68b020425ab906eeec3b62895757e3b3895e..aecf2aa39d7497f46038e8cb45303950722317be 100644 --- a/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.graphql +++ b/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.graphql @@ -37,6 +37,10 @@ query CourseBook($lessonId: ID!) { week lessonPeriod { id + period { + id + period + } } event { id diff --git a/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.vue b/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.vue index 879ffd1cd06a437c46cf421f0db36a2622af1d7e..f4411f02a6f00285929b3bf20456f79770451788 100644 --- a/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.vue +++ b/aleksis/apps/alsijil/assets/components/coursebook/CourseBook.vue @@ -13,13 +13,13 @@ <v-subheader>{{ data.lesson.subject.name }}</v-subheader> <v-row> <v-col cols="12"> - <lesson-documentations-week - :lessonDocumentations="data.lessonDocumentations" - :plannedLessonperiodsDatetimes="data.lesson.plannedLessonperiodsDatetimes" + <lesson-documentations + :lesson-documentations="data.lessonDocumentations" + :planned-lesson-periods-date-times="data.lesson.plannedLessonperiodsDatetimes" :groups="data.lesson.groups" - :excuseTypes="data.excuseTypes" - :extraMarks="data.extraMarks" - :documentLessonTopicsByWeek="documentlessontopicsbyweek" + :excuse-types="data.excuseTypes" + :extra-marks="data.extraMarks" + :save-lesson-documentations-per-week="saveLessonDocumentationsPerWeek" /> </v-col> </v-row> @@ -40,15 +40,13 @@ import {CHANGES, SAVED, UPDATING} from "../../UpdateStatuses.js"; import UpdateIndicator from "./UpdateIndicator.vue"; import LessonDocumentations from "./LessonDocumentations.vue"; -import LessonDocumentationsWeek from "./LessonDocumentationsWeek.vue"; export default { components: { UpdateIndicator, LessonDocumentations, - LessonDocumentationsWeek, }, - props: [ "documentlessontopicsbyweek" ], + props: [ "saveLessonDocumentationsPerWeek" ], methods: { processDataChange(event) { this.status = CHANGES; @@ -70,9 +68,6 @@ export default { this.status = SAVED; }, 500) }, - weekView() { - return this.documentlessontopicsbyweek === "True" - }, }, name: "course-book", data: () => { diff --git a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentation.vue b/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentation.vue index 0f86a96fa7e59dc5249a85994f2bb898034223a1..ceaa3a6aae5bf004938812c6b44730b9fe78d50d 100644 --- a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentation.vue +++ b/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentation.vue @@ -7,7 +7,13 @@ <template v-slot="{ mutate, loading, error }"> <v-card elevation="2" :loading="loading"> <v-form v-model="valid"> - <v-card-title> + <v-card-title v-if="saveLessonDocumentationsPerWeek === 'True'"> + <span + v-text="getWeekText(lessonDocumentationEdit)" + class="ma-1"> + </span> + </v-card-title> + <v-card-title v-else> <v-hover v-slot="{ hover }"> <div> <v-menu @@ -37,7 +43,7 @@ </v-menu> </div> </v-hover> - <v-hover v-slot="{ hover }"> + <v-hover v-slot="{ hover }" v-if="!(saveLessonDocumentationsPerWeek === 'True')"> <div> <v-menu offset-y> <template v-slot:activator="{ on, attrs }"> @@ -69,7 +75,7 @@ </v-card-title> <v-card-text> <v-row> - <v-col cols="12" md="8" lg="8"> + <v-col cols="12" md="12" lg="12"> <message-box type="error" v-if="error">Error updating data</message-box> <v-textarea name="input-7-1" @@ -97,7 +103,7 @@ v-model="lessonDocumentationEdit.groupNote" ></v-textarea> </v-col> - <v-col cols="12" md="4" lg="4"> + <v-col v-if="!(saveLessonDocumentationsPerWeek === 'True')" cols="12" md="4" lg="4"> Personal notes <personal-notes :lesson-documentation-id="lessonDocumentationEdit.id" @@ -138,7 +144,7 @@ import PersonalNotes from "./PersonalNotes.vue"; export default { components: {PersonalNotes}, - props: ["lessonDocumentationEdit", "groups", "excuseTypes", "extraMarks"], + props: ["lessonDocumentationEdit", "groups", "excuseTypes", "extraMarks", "saveLessonDocumentationsPerWeek", "getWeekText"], name: "lesson-documentation", data() { return { diff --git a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentations.vue b/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentations.vue index c89c3491e900c28f2f967edc24b2176afbbe84b5..a93707eafbb8a77c7651b5e2f7b290a704eb1b12 100644 --- a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentations.vue +++ b/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentations.vue @@ -7,10 +7,19 @@ <v-row> <v-col cols="6"> <v-select - :items="emptyLessonperiods" + v-if="saveLessonDocumentationsPerWeek === 'True'" + :items="emptyLessonPeriods" + label="Choose week" + :item-text="getWeekText" + item-value="datetimeStart" + v-model="selectedLessonPeriodDatetime" + ></v-select> + <v-select + v-else + :items="emptyLessonPeriods" label="Choose Lesson date" :item-text="getLessonText" - v-model="selectedLessonperiodDatetime" + v-model="selectedLessonPeriodDatetime" return-object ></v-select> </v-col> @@ -22,33 +31,57 @@ v-on="on" @click="createLessonDocumentation()" > - Create Lesson Documentation + {{ $root.django.gettext("Create lesson documentation") }} </v-btn> </v-col> </v-row> </template> <lesson-documentation - :lessonDocumentationEdit="lessonDocumentationEdit" + :lesson-documentation-edit="lessonDocumentationEdit" :groups="groups" :excuse-types="excuseTypes" :extra-marks="extraMarks" + :save-lesson-documentations-per-week="saveLessonDocumentationsPerWeek" + :get-week-text="getWeekText" @cancel-lesson-documentation-dialog="cancelDialog" /> </v-dialog> <v-data-table :headers="headers" - :items="lessonDocumentations" + :items="computedLessonDocumentations" @click:row="editLessonDocumentation" class="elevation-1" :expanded.sync="expanded" show-expand + multi-sort + :sort-by="['year','week']" + :sort-desc="[true, true]" > <template v-slot:item.period="{ item }"> - <span class="text-no-wrap">{{ item.date }} Period {{ item.period }}</span> + <span class="text-no-wrap">{{ (saveLessonDocumentationsPerWeek === "True") ? getWeekText(item) : getLessonText(item) }}</span> </template> <template v-slot:expanded-item="{ headers, item }"> <td :colspan="headers.length"> - <template v-for="personalNote in item.personalNotes"> + <template v-if="saveLessonDocumentationsPerWeek === 'True'" v-for="lessonDocumentation in item.documentations"> + <v-list-item> + <v-list-item-content> + <v-list-item-title>{{ getLessonText(lessonDocumentation) }}</v-list-item-title> + <v-list-item-action> + <personal-notes + :lesson-documentation-id="lessonDocumentation.id" + :groups="groups" + :excuse-types="excuseTypes" + :extra-marks="extraMarks" + + v-model="lessonDocumentation.personalNotes" + @change="$emit('change-personal-notes', $event)" + ></personal-notes> + </v-list-item-action> + </v-list-item-content> + </v-list-item> + <v-divider></v-divider> + </template> + <template v-else v-for="personalNote in item.personalNotes"> <!-- FIXME: Add edit and delete functionality to personal note chips--> <v-chip class="ma-1" v-if="personalNoteString(personalNote)"> {{ personalNote.person.fullName }}: {{ personalNoteString(personalNote) }} @@ -61,9 +94,10 @@ <script> import LessonDocumentation from "./LessonDocumentation.vue"; + import PersonalNotes from "./PersonalNotes.vue"; export default { - components: { LessonDocumentation }, - props: [ "lessonDocumentations","plannedLessonperiodsDatetimes", "groups", "excuseTypes", "extraMarks", "documentLessonTopicsByWeek" ], + components: {LessonDocumentation, PersonalNotes}, + props: [ "lessonDocumentations", "plannedLessonPeriodsDateTimes", "groups", "excuseTypes", "extraMarks", "saveLessonDocumentationsPerWeek" ], name: "lesson-documentations", data () { return { @@ -77,15 +111,62 @@ { text: "Personal notes", value: "data-table-expand" } ], lessonDocumentationEdit: {}, - selectedLessonperiodDatetime: {}, + selectedLessonPeriodDatetime: {}, recordedWeeks: [], } }, computed: { - emptyLessonperiods() { - let currentDatetime = new Date() - return this.plannedLessonperiodsDatetimes.filter(lp => new Date(lp.datetimeStart) > currentDatetime) + emptyLessonPeriods() { + if (this.saveLessonDocumentationsPerWeek === "True") { + let currentDatetime = new Date() + let weeks = {} + let lpdts = this.plannedLessonPeriodsDateTimes.filter(lp => new Date(lp.datetimeStart) > currentDatetime) + for (let ldIndex in lpdts) { + let ld = lpdts[ldIndex] + if (ld.week in weeks) { + weeks[ld.week]["planned"].push(ld) + } else { + weeks[ld.week] = { + "year": ld.year, + "week": ld.week, + "startDate": this.calculateStartDateOfCW(ld.year, ld.week), + "datetimeStart": ld.datetimeStart, + "lessonPeriod": ld.lessonPeriod, + "planned": [ld] + } + } + } + return Object.values(weeks) // FIXME sort by date + } else { + let currentDatetime = new Date() + return this.plannedLessonPeriodsDateTimes.filter(lp => new Date(lp.datetimeStart) > currentDatetime) + } }, + computedLessonDocumentations() { + if (this.saveLessonDocumentationsPerWeek === "True") { + let weeks = {} + for (let ldIndex in this.lessonDocumentations) { + let ld = this.lessonDocumentations[ldIndex] + if (ld.week in weeks) { + weeks[ld.week]["documentations"].push(ld) + } else { + weeks[ld.week] = { + "id": ld.id, + "startDate": this.calculateStartDateOfCW(ld.year, ld.week), + "year": ld.year, + "week": ld.week, + "topic": ld.topic, + "homework": ld.homework, + "groupNote": ld.groupNote, + "documentations": [ld] + } + } + } + return Object.values(weeks) + } else { + return this.lessonDocumentations + } + } }, methods: { cancelDialog() { @@ -93,12 +174,10 @@ this.lessonDocumentationEdit = {}; }, recordDocumentation(item) { - if (this.documentLessonTopicsByWeek === "True") { - if (this.recordedWeeks.includes(item.week)) { - return false - } - this.recordedWeeks.push(item.week) + if (this.recordedWeeks.includes(item.week)) { + return false } + this.recordedWeeks.push(item.week) return true }, async loadLessonDocumentation(item) { @@ -130,22 +209,47 @@ }, editLessonDocumentation(item) { - this.loadLessonDocumentation(item) + if (this.saveLessonDocumentationsPerWeek === "True") { + this.loadLessonDocumentation(item.documentations[0]) + } else { + this.loadLessonDocumentation(item) + } this.dialog = true }, createLessonDocumentation() { // FIXME: Update cache to show newly created LessonDocumentation in table - let lessonDocumentation = this.selectedLessonperiodDatetime + let lessonDocumentation = this.selectedLessonPeriodDatetime lessonDocumentation["event"] = null lessonDocumentation["extraLesson"] = null this.loadLessonDocumentation(lessonDocumentation) this.dialog = true }, + calculateStartDateOfCW(year, week){ + let ld_date = new Date(Date.UTC(year, 0, 1 + (week - 1) * 7)); + let dow = ld_date.getDay(); + let start_date = ld_date; + if (dow <= 4) + return start_date.setDate(ld_date.getDate() - ld_date.getDay() + 1) + else + return start_date.setDate(ld_date.getDate() + 8 - ld_date.getDay()) + }, + getLessonText(item) { - let date_obj = new Date(item.datetimeStart) - let period = item.lessonPeriod ? ", Period " + item.lessonPeriod.period.period : "" // FIXME: Cases without lessonPeriod - return date_obj.toLocaleDateString(this.$root.languageCode) + period + let date_obj = new Date(item.hasOwnProperty("datetimeStart") ? item.datetimeStart : item.date) + let period = item.lessonPeriod ? ", " + this.$root.django.gettext('period') + " " + item.lessonPeriod.period.period : "" // FIXME: Cases without lessonPeriod + return date_obj.toLocaleDateString(this.$root.languageCode) + period + }, + getWeekText(item) { + if (item.hasOwnProperty("startDate")) { + var start_date = new Date(item.startDate) + } else { + let lesson_date = new Date(item.date) + var start_date = new Date(((lesson_date.getDay() || 7) !== 1) ? lesson_date.setHours(-24 * (lesson_date.getDay() - 1)) : lesson_date) + } + let end_date = new Date(start_date) + end_date.setDate(end_date.getDate() + 7) + return start_date.toLocaleDateString(this.$root.languageCode) + " - " + end_date.toLocaleDateString(this.$root.languageCode) + ", " + this.$root.django.gettext('CW') + " " + item.week }, personalNoteString(personalNote) { let personalNoteString = ""; @@ -153,10 +257,10 @@ personalNoteString += personalNote.late + " min. "; } if (personalNote.absent) { - personalNoteString += "abwesend "; + personalNoteString += this.$root.django.gettext("abwesend") + " "; } if (personalNote.excused) { - personalNoteString += "entschuldigt "; + personalNoteString += this.$root.django.gettext("entschuldigt") + " "; } if (personalNote.excuseType) { personalNoteString += personalNote.excuseType.name; diff --git a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentationsWeek.vue b/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentationsWeek.vue deleted file mode 100644 index 73de93b4815833085a100538523913b01552e48a..0000000000000000000000000000000000000000 --- a/aleksis/apps/alsijil/assets/components/coursebook/LessonDocumentationsWeek.vue +++ /dev/null @@ -1,206 +0,0 @@ -<template><div> - <v-dialog - v-model="dialog" - max-width="800" - > - <template v-slot:activator="{ on, attrs }"> - <v-row> - <v-col cols="6"> - <v-select - :items="emptyLessonperiods" - label="Choose Lesson date" - :item-text="getLessonText" - v-model="selectedLessonperiodDatetime" - return-object - ></v-select> - </v-col> - <v-col> - <v-btn - color="primary" - dark - v-bind="attrs" - v-on="on" - @click="createLessonDocumentation()" - > - Create Lesson Documentation - </v-btn> - </v-col> - </v-row> - </template> - <lesson-documentation - :lessonDocumentationEdit="lessonDocumentationEdit" - :groups="groups" - :excuse-types="excuseTypes" - :extra-marks="extraMarks" - /> - </v-dialog> - <v-data-table - :headers="headers" - :items="lessonDocumentationGroups" - @click:row="editLessonDocumentation" - class="elevation-1" - :expanded.sync="expanded" - show-expand - > - <template v-slot:item.period="{ item }"> - <span class="text-no-wrap">{{ item.date }} Period {{ item.period }}</span> - </template> - <template v-slot:expanded-item="{ headers, item }"> - <td :colspan="headers.length" v-for="ld in item.documentations"> - <template v-for="personalNote in ld.personalNotes"> - <v-chip class="ma-1" close v-if="personalNoteString(personalNote)"> - {{ personalNote.person.fullName }}: {{ personalNoteString(personalNote) }} - </v-chip> - </template> - </td> - </template> -</v-data-table> -</div></template> - -<script> - import LessonDocumentation from "./LessonDocumentation.vue"; - export default { - components: { LessonDocumentation }, - props: [ "lessonDocumentations","plannedLessonperiodsDatetimes", "groups", "excuseTypes", "extraMarks" ], - name: "lesson-documentations", - data () { - return { - dialog: false, - expanded: [], - headers: [ - { text: "Period", value: "period" }, - { text: "Topic", value: "topic" }, - { text: "Homework", value: "homework" }, - { text: "Group note", value: "groupNote" }, - { text: "Personal notes", value: "data-table-expand" } - ], - lessonDocumentationEdit: {}, - selectedLessonperiodDatetime: {}, - recordedWeeks: [], - } - }, - computed: { - emptyLessonperiods() { - let currentDatetime = new Date() - let groups = {} - let lpdts = this.plannedLessonperiodsDatetimes.filter(lp => new Date(lp.datetimeStart > currentDatetime)) - for (let ldIndex in lpdts) { - let ld = lpdts[ldIndex] - if (ld.week in groups) { - groups[ld.week]["planned"].push(ld) - } else { - groups[ld.week] = { - "year": ld.year, - "week": ld.week, - "datetimeStart": ld.datetimeStart, - "lessonPeriod": ld.lessonPeriod, - "planned": [ld] - } - } - } - return Object.values(groups) // FIXME sort by date - }, - lessonDocumentationGroups() { - let groups = {} - for (let ldIndex in this.lessonDocumentations) { - let ld = this.lessonDocumentations[ldIndex] - if (ld.week in groups) { - groups[ld.week]["documentations"].push(ld) - } else { - groups[ld.week] = { - "id": ld.id, - "date": ld.date, - "period": ld.period, - "topic": ld.topic, - "homework": ld.homework, - "groupNote": ld.groupNote, - "documentations": [ld] - } - } - } - return Object.values(groups) - }, - }, - methods: { - recordDocumentation(item) { - if (this.recordedWeeks.includes(item.week)) { - return false - } - this.recordedWeeks.push(item.week) - return true - }, - async loadLessonDocumentation(item) { - const result = await this.$apollo.mutate({ - mutation: require("./LessonDocumentation.graphql"), - variables: { - year: item.year, - week: item.week, - lessonPeriodId: item.lessonPeriod ? item.lessonPeriod.id : null, - eventId: item.event ? item.event.id : null, - extraLessonId: item.extraLesson ? item.extraLesson.id : null, - }, - }) - let lessonDocumentation = result.data.updateOrCreateLessonDocumentation.lessonDocumentation - this.lessonDocumentationEdit = { - id: lessonDocumentation.id, - year: item.year, - week: item.week, - date: lessonDocumentation.date, - lessonPeriodId: item.lessonPeriod ? item.lessonPeriod.id : null, - eventId: item.event ? item.event.id : null, - extraLessonId: item.extraLesson ? item.extraLesson.id : null, - topic: lessonDocumentation.topic, - homework: lessonDocumentation.homework, - groupNote: lessonDocumentation.groupNote, - personalNotes: lessonDocumentation.personalNotes, - } - }, - - editLessonDocumentation(item) { - this.loadLessonDocumentation(item) - this.dialog = true - }, - - createLessonDocumentation() { // FIXME: Update cache to show newly created LessonDocumentation in table - let lessonDocumentation = this.selectedLessonperiodDatetime - lessonDocumentation["event"] = null - lessonDocumentation["extraLesson"] = null - this.loadLessonDocumentation(lessonDocumentation) - this.dialog = true - }, - - getLessonText(item) { - let date_obj = new Date(item.datetimeStart) - let period = item.lessonPeriod ? ", Period " + item.lessonPeriod.period.period : "" // FIXME: Cases without lessonPeriod - return date_obj.toLocaleDateString(this.$root.languageCode) + period - }, - personalNoteString(personalNote) { - let personalNoteString = ""; - if (personalNote.late > 0) { - personalNoteString += personalNote.late + " min. "; - } - if (personalNote.absent) { - personalNoteString += "abwesend "; - } - if (personalNote.excused) { - personalNoteString += "entschuldigt "; - } - if (personalNote.excuseType) { - personalNoteString += personalNote.excuseType.name; - } - if (personalNote.extraMarks.length > 0) { - personalNoteString += " ("; - personalNote.extraMarks.forEach(item => { - personalNoteString += item.name + ", "; - }); - personalNoteString = personalNoteString.substring(0, personalNoteString.length - 2); - personalNoteString += ") "; - } - if (personalNote.remarks) { - personalNoteString += "\"" + personalNote.remarks + "\" "; - } - return personalNoteString; - }, - } - } -</script> diff --git a/aleksis/apps/alsijil/assets/index.js b/aleksis/apps/alsijil/assets/index.js index b191fd63f5b0850df21a160eb85bfef2f244ab50..2030ee27683c60b07a77058b1b93e8c4ae716d69 100644 --- a/aleksis/apps/alsijil/assets/index.js +++ b/aleksis/apps/alsijil/assets/index.js @@ -1,3 +1,3 @@ import CourseBook from './components/coursebook/CourseBook.vue' -window.router.addRoute({ path: "/app/alsijil/coursebook/:lessonId", component: CourseBook }); +window.router.addRoute({ path: "/app/alsijil/coursebook/:lessonId", component: CourseBook, props: true }); diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index 4ef9b4e24e7315c75cd6106b72f3853410e9ef7b..3c5630cbfc1653db99107159e1b8834507a27a6d 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -47,7 +47,7 @@ class LessonDocumentationForm(forms.ModelForm): self.fields["homework"].label = _("Homework for the next lesson") if ( self.instance.lesson_period - and get_site_preferences()["alsijil__allow_carry_over_same_week"] + and get_site_preferences()["alsijil__save_lesson_documentations_by_week"] ): self.fields["carry_over_week"] = forms.BooleanField( label=_("Carry over data to all other lessons with the same subject in this week"), @@ -58,7 +58,7 @@ class LessonDocumentationForm(forms.ModelForm): def save(self, **kwargs): lesson_documentation = super(LessonDocumentationForm, self).save(commit=True) if ( - get_site_preferences()["alsijil__allow_carry_over_same_week"] + get_site_preferences()["alsijil__save_lesson_documentations_by_week"] and self.cleaned_data["carry_over_week"] and ( lesson_documentation.topic @@ -68,7 +68,7 @@ class LessonDocumentationForm(forms.ModelForm): and lesson_documentation.lesson_period ): lesson_documentation.carry_over_data( - LessonPeriod.objects.filter(lesson=lesson_documentation.lesson_period.lesson) + LessonPeriod.objects.filter(lesson=lesson_documentation.lesson_period.lesson), True ) diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index b504a294164a6388099148fda5149091767577a7..ed79ee912c0e581021be74c3505a7daed13cf2eb 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -347,11 +347,13 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel): homework = models.CharField(verbose_name=_("Homework"), max_length=200, blank=True) group_note = models.CharField(verbose_name=_("Group note"), max_length=200, blank=True) - def carry_over_data(self, all_periods_of_lesson: LessonPeriod): - """Carry over data to given periods in this lesson if data is not already set. + def carry_over_data(self, all_periods_of_lesson: LessonPeriod, force: bool): + """Carry over data to given periods in this lesson. + + Does overwrite existing data in case ``force`` is set to ``True``. Both forms of carrying over data can be deactivated using site preferences - ``alsijil__carry_over_next_periods`` and ``alsijil__allow_carry_over_same_week`` + ``alsijil__carry_over_next_periods`` and ``alsijil__save_lesson_documentations_by_week`` respectively. """ for period in all_periods_of_lesson: @@ -361,15 +363,15 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel): changed = False - if not lesson_documentation.topic: + if not lesson_documentation.topic or force: lesson_documentation.topic = self.topic changed = True - if not lesson_documentation.homework: + if not lesson_documentation.homework or force: lesson_documentation.homework = self.homework changed = True - if not lesson_documentation.group_note: + if not lesson_documentation.group_note or force: lesson_documentation.group_note = self.group_note changed = True @@ -390,7 +392,8 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel): LessonPeriod.objects.filter( lesson=self.lesson_period.lesson, period__weekday=self.lesson_period.period.weekday, - ) + ), + False ) super().save(*args, **kwargs) diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py index 634598b1efd054ad68d8a9ae644ab51d2340f479..014435f1b3072ab8804e2e57d1fdb6c7d135bca7 100644 --- a/aleksis/apps/alsijil/preferences.py +++ b/aleksis/apps/alsijil/preferences.py @@ -67,25 +67,11 @@ class CarryOverDataToNextPeriods(BooleanPreference): @site_preferences_registry.register -class AllowCarryOverLessonDocumentationToCurrentWeek(BooleanPreference): +class SaveLessonDocumentationsPerWeek(BooleanPreference): section = alsijil - name = "allow_carry_over_same_week" + name = "save_lesson_documentations_by_week" default = False - verbose_name = _( - "Allow carrying over data from any lesson period to all other lesson \ - periods with the same lesson and in the same week" - ) - help_text = _( - "This will carry over data only if the data in the aforementioned periods are empty." - ) - - -@site_preferences_registry.register -class DocumentLessonTopicsByWeek(BooleanPreference): - section = alsijil - name = "document_lesson_topics_by_week" - default = False - verbose_name = _("Document lesson topics per week instead of per lesson period") + verbose_name = _("Save lesson documentations per week instead of per lesson period") @site_preferences_registry.register diff --git a/aleksis/apps/alsijil/schema.py b/aleksis/apps/alsijil/schema.py index 8654967fe36a80cae721f7306dd8db9b82076db4..5864f7f02341f7dbb0837b27a5b225f9e579ffd9 100644 --- a/aleksis/apps/alsijil/schema.py +++ b/aleksis/apps/alsijil/schema.py @@ -114,7 +114,7 @@ class LessonDocumentationMutation(graphene.Mutation): lesson_documentation.save() if ( - get_site_preferences()["alsijil__document_lesson_topics_by_week"] + get_site_preferences()["alsijil__save_lesson_documentations_by_week"] and ( lesson_documentation.topic or lesson_documentation.homework @@ -123,7 +123,7 @@ class LessonDocumentationMutation(graphene.Mutation): and lesson_documentation.lesson_period ): lesson_documentation.carry_over_data( - LessonPeriod.objects.filter(lesson=lesson_documentation.lesson_period.lesson) + LessonPeriod.objects.filter(lesson=lesson_documentation.lesson_period.lesson), True ) return LessonDocumentationMutation(lesson_documentation=lesson_documentation) diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/coursebook.html b/aleksis/apps/alsijil/templates/alsijil/class_register/coursebook.html index b30133faa18b79bb0dbc7c489ba042c4d04b79ee..a670eb5d21ca03b7e444ce19782c14c2dc19b944 100644 --- a/aleksis/apps/alsijil/templates/alsijil/class_register/coursebook.html +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/coursebook.html @@ -9,7 +9,7 @@ {% endblock %} {% block browser_title %}{% trans "Coursebook" %} {{ lesson }}{% endblock %} {% block content %} -<router-view documentlessontopicsbyweek="{{ documentLessonTopicsByWeek }}"/><!-- FIXME --> +<router-view save-lesson-documentations-per-week={{ SITE_PREFERENCES.alsijil__save_lesson_documentations_by_week }} /> {% endblock %} {% block extra_body %} diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index cd27ebe15b56930fdaecbb74967dd741e781fea7..0f44426d1e4cd575455959a5e4f2688a83f2e7ec 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -1365,9 +1365,6 @@ class CoursebookView(DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context["documentLessonTopicsByWeek"] = get_site_preferences()[ - "alsijil__document_lesson_topics_by_week" - ] return context