parent
0dbf1c514e
commit
ccac432200
28 changed files with 1021 additions and 132 deletions
@ -1,12 +1,77 @@ |
||||
import os, sys |
||||
import django, json |
||||
import django |
||||
|
||||
sys.path.append("../") |
||||
os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' |
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
||||
django.setup() |
||||
|
||||
from access.models import Privilege |
||||
from access.models import ActiveObject |
||||
from courses.models import Vertex, Lesson, Homework, Exam |
||||
from journals.models import TeacherJ, LessonJ, HomeworkJ, ExamJ |
||||
from finance.models import Bill |
||||
from django.contrib.auth import get_user_model |
||||
|
||||
|
||||
def get_first(course,): |
||||
l = Lesson.objects.filter(course=course).order_by('sort') |
||||
hw = Homework.objects.filter(course=course).order_by('sort') |
||||
e = Exam.objects.filter(course=course).order_by('sort') |
||||
try: |
||||
old_id = 'l_' + str(l[0].id) if l.exists() else ('h_' + str(hw[0].id) if hw.exists() else 'e_' + str(e[0].id)) |
||||
return Vertex.manager.get(old_id=old_id) |
||||
except IndexError: |
||||
return None |
||||
|
||||
if __name__ == '__main__': |
||||
Privilege |
||||
for user in get_user_model().objects.all(): |
||||
bills = Bill.objects.filter(user=user, status='F') |
||||
if bills.exists(): |
||||
for i in bills: |
||||
try: |
||||
tj = TeacherJ.objects.get(course=i.service.course, student=user) |
||||
if tj.status == 'F': |
||||
ActiveObject.objects.create(course=i.service.course, user=user, success=True) |
||||
else: |
||||
lesson = LessonJ.objects.filter(parent__parent=tj, success=True, student=tj.student) |
||||
homework = HomeworkJ.objects.filter(parent__parent=tj, success=True, student=tj.student) |
||||
exam = ExamJ.objects.filter(parent__parent=tj, success=True, student=tj.student) |
||||
|
||||
lesson = lesson.order_by('-material__sort', '-parent__material__sort')[0] if lesson.exists() else None |
||||
homework = homework.order_by('-material__sort', '-parent__material__sort')[0] if homework.exists() else None |
||||
exam = exam.order_by('-material__sort', '-parent__material__sort')[0] if exam.exists() else None |
||||
|
||||
lesson_p = lesson.parent.material.sort if lesson else 0 |
||||
homework_p = homework.parent.material.sort + 0.5 if homework else 0 |
||||
exam_p = exam.parent.material.sort + 0.75 if exam else 0 |
||||
|
||||
obj = (lesson_p > homework_p and lesson_p > exam_p and 'l_' + str(lesson.material.id)) or \ |
||||
(homework_p > exam_p and 'h_' + str(homework.material.id)) or \ |
||||
(exam and 'e_' + str(exam.material.id)) or\ |
||||
None |
||||
|
||||
if not obj: |
||||
active_obj = get_first(i.service.course) |
||||
if active_obj: |
||||
ActiveObject.objects.create( |
||||
course=i.service.course, |
||||
user=user, |
||||
active_obj=active_obj, |
||||
) |
||||
|
||||
else: |
||||
vertex = Vertex.manager.get(old_id=obj) |
||||
ActiveObject.objects.create( |
||||
course=i.service.course, |
||||
user=user, |
||||
active_obj=vertex.get_next() |
||||
) |
||||
|
||||
except TeacherJ.DoesNotExist: |
||||
active_obj = get_first(i.service.course) |
||||
if active_obj: |
||||
ActiveObject.objects.create( |
||||
course=i.service.course, |
||||
user=user, |
||||
active_obj=active_obj, |
||||
) |
||||
@ -0,0 +1,47 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-09-29 10:26 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('courses', '0048_auto_20170929_1026'), |
||||
('access', '0093_auto_20170928_1625'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='ActiveObject', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('active_obj', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Активный объект')), |
||||
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс')), |
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент')), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='ExtraPrivilege', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('is_done', models.BooleanField(default=False, verbose_name='Выполнено?')), |
||||
('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Объект')), |
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Правообладатель')), |
||||
], |
||||
), |
||||
migrations.RemoveField( |
||||
model_name='privilege', |
||||
name='subject', |
||||
), |
||||
migrations.RemoveField( |
||||
model_name='privilege', |
||||
name='user', |
||||
), |
||||
migrations.DeleteModel( |
||||
name='Privilege', |
||||
), |
||||
] |
||||
@ -0,0 +1,26 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-09-29 15:45 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('access', '0094_auto_20170929_1026'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='activeobject', |
||||
name='success', |
||||
field=models.BooleanField(default=False, verbose_name='Завершён ли курс'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='activeobject', |
||||
name='active_obj', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Активный объект'), |
||||
), |
||||
] |
||||
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-09-29 10:26 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('courses', '0047_auto_20170928_1625'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='vertex', |
||||
name='free', |
||||
field=models.BooleanField(default=True, verbose_name='Привилегии для узла не будут проверяться'), |
||||
), |
||||
] |
||||
@ -0,0 +1,21 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-02 18:41 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('courses', '0048_auto_20170929_1026'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='vertex', |
||||
name='old_id', |
||||
field=models.CharField(default='', max_length=10, verbose_name='Поле создаётся на время миграции'), |
||||
preserve_default=False, |
||||
), |
||||
] |
||||
@ -0,0 +1,70 @@ |
||||
import os, sys, django |
||||
|
||||
sys.path.append("../") |
||||
os.environ['PG_PORT_5432_TCP_ADDR'] = '127.0.0.1' |
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") |
||||
django.setup() |
||||
|
||||
from journals.models import Action |
||||
|
||||
if __name__ == '__main__': |
||||
|
||||
Action.objects.update_or_create( |
||||
name='try', |
||||
text='попытка сдачи чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='yes', |
||||
text='одобрение чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='no', |
||||
text='отказ от чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='like', |
||||
text='нравится что-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='dislike', |
||||
text='не нравится что-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='favorite', |
||||
text='добавить в избранное', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='watch', |
||||
text='просмотр', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='start', |
||||
text='начало чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='end', |
||||
text='окончание чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='create', |
||||
text='создание чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='delete', |
||||
text='удаление чего-либо', |
||||
) |
||||
|
||||
Action.objects.update_or_create( |
||||
name='update', |
||||
text='изминение чего-либо', |
||||
) |
||||
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-06 16:22 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('journals', '0076_auto_20170928_1625'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='journal', |
||||
name='extra_data', |
||||
field=models.TextField(default=''), |
||||
), |
||||
] |
||||
@ -0,0 +1,26 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-09 09:52 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('journals', '0077_journal_extra_data'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='thread', |
||||
name='check_subscribe', |
||||
field=models.BooleanField(default=True, verbose_name='Проверять ли подписки'), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='thread', |
||||
name='subscribers', |
||||
field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='Подписчики'), |
||||
), |
||||
] |
||||
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-09 17:33 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('journals', '0078_auto_20171009_0952'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='thread', |
||||
name='is_child', |
||||
field=models.BooleanField(default=False, verbose_name='Поле аптимизации поиска'), |
||||
), |
||||
] |
||||
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-09 17:36 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('journals', '0079_thread_is_child'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RenameField( |
||||
model_name='thread', |
||||
old_name='is_child', |
||||
new_name='is_recursively', |
||||
), |
||||
] |
||||
@ -0,0 +1,24 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-10-09 17:42 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('journals', '0080_auto_20171009_1736'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RemoveField( |
||||
model_name='thread', |
||||
name='is_recursively', |
||||
), |
||||
migrations.AddField( |
||||
model_name='thread', |
||||
name='recurse_step', |
||||
field=models.SmallIntegerField(default=0, verbose_name='Поле аптимизации поиска'), |
||||
), |
||||
] |
||||
@ -1,10 +1,42 @@ |
||||
from rest_framework import serializers |
||||
|
||||
from journals.models import Thread |
||||
from journals.models import Thread, Journal |
||||
|
||||
|
||||
class JournalSerializer(serializers.ModelSerializer): |
||||
|
||||
class Meta: |
||||
model = Journal |
||||
exclude = ('content_type', 'object_id') |
||||
|
||||
|
||||
class ThreadSerializer(serializers.ModelSerializer): |
||||
|
||||
class Meta: |
||||
model = Thread |
||||
exclude = ['is_staff'] |
||||
exclude = ('is_staff', 'recurse_step') |
||||
|
||||
|
||||
class ThreadAdminSerializer(ThreadSerializer): |
||||
count_children = serializers.SerializerMethodField() |
||||
count_journals = serializers.SerializerMethodField() |
||||
|
||||
@staticmethod |
||||
def get_count_children(self): |
||||
return self.child_thread_count() |
||||
|
||||
@staticmethod |
||||
def get_count_journals(self): |
||||
return self.journals_count() |
||||
|
||||
|
||||
class ThreadUserSerializer(serializers.ModelSerializer): |
||||
journals = serializers.SerializerMethodField() |
||||
|
||||
class Meta: |
||||
model = Thread |
||||
fields = ('journals', 'key') |
||||
|
||||
@staticmethod |
||||
def get_journals(self): |
||||
return [JournalSerializer(i).data for i in self.journal_set.all()] |
||||
@ -1,29 +0,0 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.3 on 2017-09-21 17:58 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('contenttypes', '0002_remove_content_type_name'), |
||||
('reactions', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Like', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('is_positive', models.BooleanField(default=True)), |
||||
('object_id', models.PositiveIntegerField()), |
||||
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), |
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Инициатор действия')), |
||||
], |
||||
), |
||||
] |
||||
Loading…
Reference in new issue