Format code

This commit is contained in:
Daniel Egger 2023-09-05 17:49:51 +02:00
parent 08edf98e2a
commit cce82b72ad
13 changed files with 146 additions and 66 deletions

View File

@ -1,5 +1,6 @@
import { graphql } from "@/gql"; import { graphql } from "@/gql";
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const CoursePageFragment = graphql(` const CoursePageFragment = graphql(`
fragment CoursePageFields on CoursePageInterface { fragment CoursePageFields on CoursePageInterface {
title title

View File

@ -3,7 +3,8 @@ import * as log from "loglevel";
import type { CompetenceCertificate } from "@/types"; import type { CompetenceCertificate } from "@/types";
import CompetenceAssignmentRow from "@/pages/competence/CompetenceAssignmentRow.vue"; import CompetenceAssignmentRow from "@/pages/competence/CompetenceAssignmentRow.vue";
import { computed } from "vue"; import { computed } from "vue";
import ItProgress, { StatusCount } from "@/components/ui/ItProgress.vue"; import type { StatusCount } from "@/components/ui/ItProgress.vue";
import ItProgress from "@/components/ui/ItProgress.vue";
log.debug("CompetenceCertificateComponent setup"); log.debug("CompetenceCertificateComponent setup");
@ -23,7 +24,7 @@ const totalPointsEvaluatedAssignments = computed(() => {
const userPointsEvaluatedAssignments = computed(() => { const userPointsEvaluatedAssignments = computed(() => {
return props.competenceCertificate.assignments.reduce((acc, assignment) => { return props.competenceCertificate.assignments.reduce((acc, assignment) => {
if (assignment.completion?.completion_status === "EVALUATION_SUBMITTED") { if (assignment.completion?.completion_status === "EVALUATION_SUBMITTED") {
return acc + assignment.completion.evaluation_points; return acc + (assignment.completion?.evaluation_points ?? 0);
} }
return acc; return acc;
}, 0); }, 0);
@ -70,6 +71,7 @@ const progressStatusCount = computed(() => {
<div <div
v-for="assignment in props.competenceCertificate.assignments" v-for="assignment in props.competenceCertificate.assignments"
:key="assignment.id"
class="bg-white px-8" class="bg-white px-8"
> >
<CompetenceAssignmentRow :assignment="assignment"></CompetenceAssignmentRow> <CompetenceAssignmentRow :assignment="assignment"></CompetenceAssignmentRow>

View File

@ -2,7 +2,8 @@ import graphene
from vbv_lernwelt.assignment.graphql.types import ( from vbv_lernwelt.assignment.graphql.types import (
AssignmentCompletionObjectType, AssignmentCompletionObjectType,
AssignmentObjectType, resolve_assignment_completion, AssignmentObjectType,
resolve_assignment_completion,
) )
from vbv_lernwelt.assignment.models import Assignment from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.course.graphql.types import resolve_course_page from vbv_lernwelt.course.graphql.types import resolve_course_page
@ -34,6 +35,9 @@ class AssignmentQuery(object):
**kwargs, **kwargs,
): ):
return resolve_assignment_completion( return resolve_assignment_completion(
info, assignment_id, course_session_id, learning_content_page_id, info,
assignment_id,
course_session_id,
learning_content_page_id,
assignment_user_id, assignment_user_id,
) )

View File

@ -7,7 +7,7 @@ from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion
from vbv_lernwelt.core.graphql.types import JSONStreamField from vbv_lernwelt.core.graphql.types import JSONStreamField
from vbv_lernwelt.course.graphql.interfaces import CoursePageInterface from vbv_lernwelt.course.graphql.interfaces import CoursePageInterface
from vbv_lernwelt.course.models import CourseSession from vbv_lernwelt.course.models import CourseSession
from vbv_lernwelt.course.permissions import is_course_session_expert, has_course_access from vbv_lernwelt.course.permissions import has_course_access, is_course_session_expert
from vbv_lernwelt.learnpath.graphql.types import LearningContentInterface from vbv_lernwelt.learnpath.graphql.types import LearningContentInterface
@ -68,7 +68,10 @@ class AssignmentObjectType(DjangoObjectType):
return self.find_attached_learning_content() return self.find_attached_learning_content()
def resolve_completion( def resolve_completion(
self, info, course_session_id, learning_content_page_id=None, self,
info,
course_session_id,
learning_content_page_id=None,
assignment_user_id=None, assignment_user_id=None,
): ):
if learning_content_page_id is None: if learning_content_page_id is None:
@ -94,9 +97,9 @@ def resolve_assignment_completion(
if assignment_user_id is None: if assignment_user_id is None:
assignment_user_id = info.context.user.id assignment_user_id = info.context.user.id
if str(assignment_user_id) == str( if str(assignment_user_id) == str(info.context.user.id) or is_course_session_expert(
info.context.user.id info.context.user, course_session_id
) or is_course_session_expert(info.context.user, course_session_id): ):
course_id = CourseSession.objects.get(id=course_session_id).course_id course_id = CourseSession.objects.get(id=course_session_id).course_id
if has_course_access(info.context.user, course_id): if has_course_access(info.context.user, course_id):
if learning_content_page_id is None: if learning_content_page_id is None:

View File

@ -1,25 +1,42 @@
# Generated by Django 3.2.20 on 2023-09-01 09:12 # Generated by Django 3.2.20 on 2023-09-01 09:12
from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('competence', '0003_competencecertificate_competencecertificatelist_competencenavipage'), (
('assignment', '0006_auto_20230823_1127'), "competence",
"0003_competencecertificate_competencecertificatelist_competencenavipage",
),
("assignment", "0006_auto_20230823_1127"),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='assignment', model_name="assignment",
name='competence_certificate', name="competence_certificate",
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='competence.competencecertificate'), field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="competence.competencecertificate",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='assignment', model_name="assignment",
name='assignment_type', name="assignment_type",
field=models.CharField(choices=[('CASEWORK', 'CASEWORK'), ('PREP_ASSIGNMENT', 'PREP_ASSIGNMENT'), ('REFLECTION', 'REFLECTION'), ('CONDITION_ACCEPTANCE', 'CONDITION_ACCEPTANCE'), ('EDONIQ_TEST', 'EDONIQ_TEST')], default='CASEWORK', max_length=50), field=models.CharField(
choices=[
("CASEWORK", "CASEWORK"),
("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
("REFLECTION", "REFLECTION"),
("CONDITION_ACCEPTANCE", "CONDITION_ACCEPTANCE"),
("EDONIQ_TEST", "EDONIQ_TEST"),
],
default="CASEWORK",
max_length=50,
),
), ),
] ]

View File

@ -1,12 +1,12 @@
import wagtail_factories import wagtail_factories
from vbv_lernwelt.competence.models import ( from vbv_lernwelt.competence.models import (
CompetenceCertificate,
CompetenceCertificateList,
CompetenceNaviPage,
CompetencePage, CompetencePage,
CompetenceProfilePage, CompetenceProfilePage,
PerformanceCriteria, PerformanceCriteria,
CompetenceCertificate,
CompetenceNaviPage,
CompetenceCertificateList,
) )

View File

@ -1,8 +1,8 @@
import graphene import graphene
from vbv_lernwelt.competence.graphql.types import ( from vbv_lernwelt.competence.graphql.types import (
CompetenceCertificateObjectType,
CompetenceCertificateListObjectType, CompetenceCertificateListObjectType,
CompetenceCertificateObjectType,
) )
from vbv_lernwelt.competence.models import ( from vbv_lernwelt.competence.models import (
CompetenceCertificate, CompetenceCertificate,

View File

@ -1,45 +1,74 @@
# Generated by Django 3.2.20 on 2023-09-01 09:12 # Generated by Django 3.2.20 on 2023-09-01 09:12
from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('wagtailcore', '0089_log_entry_data_json_null_to_object'), ("wagtailcore", "0089_log_entry_data_json_null_to_object"),
('competence', '0002_performancecriteria_learning_unit'), ("competence", "0002_performancecriteria_learning_unit"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='CompetenceCertificate', name="CompetenceCertificate",
fields=[ fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), (
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
], ],
options={ options={
'abstract': False, "abstract": False,
}, },
bases=('wagtailcore.page',), bases=("wagtailcore.page",),
), ),
migrations.CreateModel( migrations.CreateModel(
name='CompetenceCertificateList', name="CompetenceCertificateList",
fields=[ fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), (
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
], ],
options={ options={
'abstract': False, "abstract": False,
}, },
bases=('wagtailcore.page',), bases=("wagtailcore.page",),
), ),
migrations.CreateModel( migrations.CreateModel(
name='CompetenceNaviPage', name="CompetenceNaviPage",
fields=[ fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')), (
"page_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="wagtailcore.page",
),
),
], ],
options={ options={
'abstract': False, "abstract": False,
}, },
bases=('wagtailcore.page',), bases=("wagtailcore.page",),
), ),
] ]

