You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
7.7 KiB
228 lines
7.7 KiB
# coding=utf-8
|
|
import os
|
|
import django
|
|
import sys
|
|
import simplejson as json
|
|
|
|
sys.path.append("/var/www/projects/lms/")
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
|
|
django.setup()
|
|
from __migrate.post_fixtures import show_progress
|
|
from access.models import User
|
|
from courses.models import Exam, Homework, Lesson, Achievements, Course, CourseTheme
|
|
from journals.models import TeacherJ, AchievementJ, LessonJ, HomeworkJ, ExamJ, CourseThemeJ, HomeworkTry, check_journal
|
|
from storage.models import Storage
|
|
from management.models import Comment
|
|
|
|
_fixture = json.load(open('fixtures/courses.json'))
|
|
|
|
teachers = []
|
|
achss = []
|
|
lessonss = []
|
|
homeworks = []
|
|
exams = []
|
|
|
|
|
|
def new_index(model, key, obj):
|
|
if str(key) in pk_map[model]:
|
|
return obj.objects.get(id=pk_map[model][str(key)])
|
|
return None
|
|
|
|
|
|
# Пример записи маршрута
|
|
pk_map = json.load(open('pk_maps.json'))
|
|
if 'journals.teacherj' not in pk_map.keys():
|
|
pk_map['journals.teacherj'] = {}
|
|
|
|
if 'journals.achievementj' not in pk_map.keys():
|
|
pk_map['journals.achievementj'] = {}
|
|
|
|
if 'journals.lessonj' not in pk_map.keys():
|
|
pk_map['journals.lessonj'] = {}
|
|
|
|
if 'journals.homeworkj' not in pk_map.keys():
|
|
pk_map['journals.homeworkj'] = {}
|
|
|
|
if 'journals.examj' not in pk_map.keys():
|
|
pk_map['journals.examj'] = {}
|
|
|
|
for i in _fixture:
|
|
if i['model'] == 'courses.teacherj':
|
|
teachers.append(i)
|
|
elif i['model'] == 'courses.achievementj':
|
|
achss.append(i)
|
|
elif i['model'] == 'courses.lessonj':
|
|
lessonss.append(i)
|
|
elif i['model'] == 'courses.homeworkj':
|
|
homeworks.append(i)
|
|
elif i['model'] == 'courses.examj':
|
|
exams.append(i)
|
|
|
|
|
|
def achnivs():
|
|
print u'\nAchievementJ'
|
|
_now = 0
|
|
big_len = len(achss)
|
|
show_progress(big_len, _now)
|
|
|
|
for i in achss:
|
|
s = AchievementJ.objects.create(
|
|
group=i['fields']['group'],
|
|
title=i['fields']['title'],
|
|
text=i['fields']['text'],
|
|
student=new_index('access.user', i['fields']['student'], User),
|
|
achievement=new_index('courses.achievements', i['fields']['achievement'], Achievements),
|
|
got=i['fields']['got'],
|
|
date=i['fields']['date']
|
|
)
|
|
_now += 1
|
|
show_progress(big_len, _now)
|
|
pk_map['journals.achievementj'][str(i['pk'])] = str(s.id)
|
|
|
|
|
|
def tej():
|
|
print u'\nПереформирование журналов TeacherJ'
|
|
for i in teachers:
|
|
tj, c = TeacherJ.objects.get_or_create(student=new_index('access.user', i['fields']['student'], User),
|
|
course=new_index('courses.course', i['fields']['course'], Course))
|
|
# print i['fields']
|
|
if tj.start_date != i['fields']['start_date']:
|
|
tj.start_date = i['fields']['start_date']
|
|
if tj.teacher != new_index('access.user', i['fields']['teacher'], User):
|
|
tj.teacher = new_index('access.user', i['fields']['teacher'], User)
|
|
# check_journal(tj, tj.student, tj.course)
|
|
tj.save()
|
|
|
|
check_journal(tj)
|
|
pk_map['journals.teacherj'][str(i['pk'])] = str(tj.id)
|
|
|
|
print u'\nCreate CourseThemeJ'
|
|
for journal in TeacherJ.objects.all():
|
|
for theme in CourseTheme.objects.filter(course=journal.course):
|
|
c, c2 = CourseThemeJ.objects.get_or_create(material=theme, student=journal.student)
|
|
if c.parent != journal:
|
|
c.parent = journal
|
|
c.save()
|
|
|
|
|
|
def get_point(point, t, f):
|
|
if point:
|
|
return t
|
|
else:
|
|
return f
|
|
|
|
|
|
def lj():
|
|
print u'\nLessonJ'
|
|
_now = 0
|
|
big_len = len(lessonss)
|
|
show_progress(big_len, _now)
|
|
|
|
for i in lessonss:
|
|
# print i
|
|
c, c2 = LessonJ.objects.get_or_create(
|
|
student=new_index('access.user', i['fields']['student'], User),
|
|
material=new_index('courses.lesson', i['fields']['lesson'], Lesson),
|
|
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
|
|
# material=new_index('courses.lesson', i['fields']['lesson'], Lesson).theme)
|
|
)
|
|
c.success = bool(i['fields']['status'] == 'F')
|
|
c.date = get_point(i['fields']['status'] != 'N', i['fields']['date'], None)
|
|
c.f_date = get_point(i['fields']['status'] == 'F', i['fields']['f_date'], None)
|
|
c.save()
|
|
_now += 1
|
|
show_progress(big_len, _now)
|
|
pk_map['journals.lessonj'][str(i['pk'])] = str(c.id)
|
|
|
|
|
|
def create_try(parent, date):
|
|
return HomeworkTry.objects.create(
|
|
parent=parent,
|
|
material=parent.material,
|
|
student=parent.student,
|
|
teacher=parent.teacher,
|
|
date=date
|
|
)
|
|
|
|
|
|
def hj():
|
|
print u'\nHomeworkJ'
|
|
_now = 0
|
|
big_len = len(homeworks)
|
|
show_progress(big_len, _now)
|
|
|
|
for i in homeworks:
|
|
c, c2 = HomeworkJ.objects.get_or_create(
|
|
student=new_index('access.user', i['fields']['student'], User),
|
|
material=new_index('courses.homework', i['fields']['homework'], Homework)
|
|
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
|
|
# material=new_index('courses.homework', i['fields']['homework'],
|
|
# Homework).theme)
|
|
)
|
|
c.date = i['fields']['date']
|
|
c.f_date = i['fields']['f_date']
|
|
c.teacher = new_index('access.user', i['fields']['teacher'], User)
|
|
c.success = False
|
|
c.save()
|
|
comments = [new_index('management.comment', comment, Comment) for comment in i['fields']['comments']]
|
|
_try = None
|
|
for comment in comments:
|
|
must_del = False
|
|
if not _try:
|
|
_try = create_try(c, comment.date)
|
|
|
|
if '<span class="label label-success">Задача принята! </span><br>' in comment.text.encode('utf8'):
|
|
_try.f_date = comment.date
|
|
_try.success = True
|
|
must_del = True
|
|
|
|
if '<span class="label label-danger">Отправлено на доработку!</span><br>' in comment.text.encode('utf8'):
|
|
_try.f_date = comment.date
|
|
must_del = True
|
|
|
|
_try.comments.add(comment)
|
|
_try.save()
|
|
|
|
if must_del:
|
|
_try = None
|
|
must_del = False
|
|
_now += 1
|
|
show_progress(big_len, _now)
|
|
pk_map['journals.homeworkj'][str(i['pk'])] = str(c.id)
|
|
|
|
|
|
def exj():
|
|
print u'\nExamJ'
|
|
_now = 0
|
|
big_len = len(exams)
|
|
show_progress(big_len, _now)
|
|
|
|
for i in exams:
|
|
# print i
|
|
c, c2 = ExamJ.objects.get_or_create(
|
|
material=new_index('courses.exam', i['fields']['exam'], Exam),
|
|
student=new_index('access.user', i['fields']['student'], User)
|
|
# parent=CourseThemeJ.objects.get(student=new_index('access.user', i['fields']['student'], User),
|
|
# material___type='Ex',
|
|
# material__course=new_index('courses.exam', i['fields']['exam'],
|
|
# Exam).course)
|
|
)
|
|
c.teacher = new_index('access.user', i['fields']['teacher'], User)
|
|
c.date = i['fields']['date']
|
|
c.f_date = i['fields']['f_date']
|
|
c.success = False
|
|
c.diploma = new_index('storage.storage', i['fields']['diploma'], Storage)
|
|
c.save()
|
|
_now += 1
|
|
show_progress(big_len, _now)
|
|
pk_map['journals.examj'][str(i['pk'])] = str(c.id)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# achnivs()
|
|
lj()
|
|
hj()
|
|
exj()
|
|
tej()
|
|
|
|
json.dump(pk_map, open('pk_maps.json', 'w'))
|
|
|