From cad296c113ca024f59a406f02e764de4d5fba08a Mon Sep 17 00:00:00 2001 From: raprigorodov Date: Thu, 13 Jul 2023 14:29:45 +0300 Subject: [PATCH 01/26] front-end table for history --- front-end/src/components/Marks/Marks.vue | 95 +++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/front-end/src/components/Marks/Marks.vue b/front-end/src/components/Marks/Marks.vue index d1dbcc70..1b58dc5f 100644 --- a/front-end/src/components/Marks/Marks.vue +++ b/front-end/src/components/Marks/Marks.vue @@ -5,7 +5,73 @@

{{ $route.meta.title }}

- + + + + История изменения оценок + + + + + + + + + + + + + + + + { + const historymark = response.data; + console.log("GGGG", historymark); + }) + .catch(err => getError("оценок", err.response.status)); + }, }, }; From d62dbfb4cb8ab92566258b4b68a4640767a0484e Mon Sep 17 00:00:00 2001 From: altius01 Date: Fri, 14 Jul 2023 11:04:35 +0300 Subject: [PATCH 02/26] return queryset for markshistory --- back-end/src/lms/filters/marks.py | 22 ++++++++++++++++- back-end/src/lms/serializers/marks.py | 34 ++++++++++++++++++++++++++- back-end/src/lms/urls.py | 2 +- back-end/src/lms/views/marks.py | 19 +++++++++++---- 4 files changed, 70 insertions(+), 7 deletions(-) diff --git a/back-end/src/lms/filters/marks.py b/back-end/src/lms/filters/marks.py index 7ea151c6..7e372576 100644 --- a/back-end/src/lms/filters/marks.py +++ b/back-end/src/lms/filters/marks.py @@ -4,7 +4,10 @@ BooleanFilter, ) -from lms.models.marks import Mark +from lms.models.marks import ( + Mark, + HistoricalMark, +) class MarkFilter(FilterSet): @@ -22,3 +25,20 @@ def filter_by_admission(self, queryset, name, value): class Meta: model = Mark fields = ["student", "lesson", "archived"] + + +class MarkHistoryFilter(FilterSet): + milgroup = NumberFilter(field_name="student__milgroup__id") + + archived = BooleanFilter(field_name="student__milgroup__archived") + + year_of_admission = NumberFilter(method="filter_by_admission") + + def filter_by_admission(self, queryset, name, value): + # pylint: disable=unused-argument + value = value % 100 # strip first two symbols of the year + return queryset.filter(student__milgroup__title__startswith=value) + + class Meta: + model = HistoricalMark + fields = ["student", "lesson", "archived"] diff --git a/back-end/src/lms/serializers/marks.py b/back-end/src/lms/serializers/marks.py index a2dff900..076bf6db 100644 --- a/back-end/src/lms/serializers/marks.py +++ b/back-end/src/lms/serializers/marks.py @@ -3,7 +3,10 @@ from common.models.subjects import Subject from lms.models.common import Milgroup -from lms.models.marks import Mark +from lms.models.marks import ( + Mark, + HistoricalMark, +) from lms.models.students import Student from lms.serializers.history import HistoricalRecordField @@ -74,6 +77,35 @@ class Meta: fields = ["id", "values", "lesson"] +class MarkHistorySerializer(serializers.ModelSerializer): + student = StudentShortSerializer(read_only=True) + teacher = serializers.SerializerMethodField(read_only=True) + + after = serializers.SerializerMethodField(read_only=True) + before = serializers.SerializerMethodField(read_only=True) + + def get_after(self, obj): + return obj.values + + def get_before(self, obj): + prev_record = obj.prev_record + if prev_record: + return prev_record.values + return None + + def get_teacher(self, obj): + return obj.changed_by + + class Meta: + model = HistoricalMark + fields = [ + "after", + "before", + "student", + "teacher", + ] + + class MarkJournalSerializer(serializers.ModelSerializer): fullname = serializers.CharField(read_only=True) marks = serializers.SerializerMethodField(read_only=True) diff --git a/back-end/src/lms/urls.py b/back-end/src/lms/urls.py index 621d7f06..cbced8e4 100644 --- a/back-end/src/lms/urls.py +++ b/back-end/src/lms/urls.py @@ -86,7 +86,7 @@ routers.register("achievements", AchievementViewSet) routers.register("encouragements", EncouragementViewSet) routers.register("lessons", LessonViewSet) -routers.register("marks", MarkViewSet) +routers.register("marks", MarkViewSet, basename="mark") routers.register("milfaculties", MilfacultyViewSet) routers.register("milgroups", MilgroupViewSet) routers.register("milspecialties", MilspecialtyViewSet) diff --git a/back-end/src/lms/views/marks.py b/back-end/src/lms/views/marks.py index 484a6dd6..04f6231f 100644 --- a/back-end/src/lms/views/marks.py +++ b/back-end/src/lms/views/marks.py @@ -35,11 +35,15 @@ from lms.serializers.marks import ( MarkSerializer, MarkMutateSerializer, + MarkHistorySerializer, MarkJournalSerializer, MarkJournalQuerySerializer, ) -from lms.filters.marks import MarkFilter +from lms.filters.marks import ( + MarkFilter, + MarkHistoryFilter, +) from lms.utils.functions import milgroup_allowed_by_scope from lms.utils.mixins import QuerySetScopingMixin @@ -70,17 +74,24 @@ class MarkPermission(BasePermission): @extend_schema(tags=["marks"]) class MarkViewSet(QuerySetScopingMixin, ModelViewSet): # pylint: disable=too-many-public-methods - queryset = Mark.objects.all() - permission_classes = [MarkPermission] scoped_permission_class = MarkPermission filter_backends = [DjangoFilterBackend, SearchFilter] - filterset_class = MarkFilter search_fields = ["student__surname", "student__name", "student__patronymic"] + def get_queryset(self): + if "history" in self.request.data.keys(): + self.filterset_class = MarkHistoryFilter + self.queryset = Mark.history.all() + self.filterset_class = MarkFilter + self.queryset = Mark.objects.all() + return self.queryset + def get_serializer_class(self): + if "history" in self.request.data.keys(): + return MarkHistorySerializer if self.action in MUTATE_ACTIONS: return MarkMutateSerializer return MarkSerializer From d20e1fb8f93419e9d0511ffad84b29dc16b77e42 Mon Sep 17 00:00:00 2001 From: raprigorodov Date: Fri, 14 Jul 2023 11:25:05 +0300 Subject: [PATCH 03/26] for lexa getMark --- front-end/src/components/Marks/Marks.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/front-end/src/components/Marks/Marks.vue b/front-end/src/components/Marks/Marks.vue index 1b58dc5f..af92903d 100644 --- a/front-end/src/components/Marks/Marks.vue +++ b/front-end/src/components/Marks/Marks.vue @@ -827,7 +827,11 @@ export default { }, showMarksHistory() { this.dialogHistoryVisible = true; - getMark() + getMark({ + milgroup: this.filter.mg, + subject: this.filter.subject_id, + history: true, + }) .then(response => { const historymark = response.data; console.log("GGGG", historymark); From 6d2eee85cec0de27dc0f456f3448790ece5f2d25 Mon Sep 17 00:00:00 2001 From: altius01 Date: Sat, 15 Jul 2023 09:34:47 +0300 Subject: [PATCH 04/26] back-end correctly send marks history --- back-end/src/lms/serializers/marks.py | 25 +++++++++++++++++++------ back-end/src/lms/views/marks.py | 9 ++++----- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/back-end/src/lms/serializers/marks.py b/back-end/src/lms/serializers/marks.py index 076bf6db..40b38687 100644 --- a/back-end/src/lms/serializers/marks.py +++ b/back-end/src/lms/serializers/marks.py @@ -2,6 +2,7 @@ from common.models.subjects import Subject +from lms.models.teachers import Teacher from lms.models.common import Milgroup from lms.models.marks import ( Mark, @@ -78,12 +79,14 @@ class Meta: class MarkHistorySerializer(serializers.ModelSerializer): - student = StudentShortSerializer(read_only=True) - teacher = serializers.SerializerMethodField(read_only=True) + student_fullname = serializers.SerializerMethodField(read_only=True) + teacher_fullname = serializers.SerializerMethodField(read_only=True) after = serializers.SerializerMethodField(read_only=True) before = serializers.SerializerMethodField(read_only=True) + date = serializers.SerializerMethodField(read_only=True) + def get_after(self, obj): return obj.values @@ -93,16 +96,26 @@ def get_before(self, obj): return prev_record.values return None - def get_teacher(self, obj): - return obj.changed_by + def get_student_fullname(self, obj): + return obj.student.fullname + + def get_teacher_fullname(self, obj): + teacher = Teacher.objects.filter(user=obj.changed_by).first() + if teacher: + return teacher.fullname + return obj.changed_by.email + + def get_date(self, obj): + return obj.history_date class Meta: model = HistoricalMark fields = [ + "date", "after", "before", - "student", - "teacher", + "student_fullname", + "teacher_fullname", ] diff --git a/back-end/src/lms/views/marks.py b/back-end/src/lms/views/marks.py index 04f6231f..6ec95ed7 100644 --- a/back-end/src/lms/views/marks.py +++ b/back-end/src/lms/views/marks.py @@ -82,15 +82,14 @@ class MarkViewSet(QuerySetScopingMixin, ModelViewSet): search_fields = ["student__surname", "student__name", "student__patronymic"] def get_queryset(self): - if "history" in self.request.data.keys(): + if "history" in self.request.GET.keys(): self.filterset_class = MarkHistoryFilter - self.queryset = Mark.history.all() + return Mark.history.all() self.filterset_class = MarkFilter - self.queryset = Mark.objects.all() - return self.queryset + return Mark.objects.all() def get_serializer_class(self): - if "history" in self.request.data.keys(): + if "history" in self.request.GET.keys(): return MarkHistorySerializer if self.action in MUTATE_ACTIONS: return MarkMutateSerializer From f426770e18f15fc03cb261f99a2d106f2a5e07ea Mon Sep 17 00:00:00 2001 From: raprigorodov Date: Sat, 15 Jul 2023 14:40:11 +0300 Subject: [PATCH 05/26] back-end to front-end integration --- back-end/src/lms/serializers/marks.py | 2 + front-end/src/components/Marks/Marks.vue | 54 ++++++++++-------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/back-end/src/lms/serializers/marks.py b/back-end/src/lms/serializers/marks.py index 40b38687..ea453a5c 100644 --- a/back-end/src/lms/serializers/marks.py +++ b/back-end/src/lms/serializers/marks.py @@ -100,6 +100,8 @@ def get_student_fullname(self, obj): return obj.student.fullname def get_teacher_fullname(self, obj): + if obj.changed_by is None: + return None teacher = Teacher.objects.filter(user=obj.changed_by).first() if teacher: return teacher.fullname diff --git a/front-end/src/components/Marks/Marks.vue b/front-end/src/components/Marks/Marks.vue index af92903d..e49aab83 100644 --- a/front-end/src/components/Marks/Marks.vue +++ b/front-end/src/components/Marks/Marks.vue @@ -10,12 +10,13 @@ История изменения оценок - + + История изменения оценок
- {{ data.before }} + {{ m }}
@@ -45,27 +48,31 @@ >
@@ -500,22 +507,7 @@ export default { }, ], }, - historyMarksData: [ - { - student: "1", - before: 1, - after: 2, - teacher: "2", - date: "25.05.2009", - }, - { - student: "3", - before: 3, - after: 2, - teacher: "4", - date: "25.05.2009", - }, - ], + historyMarksData: [], }; }, @@ -834,7 +826,7 @@ export default { }) .then(response => { const historymark = response.data; - console.log("GGGG", historymark); + this.historyMarksData = historymark; }) .catch(err => getError("оценок", err.response.status)); }, From 785cd41c91deccbbaa505ed64d6eb2c2d4d77820 Mon Sep 17 00:00:00 2001 From: altius01 Date: Sat, 15 Jul 2023 15:03:54 +0300 Subject: [PATCH 06/26] fixed permission based querysetfiltering for marks --- back-end/src/lms/views/marks.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/back-end/src/lms/views/marks.py b/back-end/src/lms/views/marks.py index 6ec95ed7..3fc24ea0 100644 --- a/back-end/src/lms/views/marks.py +++ b/back-end/src/lms/views/marks.py @@ -77,6 +77,9 @@ class MarkViewSet(QuerySetScopingMixin, ModelViewSet): permission_classes = [MarkPermission] scoped_permission_class = MarkPermission + filterset_class = MarkFilter + queryset = Mark.objects.all() + filter_backends = [DjangoFilterBackend, SearchFilter] search_fields = ["student__surname", "student__name", "student__patronymic"] @@ -84,9 +87,9 @@ class MarkViewSet(QuerySetScopingMixin, ModelViewSet): def get_queryset(self): if "history" in self.request.GET.keys(): self.filterset_class = MarkHistoryFilter - return Mark.history.all() - self.filterset_class = MarkFilter - return Mark.objects.all() + self.queryset = Mark.history.all() + return super().get_queryset() + def get_serializer_class(self): if "history" in self.request.GET.keys(): From 419c6584ff910b16fb992d029d58955a9eaf8e24 Mon Sep 17 00:00:00 2001 From: Alexey Shishkov Date: Sat, 15 Jul 2023 15:14:33 +0300 Subject: [PATCH 07/26] Add user for marks creation --- back-end/src/common/management/commands/populate.py | 1 + back-end/src/lms/populate/marks.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/back-end/src/common/management/commands/populate.py b/back-end/src/common/management/commands/populate.py index afa9f546..dd949ed6 100644 --- a/back-end/src/common/management/commands/populate.py +++ b/back-end/src/common/management/commands/populate.py @@ -285,6 +285,7 @@ def handle(self, *args, **options): create_marks( lessons=lessons, students=students, + user_to_create_marks=User.objects.get(email="superuser@mail.com") ) create_uniforms(milfaculties=milfaculties) diff --git a/back-end/src/lms/populate/marks.py b/back-end/src/lms/populate/marks.py index 1dfcb5e0..31229301 100644 --- a/back-end/src/lms/populate/marks.py +++ b/back-end/src/lms/populate/marks.py @@ -1,3 +1,4 @@ +from auth.models import User from common.utils.populate import get_or_create from lms.models.lessons import Lesson @@ -8,37 +9,44 @@ def create_marks( lessons: list[Lesson], students: dict[str, Student], + user_to_create_marks: User ) -> None: marks = [ { "values": [5], "lesson": lessons[0], "student": students["Хромов"], + "changed_by": user_to_create_marks }, { "values": [4], "lesson": lessons[0], "student": students["Исаков"], + "changed_by": user_to_create_marks }, { "values": [3], "lesson": lessons[0], "student": students["Кацевалов"], + "changed_by": user_to_create_marks }, { "values": [5], "lesson": lessons[1], "student": students["Хромов"], + "changed_by": user_to_create_marks }, { "values": [3], "lesson": lessons[1], "student": students["Исаков"], + "changed_by": user_to_create_marks }, { "values": [2], "lesson": lessons[1], "student": students["Кацевалов"], + "changed_by": user_to_create_marks }, ] From b568e19388f697255a198c590792c28ef280e717 Mon Sep 17 00:00:00 2001 From: deborisov Date: Mon, 17 Jul 2023 16:02:07 +0300 Subject: [PATCH 08/26] Fix formatting --- .../src/common/management/commands/populate.py | 2 +- back-end/src/lms/populate/marks.py | 16 +++++++--------- back-end/src/lms/views/marks.py | 1 - 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/back-end/src/common/management/commands/populate.py b/back-end/src/common/management/commands/populate.py index dd949ed6..aae7f748 100644 --- a/back-end/src/common/management/commands/populate.py +++ b/back-end/src/common/management/commands/populate.py @@ -285,7 +285,7 @@ def handle(self, *args, **options): create_marks( lessons=lessons, students=students, - user_to_create_marks=User.objects.get(email="superuser@mail.com") + user_to_create_marks=User.objects.get(email="superuser@mail.com"), ) create_uniforms(milfaculties=milfaculties) diff --git a/back-end/src/lms/populate/marks.py b/back-end/src/lms/populate/marks.py index 31229301..442e4cc8 100644 --- a/back-end/src/lms/populate/marks.py +++ b/back-end/src/lms/populate/marks.py @@ -7,46 +7,44 @@ def create_marks( - lessons: list[Lesson], - students: dict[str, Student], - user_to_create_marks: User + lessons: list[Lesson], students: dict[str, Student], user_to_create_marks: User ) -> None: marks = [ { "values": [5], "lesson": lessons[0], "student": students["Хромов"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, { "values": [4], "lesson": lessons[0], "student": students["Исаков"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, { "values": [3], "lesson": lessons[0], "student": students["Кацевалов"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, { "values": [5], "lesson": lessons[1], "student": students["Хромов"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, { "values": [3], "lesson": lessons[1], "student": students["Исаков"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, { "values": [2], "lesson": lessons[1], "student": students["Кацевалов"], - "changed_by": user_to_create_marks + "changed_by": user_to_create_marks, }, ] diff --git a/back-end/src/lms/views/marks.py b/back-end/src/lms/views/marks.py index 3fc24ea0..3b00f239 100644 --- a/back-end/src/lms/views/marks.py +++ b/back-end/src/lms/views/marks.py @@ -89,7 +89,6 @@ def get_queryset(self): self.filterset_class = MarkHistoryFilter self.queryset = Mark.history.all() return super().get_queryset() - def get_serializer_class(self): if "history" in self.request.GET.keys(): From 09719e3b5c286ebf4e9ccf256aa9d589c3bdda45 Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 11:31:16 +0300 Subject: [PATCH 09/26] deleted possibly unused year of admission filter for historicalmark queryset --- back-end/src/lms/filters/marks.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/back-end/src/lms/filters/marks.py b/back-end/src/lms/filters/marks.py index 7e372576..1cc341ef 100644 --- a/back-end/src/lms/filters/marks.py +++ b/back-end/src/lms/filters/marks.py @@ -32,13 +32,6 @@ class MarkHistoryFilter(FilterSet): archived = BooleanFilter(field_name="student__milgroup__archived") - year_of_admission = NumberFilter(method="filter_by_admission") - - def filter_by_admission(self, queryset, name, value): - # pylint: disable=unused-argument - value = value % 100 # strip first two symbols of the year - return queryset.filter(student__milgroup__title__startswith=value) - class Meta: model = HistoricalMark fields = ["student", "lesson", "archived"] From c75af0f3ac176e0946169b0fc18f2bcde3794fd8 Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 11:49:24 +0300 Subject: [PATCH 10/26] add new filters for marks history --- back-end/src/lms/filters/marks.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/back-end/src/lms/filters/marks.py b/back-end/src/lms/filters/marks.py index 1cc341ef..230b10de 100644 --- a/back-end/src/lms/filters/marks.py +++ b/back-end/src/lms/filters/marks.py @@ -32,6 +32,11 @@ class MarkHistoryFilter(FilterSet): archived = BooleanFilter(field_name="student__milgroup__archived") + subject = NumberFilter(field_name="lesson__subject__id") + + date_from = DateFilter(field_name="lesson__date", lookup_expr="gte") + date_to = DateFilter(field_name="lesson__date", lookup_expr="lte") + class Meta: model = HistoricalMark fields = ["student", "lesson", "archived"] From 819c8a6179a1371c71f59ad3d67ab25abbec7cdc Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 15:16:04 +0300 Subject: [PATCH 11/26] add filter for marks history by date and subj --- back-end/src/lms/filters/marks.py | 1 + front-end/src/components/Marks/Marks.vue | 2 ++ 2 files changed, 3 insertions(+) diff --git a/back-end/src/lms/filters/marks.py b/back-end/src/lms/filters/marks.py index 230b10de..e8ee8b50 100644 --- a/back-end/src/lms/filters/marks.py +++ b/back-end/src/lms/filters/marks.py @@ -1,5 +1,6 @@ from django_filters.rest_framework import ( FilterSet, + DateFilter, NumberFilter, BooleanFilter, ) diff --git a/front-end/src/components/Marks/Marks.vue b/front-end/src/components/Marks/Marks.vue index e49aab83..7c550467 100644 --- a/front-end/src/components/Marks/Marks.vue +++ b/front-end/src/components/Marks/Marks.vue @@ -822,6 +822,8 @@ export default { getMark({ milgroup: this.filter.mg, subject: this.filter.subject_id, + date_from: this.filter.dateRange[0], + date_to: this.filter.dateRange[1], history: true, }) .then(response => { From a8677d33ef2f10ece9df419ff7f68c1f26db653c Mon Sep 17 00:00:00 2001 From: altius01 Date: Wed, 19 Jul 2023 10:12:30 +0300 Subject: [PATCH 12/26] fixed bug with mark deletion --- back-end/src/lms/serializers/marks.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/back-end/src/lms/serializers/marks.py b/back-end/src/lms/serializers/marks.py index ea453a5c..ca7220f5 100644 --- a/back-end/src/lms/serializers/marks.py +++ b/back-end/src/lms/serializers/marks.py @@ -88,6 +88,8 @@ class MarkHistorySerializer(serializers.ModelSerializer): date = serializers.SerializerMethodField(read_only=True) def get_after(self, obj): + if obj.history_type == "-": + return None return obj.values def get_before(self, obj): @@ -102,9 +104,14 @@ def get_student_fullname(self, obj): def get_teacher_fullname(self, obj): if obj.changed_by is None: return None + # Get Teacher fullname teacher = Teacher.objects.filter(user=obj.changed_by).first() if teacher: return teacher.fullname + # Get Student journalist fullname + journalist = Student.objects.filter(user=obj.changed_by).first() + if journalist: + return journalist.fullname return obj.changed_by.email def get_date(self, obj): From 4509b7676cbb0854f3771a77203f3765bc785ec6 Mon Sep 17 00:00:00 2001 From: Alexey Shishkov Date: Sat, 15 Jul 2023 11:38:11 +0300 Subject: [PATCH 13/26] Fix Schedule azguard permissions --- front-end/src/components/Schedule/Schedule.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front-end/src/components/Schedule/Schedule.vue b/front-end/src/components/Schedule/Schedule.vue index cc8294d7..ddd529a8 100644 --- a/front-end/src/components/Schedule/Schedule.vue +++ b/front-end/src/components/Schedule/Schedule.vue @@ -369,12 +369,12 @@ export default { `lessons.${method}.all`, { codename: `lessons.${method}.milfaculty`, - validator: () => this.userMilfaculty === this.schedule.milgroup.milfaculty, + validator: () => this.userMilfaculty === this.schedule.milgroup.milfaculty.id, }, { codename: `lessons.${method}.milgroup`, validator: () => this.userMilgroups.some( - x => x === this.schedule.milgroup.milgroup, + x => x === this.schedule.milgroup.id, ), }, ]; From 6dfed4606cef2e191957c85d70deda2d1119d792 Mon Sep 17 00:00:00 2001 From: Alexey Shishkov Date: Sat, 15 Jul 2023 10:59:21 +0300 Subject: [PATCH 14/26] Link lessons to appropriate milspecs --- back-end/src/common/populate/subjects.py | 20 +++++++++++++---- back-end/src/lms/populate/lessons.py | 28 +++++++++++++++--------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/back-end/src/common/populate/subjects.py b/back-end/src/common/populate/subjects.py index a6d486b8..c20f063b 100644 --- a/back-end/src/common/populate/subjects.py +++ b/back-end/src/common/populate/subjects.py @@ -4,20 +4,32 @@ def create_subjects(milspecialties: dict) -> list[Subject]: - milspecialties_codes = ["453000", "453100", "461300", "094001"] + milspecialties_codes = ["453000", "453100", "461300", "094001", "411300"] milspecialties = {code: milspecialties[code] for code in milspecialties_codes} subjects = [ { "title": "Тактическая подготовка", - "annotation": "Педагогический процесс, направленный на овладение рациональными формами ведения спортивной борьбы в процессе специфической соревновательной деятельности.", + "annotation": "Описание ТП", + }, + { + "title": "Тактико-специальная подготовка", + "annotation": "Описание ТСП", + }, + { + "title": "Военно-специальная подготовка", + "annotation": "Описание ВСП", + }, + { + "title": "Военно-политическая подготовка", + "annotation": "Описание ВПП", }, { "title": "Военная топография", - "annotation": "Дисциплина военного дела, изучающая методы и средства оценки местности, ориентирования на местности и осуществления полевых измерений для обеспечения боевой деятельности войск (сил), определяющая правила по ведению рабочих карт командиров и разработки графических боевых документов.", + "annotation": "Описание ВТ", }, { "title": "Строевая подготовка", - "annotation": "Предмет обучения военнослужащих и подразделений умению выполнять команды, строевые приёмы с оружием и без оружия.", + "annotation": "Описание Стр.п", }, ] subjects_final = [] diff --git a/back-end/src/lms/populate/lessons.py b/back-end/src/lms/populate/lessons.py index ebf1032a..de8f09da 100644 --- a/back-end/src/lms/populate/lessons.py +++ b/back-end/src/lms/populate/lessons.py @@ -35,6 +35,9 @@ def create_rooms() -> dict[str, Room]: { "title": "504", }, + { + "title": "505", + }, ] return {fields["title"]: get_or_create(Room, **fields) for fields in rooms} @@ -49,14 +52,19 @@ def create_lessons( ) -> list[Lesson]: # TODO(TmLev): Link teachers too. - subjects = {subject.title: subject for subject in subjects} + subjects_new = {} + for subj in subjects: + milspec = subj.milspecialty.pk + subjects_new.setdefault(milspec, dict()) + subjects_new[milspec][subj.title] = subj + subjects = subjects_new date_f = "%Y-%m-%d" lessons = [ { "type": Lesson.Type.LECTURE.value, - "subject": subjects["Тактическая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Тактическая подготовка"], "room": rooms["510"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -64,7 +72,7 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects["Строевая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Строевая подготовка"], "room": rooms["Плац"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -72,7 +80,7 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects["Военная топография"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Военная топография"], "room": rooms["504"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -80,7 +88,7 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects["Строевая подготовка"], + "subject": subjects[milgroups["1810"].milspecialty.pk]["Строевая подготовка"], "room": rooms["Плац"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -88,7 +96,7 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects["Военная топография"], + "subject": subjects[milgroups["1810"].milspecialty.pk]["Военная топография"], "room": rooms["504"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -96,7 +104,7 @@ def create_lessons( }, { "type": Lesson.Type.LECTURE.value, - "subject": subjects["Тактическая подготовка"], + "subject": subjects[milgroups["1810"].milspecialty.pk]["Тактическая подготовка"], "room": rooms["510"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -104,7 +112,7 @@ def create_lessons( }, { "type": Lesson.Type.LECTURE.value, - "subject": subjects["Тактическая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Тактическая подготовка"], "room": rooms["510"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), @@ -112,7 +120,7 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects["Строевая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Строевая подготовка"], "room": rooms["Плац"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), @@ -120,7 +128,7 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects["Военная топография"], + "subject": subjects[milgroups["1809"].milspecialty.pk]["Военная топография"], "room": rooms["504"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), From a49c5ec3a548915debbe79f9ae4c4479e722a2da Mon Sep 17 00:00:00 2001 From: Alexey Shishkov Date: Sat, 15 Jul 2023 16:18:19 +0300 Subject: [PATCH 15/26] Fix Studnet's double creation --- back-end/src/lms/populate/students.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/back-end/src/lms/populate/students.py b/back-end/src/lms/populate/students.py index 525e588f..d75aeced 100644 --- a/back-end/src/lms/populate/students.py +++ b/back-end/src/lms/populate/students.py @@ -371,11 +371,16 @@ def create_students( objects = {} for fields in students: + existing_students_with_user = Student.objects.filter(user=fields["user"]) + if len(existing_students_with_user) > 0: + objects[fields["surname"]] = existing_students_with_user.first() + continue fields["contact_info"] = get_or_create( ContactInfo, **fields.pop("contact_info"), ) - fields["birth_info"] = BirthInfo.objects.create( + fields["birth_info"] = get_or_create( + BirthInfo, **fields.pop("birth_info"), ) fields["passport"] = get_or_create( From 582bdab882fbd120f8d2b08ab10da09a664bec5e Mon Sep 17 00:00:00 2001 From: Alexey Shishkov Date: Sat, 15 Jul 2023 16:30:38 +0300 Subject: [PATCH 16/26] Fix codestyle --- back-end/src/lms/populate/lessons.py | 36 +++++++++++++++++++++------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/back-end/src/lms/populate/lessons.py b/back-end/src/lms/populate/lessons.py index de8f09da..92d1d897 100644 --- a/back-end/src/lms/populate/lessons.py +++ b/back-end/src/lms/populate/lessons.py @@ -64,7 +64,9 @@ def create_lessons( lessons = [ { "type": Lesson.Type.LECTURE.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Тактическая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Тактическая подготовка" + ], "room": rooms["510"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -72,7 +74,9 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Строевая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Строевая подготовка" + ], "room": rooms["Плац"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -80,7 +84,9 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Военная топография"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Военная топография" + ], "room": rooms["504"], "milgroup": milgroups["1809"], "date": nearest_day.strftime(date_f), @@ -88,7 +94,9 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects[milgroups["1810"].milspecialty.pk]["Строевая подготовка"], + "subject": subjects[milgroups["1810"].milspecialty.pk][ + "Строевая подготовка" + ], "room": rooms["Плац"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -96,7 +104,9 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects[milgroups["1810"].milspecialty.pk]["Военная топография"], + "subject": subjects[milgroups["1810"].milspecialty.pk][ + "Военная топография" + ], "room": rooms["504"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -104,7 +114,9 @@ def create_lessons( }, { "type": Lesson.Type.LECTURE.value, - "subject": subjects[milgroups["1810"].milspecialty.pk]["Тактическая подготовка"], + "subject": subjects[milgroups["1810"].milspecialty.pk][ + "Тактическая подготовка" + ], "room": rooms["510"], "milgroup": milgroups["1810"], "date": nearest_day.strftime(date_f), @@ -112,7 +124,9 @@ def create_lessons( }, { "type": Lesson.Type.LECTURE.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Тактическая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Тактическая подготовка" + ], "room": rooms["510"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), @@ -120,7 +134,9 @@ def create_lessons( }, { "type": Lesson.Type.PRACTICE.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Строевая подготовка"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Строевая подготовка" + ], "room": rooms["Плац"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), @@ -128,7 +144,9 @@ def create_lessons( }, { "type": Lesson.Type.SEMINAR.value, - "subject": subjects[milgroups["1809"].milspecialty.pk]["Военная топография"], + "subject": subjects[milgroups["1809"].milspecialty.pk][ + "Военная топография" + ], "room": rooms["504"], "milgroup": milgroups["1809"], "date": (nearest_day - timedelta(7)).strftime(date_f), From f7552dadcf6bf98589561b1765145efcb9314a71 Mon Sep 17 00:00:00 2001 From: deborisov Date: Mon, 17 Jul 2023 15:50:55 +0300 Subject: [PATCH 17/26] Fix send password email for inactive user --- back-end/src/auth/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back-end/src/auth/views.py b/back-end/src/auth/views.py index d8716f13..ffcad9b3 100644 --- a/back-end/src/auth/views.py +++ b/back-end/src/auth/views.py @@ -354,7 +354,7 @@ def post(self, request): data = request.data email = BaseUserManager.normalize_email(data["email"]) - if not User.objects.filter(email=email).exists(): + if not User.objects.filter(email=email).exists() or not User.objects.get(email=email).is_active: return Response(status=status.HTTP_200_OK) user = User.objects.get(email=email) From 2543bb79732659df37bc132cac958f9cfa64ff00 Mon Sep 17 00:00:00 2001 From: deborisov Date: Mon, 17 Jul 2023 15:56:34 +0300 Subject: [PATCH 18/26] Fix formatting --- back-end/src/auth/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/back-end/src/auth/views.py b/back-end/src/auth/views.py index ffcad9b3..023ff820 100644 --- a/back-end/src/auth/views.py +++ b/back-end/src/auth/views.py @@ -354,7 +354,10 @@ def post(self, request): data = request.data email = BaseUserManager.normalize_email(data["email"]) - if not User.objects.filter(email=email).exists() or not User.objects.get(email=email).is_active: + if ( + not User.objects.filter(email=email).exists() + or not User.objects.get(email=email).is_active + ): return Response(status=status.HTTP_200_OK) user = User.objects.get(email=email) From 39840234f10f321d696489005cd068def975f0a7 Mon Sep 17 00:00:00 2001 From: raprigorodov Date: Fri, 14 Jul 2023 11:17:39 +0300 Subject: [PATCH 19/26] hide room if null + localStorage for schedule --- .../src/components/Schedule/Schedule.vue | 61 ++++++++++++++++--- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/front-end/src/components/Schedule/Schedule.vue b/front-end/src/components/Schedule/Schedule.vue index ddd529a8..421febf1 100644 --- a/front-end/src/components/Schedule/Schedule.vue +++ b/front-end/src/components/Schedule/Schedule.vue @@ -110,8 +110,11 @@
- - {{ data.lessons.find((x) => x.date === d).room.title }} + + {{ findRoom(data, d) }}
getError("расписания", err.response.status)); + localStorage.milgroupUpdateId = this.filter.mg.id; + localStorage.milgroupUpdateMilfaculty = this.filter.mg.milfaculty; + localStorage.milgroupUpdateMilspecialty = this.filter.mg.milspecialty; + // eslint-disable-next-line prefer-destructuring + localStorage.dataRange0 = this.filter.dateRange[0]; + // eslint-disable-next-line prefer-destructuring + localStorage.dataRange1 = this.filter.dateRange[1]; }, async getSubjects() { @@ -550,6 +580,17 @@ export default { .catch(err => deleteError("занятия", err.response.status)); }); }, + + findRoom(data, d) { + if (data.lessons.find(x => x.date === d).room !== null) { + // eslint-disable-next-line no-param-reassign + data.lessons.find(x => x.date === d).showIcon = true; + return data.lessons.find(x => x.date === d).room.title; + } + // eslint-disable-next-line no-param-reassign + data.lessons.find(x => x.date === d).showIcon = false; + return null; + }, }, }; From 7c3a21a554386db0a8ca2e682e1ab0e5a493bc4a Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 16:58:26 +0300 Subject: [PATCH 20/26] Milspeciality in subj card --- .../@Subjects/SubjectsPage/SubjectsCards.vue | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue index 0546915c..8546b54e 100644 --- a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue +++ b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue @@ -9,6 +9,7 @@ :id="card.id" :annotation="card.annotation" :title="card.title" + :milspecialty="milspecaltyCode(card.milspecialty)" :is-my-subject="userId === card.user.id" :owner="card.user.email" /> @@ -21,6 +22,7 @@ import { UserModule } from "@/store"; import { Component, Prop, Vue } from "vue-property-decorator"; import SubjectCard from "./SubjectCard/index.vue"; +import { getMilSpecialties } from "@/api/reference-book"; @Component({ name: "Subjects", @@ -30,6 +32,17 @@ class Subjects extends Vue { @Prop({ default: () => [] }) cards get userId() { return UserModule.userId; } + + async created() { + this.milspecialties = (await getMilSpecialties()).data; + } + + milspecaltyCode(milspecialtyId) { + if (milspecialtyId) { + return `ВУС: ${this.milspecialties.filter(milspecialty => milspecialty.id === milspecialtyId)[0].code}`; + } + return ""; + } } export default Subjects; From 71e733ecf694b398b936e1cc250e3bff34a88155 Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 17:11:06 +0300 Subject: [PATCH 21/26] fixed bug with async query of milspecialities --- .../src/components/@Subjects/SubjectsPage/SubjectsCards.vue | 5 +---- front-end/src/views/Subjects/index.vue | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue index 8546b54e..a307201b 100644 --- a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue +++ b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue @@ -30,13 +30,10 @@ import { getMilSpecialties } from "@/api/reference-book"; }) class Subjects extends Vue { @Prop({ default: () => [] }) cards + @Prop({ default: () => [] }) milspecialties get userId() { return UserModule.userId; } - async created() { - this.milspecialties = (await getMilSpecialties()).data; - } - milspecaltyCode(milspecialtyId) { if (milspecialtyId) { return `ВУС: ${this.milspecialties.filter(milspecialty => milspecialty.id === milspecialtyId)[0].code}`; diff --git a/front-end/src/views/Subjects/index.vue b/front-end/src/views/Subjects/index.vue index 13591254..230110e6 100644 --- a/front-end/src/views/Subjects/index.vue +++ b/front-end/src/views/Subjects/index.vue @@ -25,6 +25,7 @@
Предметов с такой ВУС не найдено. From e1e7d6c368269e2581c2225db883b3f82ecb67ba Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 17:19:39 +0300 Subject: [PATCH 22/26] deleted unused import --- .../src/components/@Subjects/SubjectsPage/SubjectsCards.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue index a307201b..72a5efb7 100644 --- a/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue +++ b/front-end/src/components/@Subjects/SubjectsPage/SubjectsCards.vue @@ -22,7 +22,6 @@ import { UserModule } from "@/store"; import { Component, Prop, Vue } from "vue-property-decorator"; import SubjectCard from "./SubjectCard/index.vue"; -import { getMilSpecialties } from "@/api/reference-book"; @Component({ name: "Subjects", From f0a72e9e7ab479fd80d9f60ffd023cc957c7606d Mon Sep 17 00:00:00 2001 From: deborisov Date: Tue, 18 Jul 2023 16:49:03 +0300 Subject: [PATCH 23/26] Add show user groups in user card --- back-end/src/lms/models/students.py | 4 ++++ back-end/src/lms/serializers/students.py | 1 + .../Student/StudentGeneral/StudentGeneral.vue | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/back-end/src/lms/models/students.py b/back-end/src/lms/models/students.py index f897e670..7aca5ce2 100644 --- a/back-end/src/lms/models/students.py +++ b/back-end/src/lms/models/students.py @@ -154,6 +154,10 @@ def fullname(self) -> str: def milfaculty(self) -> Milfaculty: return self.milgroup.milfaculty + @property + def groups(self) -> str: + return [group.name for group in self.user.groups.all()] + @staticmethod def from_applicant( applicant: Applicant, diff --git a/back-end/src/lms/serializers/students.py b/back-end/src/lms/serializers/students.py index 337c625f..95dfcf52 100644 --- a/back-end/src/lms/serializers/students.py +++ b/back-end/src/lms/serializers/students.py @@ -110,6 +110,7 @@ class Meta: "contact_info", "status", "birth_info", + "groups", ] diff --git a/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue b/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue index 5494f7a2..e0f86543 100644 --- a/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue +++ b/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue @@ -191,6 +191,15 @@ + + + + {{ displayInfo.groupNames !== "" + ? displayInfo.groupNames + : "---" }} + + +
@@ -304,6 +313,8 @@ export default { } // eslint-disable-next-line max-len this.displayInfo.contact_info.personal_phone_number = this.maskPhone(this.displayInfo.contact_info.personal_phone_number); + this.displayInfo.groupNames = this.displayInfo.groups.filter(e => e !== "Студент").join(", "); + console.log(this.displayInfo); }, methods: { formatDate: date => moment(date).format("DD.MM.YYYY"), From 0f9c63ac175d8b5fe7f2f95ef7b5eab8caad0857 Mon Sep 17 00:00:00 2001 From: deborisov Date: Tue, 18 Jul 2023 16:57:36 +0300 Subject: [PATCH 24/26] Remove redundant code --- back-end/src/lms/models/students.py | 2 +- .../Personnel/Student/StudentGeneral/StudentGeneral.vue | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/back-end/src/lms/models/students.py b/back-end/src/lms/models/students.py index 7aca5ce2..bd6343b8 100644 --- a/back-end/src/lms/models/students.py +++ b/back-end/src/lms/models/students.py @@ -155,7 +155,7 @@ def milfaculty(self) -> Milfaculty: return self.milgroup.milfaculty @property - def groups(self) -> str: + def groups(self) -> list[str]: return [group.name for group in self.user.groups.all()] @staticmethod diff --git a/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue b/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue index e0f86543..6816f085 100644 --- a/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue +++ b/front-end/src/components/Personnel/Student/StudentGeneral/StudentGeneral.vue @@ -314,7 +314,6 @@ export default { // eslint-disable-next-line max-len this.displayInfo.contact_info.personal_phone_number = this.maskPhone(this.displayInfo.contact_info.personal_phone_number); this.displayInfo.groupNames = this.displayInfo.groups.filter(e => e !== "Студент").join(", "); - console.log(this.displayInfo); }, methods: { formatDate: date => moment(date).format("DD.MM.YYYY"), From 7f20cc9e4f0c433c5ab74cd6184567becb89e779 Mon Sep 17 00:00:00 2001 From: deborisov Date: Tue, 18 Jul 2023 17:36:08 +0300 Subject: [PATCH 25/26] Add journalist populate --- back-end/src/auth/populate/permissions.py | 22 +++++++++++++++++++ .../common/management/commands/populate.py | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/back-end/src/auth/populate/permissions.py b/back-end/src/auth/populate/permissions.py index 5a062c01..25e7eab5 100644 --- a/back-end/src/auth/populate/permissions.py +++ b/back-end/src/auth/populate/permissions.py @@ -23,6 +23,28 @@ def get_applicant_permissions(): return res +def get_journalist_permissions(): + values = [ + "marks.get.milgroup", + "marks.post.milgroup", + "marks.put.milgroup", + "marks.patch.milgroup", + "marks.delete.milgroup", + ] + res = [] + for val in values: + viewset, method, scope = val.split(".") + # We can't use .get(codename=val) here as codename is stored at runtime + res.append( + Permission.objects.get( + viewset=viewset, + method=method, + scope=int(getattr(Permission.Scope, scope.upper())), + ) + ) + return res + + def get_student_permissions(): values = [ "students.get.self", diff --git a/back-end/src/common/management/commands/populate.py b/back-end/src/common/management/commands/populate.py index aae7f748..5b58a64b 100644 --- a/back-end/src/common/management/commands/populate.py +++ b/back-end/src/common/management/commands/populate.py @@ -33,6 +33,7 @@ get_student_permissions, get_teacher_permissions, get_milfaculty_head_permissions, + get_journalist_permissions, ) # AMS @@ -107,9 +108,11 @@ def handle(self, *args, **options): applicants, _ = Group.objects.get_or_create(name="Абитуриент") students, _ = Group.objects.get_or_create(name="Студент") + journalists, _ = Group.objects.get_or_create(name="Журналист") teachers, _ = Group.objects.get_or_create(name="Преподаватель") milfaculty_heads, _ = Group.objects.get_or_create(name="Начальник цикла") + journalists.permissions.set(get_journalist_permissions()) applicants.permissions.set(get_applicant_permissions()) students.permissions.set(get_student_permissions()) teachers.permissions.set(get_teacher_permissions()) @@ -153,6 +156,8 @@ def handle(self, *args, **options): milfaculty_heads.user_set.add(User.objects.get(email="dnrepalov@mail.com")) + journalists.user_set.add(User.objects.get(email="gakhromov@mail.com")) + print(" OK") # ---------------------------------------------------------------------- From 86383faa621580c8e7a48d294b105dfe4b74bb67 Mon Sep 17 00:00:00 2001 From: altius01 Date: Tue, 18 Jul 2023 15:20:46 +0300 Subject: [PATCH 26/26] fixed applicant's campus update --- back-end/src/ams/views/applicants.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/back-end/src/ams/views/applicants.py b/back-end/src/ams/views/applicants.py index 5c10f5a7..8724fe59 100644 --- a/back-end/src/ams/views/applicants.py +++ b/back-end/src/ams/views/applicants.py @@ -176,6 +176,8 @@ def update(self, request, *args, **kwargs): status=status.HTTP_400_BAD_REQUEST, ) result = super(ApplicantViewSet, self).update(request, **kwargs) + applicant.user.campuses = [request.data["university_info"]["campus"]] + applicant.user.save() updated_applicant = Applicant.objects.get(pk=kwargs["pk"]) generate_documents = request.data["generate_documents"]