diff --git a/Envoy.blade.php b/Envoy.blade.php index be36a8f..3e4599d 100644 --- a/Envoy.blade.php +++ b/Envoy.blade.php @@ -13,6 +13,7 @@ create_symlinks install_req run_tests + run_migrate update_symlinks deployment_option_cleanup @endstory 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..f8c3f63 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 diff --git a/progress/views.py b/progress/views.py index 43705f4..e70e22e 100644 --- a/progress/views.py +++ b/progress/views.py @@ -75,6 +75,7 @@ class CourseProgressDynamicView(APIView): if request.user.is_authenticated() and request.user.is_staff: progresses = ProgressLesson.objects.all() + waiters = ProgressLesson.objects.filter(status='wait') if only_hw: progresses = progresses.filter(checker=F('progress__teacher')) @@ -83,6 +84,7 @@ class CourseProgressDynamicView(APIView): progresses = progresses.filter(progress__course_token=course_token) if not teacher_email is '': + waiters = waiters.filter(checker__email=teacher_email) progresses = progresses.filter(checker__email=teacher_email) res = {} @@ -106,6 +108,7 @@ class CourseProgressDynamicView(APIView): res['finish'] = progresses_finish res['start'] = progresses_start + res['in_progress'] = waiters.count() return Response(res, status=200) return Response('Доступно только персоналу', status=403)