From d3bf1db1a2ac74ee528e0d41230c287953acb6c9 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 12 Jan 2018 11:02:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- access/migrations/0001_initial.py | 13 +++--- .../0003_remove_progresslesson_comment.py | 19 +++++++++ access/models/other.py | 9 ++-- achievements/migrations/0001_initial.py | 4 +- courses/migrations/0001_initial.py | 5 ++- courses/migrations/0003_auto_20180111_1541.py | 25 ----------- courses/models.py | 1 + csv/load_bills.py | 24 +++++++---- csv/load_courses.py | 42 ++++++++++--------- csv/load_diploma.py | 5 ++- csv/load_perm.py | 3 +- finance/migrations/0001_initial.py | 6 +-- finance/migrations/0002_auto_20180112_1013.py | 20 +++++++++ finance/models.py | 4 +- library/migrations/0001_initial.py | 2 +- storage/migrations/0001_initial.py | 2 +- 16 files changed, 105 insertions(+), 79 deletions(-) create mode 100644 access/migrations/0003_remove_progresslesson_comment.py delete mode 100644 courses/migrations/0003_auto_20180111_1541.py create mode 100644 finance/migrations/0002_auto_20180112_1013.py diff --git a/access/migrations/0001_initial.py b/access/migrations/0001_initial.py index 9162e80..159df44 100644 --- a/access/migrations/0001_initial.py +++ b/access/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals import access.models.user @@ -76,8 +76,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Progress', fields=[ - ('hidden_lessons', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен урока'), default=[], size=None, verbose_name='Список скрытых уроков')), - ('course_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен курса')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('hidden_lessons', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, unique=True, verbose_name='Токен урока'), default=[], size=None, verbose_name='Список скрытых уроков')), + ('course_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен курса')), ('teacher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_progress', to=settings.AUTH_USER_MODEL, verbose_name='Преподователь по умолчанию')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент')), ], @@ -89,7 +90,8 @@ class Migration(migrations.Migration): migrations.CreateModel( name='ProgressLesson', fields=[ - ('lesson_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен урока')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('lesson_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен урока')), ('comment', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=15, unique=True, verbose_name='Ссылки на комменты'), default=[], size=None)), ('date', models.DateTimeField(blank=True, null=True, verbose_name='Дата зачтения задания')), ('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.Progress')), @@ -116,8 +118,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='UserAnswerBlock', fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('date', models.DateTimeField(auto_now_add=True, verbose_name='Дата сдачи')), - ('demand_token', models.UUIDField(editable=False, primary_key=True, serialize=False, verbose_name='Токен правила')), + ('demand_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен правила')), ('checker', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Проверяющий')), ('progress', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.ProgressLesson')), ], diff --git a/access/migrations/0003_remove_progresslesson_comment.py b/access/migrations/0003_remove_progresslesson_comment.py new file mode 100644 index 0000000..c7627d5 --- /dev/null +++ b/access/migrations/0003_remove_progresslesson_comment.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-01-12 10:57 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('access', '0002_init_group'), + ] + + operations = [ + migrations.RemoveField( + model_name='progresslesson', + name='comment', + ), + ] diff --git a/access/models/other.py b/access/models/other.py index 7b8ff04..73600e7 100644 --- a/access/models/other.py +++ b/access/models/other.py @@ -46,14 +46,14 @@ class Account(models.Model): class Progress(models.Model): hidden_lessons = ArrayField( - models.UUIDField(verbose_name="Токен урока", primary_key=True, editable=False), + models.UUIDField(verbose_name="Токен урока", unique=True, editable=False), default=[], verbose_name='Список скрытых уроков', ) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь по умолчанию", related_name='teacher_progress') user = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='Студент') - course_token = models.UUIDField(verbose_name="Токен курса", primary_key=True, editable=False) + course_token = models.UUIDField(verbose_name="Токен курса", unique=True, editable=False) def __str__(self): return '%s' % (self.user.email,) @@ -66,9 +66,8 @@ class Progress(models.Model): class ProgressLesson(models.Model): progress = models.ForeignKey(to=Progress) - lesson_token = models.UUIDField(verbose_name="Токен урока", primary_key=True, editable=False) + lesson_token = models.UUIDField(verbose_name="Токен урока", unique=True, editable=False) teacher = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Преподователь",) - comment = ArrayField(models.CharField(max_length=15, verbose_name='Ссылки на комменты', unique=True), default=[]) date = models.DateTimeField(verbose_name='Дата зачтения задания', blank=True, null=True) class Meta: @@ -79,7 +78,7 @@ class ProgressLesson(models.Model): class UserAnswerBlock(models.Model): progress = models.ForeignKey(to=ProgressLesson) date = models.DateTimeField(verbose_name='Дата сдачи', auto_now_add=True) - demand_token = models.UUIDField(verbose_name="Токен правила", primary_key=True, editable=False) + demand_token = models.UUIDField(verbose_name="Токен правила", unique=True, editable=False) checker = models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name="Проверяющий",) class Meta: diff --git a/achievements/migrations/0001_initial.py b/achievements/migrations/0001_initial.py index d7d25b0..2eb504c 100644 --- a/achievements/migrations/0001_initial.py +++ b/achievements/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals from django.conf import settings @@ -12,8 +12,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('courses', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('courses', '0001_initial'), ] operations = [ diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py index c978d51..b516b95 100644 --- a/courses/migrations/0001_initial.py +++ b/courses/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals import django.contrib.postgres.fields @@ -26,7 +26,7 @@ class Migration(migrations.Migration): ('level', models.CharField(choices=[('B', 'Базовый'), ('A', 'Продвинутый'), ('E', 'Экспертный'), ('B+A', 'Базовый + Продвинутый')], default='B', max_length=3, verbose_name='Уровень')), ('direction', models.SmallIntegerField(choices=[(3, 'Бизнес'), (2, 'Веб-дизайн'), (1, 'Разработка'), (4, 'Рисование'), (5, 'Музыка')], verbose_name='Направление')), ('public', models.BooleanField(default=False, verbose_name='Опубликовать')), - ('teachers', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=15, verbose_name='Ссылки на преподов'), default=[], size=None)), + ('teacher_tokens', django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен препода'), default=[], size=None, verbose_name='Преподователи курса')), ('image', models.URLField(blank=True, max_length=255, verbose_name='Изображение')), ('big_image', models.URLField(blank=True, max_length=255, verbose_name='Большое изображение')), ('big_mobile_image', models.URLField(blank=True, help_text='Большая картинка для мобильной версии', max_length=255, verbose_name='Под мобилку')), @@ -106,6 +106,7 @@ class Migration(migrations.Migration): ('title', models.CharField(max_length=255, verbose_name='Название')), ('description', models.TextField(blank=True, null=True, verbose_name='Описание')), ('icon', models.ImageField(blank=True, null=True, upload_to='', verbose_name='Иконка темы')), + ('sort', models.SmallIntegerField(unique=True)), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='курс')), ], options={ diff --git a/courses/migrations/0003_auto_20180111_1541.py b/courses/migrations/0003_auto_20180111_1541.py deleted file mode 100644 index 06fcb46..0000000 --- a/courses/migrations/0003_auto_20180111_1541.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 15:41 -from __future__ import unicode_literals - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('courses', '0002_init_demands'), - ] - - operations = [ - migrations.RemoveField( - model_name='course', - name='teachers', - ), - migrations.AddField( - model_name='course', - name='teacher_tokens', - field=django.contrib.postgres.fields.ArrayField(base_field=models.UUIDField(editable=False, primary_key=True, verbose_name='Токен препода'), default=[], size=None, verbose_name='Преподователи курса'), - ), - ] diff --git a/courses/models.py b/courses/models.py index d39145c..9947d4e 100755 --- a/courses/models.py +++ b/courses/models.py @@ -103,6 +103,7 @@ class Topic(models.Model): title = models.CharField(verbose_name='Название', max_length=255) description = models.TextField(verbose_name='Описание', blank=True, null=True) icon = models.ImageField(verbose_name='Иконка темы', null=True, blank=True) + sort = models.SmallIntegerField(unique=True) class Meta: verbose_name = "Тема" diff --git a/csv/load_bills.py b/csv/load_bills.py index 00bdadc..398d3bc 100644 --- a/csv/load_bills.py +++ b/csv/load_bills.py @@ -28,12 +28,11 @@ if __name__ == '__main__': bill_kwarg = dict() row = dict(row) bill_kwarg['id'] = row.pop('id', None) - bill_kwarg['route'] = Course.objects.get(id=row.pop('course__id', None)).route.out_key - opener_id = row.pop('opener__id', None) - bill_kwarg['opener'] = get_user_model().objects.get(id=opener_id) if opener_id \ + opener = row.pop('opener', None) + bill_kwarg['opener'] = get_user_model().objects.get(email=opener) if opener \ else get_user_model().objects.get(email="kate.gazukina@skillbox.ru") - email = row.pop('user__email', None) + email = row.pop('user', None) try: email = email[:email.index("\n")] except ValueError: @@ -46,12 +45,15 @@ if __name__ == '__main__': bill_kwarg['comment'] = row.pop('comment', None) bill_kwarg['description'] = row.pop('description', None) + bill_kwarg['course_token'] = Course.objects.get(slug=row.pop('course', None)).token try: bill = Bill.objects.create(**bill_kwarg) except IntegrityError: - pass + bill = Bill.objects.get(course_token=bill_kwarg['course_token'], user=bill_kwarg['user']) + method = row.pop('bill_method', None) + try: price = int(row.pop('price', None)) except ValueError: @@ -71,12 +73,16 @@ if __name__ == '__main__': inv.save() if method == 'Y' and not row['status'] == 'W' and price: - row['yandex_pay'], _is_create = Payment.objects.get_or_create( + yandex_pay, _is_create = Payment.objects.get_or_create( order_amount=price, order_number=inv.id, - customer_number=bill.user.id, + customer_number=bill.user.out_key, user=bill.user, cps_email=bill.user.email, shop_amount=real_price, - status='Processed' if 'P' else ('Success' if 'F' else 'Fail') - ) \ No newline at end of file + status=Payment.STATUS.PROCESSED if row['status'] == 'P' else + (Payment.STATUS.SUCCESS if row['status'] == 'F' else Payment.STATUS.FAIL) + ) + + inv.yandex_pay = yandex_pay + inv.save() diff --git a/csv/load_courses.py b/csv/load_courses.py index 0ec3e8e..4b019dd 100644 --- a/csv/load_courses.py +++ b/csv/load_courses.py @@ -1,7 +1,5 @@ import csv import os -import random -import string import sys import django @@ -12,7 +10,7 @@ django.setup() from courses.api import InApiTeacher from django.contrib.auth import get_user_model -from courses.models import Course, Lesson, Topic +from courses.models import Course, Lesson, Topic, Demand, LessonDemand from storage.models import File if __name__ == '__main__': @@ -36,6 +34,8 @@ if __name__ == '__main__': print('Плохо') with open('./course/vertex.csv') as vertex_csv: + t_sort = 0 + l_sort = 0 vertex_reader = csv.DictReader(vertex_csv) for row in vertex_reader: row = dict(row) @@ -52,51 +52,53 @@ if __name__ == '__main__': pass if model_type == 'topic': - course = Course.objects.get(id=row.pop('course', None)) + t_sort += 1 + course = Course.objects.get(slug=row.pop('course', None)) Topic.objects.create( id=pk, icon=row.pop('icon', None), course=course, description=description, title=title, + sort=t_sort, ) try: topic_id = row.pop('topic', None) - last_pivot = PivotVertex.objects.filter(map_course=map_obj).last() if model_type == 'tutorial': + l_sort += 1 topic = Topic.objects.get(id=topic_id) small_vertex = Lesson.objects.create( - id=pk, video=row.pop('video', None), - materials=materials, + material_tokens=materials, topic=topic, free=row['free'], description=description, title=title, - token=''.join(random.choice(string.ascii_letters) for x in range(15)) + sort=l_sort, ) - PivotVertex.objects.create( - map_course=map_obj, - vertex=small_vertex, - sort=last_pivot.sort+1 if last_pivot else 1, + + LessonDemand.objects.create( + lesson=small_vertex, + demand=Demand.objects.get(name="Стандартные требования"), ) if model_type == 'task': + l_sort += 1 topic = Topic.objects.get(id=topic_id) small_vertex = Lesson.objects.create( - id=pk, - materials=materials, + material_tokens=materials, topic=topic, description=description, title=title, - valid_type=1, - token=''.join(random.choice(string.ascii_letters) for x in range(15)) + sort=l_sort, + ) - PivotVertex.objects.create( - map_course=map_obj, - vertex=small_vertex, - sort=last_pivot.sort+1 if last_pivot else 1, + + LessonDemand.objects.create( + lesson=small_vertex, + demand=Demand.objects.get(name="Стандартные требования"), ) + except Topic.DoesNotExist: pass \ No newline at end of file diff --git a/csv/load_diploma.py b/csv/load_diploma.py index 365567e..8442209 100644 --- a/csv/load_diploma.py +++ b/csv/load_diploma.py @@ -20,9 +20,10 @@ if __name__ == '__main__': achievements_reader = csv.DictReader(achievements_csv) for row in achievements_reader: a = Achievement.objects.get(id=row['id']) - a.users.add(get_user_model().objects.get(id=row['student_id'])) + a.users.add(get_user_model().objects.get(email=row['user'])) with open('./achievement/diploma.csv') as achievements_csv: achievements_reader = csv.DictReader(achievements_csv) for row in achievements_reader: - Diploma.objects.create(**row) \ No newline at end of file + user=get_user_model().objects.get(email=row.pop('user', None)) + Diploma.objects.create(user=user, **row) \ No newline at end of file diff --git a/csv/load_perm.py b/csv/load_perm.py index 82cc190..27e2b92 100644 --- a/csv/load_perm.py +++ b/csv/load_perm.py @@ -13,8 +13,7 @@ django.setup() from django.contrib.auth.models import Group from django.contrib.auth import get_user_model from access.models.other import Progress, ProgressLesson -from course_service.courses.models import Lesson, Course -from course_service.maps.api import OutApiRoute +from courses.models import Lesson, Course if __name__ == '__main__': Progress.objects.all().delete() diff --git a/finance/migrations/0001_initial.py b/finance/migrations/0001_initial.py index 879c8ef..b24d70f 100644 --- a/finance/migrations/0001_initial.py +++ b/finance/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals from django.conf import settings @@ -21,7 +21,7 @@ class Migration(migrations.Migration): name='Bill', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('route', models.CharField(max_length=15, verbose_name='Токен роута')), + ('course_token', models.UUIDField(editable=False, unique=True, verbose_name='Токен курса')), ('comment', models.TextField(blank=True, editable=False, help_text='Будет показано пользователю', verbose_name='Комментарий продавца')), ('description', models.TextField(blank=True, verbose_name='Внутренняя заметка')), ('opener', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник')), @@ -54,6 +54,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='bill', - unique_together=set([('route', 'user')]), + unique_together=set([('course_token', 'user')]), ), ] diff --git a/finance/migrations/0002_auto_20180112_1013.py b/finance/migrations/0002_auto_20180112_1013.py new file mode 100644 index 0000000..9d34dc1 --- /dev/null +++ b/finance/migrations/0002_auto_20180112_1013.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2018-01-12 10:13 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('finance', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='bill', + name='course_token', + field=models.UUIDField(editable=False, verbose_name='Токен курса'), + ), + ] diff --git a/finance/models.py b/finance/models.py index 33d11f7..ad63297 100755 --- a/finance/models.py +++ b/finance/models.py @@ -7,7 +7,7 @@ from courses.models import Course, Lesson class Bill(models.Model): - route = models.CharField(max_length=15, verbose_name='Токен роута') + course_token = models.UUIDField(verbose_name="Токен курса", editable=False) user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Плательщик', related_name='bill_user') opener = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Ответственный сотрудник', null=True) comment = models.TextField(verbose_name='Комментарий продавца', help_text='Будет показано пользователю', @@ -24,7 +24,7 @@ class Bill(models.Model): verbose_name = 'Счет' verbose_name_plural = 'Счета' unique_together = ( - ('route', 'user',), + ('course_token', 'user',), ) diff --git a/library/migrations/0001_initial.py b/library/migrations/0001_initial.py index 6c337fc..ee8e393 100644 --- a/library/migrations/0001_initial.py +++ b/library/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals import datetime diff --git a/storage/migrations/0001_initial.py b/storage/migrations/0001_initial.py index 47b92bb..f016872 100644 --- a/storage/migrations/0001_initial.py +++ b/storage/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-11 14:34 +# Generated by Django 1.11.6 on 2018-01-11 17:32 from __future__ import unicode_literals from django.db import migrations, models