From 2c7b3db616ffb68bdb93ea52f78c28ba2793e09b Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 27 Apr 2018 12:33:57 +0300 Subject: [PATCH] stat part 1 --- .../migrations/0011_auto_20180427_1213.py | 20 +++++++++++++++ .../migrations/0012_auto_20180427_1220.py | 20 +++++++++++++++ ...013_progresslesson_dif_check_timestamps.py | 22 ++++++++++++++++ progress/models.py | 25 ++++++++++++++++++- 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 progress/migrations/0011_auto_20180427_1213.py create mode 100644 progress/migrations/0012_auto_20180427_1220.py create mode 100644 progress/migrations/0013_progresslesson_dif_check_timestamps.py diff --git a/progress/migrations/0011_auto_20180427_1213.py b/progress/migrations/0011_auto_20180427_1213.py new file mode 100644 index 0000000..9c44c57 --- /dev/null +++ b/progress/migrations/0011_auto_20180427_1213.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-04-27 12:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('progress', '0010_progress_exp_date'), + ] + + operations = [ + migrations.AlterField( + model_name='progresslesson', + name='last_update', + field=models.DateTimeField(verbose_name='Дата последней проверки'), + ), + ] diff --git a/progress/migrations/0012_auto_20180427_1220.py b/progress/migrations/0012_auto_20180427_1220.py new file mode 100644 index 0000000..00438f3 --- /dev/null +++ b/progress/migrations/0012_auto_20180427_1220.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-04-27 12:20 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('progress', '0011_auto_20180427_1213'), + ] + + operations = [ + migrations.AlterField( + model_name='progresslesson', + name='last_update', + field=models.DateTimeField(auto_now_add=True, verbose_name='Дата последней здачи'), + ), + ] diff --git a/progress/migrations/0013_progresslesson_dif_check_timestamps.py b/progress/migrations/0013_progresslesson_dif_check_timestamps.py new file mode 100644 index 0000000..7bfcf5f --- /dev/null +++ b/progress/migrations/0013_progresslesson_dif_check_timestamps.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-04-27 12:26 +from __future__ import unicode_literals + +import django.contrib.postgres.fields +from django.db import migrations, models +import lms.tools + + +class Migration(migrations.Migration): + + dependencies = [ + ('progress', '0012_auto_20180427_1220'), + ] + + operations = [ + migrations.AddField( + model_name='progresslesson', + name='dif_check_timestamps', + field=django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(verbose_name='Время проверки'), default=lms.tools.get_empty_list, size=None, verbose_name='Временные интервалы проверок'), + ), + ] diff --git a/progress/models.py b/progress/models.py index 1308d41..011967a 100644 --- a/progress/models.py +++ b/progress/models.py @@ -3,6 +3,7 @@ from django.contrib.postgres.fields import ArrayField from django.db import models from model_utils import Choices +from django.utils import timezone from lms.tools import get_empty_list @@ -55,8 +56,30 @@ class ProgressLesson(models.Model): finish_date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) start_date = models.DateTimeField(verbose_name='Дата начала прохождения задания', auto_now_add=True) status = models.CharField(choices=STATUSES, default=STATUSES.start, max_length=20) - last_update = models.DateTimeField(verbose_name='Дата последнего изменения', auto_now=True) + last_update = models.DateTimeField(verbose_name='Дата последней здачи', auto_now_add=True) comment_tokens = ArrayField(models.UUIDField(verbose_name="Токен комента", editable=False), default=get_empty_list) + dif_check_timestamps = ArrayField( + models.IntegerField( + verbose_name="Время проверки" + ), + verbose_name='Временные интервалы проверок', + default=get_empty_list, + ) + + def __init__(self, *args, **kwargs): + super(ProgressLesson, self).__init__(*args, **kwargs) + self.old_status = self.status + + def save(self, force_insert=False, force_update=False, **kwargs): + if self.status == 'wait' and (self.old_status == 'start' or self.old_status == 'fail'): + self.last_update = timezone.now() + + if self.old_status == 'wait' and (self.status == 'fail' or self.status == 'done'): + dif = int(timezone.now().timestamp() - self.last_update.timestamp()) + self.dif_check_timestamps.append(dif) + + super(ProgressLesson, self).save(force_insert, force_update, **kwargs) + self.old_status = self.status def __str__(self): return self.progress.user.email