diff --git a/courses/api.py b/courses/api.py index 3d1d33d..86c16b7 100755 --- a/courses/api.py +++ b/courses/api.py @@ -740,6 +740,9 @@ def sent_homework_up_teacher(request, context): context['code'] = '1' context['data'] = {'try': ht.get_head_face(), 'comment': comment.get_face()} ht.saw_this() + + homework.success = True + homework.save() return context diff --git a/courses/migrations/0043_auto_20170621_1340.py b/courses/migrations/0043_auto_20170621_1340.py new file mode 100644 index 0000000..ff2483b --- /dev/null +++ b/courses/migrations/0043_auto_20170621_1340.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2017-06-21 13:40 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0042_auto_20161202_0338'), + ] + + operations = [ + migrations.AddField( + model_name='course', + name='public_old', + field=models.BooleanField(default=False, verbose_name='Старый статус'), + ), + migrations.AlterField( + model_name='lesson', + name='on_comment', + field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='https://127.0.0.1:8000/management/faq/37', max_length=1, verbose_name='Блок комментариев'), + ), + ] diff --git a/courses/migrations/0044_auto_20170621_1548.py b/courses/migrations/0044_auto_20170621_1548.py new file mode 100644 index 0000000..c7b94ae --- /dev/null +++ b/courses/migrations/0044_auto_20170621_1548.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.3 on 2017-06-21 15:48 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0043_auto_20170621_1340'), + ] + + operations = [ + migrations.AddField( + model_name='coursetheme', + name='empty_old', + field=models.BooleanField(default=False, verbose_name='Для проверки галочки'), + ), + migrations.AlterField( + model_name='lesson', + name='on_comment', + field=models.CharField(choices=[('N', 'Включены'), ('F', 'Отключены'), ('T', 'Подчиняется теме')], default='T', help_text='http://127.0.0.1:8000/management/faq/37', max_length=1, verbose_name='Блок комментариев'), + ), + ] diff --git a/courses/models.py b/courses/models.py index 288d2fe..6369299 100755 --- a/courses/models.py +++ b/courses/models.py @@ -11,6 +11,8 @@ from lms.tools import random_string, translit from management.models import Comment from storage.models import Storage +import logging + MATERIALS_TYPE = ( ('B', u'Базовый материал'), ('E', u'Расширеный материал'), @@ -74,6 +76,7 @@ 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) @@ -202,6 +205,12 @@ 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) @@ -224,6 +233,7 @@ 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()) @@ -311,6 +321,13 @@ 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 diff --git a/journals/models.py b/journals/models.py index 8c22374..e8ad133 100755 --- a/journals/models.py +++ b/journals/models.py @@ -406,6 +406,15 @@ 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() @@ -420,6 +429,9 @@ class CourseThemeJ(models.Model): elif actual_lesson != self.actual_lesson.id: self.actual_lesson = Lesson.objects.get(id=self.make_actual_lesson()) + if check_lessons(): + self.success = True + if self.set_open: if self.material._type != 'Ex' and self.actual_lesson and not self.parent.opens.filter( id=CourseMap.objects.get(token=self.actual_lesson.token).id).exists(): diff --git a/static/js/apis/files_loader.js b/static/js/apis/files_loader.js index 9b7219e..7328f7d 100755 --- a/static/js/apis/files_loader.js +++ b/static/js/apis/files_loader.js @@ -70,7 +70,7 @@ function write_sketch(id){ ''+ data['file_name'] +'' + '' + '' + - '' + + '' + '' ) }