diff --git a/progress/urls.py b/progress/urls.py index b78ac8f..44b7bd1 100644 --- a/progress/urls.py +++ b/progress/urls.py @@ -7,4 +7,5 @@ urlpatterns = [ url(r'student/$', views.StudentUpdateProgress.as_view()), url(r'teacher/$', views.TeacherUpdateProgress.as_view()), url(r'set-progress/$', views.SetProgress.as_view()), + url(r'get_hw_pay/$', views.get_teachers_pay), ] \ No newline at end of file diff --git a/progress/views.py b/progress/views.py index dd8ab83..32d58df 100644 --- a/progress/views.py +++ b/progress/views.py @@ -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 @@ -349,3 +349,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