diff --git a/lmsege/lms/admin.py b/lmsege/lms/admin.py index a12fa88..a325913 100644 --- a/lmsege/lms/admin.py +++ b/lmsege/lms/admin.py @@ -18,9 +18,9 @@ class QuestionInline(StackedInline): @admin.register(Assignment) class AssignmentAdmin(ModelAdmin): - list_display = ('title', 'subject', 'is_published', 'is_closed', 'deadline', 'created_at') + list_display = ('title', 'subject', 'is_published', 'time_limit', 'deadline', 'created_at') list_display_links = ('title',) - list_filter = ('subject', 'is_published', 'is_closed') + list_filter = ('subject', 'is_published') search_fields = ('title', 'description') exclude = ('created_by',) filter_horizontal = ('assigned_students',) @@ -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', 'grade', 'submitted_at') - list_filter = ('status', 'assignment__subject', 'student') + list_display = ('assignment', 'student', 'status', 'is_time_expired', 'grade', 'submitted_at') + list_filter = ('status', 'assignment__subject', 'student', 'is_time_expired') search_fields = ('student__username', 'assignment__title') inlines = [AnswerInline] diff --git a/lmsege/lms/models.py b/lmsege/lms/models.py index f7593b3..701a17d 100644 --- a/lmsege/lms/models.py +++ b/lmsege/lms/models.py @@ -23,7 +23,7 @@ class Assignment(models.Model): created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, limit_choices_to={'role__in': ['TEACHER', 'ADMIN']}, verbose_name='Кем создано') created_at = models.DateTimeField('Дата создания', auto_now_add=True) deadline = models.DateTimeField('Дедлайн', blank=True, null=True, help_text='После этого времени ответы не принимаются.') - is_closed = models.BooleanField('Прием ответов закрыт', default=False, help_text='Включите, чтобы вручную закрыть прием ответов на задание.') + time_limit = models.PositiveIntegerField('Лимит времени (минуты)', blank=True, null=True, help_text='Например, 235 для 3ч 55м. Оставьте пустым, если без таймера.') class Meta: verbose_name = 'Задание' @@ -56,6 +56,7 @@ class Question(models.Model): class Submission(models.Model): STATUS_CHOICES = ( + ('IN_PROGRESS', 'В процессе выполнения'), ('PENDING', 'Ожидает проверки'), ('GRADED', 'Проверено'), ) @@ -64,7 +65,9 @@ class Submission(models.Model): grade = models.CharField('Оценка', max_length=10, blank=True, null=True) teacher_feedback = models.TextField('Комментарий учителя', blank=True, null=True) status = models.CharField('Статус', max_length=20, choices=STATUS_CHOICES, default='PENDING') + started_at = models.DateTimeField('Время начала', blank=True, null=True) submitted_at = models.DateTimeField('Дата отправки', auto_now_add=True) + is_time_expired = 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 be7c4e9..dfa091b 100644 --- a/lmsege/lms/templates/lms/assignment_detail.html +++ b/lmsege/lms/templates/lms/assignment_detail.html @@ -94,13 +94,87 @@ {% endfor %} + {% elif needs_start %} +
На выполнение этого задания отводится {{ assignment.time_limit }} минут(ы). Как только вы нажмете кнопку ниже, запустится обратный отсчет. По истечении времени ваши ответы будут отправлены автоматически.
+ + +Вы больше не можете отправлять ответы, так как дедлайн истек или преподаватель закрыл задание.
+Вы больше не можете отправлять ответы, так как дедлайн истек или время на выполнение закончилось.