Skip to content
Snippets Groups Projects
Commit 9e24f1ee authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch '351-not-storing-groups-for-documentations-is-kind-of-a-problem' into 'master'

Resolve "Not storing groups for documentations is kind of a problem"

Closes #351

See merge request !476
parents 400f4934 7faa1dfb
No related branches found
No related tags found
1 merge request!476Resolve "Not storing groups for documentations is kind of a problem"
Pipeline #195630 failed
Showing with 54 additions and 17 deletions
......@@ -20,9 +20,10 @@ import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.v
{{ $t("alsijil.coursebook.print.title") }}
</template>
<template #content>
{{ $t("alsijil.coursebook.print.groups") }}
<v-autocomplete
v-if="!group"
:items="availableGroups"
:label="$t('alsijil.coursebook.print.groups')"
item-text="name"
item-value="id"
:value="value"
......@@ -87,7 +88,16 @@ export default {
*/
availableGroups: {
type: Array,
required: true,
required: false,
default: () => [],
},
/**
* Set a group to use this dialog exclusively for
*/
group: {
type: Object,
required: false,
default: null,
},
/**
* Initially selected groups
......@@ -121,6 +131,9 @@ export default {
},
computed: {
selectedGroups() {
if (this.group) {
return [this.group.id];
}
if (this.currentGroupSelection.length == 0) {
return this.value.map((group) => group.id);
} else {
......
......@@ -10,6 +10,9 @@
:show-select="false"
@items="items = $event"
>
<template #additionalActions>
<coursebook-print-dialog :group="group" />
</template>
<template
v-for="(extraMark, index) in extraMarks"
#[`extraMarks.${index}.count`]="{ item }"
......@@ -67,7 +70,7 @@
:to="{
name: 'core.personById',
params: {
personId: item.person.id,
id: item.person.id,
},
hash: '#' + MODE.PARTICIPATIONS,
}"
......@@ -81,13 +84,14 @@ import groupOverviewTabMixin from "aleksis.core/mixins/groupOverviewTabMixin.js"
import CRUDList from "aleksis.core/components/generic/CRUDList.vue";
import PersonChip from "aleksis.core/components/person/PersonChip.vue";
import SecondaryActionButton from "aleksis.core/components/generic/buttons/SecondaryActionButton.vue";
import CoursebookPrintDialog from "../CoursebookPrintDialog.vue";
import AbsenceReasonChip from "aleksis.apps.kolego/components/AbsenceReasonChip.vue";
import ExtraMarkChip from "aleksis.apps.alsijil/components/extra_marks/ExtraMarkChip.vue";
import { statisticsByGroup } from "./statistics.graphql";
import { absenceReasons } from "../queries/absenceReasons.graphql";
import { extraMarks } from "../../extra_marks/extra_marks.graphql";
import { extraMarks } from "../queries/extraMarks.graphql";
import { MODE } from "./modes";
export default {
......@@ -99,6 +103,7 @@ export default {
ExtraMarkChip,
PersonChip,
SecondaryActionButton,
CoursebookPrintDialog,
},
data() {
return {
......
......@@ -179,6 +179,14 @@
<v-list-item-action
class="flex-row full-width justify-md-end ma-0 align-center fill-height"
>
<v-chip
color="warning"
class="mx-1"
v-if="!item.relatedDocumentation.amended"
>{{
$t("alsijil.coursebook.statistics.not_counted")
}}</v-chip
>
<!-- chips: absences & extraMarks -->
<absence-reason-chip
v-if="item.absenceReason"
......
......@@ -64,6 +64,7 @@ query participationsOfPerson($person: ID!) {
colourFg
colourBg
}
amended
}
canEdit
canDelete
......
<script>
import { extraMarks } from "./extra_marks.graphql";
import { extraMarksList } from "./extra_marks.graphql";
export default {
name: "ExtraMarkButtons",
......@@ -10,7 +10,7 @@ export default {
},
apollo: {
extraMarks: {
query: extraMarks,
query: extraMarksList,
update: (data) => data.items,
skip() {
return this.customExtraMarks.length > 0;
......
......@@ -82,7 +82,8 @@
"title": "Kursbuch · Statistiken · {fullName}"
},
"person_view_details": "Details",
"title_plural": "Statistiken"
"title_plural": "Statistiken",
"not_counted": "nicht gezählt"
},
"status": {
"available": "Kursbucheintrag vorhanden",
......
......@@ -85,7 +85,8 @@
"summary": "Summary"
},
"person_view_details": "Details",
"title_plural": "Statistics"
"title_plural": "Statistics",
"not_counted": "not counted"
},
"notes": {
"show_list": "List of participants",
......
......@@ -2,6 +2,7 @@ from django.db.models import FilteredRelation, Q, QuerySet, Value
from django.db.models.aggregates import Count, Sum
from django.utils.translation import gettext as _
from aleksis.apps.chronos.models import LessonEvent
from aleksis.apps.kolego.models import AbsenceReason
from aleksis.core.models import Group, Person, SchoolTerm
......@@ -137,13 +138,6 @@ def annotate_person_statistics_for_school_term(
datetime_end__date__lte=school_term.date_end,
)
if group:
documentations = documentations.filter(
pk__in=Documentation.objects.filter(course__groups=group)
.values_list("pk", flat=True)
.union(
Documentation.objects.filter(course__groups__parent_groups=group).values_list(
"pk", flat=True
)
)
)
lesson_events = LessonEvent.objects.filter(LessonEvent.objects.for_group_q(group))
documentations = documentations.filter(amends__in=lesson_events)
return annotate_person_statistics_from_documentations(persons, documentations)
......@@ -48,6 +48,7 @@ class DocumentationType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectTyp
course = graphene.Field(CourseType, required=False)
amends = graphene.Field(lambda: LessonEventType, required=False)
amended = graphene.Boolean(required=False)
subject = graphene.Field(SubjectType, required=False)
participations = graphene.List(ParticipationStatusType, required=False)
......@@ -66,6 +67,11 @@ class DocumentationType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectTyp
return root._amends_prefetched
return root.amends
@staticmethod
@bypass_get_queryset
def resolve_amended(root: Documentation, info, **kwargs):
return root.amends_id is not None
@staticmethod
@bypass_get_queryset
def resolve_teachers(root: Documentation, info, **kwargs):
......
......@@ -7,6 +7,7 @@ from django.utils.translation import gettext as _
from celery.result import allow_join_result
from celery.states import SUCCESS
from aleksis.apps.chronos.models import LessonEvent
from aleksis.apps.cursus.models import Course
from aleksis.apps.kolego.models.absence import AbsenceReason
from aleksis.core.models import Group, PDFFile
......@@ -118,6 +119,13 @@ def generate_full_register_printout(
course__groups__parent_groups=group
).values_list("pk", flat=True)
)
.union(
Documentation.objects.filter(
amends__in=LessonEvent.objects.filter(
LessonEvent.objects.for_group_q(group)
)
).values_list("pk", flat=True)
)
)
)
......
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