From ff8218375f7e3f66149d1225000fabd1cb30d8a5 Mon Sep 17 00:00:00 2001 From: Jan Szejko Date: Mon, 22 Jan 2018 17:45:07 +0100 Subject: [PATCH] checking if an answer is complete --- stage2/management/commands/stage2_mark_complete.py | 3 ++- stage2/models.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/stage2/management/commands/stage2_mark_complete.py b/stage2/management/commands/stage2_mark_complete.py index 0f239b7..3720afb 100644 --- a/stage2/management/commands/stage2_mark_complete.py +++ b/stage2/management/commands/stage2_mark_complete.py @@ -9,6 +9,7 @@ class Command(BaseCommand): def handle(self, **options): assignment_count = Assignment.objects.count() for participant in Participant.objects.all(): - if participant.answer_set.count() == assignment_count: + answers = participant.answer_set.all() + if len(answers) == assignment_count and all(answer.is_complete() for answer in answers): participant.complete_set = True participant.save() diff --git a/stage2/models.py b/stage2/models.py index 37308fc..2787e75 100644 --- a/stage2/models.py +++ b/stage2/models.py @@ -162,6 +162,16 @@ class Answer(models.Model): return None return self.mark_set.aggregate(avg=models.Avg('points'))['avg'] + # unrelated to `complete' attribute, but whatever + def is_complete(self): + file_count = len(self.assignment.file_descriptions) + field_count = len(self.assignment.field_descriptions) + if self.attachment_set.count() < file_count: + return False + if self.fieldoption_set.count() + sum(1 for k, v in self.field_values.iteritems() if v) < field_count: + return False + return True + class FieldOptionSet(models.Model): name = models.CharField(verbose_name=_('nazwa'), max_length=32, db_index=True) -- 2.20.1