diff --git a/courses/migrations/0046_auto_20170711_1704.py b/courses/migrations/0046_auto_20170711_1704.py new file mode 100644 index 0000000..7ad4302 --- /dev/null +++ b/courses/migrations/0046_auto_20170711_1704.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2017-07-11 17:04 +from __future__ import unicode_literals + +import datetime +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0045_merge'), + ] + + operations = [ + migrations.CreateModel( + name='Flow', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='Название')), + ('description', models.TextField(blank=True, default='', null=True, verbose_name='Описание')), + ('start_flow', models.DateTimeField(default=datetime.datetime.now, verbose_name='Дата начала потока')), + ('created', models.DateTimeField(default=datetime.datetime.now, editable=False, verbose_name='Создан')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Изменен')), + ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс')), + ], + options={ + 'ordering': ['-modified'], + 'verbose_name_plural': 'Потоки', + 'verbose_name': 'Поток', + }, + ), + migrations.RemoveField( + model_name='coursetheme', + name='empty_old', + ), + ] diff --git a/courses/migrations/0047_remove_course_public_old.py b/courses/migrations/0047_remove_course_public_old.py new file mode 100644 index 0000000..ae4455c --- /dev/null +++ b/courses/migrations/0047_remove_course_public_old.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2017-07-11 17:09 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0046_auto_20170711_1704'), + ] + + operations = [ + migrations.RemoveField( + model_name='course', + name='public_old', + ), + ] diff --git a/courses/models.py b/courses/models.py index aac726d..fd25d8c 100755 --- a/courses/models.py +++ b/courses/models.py @@ -77,7 +77,6 @@ class Course(models.Model): direction = models.ForeignKey(MaterialDirection, verbose_name=u'Направление', null=True) mentors = models.ManyToManyField(User, verbose_name=u'Кураторы', null=True, blank=True, related_name='course_mentors') public = models.BooleanField(verbose_name=u'Опубликовать', default=False) - public_old = models.BooleanField(verbose_name=u'Старый статус', default=False) title = models.CharField(verbose_name=u"Заголовок", max_length=255) description = RedactorField(verbose_name=u'Описание', blank=True) image = models.ImageField(verbose_name=u'Изображение', upload_to='course', blank=True) @@ -206,12 +205,6 @@ class Course(models.Model): return '/courses/%s' % self.slug def save(self, *args, **kwargs): - # Костыль для поиска ошибки галочки - if self.public != self.public_old: - log = logging.getLogger('Course_public_change') - log.error('status change') - self.public_old = self.public - # if not self.slug: self.slug = '{0}'.format(translit(self.title)) super(Course, self).save(*args, **kwargs) @@ -234,7 +227,6 @@ class CourseTheme(models.Model): empty = models.BooleanField(verbose_name=u'Ты не пройдешь!', help_text=u'Заблокировать дальнейшее прохождение курса. Из-за того, ' u'что курс не заполнен или что-то вроде того.', default=False) - empty_old = models.BooleanField(verbose_name=u'Для проверки галочки', default=False) def __unicode__(self): return u'%s:%s/%s' % (self.sort, self.course, self.title if self.title else self.get__type_display()) @@ -322,13 +314,6 @@ class CourseTheme(models.Model): return Homework.objects.filter(theme=self).count() def save(self, *args, **kwargs): - # Костыль для поиска ошибки смены галочки - if self.empty != self.empty_old: - log = logging.getLogger('Themes_status_change') - log.error('status change') - self.public_old = self.public - # Костыль конец - if CourseTheme.objects.filter(course=self.course, sort=self.sort).exclude(id=self.id).exists(): # Переформировать порядок test_in = self.sort + 1 @@ -684,14 +669,6 @@ class CourseMap(models.Model): return _next._type, _next.get_obj() - def get_lesson_before(self): - try: - _before = CourseMap.objects.get(course=self.course, sort=self.sort - 2) - except CourseMap.DoesNotExist: - _before = CourseMap.objects.get(course=self.course, sort=0) - - return _before._type, _before.get_obj() - def get_before(self): try: _next = CourseMap.objects.get(course=self.course, sort=self.sort - 1) diff --git a/courses/views.py b/courses/views.py index d89d44e..54023b3 100755 --- a/courses/views.py +++ b/courses/views.py @@ -45,9 +45,12 @@ def course(request, slug): if created: check_journal(journal) _map = CourseMap.objects.filter(course=course).order_by('sort').first() - #_j = _map.get_obj() - #j = HomeworkJ.objects.get(material=_j, student=request.user) - #j.open_material() + _j = _map.get_obj() + if _map._type == 'H': + j = HomeworkJ.objects.get(material=_j, student=request.user) + if _map._type == 'L': + j = LessonJ.objects.get(material=_j, student=request.user) + j.open_material() else: journal, created = TeacherJ.objects.get_or_create(course=course, student=user_fabric(request.user)) @@ -59,11 +62,12 @@ def course(request, slug): start_flow = None if request.user.is_authenticated() and not request.user.is_admin: try: - bill = Bill.objects.get( + bills = Bill.objects.filter( service__course=course, user=request.user, status='F') - if bill.flow: - flow = bill.flow.get_status() - start_flow = bill.flow.start_flow + for bill in bills: + if bill.flow: + flow = bill.flow.get_status() + start_flow = bill.flow.start_flow except Bill.DoesNotExist: pass diff --git a/journals/models.py b/journals/models.py index 5666f53..d37b418 100755 --- a/journals/models.py +++ b/journals/models.py @@ -414,15 +414,6 @@ class CourseThemeJ(models.Model): p.save() return p - def check_lessons(self): - """ Проверка уроков темы на статус. Если сдано - сдана тема""" - for lessonj in LessonJ.objects.filter(parent=self, student=self.student): - if lessonj.success == False: - return False - - return True - - def save(self, *args, **kwargs): if not self.parent: self.parent = self.get_parent() @@ -437,8 +428,11 @@ class CourseThemeJ(models.Model): elif actual_lesson != self.actual_lesson.id: self.actual_lesson = Lesson.objects.get(id=self.make_actual_lesson()) - if self.check_lessons(): - self.success = True + if LessonJ.objects.filter(parent=self, student=self.student).exists(): + if LessonJ.objects.filter(parent=self, student=self.student, success=False).exists(): + self.success = False + else: + self.success = True if self.set_open: if Lesson.objects.filter(theme=self.material).order_by('sort').exists(): @@ -591,9 +585,7 @@ class LessonJ(models.Model): if _type == 'L': obj = LessonJ elif _type == 'H': - _before = CourseMap.objects.get(token=_before.token) - _type, _before = _before.get_lesson_before() - obj = LessonJ + obj = HomeworkJ elif _type == 'E': obj = ExamJ