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) # TODO Почему-то при выставлении расширения всё ломается 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()