diff --git a/lmsege/lms/admin.py b/lmsege/lms/admin.py
index a325913..34ef588 100644
--- a/lmsege/lms/admin.py
+++ b/lmsege/lms/admin.py
@@ -102,8 +102,8 @@ class AnswerInline(StackedInline):
@admin.register(Submission)
class SubmissionAdmin(ModelAdmin):
change_list_template = "admin/lms/submission/change_list.html"
- list_display = ('assignment', 'student', 'status', 'is_time_expired', 'grade', 'submitted_at')
- list_filter = ('status', 'assignment__subject', 'student', 'is_time_expired')
+ list_display = ('assignment', 'student', 'status', 'is_time_expired', 'is_late', 'grade', 'submitted_at')
+ list_filter = ('status', 'assignment__subject', 'student', 'is_time_expired', 'is_late')
search_fields = ('student__username', 'assignment__title')
inlines = [AnswerInline]
diff --git a/lmsege/lms/models.py b/lmsege/lms/models.py
index 701a17d..ab1114e 100644
--- a/lmsege/lms/models.py
+++ b/lmsege/lms/models.py
@@ -52,7 +52,8 @@ class Question(models.Model):
ordering = ['order', 'id']
def __str__(self):
- return f"Задача {self.id} к {self.assignment.title}"
+ number = self.order if self.order else self.id
+ return f"Задача {number} к {self.assignment.title}"
class Submission(models.Model):
STATUS_CHOICES = (
@@ -68,6 +69,7 @@ class Submission(models.Model):
started_at = models.DateTimeField('Время начала', blank=True, null=True)
submitted_at = models.DateTimeField('Дата отправки', auto_now_add=True)
is_time_expired = models.BooleanField('Время вышло', default=False)
+ is_late = models.BooleanField('Сдано после дедлайна', default=False)
class Meta:
verbose_name = 'Ответ ученика'
diff --git a/lmsege/lms/templates/lms/assignment_detail.html b/lmsege/lms/templates/lms/assignment_detail.html
index 1462d00..f1d0d87 100644
--- a/lmsege/lms/templates/lms/assignment_detail.html
+++ b/lmsege/lms/templates/lms/assignment_detail.html
@@ -166,10 +166,20 @@
Прием ответов завершен
-
Вы больше не можете отправлять ответы, так как дедлайн истек или время на выполнение закончилось.
+ Вы больше не можете отправлять ответы, так как время на выполнение закончилось.
{% else %}
+ {% if is_late %}
+
+
+
+
Дедлайн прошел
+
Вы выполняете это задание после дедлайна (дорешивание).
+
+
+ {% endif %}
+
{% if time_left_seconds is not None %}
diff --git a/lmsege/lms/templates/lms/dashboard.html b/lmsege/lms/templates/lms/dashboard.html
index 2a771b4..49b2518 100644
--- a/lmsege/lms/templates/lms/dashboard.html
+++ b/lmsege/lms/templates/lms/dashboard.html
@@ -22,29 +22,40 @@
{% if sub %}
+ {% if sub.is_late %}
+
+ После дедлайна
+
+ {% endif %}
{% if sub.status == 'GRADED' %}
-
-
diff --git a/lmsege/lms/views.py b/lmsege/lms/views.py
index 3833ff9..229023f 100644
--- a/lmsege/lms/views.py
+++ b/lmsege/lms/views.py
@@ -68,9 +68,11 @@ def assignment_detail(request, pk):
can_submit = True
time_left_seconds = None
needs_start = False
+ is_late = False
if assignment.deadline and now > assignment.deadline:
- can_submit = False
+ is_late = True
+ # can_submit = False # Allow late submissions
if assignment.time_limit:
if not submission:
@@ -85,11 +87,10 @@ def assignment_detail(request, pk):
if request.method == 'POST':
# Allow saving this final POST, but mark it as expired
submission.is_time_expired = True
- # We don't set can_submit = False here so the POST is processed
else:
can_submit = False
submission.is_time_expired = True
- submission.status = 'PENDING' # Or graded with 0
+ submission.status = 'PENDING'
submission.save()
else:
time_left_seconds = int(allowed - elapsed)
@@ -104,7 +105,8 @@ def assignment_detail(request, pk):
assignment=assignment,
student=request.user,
status='IN_PROGRESS',
- started_at=now
+ started_at=now,
+ is_late=is_late
)
return redirect('lms:assignment_detail', pk=pk)
@@ -115,7 +117,7 @@ def assignment_detail(request, pk):
form = AnswersForm(request.POST, request.FILES, questions=questions)
if form.is_valid():
if not submission:
- submission = Submission.objects.create(assignment=assignment, student=request.user)
+ submission = Submission.objects.create(assignment=assignment, student=request.user, is_late=is_late)
all_auto = True
total_points = 0
@@ -211,4 +213,5 @@ def assignment_detail(request, pk):
'can_submit': can_submit,
'needs_start': needs_start,
'time_left_seconds': time_left_seconds,
+ 'is_late': is_late,
})