remotes/origin/pm_task_31703
Mikhail Bortnikov 9 years ago
parent cf8727331f
commit d23dbd7218
  1. 62
      _utils/check_course_journal.py
  2. 74
      _utils/clean_twice_course_journals.py
  3. 199
      _utils/open_course_lesson.py
  4. 53
      static/css/app.css
  5. 14
      static/js/homework.js
  6. 127
      stud.txt
  7. 6
      templates/workshop_homework.html

@ -0,0 +1,62 @@
#! coding: utf-8
import os
import django
import sys
import os
from datetime import datetime
sys.path.append("/var/www/skillbox")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from lms.settings import BASE_DIR
from courses.models import Course
from finance.models import Price
from journals.models import TeacherJ, check_journal
def check_course_journal(course_id):
print('===========\nКурс: %s\n==============\n' % Course.objects.get(id=course_id).title)
print('Начало проверки журнала курса')
global_start = start = datetime.now()
course = Course.objects.get(id=course_id)
course.build_map()
finish = datetime.now()
print('Конец проверки журнала курса. Длительность: %s мсек\n' % (finish-start).microseconds)
print('Начало проверки услуг')
start = datetime.now()
all = Price.objects.filter(by_time=0, post_fire=0, course__id=course_id).count()
print('Количество услуг на проверку: %s' % all)
for i in Price.objects.filter(by_time=0, post_fire=0, course__id=course_id):
i.check_points()
finish = datetime.now()
print('Конец проверки услуг. Длительность: %s мсек\n' % (finish-start).microseconds)
print('Начало очистки двойных журналов')
start = datetime.now()
os.system('python clean_twice_course_journals.py %s' % course_id)
finish = datetime.now()
print('Конец очистки двойных журналов. Длительность: %s\n' % (finish-start).microseconds)
print('Начало проверки журналов')
all = TeacherJ.objects.filter(progress__gt=0, course__id=course_id).count()
print('Количество журналов на проверку: %s' % all)
for i in TeacherJ.objects.filter(progress__gt=0, course__id=course_id).order_by('-id'):
check_journal(i, from_console=True)
print('Конец проверки журналов. Длительность: %s сек\n' % (finish-start).microseconds)
print('Начало открытия уроков курса')
start = datetime.now()
os.system('python open_course_lesson.py %s' % course_id)
finish = datetime.now()
print('Конец открытия уроков курса. Длительность: %s\n' % (finish-start).microseconds)
global_finish = datetime.now()
print('==============================\nДлительность: %s сек' % (global_finish - global_start).seconds)
if __name__ == "__main__":
course_id = sys.argv[1]
check_course_journal(course_id)

@ -0,0 +1,74 @@
# coding=utf-8
import os
import django
import sys
import datetime
start = datetime.datetime.now()
sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from courses.models import Course, CourseTheme, Exam, Homework, Lesson
from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ, ExamJ
from access.models import User
from lms.tools import show_progress
def check_this(obj, collection):
if not collection.get(obj.material.id):
collection[obj.material.id] = True
else:
obj.delete()
def check_TJ(_course, _user):
try:
_tj = TeacherJ.objects.get(course=_course, student=_user)
except TeacherJ.DoesNotExist:
return None
except TeacherJ.MultipleObjectsReturned:
_tmp = TeacherJ.objects.filter(course=_course, student=_user).order_by('start_date')
_tj = _tmp[0]
for i in _tmp:
if i != _tj:
i.delete()
return _tj
course_id = sys.argv[1]
_all = User.objects.all().count()
_n = 0
_about_time = []
for _user in User.objects.all(): # todo only course users
_st = datetime.datetime.now()
_course = Course.objects.filter(id=course_id)
_l = dict({i.id: False for i in Lesson.objects.filter(course=_course)})
_h = dict({i.id: False for i in Homework.objects.filter(course=_course)})
_e = dict({i.id: False for i in Exam.objects.filter(course=_course)})
_t = dict({i.id: False for i in CourseTheme.objects.filter(course=_course)})
_tj = check_TJ(_course, _user)
if _tj:
for _cj in CourseThemeJ.objects.filter(parent=_tj):
check_this(_cj, _t)
for _lj in LessonJ.objects.filter(parent__parent=_tj):
check_this(_lj, _l)
for _hj in HomeworkJ.objects.filter(parent__parent=_tj):
check_this(_hj, _h)
for _ej in ExamJ.objects.filter(parent__parent=_tj):
check_this(_ej, _e)
_ft = datetime.datetime.now()
_about_time.append((_ft - _st).microseconds)
_average = (((_all - _n) * (sum(_about_time) / len(_about_time)))/1000000)/60
show_progress(_all, _n, post=' // "Удаление дуближей журналов" // Расчетное оставщееся время Этапа: {0:6.4} мин '.format(_average))
_n += 1
finish = datetime.datetime.now()
print('\nTIME: %s seconds' % (finish - start).seconds)

@ -0,0 +1,199 @@
# coding=utf-8
import os
import django
import sys
import datetime
sys.path.append("/var/www/skillbox")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry
from lms.tools import show_progress
_NEED_OPEN = LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com')
_TEACHERJ_FILTER = {'progress__gte': 0}
_TEACHERJ_EXCLUDE = {'teacher': None}
_READL_FILTER = {'f_date': None}
_READL_EXCLUDE = {'date': None}
_SUCCESSL_FILTER = {'success': True}
_SUCCESSL_EXCLUDE = {'date': None}
def get_all_journals(course_id):
return TeacherJ.objects.filter(**_TEACHERJ_FILTER, course__id=course__id).exclude(**_TEACHERJ_EXCLUDE).order_by('id')
def get_all_journals_count():
return TeacherJ.objects.filter(**_TEACHERJ_FILTER).exclude(**_TEACHERJ_EXCLUDE).count()
def get_last_lessons(__journal):
# Получить последний читаемый уроки и выполненный
_READL_FILTER['student'] = __journal.student
_READL_FILTER['material__course'] = __journal.course
_SUCCESSL_FILTER['student'] = __journal.student
_SUCCESSL_FILTER['material__course'] = __journal.course
return (LessonJ.objects.filter(**_READL_FILTER).exclude(**_READL_EXCLUDE).order_by('id').last(),
LessonJ.objects.filter(**_SUCCESSL_FILTER).exclude(**_SUCCESSL_EXCLUDE).order_by('id').last())
def open_lesson_befor_this(_lessonJ):
# Погружается объект последнего журнала урока
# Получаем все уроки этого журнала
_map = CourseMap.objects.get(lesson=_lessonJ.material)
for i in CourseMap.objects.filter(course=_map.course).exclude(lesson=None):
if i.sort < _map.sort:
try:
_j = LessonJ.objects.get(
material__token=i.token,
student=_lessonJ.student,
material__course=i.course
)
except LessonJ.DoesNotExist as e:
print(e)
else:
check_to_success(_j)
def check_to_access(_journal):
# Проверка материала на доступ в прохождению
_journal.open_material()
def check_to_success(_journal):
# Проверка материала на завершенность
_journal.saw_this()
def check_lesson_after_hw(__journal, _target):
# Проверить - доступны ли уроки до ДЗ со статусом success
# Проверить - доступны ли видео до ДЗ не блокированного или пройденного
_last = HomeworkTry.objects.filter(
student=__journal.student,
material__course=__journal.course
).order_by('id').last()
# Если стутс - success
_candidate = None
if _last:
try:
_candidate = CourseMap.objects.get(
sort=int(CourseMap.objects.get(token=_last.material.token).sort)+1,
course=__journal.course
)
except CourseMap.DoesNotExist:
print('Ошибка получения карты журнала')
else:
# Проверить - доступен ли журнал для чтения
if _candidate.lesson:
__candidate = LessonJ.objects.get(
material__token=_candidate.token,
student=_target.student,
material__course=__journal.course
)
check_to_access(__candidate)
if _candidate and _candidate.lesson and \
int(CourseMap.objects.get(
token=_target.material.token,
course=__journal.course).sort) \
< int(_candidate.sort):
_target = LessonJ.objects.get(
material__token=_candidate.token,
student=_target.student,
material__course=__journal.course)
print('Цель изменена: %s' % _target.material.title)
return _target
def main(course_id):
start = datetime.datetime.now()
_ERRORS = set()
_WARNING = set()
#for i in open('error.log'):
# _ERRORS.add(i.strip())
_GOOD = 0
_now = 0
big = []
if _NEED_OPEN:
open_lesson_befor_this(_NEED_OPEN)
else:
if not _ERRORS:
_journals = get_all_journals(course_id)
_jcount = get_all_journals_count()
print('Количество журналов на проверку: %s' % _jcount)
else:
_journals = list([i for i in TeacherJ.objects.filter(student__email__in=_ERRORS)])
_jcount = len(_journals)
print('Журналы с ошибками: %s' % _jcount)
for __journal in _journals:
_start = datetime.datetime.now()
show_progress(_jcount, _now)
print('\nЖурнал: %s' % __journal.student.email)
try:
read, success = get_last_lessons(__journal)
except Exception as e:
print('!!! Ошибка обработки')
print(e)
if __journal.course.id == 20:
_WARNING.add(__journal.student.email)
_ERROR_MAILS = open('error.log', 'a+')
_ERROR_MAILS.write('%s\n' % __journal.student.email)
_ERROR_MAILS.close()
else:
print('%s // %s' % (read.material.title if read else ' - ', success.material.title if success else ' - '))
if not success and read:
_target = read
elif read and (int(CourseMap.objects.get(lesson=read.material).sort) > int(CourseMap.objects.get(lesson=success.material).sort)):
_target = read
elif success:
_target = success
else:
_target = None
if _target:
open_lesson_befor_this(check_lesson_after_hw(__journal, _target))
_GOOD += 1
_now += 1
_finish = datetime.datetime.now()
_time_result = (_finish - _start).seconds
print('\nTIME: %s seconds' % _time_result)
if int(_time_result) > 1:
big.append(__journal.student.email)
print('Добавлено на проверку')
print('===========\n')
finish = datetime.datetime.now()
print('\nTIME: %s seconds' % (finish - start).seconds)
print('Нужно обратить внимание:')
for i in _WARNING:
print(i)
#print('Самые длительные записи:')
#print(big)
if _ERRORS:
if _GOOD == _now:
print('Все ошибки исправлены')
else:
print('Количество ошибок: %s' % int(_now - _GOOD))
if __name__ == '__main__':
course_id = sys.argv[1]
main(course_id)

@ -6355,4 +6355,55 @@ box-shadow: 0 12px 35px 0 rgba(134, 173, 253, 0.4);
}
.label-progress:hover{
height: 10px;
}
}
#teacher_popup{
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
position: absolute;
top: 0px;
right: 0px;
z-index: 100000;
}
.teacher_popup{
border: 2px solid #fff;
position: absolute;
width: 400px;
height: 226px;
left: 50%;
margin-left: -200px;
margin-top: 150px;
font-size: 22px;
background-color: #f9f9f9;
font-size: 22px;
padding: 30px;
bottom: 400px;
}
.realy{
width: 100%;
height: 80px;
line-height: 40px;
text-align: center;
color: #000;
margin-bottom: 20px;
}
#yes, #no{
border: 1px solid #fff;
width: 168px;
height: 60px;
text-align: center;
line-height: 60px;
cursor: pointer;
}
#yes{
float: left;
font-size: 20px;
background-color: #27c24c;
border-radius: 7px 0 0 7px;
}
#no{
float: right;
font-size: 20px;
background-color: #f05050;
border-radius: 0 7px 7px 0;
}

@ -68,9 +68,23 @@ function send_homework_down_teacher(form, root){
show_system_message('Введите текст сообщения')
}
}
function show_popup(){
// нужно было сделать быстро - поэтому сделали гавно (с) skillbox
// нужно переделать под jquery
// сделать тоже самое и для кнопки отказать.
// Хороший способ передавать функцию отправки (up & down) сюда и здесь её запускать
popup = document.getElementById('teacher_popup')
popup.classList.toggle('hidden')
popup.onclick = function(e){
if e.target == this{
popup.classList.add('hidden')
}
}
}
function send_homework_up_teacher(form, root){
// Проверить комментарий
// Отправить
document.getElementById('teacher_popup').classList.add('hidden')
if (CKEDITOR.instances.homework_text.getData()){
$('[name=homework_text]').val(CKEDITOR.instances.homework_text.getData());
$.ajax({

@ -0,0 +1,127 @@
Жиров Олег, niozuki@mail.ru, 5016
Лавриненко Светлана, svelavs@gmail.com, 4648
Санжар Суршанов, sanzharsurshanov@gmail.com, 4749
Моторина Екатерина, katepainter@yandex.ru, 4424
Белонович Гаянэ, gb.gayane@gmail.com, 4747
Злобин Иван, baho9208@mail.ru, 4569
Киселев Сергей, kiselev_s_l@mail.ru, 5307
Мокичев Дмитрий, dmokichev@gmail.com, 5941
Якухина Кира, kira.yakuhina@gmail.com, 4917
Кулаев Виктор, geiz@yandex.ru, 4795
Зайидова Aнна, annazayidova@gmail.com, 5039
Демосюк Екатерина, ekde@wide-web.spb.ru, 5593
Анастасова Светлана, zvetaan@gmail.com, 4751
Киосов Георгий, goha@kiosov.com, 5240
Мирзаева Кира, jalalovna@yandex.ru, 5687
Донцов Александр, alex.dntv@gmail.com, 4659
Попов Александр, ap@ds-p.ru, 5362
Жоламанов Айдар, pobiz@inbox.ru, 4632
Ковальская Станислава, skovalska@mail.ru, 5597
Исаев Дмитрий, wrusha@yandex.ru, 4634
Павлов Иван, pavlov@complexsys.ru, 5069
Жарков Александр, alexzarkov@gmail.com, 5657
Тихонов Александр, 9330733@mail.ru, 4865
Залисский Артем, artemzig@gmail.com, 6030
Тмур Антон, anton.tmur@gmail.com, 5877
Масленников Михаил, mmaslennikov@mail.ru, 5510
Пешинский Евгений, jack@creo.od.ua, 5930
Тухачевский Дмитрий, tuhachevski@gmail.com, 5911
Копачинский Константин, fazeful@gmail.com, 6115
Рыжков Антон, tonyavec@gmail.com, 6029
Сипатов Андрей, madjaw@mail.ru, 296
Литвин Максим, corpas@gmail.com, 4730
Шульга Игорь, ishulga86@gmail.com, 5600
Макаров Алексей, avmakarov@asuproject.ru, 6122
Фадеева Елена, alpha5@yandex.ru, 5926
Палий Нина, slavinanm@gmail.com, 6117
Портнова Оксана, portnova.ok@yandex.ru, 5947
Копылова Христиана, blood4085@inbox.ru, 6037
Галин Олег, ogalin@aevrika.ru, 5932
Богданова Евгения, egysakova@gmail.com, 5945
Дёмушкин Виктор, dinozavrix@gmail.com, 5610
Бодров Илья, feyorz@gmail.com, 4652
Махаева Василиса, kornblumchen@yandex.ru, 5756
Трунова Ольга , trunovaon@gmail.com, 5759
Аплемах Антон, a@cdnvideo.ru, 6034
Павлов Алексей, kronos2k4@gmail.com, 4514
Манасян Георгий, gsm_elst@rambler.ru, 5939
Umnikov Aleksandr Сергеевич, strife88@mail.ru, 5919
Самородова Анастасия, polgolovy@gmail.com, 4736
Лемтюгова Катерина, lemma.ka@gmail.com, 4900
Свинин Александр Александрович, alexandersvinin@gmail.com, 4541
Поздняков Александр Сергеевич, alexpozdnyakof@gmail.com, 5459
Климов Василий, vklimovs@mail.ru, 6047
Воротникова Алена, alvo_05@mail.ru, 4742
Аникьев Ян, yanchus@mail.ru, 6041
Энч Андрей, captainanch@ya.ru, 5936
Вусс Ольга, lesiawuss@gmail.com, 6619
Крюков Денис, denis.kryukov@cyberiada.com, 5976
Пастухова Екатерина, k-pastukhova@yandex.ru, 6832
Кубасова Екатерина, cat.kubasova@yandex.ru, 6136
Сутырина Евгения, jeneva7@gmail.com, 6965
Вычик Павел, pavelvch@gmail.com, 7033
Семашко Эдуард, info@darneo.ru, 5584
Брюханов Денис, denisbryuhanov@gmail.com, 6962
Плахов Павел, pplahov@gmail.com, 6775
Подгорный Евгений, sonicmails@yandex.ru, 6977
Пионтковская Наталья, pnz_08@mail.ru, 5977
Ганина Ольга, onimfa@mail.ru, 6867
Коробицин Иван, korobajr@ya.ru, 5504
Денисов Владимир, dv@ilab.kz, 6208
Pavlovska Anastasiia, 702752@gmail.com, 5363
Карпов Александр Юрьевич, ikarp84@gmail.com, 6646
Афанасьев Ярослав, ya@rl.ru, 6633
Скробот Алексей, alekseyskrobot@gmail.com, 6942
K Sergey, 1ngeneer@mail.ru, 6032
Мельбурн Саша, sasha.melbourne@gmail.com, 5540
Гулин Евгений, gulin@labizum.ru, 4759
Литвин Артем, artemich92@mail.ru, 6779
Киреичев Игорь, wm5soft@gmail.com, 6061
Степанов Александр, alexsteptlt@mail.ru, 6616
Кропанев Женя, kropev@rarus.ru, 4757
Курылев Константин, cooryliof@gmail.com, 6241
Казарова Елена, strekozka_l@mail.ru, 8207
Епифанов Павел, pae1@europlan.ru, 6471
Долженков Роман, tooob52@gmail.com, 6976
Антоневич Алексей, atree2010@gmail.com, 7169
Burchilina Maria, merabella00@yandex.ru, 7770
Агарзаева Марина, agarzaeva@yandex.ru, 6939
Сидоренко Илья , ilya@iskros.com, 7564
Китов Владислав, vlkitov@gmail.com, 6038
Репкин Антон, tingmann@gmail.com, 5943
Протасевич Андрей, torus.andrey@gmail.com, 6062
Велькин Андрей, wellkin@gmail.com, 5974
Савченко Игорь, neo-quake@yandex.ru, 6752
Ромаметьева Евгения, zhenyusya14@gmail.com, 6063
Щербакова Ольга, olga@adt.ru, 7769
Пашкевич Алексей , aplusp@yandex.ru, 6328
Бурунин Игорь, burunin@gmail.com, 7974
Боев Максим, skp_15@mail.ru, 6966
Сухоставская Алла, alla.sukhostavskaya@gmail.com, 6739
Шашкова Ольга, shashnia@gmail.com, 7007
Малахова Екатерина, kononenko.e.p@gmail.com, 6312
Саросек Михаил, sarosekml@yandex.ru, 7026
Царенко Илья, itsarenko@gmail.com, 6724
Соловьева Анна, miragann@gmail.com, 7656
Дементьев Сергей, ldvmake@gmail.com, 8219
Борисова Ирина, i.k.borisova@gmail.com, 8362
Макеев Сергей , makini@ya.ru, 8313
Гук Антон, anton.m.gook@gmail.com, 8031
Колмогоров Дмитрий, kitt.diz@gmail.com, 7217
Фомина Елена, efomina@msk.vtb.ru, 6120
Назарова Евгения, nazarova-evg@yandex.ru, 7666
Сергиенко Ольга Александровна , jayalila108@mail.ru, 7275
Зарипов Алмаз, almazzar@gmail.com, 9381
Ахкямова Эльвира, juniperland@gmail.com, 4929
Рубцова Ирина, beruchie@yandex.ru, 6968
Багаммаева Мадина, galadriel2007@mail.ru, 6951
Четвериков Юрий, yuriy.chetverikov@gmail.com, 7168
Маклакова Мария, tuna1706@yandex.ru, 6580
Монаков Евгений, fridays365@gmail.com, 8637
Прохоров Алексей, alex@space-o.ru, 6436
Зайцев Никита, nickzaytzev@gmail.com, 6635
Кожевников Андрей, helloandrei@mail.ru, 9536
Лисивец Юрий Станиславович, lisivets@ya.ru, 7318
Келемзина Софья, sofiakelemzina@gmail.com, 6204
Зорина Алина, alinazoryna@gmail.com, 5973
Кунакулов Ахнаф, axnaf@list.ru, 7733

@ -5,6 +5,12 @@
<script src="/static/js/ckeditor/adapters/jquery.js"></script>
{% endblock %}
{% block content %}
<div id="teacher_popup" class="hidden">
<div class=teacher_popup>
<div class="realy">Вы уверены, что хотите принять домашнюю работу?</div>
<div id="no" onclick="show_popup()">Нет</div><div id="yes" onclick="send_homework_up_teacher('comment_send_form', 'form_file_load')">Да</div>
</div>
</div>
<div class="wrapper-md">
<h1 style=" margin-bottom: 20px;
margin-top: 0;">Тема №{{ theme.sort }}: {{ theme.title }}</h1>

Loading…
Cancel
Save