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 import csv from django.http import HttpResponse, HttpResponseForbidden from journals.models import Thread, Journal from journals.serilizers import ThreadDetailSerializer, ThreadAdminSerializer class ThreadAdminListView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def get(self, request): return Response( [ThreadAdminSerializer(thread).data for thread in Thread.objects.filter(is_staff=True)], self.status_code, ) class ThreadDetailView(APIView): renderer_classes = (JSONRenderer,) status_code = 200 def post(self, request, key): try: thread = Thread.objects.get(key=key) thread.text = request.JSON.get('text', thread.text) thread.key = request.JSON.get('key', thread.key) 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, ) except Thread.DoesNotExist: return Response("Thread doesn't exist.", self.status_code, ) @staticmethod def get(request, key): try: thread = Thread.objects.get(key=key) if thread.check_perm(request.user): return Response(ThreadDetailSerializer(thread).data, status=200) return Response("permission denied", status=403) except Thread.DoesNotExist: 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