|
|
|
|
@ -12,6 +12,7 @@ from rest_framework.response import Response |
|
|
|
|
from rest_framework.views import APIView |
|
|
|
|
from django.db.models import Q |
|
|
|
|
|
|
|
|
|
from access.serializers import UserProgressSearchSerializer |
|
|
|
|
from courses.models import Course |
|
|
|
|
from progress.models import ProgressLesson, Progress |
|
|
|
|
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer, \ |
|
|
|
|
@ -201,6 +202,13 @@ class StudentUpdateProgress(APIView): |
|
|
|
|
not pv.progress.progresslesson_set.filter(status=ProgressLesson.STATUSES.wait).exists(): |
|
|
|
|
pv.status = ProgressLesson.STATUSES.wait |
|
|
|
|
pv.comment_tokens.append(comment) |
|
|
|
|
msg = EmailMessage( |
|
|
|
|
'Студент оставил комментарий', |
|
|
|
|
'''Студент "%s" оставил вам комментарий.''' % request.user.get_full_name(), |
|
|
|
|
'robo@skillbox.ru', |
|
|
|
|
[pv.cheker.email], |
|
|
|
|
) |
|
|
|
|
msg.send() |
|
|
|
|
|
|
|
|
|
elif comment is None: |
|
|
|
|
return Response("Не преложен комментарий", status=400) |
|
|
|
|
@ -248,36 +256,74 @@ class UploadCourseProgressUserView(APIView): |
|
|
|
|
return Response(status=403) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserGuardView(APIView): |
|
|
|
|
class FindProgressView(APIView): |
|
|
|
|
renderer_classes = (JSONRenderer,) |
|
|
|
|
permission_classes = (IsAuthenticated,) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def get(request, pk, page): |
|
|
|
|
def get(request): |
|
|
|
|
if not request.user.is_staff: |
|
|
|
|
return Response("Только сотрудники персонала могут запрашивать инфо по прогрессу", status=403) |
|
|
|
|
key = request.GET.get('key', None) |
|
|
|
|
count = int(request.GET.get('count', '10')) |
|
|
|
|
if key: |
|
|
|
|
res = get_user_model().objects.filter( |
|
|
|
|
Q(id__contains=key) | Q(email__contains=key.lower()) | Q(first_name__contains=key) | |
|
|
|
|
Q(last_name__contains=key) | Q(account__phone__contains=key) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
res = get_user_model().objects.all() |
|
|
|
|
|
|
|
|
|
res = res[:(count if len(res) > count else len(res))] |
|
|
|
|
return Response([UserProgressSearchSerializer(i).data for i in res], status=200) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FreezeProgressView(APIView): |
|
|
|
|
renderer_classes = (JSONRenderer,) |
|
|
|
|
permission_classes = (IsAuthenticated,) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def post(request): |
|
|
|
|
if not request.user.is_staff: |
|
|
|
|
return Response("Только сотрудники персонала могут вносить изменение в прогресс", status=403) |
|
|
|
|
key = request.JSON.get('id', None) |
|
|
|
|
is_freeze = request.JSON.get('is_freeze', False) |
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
user = get_user_model().objects.get(out_key=pk) |
|
|
|
|
except get_user_model().DoesNotExist: |
|
|
|
|
return Response("User doesn't exist", status=404) |
|
|
|
|
p = Progress.objects.get(id=key) |
|
|
|
|
p.is_freeze = is_freeze |
|
|
|
|
p.save() |
|
|
|
|
except Progress.DoesNotExist: |
|
|
|
|
return Response("не найден прогресс по заданному id", status=404) |
|
|
|
|
|
|
|
|
|
is_i = request.user == user |
|
|
|
|
res_403 = Response('Permission denied', status=403) |
|
|
|
|
res_204 = Response(status=204) |
|
|
|
|
return Response(status=204) |
|
|
|
|
|
|
|
|
|
if is_i and not request.user.groups.filter(name='teachers').exists() and page == 'homeworks': |
|
|
|
|
return res_403 |
|
|
|
|
|
|
|
|
|
if is_i and not \ |
|
|
|
|
request.user.groups.filter(name__in=['students', 'managers', 'lead_managers']).exists() \ |
|
|
|
|
and page == 'payment': |
|
|
|
|
return res_403 |
|
|
|
|
class ChangeTeacherView(APIView): |
|
|
|
|
renderer_classes = (JSONRenderer,) |
|
|
|
|
permission_classes = (IsAuthenticated,) |
|
|
|
|
|
|
|
|
|
if is_i: |
|
|
|
|
return res_204 |
|
|
|
|
@staticmethod |
|
|
|
|
def post(request): |
|
|
|
|
if not request.user.is_staff: |
|
|
|
|
return Response("Только сотрудники персонала могут вносить изменение в прогресс", status=403) |
|
|
|
|
key = request.JSON.get('id', None) |
|
|
|
|
teacher_email = request.JSON.get('teacher_email', False) |
|
|
|
|
|
|
|
|
|
if page == 'profile' and (request.user.is_superuser or request.user.is_staff): |
|
|
|
|
return res_204 |
|
|
|
|
try: |
|
|
|
|
p = Progress.objects.get(id=key) |
|
|
|
|
try: |
|
|
|
|
teacher = get_user_model().objects.get(email=teacher_email.lower()) |
|
|
|
|
except get_user_model().DoesNotExist: |
|
|
|
|
return Response("Нет пользователя c таким email", status=404) |
|
|
|
|
p.teacher = teacher |
|
|
|
|
p.progresslesson_set.filter(status=ProgressLesson.STATUSES.wait).update(checker=teacher) |
|
|
|
|
p.save() |
|
|
|
|
except Progress.DoesNotExist: |
|
|
|
|
return Response("не найден прогресс по заданному id", status=404) |
|
|
|
|
|
|
|
|
|
return res_403 |
|
|
|
|
return Response(status=204) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SetProgress(APIView): |
|
|
|
|
|