tanvirraj
5/5/2016 - 4:50 AM

view.py

from django.shortcuts import render, get_object_or_404, render_to_response, HttpResponseRedirect
from django.shortcuts import render, render_to_response
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework.viewsets import ModelViewSet
from rest_framework.views import APIView
from django.views.decorators.csrf import csrf_exempt
from rest_framework import status
from employee.models import EmployeeResume
from employee.serializers import EmployeeResumeSerializer
from django.http import HttpResponse, Http404
from rest_framework.renderers import JSONRenderer
from rolepermissions.verifications import has_permission
from rest_framework.parsers import JSONParser
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
import json


# Create your views here.


class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders its content into JSON.
    """

    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)


def resume_list(request):
    resumes = EmployeeResume.objects.all()
    context = RequestContext(request)
    ctx = {'resumes': resumes}
    return render_to_response('employee/resume_list.html', ctx, context)


def resume_list_for_agency(request):
    context = RequestContext(request)
    return render_to_response('employee/resume_list_for_agency.html', context)


def resume_detail(request, pk):
    context = RequestContext(request)
    # ctx_photo = serializers.serialize('json', user_photo)
    return render_to_response('employee/resume_detail.html', {'pk': pk}, context)


@login_required
def send_resume(request):
    if has_permission(request.user, 'create_resume'):
        context = RequestContext(request)
        return render_to_response('employee/send_resume.html', {}, context)
    else:
        return HttpResponseRedirect('/1971/accounts/sign_up/')


@api_view(['POST', 'GET'])
def ResumeUpload(request):
    if request.method == 'POST':
        if has_permission(request.user, 'create_resume'):
            user = request.user
            serializer = EmployeeResumeSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save(employee=user)
                return JSONResponse(serializer.data, status=201)
            return JSONResponse(serializer.errors, status=400)
        else:
            return HttpResponseRedirect('/1971/accounts/sign_up/')


@api_view(['POST', 'GET'])
def ResumeList(request):
    if request.method == 'GET':
        count = request.GET.get("count", None)
        search = request.GET.get("search", None)

        if search is None or search == "":
            resumes = EmployeeResume.objects.all()
        else:
            resumes = EmployeeResume.objects.filter(employee_resuem__icontains=search)

        if count is None:
            serializer = PaginatedEmployeeResumeSerializer(resumes, request, 10)

        else:
            serializer = PaginatedEmployeeResumeSerializer(resumes, request, count)
        return Response(serializer.data)


class PaginatedEmployeeResumeSerializer():
    def __init__(self, resumes, request, num):
        paginator = Paginator(resumes, num)
        page = request.QUERY_PARAMS.get('page')
        try:
            resumes = paginator.page(page)
        except PageNotAnInteger:
            resumes = paginator.page(1)
        except EmptyPage:
            resumes = paginator.page(paginator.num_pages)
        count = paginator.count

        previous = None if not resumes.has_previous() else resumes.previous_page_number()
        next = None if not resumes.has_next() else resumes.next_page_number()
        serializer = EmployeeResumeSerializer(resumes, many=True)
        self.data = {'count': count, 'previous': previous,
                     'next': next, 'resumes': serializer.data}


class ResumeDetail(APIView):
    def get_object(self, pk):
        try:
            return EmployeeResume.objects.get(pk=pk)
        except  EmployeeResume.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        resume = self.get_object(pk)
        serializer = EmployeeResumeSerializer(resume)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        if has_permission(request.user, 'update_resume'):

            resume = EmployeeResume.objects.get(pk=pk, created_by=request.user)
            serializer = EmployeeResumeSerializer(resume, data=request.data)
            if serializer.is_valid():
                serializer.save()
                return JSONResponse(serializer.data)
            return JSONResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        else:
            return HttpResponseRedirect('/1971/accounts/sign_up/')

    def delete(self, request, pk, format=None):
        if has_permission(request.user, 'delete_resume'):
            resume = EmployeeResume.objects.get(pk=pk, created_by=request.user)

            resume.delete()
            return JSONResponse(status=status.HTTP_204_NO_CONTENT)
        else:
            return HttpResponseRedirect('/1971/accounts/sign_up/')


def get_resume_id(request):
    try:
        resume = EmployeeResume.objects.get(employee=request.user)

        resume_id = resume.id
        return HttpResponse(json.dumps({'resume_id': resume_id}), content_type="application/json")
    except:
        return HttpResponse(status=status.HTTP_204_NO_CONTENT)