Format code
This commit is contained in:
parent
08edf98e2a
commit
cce82b72ad
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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",),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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 (
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue