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.
77 lines
2.7 KiB
77 lines
2.7 KiB
from dateutil.relativedelta import relativedelta
|
|
|
|
from courses.api import CourseProgressApi, CourseParamsApi
|
|
from progress.models import ProgressLesson
|
|
|
|
from django.utils import timezone
|
|
import os
|
|
import csv
|
|
|
|
from lms import celery_app
|
|
from django.conf import settings
|
|
from django.core.mail import EmailMessage
|
|
|
|
|
|
def add_next_lesson(progress):
|
|
lesson_list = CourseProgressApi.get_next(
|
|
progress.course_token,
|
|
[i.lesson_token for i in progress.progresslesson_set.all()]
|
|
)
|
|
|
|
pl = None
|
|
|
|
for lesson, is_hw in lesson_list:
|
|
if is_hw:
|
|
pl, _c = ProgressLesson.objects.get_or_create(
|
|
progress=progress,
|
|
lesson_token=lesson,
|
|
checker=progress.teacher,
|
|
)
|
|
else:
|
|
pl, _c = ProgressLesson.objects.get_or_create(
|
|
progress=progress,
|
|
lesson_token=lesson,
|
|
checker=progress.user,
|
|
)
|
|
|
|
return pl
|
|
|
|
|
|
@celery_app.task
|
|
def statistic_teachers():
|
|
file_dir = "%s/analytics/teachers/" % (settings.MEDIA_ROOT,)
|
|
os.makedirs(os.path.dirname(file_dir), exist_ok=True)
|
|
path = '%s%s' % (file_dir, timezone.now().strftime('%Y-%m-%d__%H-%M'))
|
|
|
|
progresses = ProgressLesson.objects.filter(status='wait')
|
|
|
|
with open(path, 'w') as csv_file:
|
|
csv_writer = csv.writer(csv_file)
|
|
csv_writer.writerow(
|
|
['Курс', 'Препод', 'Ранее', '6 Дней', '5 Дней', "4 Дня", "3 Дня", "2 Дня", "Вчера", "Сегодня"])
|
|
for i in progresses.values('progress__teacher__email', 'progress__course_token').distinct():
|
|
row = []
|
|
course_token = i['progress__course_token']
|
|
teacher_email = i['progress__teacher__email']
|
|
progresses_sub = progresses.filter(progress__course_token=course_token, progress__teacher__email=teacher_email)
|
|
|
|
row.append(CourseParamsApi(course_token).get_slug_and_title()['title'])
|
|
row.append(teacher_email)
|
|
row.append(progresses_sub.filter(last_update__lt=(timezone.now() - relativedelta(days=7))).count())
|
|
for j in range(7):
|
|
from_d = timezone.now() - relativedelta(days=(7 - j))
|
|
to_d = timezone.now() - relativedelta(days=(6 - j))
|
|
row.append(progresses_sub.filter(last_update__gte=from_d, last_update__lt=to_d).count())
|
|
|
|
csv_writer.writerow(row)
|
|
|
|
message = EmailMessage(
|
|
'Выгрузка по преподам.',
|
|
'Файл приложен',
|
|
'robo@skillbox.ru',
|
|
[settings.SUPPORT_EMAIL,],
|
|
['andrey.korolev@skillbox.ru',],
|
|
reply_to=['andrey.korolev@skillbox.ru'],
|
|
)
|
|
message.attach_file(path)
|
|
message.send()
|
|
|