|
|
|
|
@ -1,10 +1,11 @@ |
|
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
|
from rest_framework.views import APIView |
|
|
|
|
from rest_framework.renderers import JSONRenderer |
|
|
|
|
from rest_framework.response import Response |
|
|
|
|
from django.db.models import Q |
|
|
|
|
from lms.global_decorators import transaction_decorator |
|
|
|
|
import csv |
|
|
|
|
from django.http import HttpResponse, HttpResponseForbidden |
|
|
|
|
|
|
|
|
|
from journals.models import Thread |
|
|
|
|
from journals.models import Thread, Journal |
|
|
|
|
from journals.serilizers import ThreadDetailSerializer, ThreadAdminSerializer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -31,9 +32,9 @@ class ThreadDetailView(APIView): |
|
|
|
|
thread.x = request.JSON.get('x', thread.x) |
|
|
|
|
thread.y = request.JSON.get('y', thread.y) |
|
|
|
|
thread.save() |
|
|
|
|
return Response(ThreadAdminSerializer(thread).data, self.status_code,) |
|
|
|
|
return Response(ThreadAdminSerializer(thread).data, self.status_code, ) |
|
|
|
|
except Thread.DoesNotExist: |
|
|
|
|
return Response("Thread doesn't exist.", self.status_code,) |
|
|
|
|
return Response("Thread doesn't exist.", self.status_code, ) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def get(request, key): |
|
|
|
|
@ -44,4 +45,39 @@ class ThreadDetailView(APIView): |
|
|
|
|
return Response("permission denied", status=403) |
|
|
|
|
|
|
|
|
|
except Thread.DoesNotExist: |
|
|
|
|
return Response("Thread not found", status=404) |
|
|
|
|
return Response("Thread not found", status=404) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_pay_stat(request, pk): |
|
|
|
|
if not request.user.is_authenticated and (request.user.groups.filter(name="supports") or request.user.is_superuser): |
|
|
|
|
return HttpResponseForbidden() |
|
|
|
|
|
|
|
|
|
date_from = request.GET.get('from', None) |
|
|
|
|
date_to = request.GET.get('to', None) |
|
|
|
|
|
|
|
|
|
file_name = "teacher_%s" % pk |
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
journals = Journal.objects.filter(user_id=pk, action_type="yes") |
|
|
|
|
journals = journals.filter(date__lt=date_to) if date_to else journals |
|
|
|
|
journals = journals.filter(date__gte=date_from) if date_from else journals |
|
|
|
|
|
|
|
|
|
response = HttpResponse(content_type='text/csv') |
|
|
|
|
response['Content-Disposition'] = 'attachment; filename="%s"' % file_name |
|
|
|
|
|
|
|
|
|
writer = csv.writer(response) |
|
|
|
|
writer.writerow(['student_email', 'full_name', 'course', 'theme', 'task_id', 'date']) |
|
|
|
|
|
|
|
|
|
for i in journals.order_by('-date'): |
|
|
|
|
student = get_user_model().objects.get(id=i.thread.key.split('user_')[1].split('__vertex')[0]) |
|
|
|
|
writer.writerow([ |
|
|
|
|
student.email, |
|
|
|
|
student.get_full_name(), |
|
|
|
|
i.content_object.course.title, |
|
|
|
|
i.content_object.vertex_set.all()[0].title, |
|
|
|
|
i.content_object.id, |
|
|
|
|
i.date.date() |
|
|
|
|
]) |
|
|
|
|
|
|
|
|
|
return response |
|
|
|
|
|