View File

@ -8,9 +8,9 @@ from vbv_lernwelt.core.constants import (
) )
from vbv_lernwelt.core.models import User from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.creators.test_course import ( from vbv_lernwelt.course.creators.test_course import (
create_test_assignment_submitted_data,
create_test_assignment_evaluation_data,
create_edoniq_test_result_data, create_edoniq_test_result_data,
create_test_assignment_evaluation_data,
create_test_assignment_submitted_data,
) )
from vbv_lernwelt.course.models import CourseCompletion, CourseSession from vbv_lernwelt.course.models import CourseCompletion, CourseSession
from vbv_lernwelt.notify.models import Notification from vbv_lernwelt.notify.models import Notification

View File

@ -135,12 +135,15 @@ def check_rate_limit(request):
def cypress_reset_view(request): def cypress_reset_view(request):
if not settings.APP_ENVIRONMENT.startswith("prod"): if not settings.APP_ENVIRONMENT.startswith("prod"):
# Checking for the flags in the POST request # Checking for the flags in the POST request
create_assignment_completion = request.data.get( create_assignment_completion = (
'create_assignment_completion') == 'true' request.data.get("create_assignment_completion") == "true"
create_assignment_evaluation = request.data.get( )
'create_assignment_evaluation') == 'true' create_assignment_evaluation = (
create_edoniq_test_results = request.data.get( request.data.get("create_assignment_evaluation") == "true"
'create_edoniq_test_results') == 'true' )
create_edoniq_test_results = (
request.data.get("create_edoniq_test_results") == "true"
)
# TODO: Handle the flags as needed. For example: # TODO: Handle the flags as needed. For example:
if create_assignment_completion: if create_assignment_completion:

View File

@ -18,17 +18,17 @@ from vbv_lernwelt.assignment.models import (
) )
from vbv_lernwelt.assignment.services import update_assignment_completion from vbv_lernwelt.assignment.services import update_assignment_completion
from vbv_lernwelt.assignment.tests.assignment_factories import ( from vbv_lernwelt.assignment.tests.assignment_factories import (
AssignmentListPageFactory,
AssignmentFactory, AssignmentFactory,
AssignmentListPageFactory,
EvaluationTaskBlockFactory, EvaluationTaskBlockFactory,
) )
from vbv_lernwelt.competence.factories import ( from vbv_lernwelt.competence.factories import (
CompetenceCertificateFactory,
CompetenceCertificateListFactory,
CompetenceNaviPageFactory,
CompetencePageFactory, CompetencePageFactory,
CompetenceProfilePageFactory, CompetenceProfilePageFactory,
PerformanceCriteriaFactory, PerformanceCriteriaFactory,
CompetenceNaviPageFactory,
CompetenceCertificateListFactory,
CompetenceCertificateFactory,
) )
from vbv_lernwelt.competence.models import CompetencePage from vbv_lernwelt.competence.models import CompetencePage
from vbv_lernwelt.core.constants import ( from vbv_lernwelt.core.constants import (

View File

@ -1,25 +1,38 @@
# Generated by Django 3.2.20 on 2023-09-01 09:12 # Generated by Django 3.2.20 on 2023-09-01 09:12
from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('assignment', '0007_auto_20230901_1112'), ("assignment", "0007_auto_20230901_1112"),
('learnpath', '0003_auto_20230810_0817'), ("learnpath", "0003_auto_20230810_0817"),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='learningcontentedoniqtest', model_name="learningcontentedoniqtest",
name='content_assignment', name="content_assignment",
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='assignment.assignment'), field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="assignment.assignment",
),
), ),
migrations.AlterField( migrations.AlterField(
model_name='learningcontentassignment', model_name="learningcontentassignment",
name='assignment_type', name="assignment_type",
field=models.CharField(choices=[('CASEWORK', 'CASEWORK'), ('PREP_ASSIGNMENT', 'PREP_ASSIGNMENT'), ('REFLECTION', 'REFLECTION'), ('CONDITION_ACCEPTANCE', 'CONDITION_ACCEPTANCE'), ('EDONIQ_TEST', 'EDONIQ_TEST')], default='CASEWORK', max_length=50), field=models.CharField(
choices=[
("CASEWORK", "CASEWORK"),
("PREP_ASSIGNMENT", "PREP_ASSIGNMENT"),
("REFLECTION", "REFLECTION"),
("CONDITION_ACCEPTANCE", "CONDITION_ACCEPTANCE"),
("EDONIQ_TEST", "EDONIQ_TEST"),
],
default="CASEWORK",
max_length=50,
),
), ),
] ]

View File

@ -4,15 +4,23 @@ from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('notify', '0003_truncate_notifications'), ("notify", "0003_truncate_notifications"),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name='notification', model_name="notification",
name='notification_trigger', name="notification_trigger",
field=models.CharField(choices=[('ATTENDANCE_COURSE_REMINDER', 'Attendance Course Reminder'), ('CASEWORK_SUBMITTED', 'Casework Submitted'), ('CASEWORK_EVALUATED', 'Casework Evaluated'), ('NEW_FEEDBACK', 'New Feedback')], default='', max_length=255), field=models.CharField(
choices=[
("ATTENDANCE_COURSE_REMINDER", "Attendance Course Reminder"),
("CASEWORK_SUBMITTED", "Casework Submitted"),
("CASEWORK_EVALUATED", "Casework Evaluated"),
("NEW_FEEDBACK", "New Feedback"),
],
default="",
max_length=255,
),
), ),
] ]