X-Git-Url: https://git.mdrn.pl/edumed.git/blobdiff_plain/3f387ec5d75ff85576e87649427cbdc1f14a95b8..de2579db9a8aa4a0810af5c465af1816a65c7616:/wtem/models.py diff --git a/wtem/models.py b/wtem/models.py index 6440e70..ccbf67f 100644 --- a/wtem/models.py +++ b/wtem/models.py @@ -4,6 +4,10 @@ import string import os import json +from datetime import datetime + +import pytz as pytz +from django.conf import settings from django.core.validators import validate_email from django.db import models from django.contrib.auth.models import User @@ -23,6 +27,8 @@ f.close() DEBUG_KEY = 'smerfetka159' +tz = pytz.timezone(settings.TIME_ZONE) + def get_exercise_by_id(exercise_id): return [e for e in exercises if str(e['id']) == str(exercise_id)][0] @@ -34,6 +40,10 @@ def make_key(length): for i in range(length)) +def tuple2dt(time_tuple): + return tz.localize(datetime(*time_tuple)) + + class CompetitionState(models.Model): """singleton""" BEFORE = 'before' @@ -46,9 +56,19 @@ class CompetitionState(models.Model): ) state = models.CharField(choices=STATE_CHOICES, max_length=16) + start = tuple2dt(settings.OLIMPIADA_START) + end = tuple2dt(settings.OLIMPIADA_END) + @classmethod def get_state(cls): - return cls.objects.get().state + now = timezone.now() + if now < cls.start: + return cls.BEFORE + elif now < cls.end: + return cls.DURING + else: + return cls.AFTER + # return cls.objects.get().state class Submission(models.Model): @@ -59,6 +79,7 @@ class Submission(models.Model): email = models.EmailField(max_length=100, unique=True) answers = models.CharField(max_length=65536, null=True, blank=True) key_sent = models.BooleanField(default=False) + opened_link = models.BooleanField(default=False) marks = JSONField(default={}) examiners = models.ManyToManyField(User, null=True, blank=True) end_time = models.CharField(max_length=5, null=True, blank=True) @@ -96,8 +117,8 @@ class Submission(models.Model): def shuffled_exercise_ids(self): exercise_ids = [e['id'] for e in exercises] - random.seed(self.random_seed) - random.shuffle(exercise_ids) + seeded_random = random.Random(self.random_seed) + seeded_random.shuffle(exercise_ids) return exercise_ids def current_exercise(self): @@ -258,6 +279,9 @@ class Confirmation(models.Model): def readable_contact(self): return '%s <%s>' % (self.contact.body.get('przewodniczacy'), self.contact.contact) + def school_phone(self): + return '%s, tel. %s' % (self.contact.body.get('school'), self.contact.body.get('school_phone')) + def age(self): return timezone.now() - self.contact.created_at