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

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=to_d, last_update__lt=from_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()