|
|
|
|
@ -3,7 +3,7 @@ import datetime |
|
|
|
|
|
|
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
|
from django.core.exceptions import ValidationError |
|
|
|
|
from django.http import HttpResponse |
|
|
|
|
from django.http import HttpResponse, HttpResponseForbidden |
|
|
|
|
from rest_framework.permissions import IsAuthenticated |
|
|
|
|
from rest_framework.renderers import JSONRenderer |
|
|
|
|
from rest_framework.response import Response |
|
|
|
|
@ -13,7 +13,7 @@ from django.db.models import Q |
|
|
|
|
from courses.models import Course |
|
|
|
|
from progress.models import ProgressLesson, Progress |
|
|
|
|
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer |
|
|
|
|
from courses.api import CourseProgressApi |
|
|
|
|
from courses.api import CourseProgressApi, CourseParamsApi |
|
|
|
|
from progress.tasks import add_next_lesson |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -23,18 +23,25 @@ class StudentWorkView(APIView): |
|
|
|
|
@staticmethod |
|
|
|
|
def get(request, teacher_token): |
|
|
|
|
client_status = request.GET.get('status', 'in_progress') |
|
|
|
|
client_max_body = 50 |
|
|
|
|
last_id = request.GET.get('last_id', 0) |
|
|
|
|
server_status = Q(status='fail') if \ |
|
|
|
|
client_status == 'not_done' else Q(status='wait') if client_status == 'in_progress' else Q(status='done') |
|
|
|
|
if request.user.is_authenticated() and request.user.groups.filter(name__in=['teachers', 'admin']).exists(): |
|
|
|
|
try: |
|
|
|
|
progress_lessons = ProgressLesson.objects.filter( |
|
|
|
|
~Q(progress__user__out_key=teacher_token), |
|
|
|
|
server_status, |
|
|
|
|
checker__out_key=teacher_token, |
|
|
|
|
id__gt=last_id |
|
|
|
|
)[:client_max_body] |
|
|
|
|
if client_status == 'done': |
|
|
|
|
date_from = datetime.datetime.now() - datetime.timedelta(days=7) |
|
|
|
|
progress_lessons = ProgressLesson.objects.filter( |
|
|
|
|
~Q(progress__user__out_key=teacher_token), |
|
|
|
|
~Q(comment_tokens__len=0), |
|
|
|
|
status='done', |
|
|
|
|
checker__out_key=teacher_token, |
|
|
|
|
finish_date__gte=date_from, |
|
|
|
|
).order_by('finish_date') |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
server_status = Q(status='fail') if client_status == 'not_done' else Q(status='wait') |
|
|
|
|
progress_lessons = ProgressLesson.objects.filter( |
|
|
|
|
~Q(progress__user__out_key=teacher_token), |
|
|
|
|
server_status, |
|
|
|
|
checker__out_key=teacher_token, |
|
|
|
|
).order_by('-last_update') |
|
|
|
|
return Response([ProgressLessonSerializer(i).data for i in progress_lessons], status=200) |
|
|
|
|
except ValidationError: |
|
|
|
|
return Response("Bad request", status=400) |
|
|
|
|
@ -348,3 +355,43 @@ class SetProgress(APIView): |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
return Response("Эта функция доступна только сотрудникам персонала", status=403) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_teachers_pay(request): |
|
|
|
|
if not request.user.is_authenticated and (request.user.groups.filter(name="support") or request.user.is_superuser): |
|
|
|
|
return HttpResponseForbidden() |
|
|
|
|
|
|
|
|
|
date_from = request.GET.get('from', None) |
|
|
|
|
date_to = request.GET.get('to', None) |
|
|
|
|
email = request.GET.get('email', None) |
|
|
|
|
|
|
|
|
|
file_name = "teacher_pay_%s" % email |
|
|
|
|
file_name = file_name + "__from_%s" % date_from if date_from else file_name |
|
|
|
|
file_name = file_name + "__to_%s" % date_to if date_to else file_name |
|
|
|
|
|
|
|
|
|
progress_lessons = ProgressLesson.objects.filter( |
|
|
|
|
~Q(comment_tokens__len=0), |
|
|
|
|
checker__email=email, |
|
|
|
|
status='done', |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
progress_lessons = progress_lessons.filter(finish_date__lt=date_to) if date_to else progress_lessons |
|
|
|
|
progress_lessons = progress_lessons.filter(finish_date__gte=date_from) if date_from else progress_lessons |
|
|
|
|
|
|
|
|
|
response = HttpResponse(content_type='text/csv') |
|
|
|
|
response['Content-Disposition'] = 'attachment; filename="%s.csv"' % file_name |
|
|
|
|
|
|
|
|
|
writer = csv.writer(response) |
|
|
|
|
writer.writerow(['Почта студента', 'Имя студента', 'Курс', 'Дата', 'Время',]) |
|
|
|
|
|
|
|
|
|
for i in progress_lessons.order_by('-finish_date'): |
|
|
|
|
course_api = CourseParamsApi(i.progress.course_token) |
|
|
|
|
writer.writerow([ |
|
|
|
|
i.progress.user.email, |
|
|
|
|
i.progress.user.get_full_name(), |
|
|
|
|
course_api.get_slug_and_title()['title'], |
|
|
|
|
i.finish_date.date(), |
|
|
|
|
i.finish_date.time(), |
|
|
|
|
]) |
|
|
|
|
|
|
|
|
|
return response |
|
|
|
|
|