migarate exam_user_status

This commit is contained in:
Ross
2024-07-22 17:25:12 +01:00
parent ca4c8d31b9
commit aeaf0fcb2e
7 changed files with 93 additions and 46 deletions
@@ -0,0 +1,19 @@
# Generated by Django 5.0.2 on 2024-07-22 10:50
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('generic', '0013_examcollection_archive'),
]
operations = [
migrations.AddField(
model_name='examuserstatus',
name='cid_user_exam',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='generic.ciduserexam'),
),
]
@@ -0,0 +1,34 @@
# Generated by Django 5.0.2 on 2024-07-22 10:53
from django.db import migrations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from generic.models import ExamUserStatus, CidUserExam
def change_exam_user_status(apps, schema_editor):
ExamUserStatus: "ExamUserStatus" = apps.get_model("generic", "ExamUserStatus")
CidUserExam: "CidUserExam" = apps.get_model("generic", "CidUserExam")
for exam_user_status in ExamUserStatus.objects.all():
cid_user_exam, created = CidUserExam.objects.get_or_create(content_type=exam_user_status.content_type, object_id=exam_user_status.object_id, user_user=exam_user_status.user_user, cid_user=exam_user_status.cid_user)
exam_user_status.cid_user_exam = cid_user_exam
exam_user_status.save()
def change_exam_user_status_reverse(apps, schema_editor):
ExamUserStatus: "ExamUserStatus" = apps.get_model("generic", "ExamUserStatus")
for exam_user_status in ExamUserStatus.objects.all():
exam_user_status.cid_user_exam = None
exam_user_status.save()
class Migration(migrations.Migration):
dependencies = [
('generic', '0014_examuserstatus_cid_user_exam'),
]
operations = [
migrations.RunPython(change_exam_user_status, change_exam_user_status_reverse)
]
+8 -6
View File
@@ -1074,14 +1074,16 @@ class ExamUserStatus(models.Model):
object_id = models.PositiveIntegerField()
exam = GenericForeignKey("content_type", "object_id")
cid_user_exam = models.ForeignKey("CidUserExam", blank=True, null=True, on_delete=models.SET_NULL)
def __str__(self):
self.cid_user: "CidUser"
if self.cid_user:
user = self.cid_user.cid
email = self.cid_user.email
self.cid_user_exam: "CidUserExam"
if self.cid_user_exam.cid_user:
user = self.cid_user_exam.cid_user.cid
email = self.cid_user_exam.cid_user.email
return f"{self.datetime:%Y-%m-%d %H:%M:%S}: [CID] {user} ({email}) - {self.status} ({self.extra})"
else:
user = self.user_user.username
user = self.cid_user_exam.user_user.username
return f"{self.datetime:%Y-%m-%d %H:%M:%S}: [USER] {user} - {self.status} ({self.extra})"
@@ -1440,7 +1442,7 @@ class CidUserExam(models.Model):
else:
end_time = f"{ self.end_time:%Y-%m-%d %H:%M }"
return f"{user}: {start_time} {end_time}"
return f"{self.exam} / {user}: {start_time} {end_time}"
CID_GROUP_EXAMS = (
+13 -22
View File
@@ -1105,9 +1105,9 @@ class ExamViews(View, LoginRequiredMixin):
raise PermissionDenied
if cid is not None:
statuses = exam.exam_user_status.filter(cid_user__cid=cid)
statuses = exam.exam_user_status.filter(cid_user_exam__cid_user__cid=cid)
elif user_id is not None:
statuses = exam.exam_user_status.filter(user_user__id=user_id)
statuses = exam.exam_user_status.filter(cid_user_exam__user_user__id=user_id)
else:
statuses = exam.exam_user_status.all()
@@ -1692,17 +1692,14 @@ class ExamViews(View, LoginRequiredMixin):
cid_user_exam = exam.get_or_create_cid_user_exam(
user_user=request.user, start_time=t
)
exam.exam_user_status.create(
cid_user=None, user_user=request.user, status="submitted", extra="manual submission"
)
else:
c = CidUser.objects.filter(cid=request.POST.get("cid")).first()
cid_user_exam = exam.get_or_create_cid_user_exam(
cid_user=c, start_time=t
)
exam.exam_user_status.create(
cid_user=c, user_user=None, status="submitted", extra="manual submission"
)
exam.exam_user_status.create(
cid_user_exam=cid_user_exam, status="submitted", extra="manual submission"
)
cid_user_exam.end_time = timezone.now()
cid_user_exam.save()
@@ -1738,14 +1735,11 @@ class ExamViews(View, LoginRequiredMixin):
# Log exam access
if exam.exam_mode:
if cid is not None:
user = None
cid_user = CidUser.objects.get(cid=cid)
else:
user = request.user
cid_user = None
cid_user_exam = exam.get_or_create_cid_user_exam(
cid=cid, user_user=request.user
)
exam.exam_user_status.create(
cid_user=cid_user, user_user=user, status="downloaded"
cid_user_exam=cid_user_exam, status="downloaded"
)
path = "{0}{1}/exam/{2}.json".format(settings.MEDIA_ROOT, self.app_name, pk)
@@ -1818,14 +1812,11 @@ class ExamViews(View, LoginRequiredMixin):
# Log exam access
if exam.exam_mode:
user = request.user
if cid is not None:
user = None
cid_user = CidUser.objects.get(cid=cid)
else:
cid_user = None
cid_user_exam = exam.get_or_create_cid_user_exam(
cid=cid, user_user=request.user
)
exam.exam_user_status.create(
cid_user=cid_user, user_user=user, status="downloaded", extra="unbased"
cid_user_exam=cid_user_exam, status="downloaded", extra="unbased"
)
return JsonResponse(exam_json)