Files
ihrm/facedetection/views.py

170 lines
5.9 KiB
Python

from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required
from django.http import QueryDict
from django.shortcuts import redirect, render
from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from base.models import Company
from facedetection.forms import FaceDetectionSetupForm
from horilla.decorators import hx_request_required
from .serializers import *
class FaceDetectionConfigAPIView(APIView):
permission_classes = [IsAuthenticated]
def get_company(self, request):
try:
company = request.user.employee_get.get_company()
return company
except Exception as e:
raise serializers.ValidationError(e)
def get_facedetection(self, request):
company = self.get_company(request)
try:
facedetection = FaceDetection.objects.get_or_create(company_id=company)
return facedetection
except Exception as e:
raise serializers.ValidationError(e)
def get(self, request):
serializer = FaceDetectionSerializer(self.get_facedetection(request)[0])
return Response(serializer.data, status=status.HTTP_200_OK)
@method_decorator(
permission_required("facedetection.add_facedetection", raise_exception=True),
name="dispatch",
)
def post(self, request):
data = request.data
if isinstance(data, QueryDict):
data = data.dict()
data["company_id"] = self.get_company(request).id
serializer = FaceDetectionSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(
permission_required("facedetection.change_facedetection", raise_exception=True),
name="dispatch",
)
def put(self, request):
data = request.data
serializer = FaceDetectionSerializer(
self.get_facedetection(request)[0], data=data
)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(
permission_required("facedetection.delete_facedetection", raise_exception=True),
name="dispatch",
)
def delete(self, request):
self.get_facedetection(request).delete()
return Response(
{"message": "Facedetection deleted successfully"}, status=status.HTTP_200_OK
)
class EmployeeFaceDetectionGetPostAPIView(APIView):
permission_classes = [IsAuthenticated]
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
def get_company(self, request):
try:
company = request.user.employee_get.get_company()
return company
except Exception as e:
raise serializers.ValidationError(e)
def get_facedetection(self, request):
company = self.get_company(request)
try:
facedetection = FaceDetection.objects.get(company_id=company)
return facedetection
except Exception as e:
raise serializers.ValidationError(e)
def get(self, request):
facedetection = self.get_facedetection(request)
serializer = EmployeeFaceDetectionSerializer(facedetection)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, request):
if self.get_facedetection(request).start:
employee_id = request.user.employee_get.id
data = request.data
if isinstance(data, QueryDict):
data = data.dict()
data["employee_id"] = employee_id
serializer = EmployeeFaceDetectionSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
raise serializers.ValidationError("Facedetection not yet started..")
def get_company(request):
try:
selected_company = request.session.get("selected_company")
if selected_company == "all":
return None
company = Company.objects.get(id=selected_company)
return company
except Exception as e:
raise serializers.ValidationError(e)
def get_facedetection(request):
company = get_company(request)
try:
location = FaceDetection.objects.get(company_id=company)
return location
except Exception as e:
raise serializers.ValidationError(e)
@login_required
@permission_required("geofencing.add_localbackup")
@hx_request_required
def face_detection_config(request):
try:
form = FaceDetectionSetupForm(instance=get_facedetection(request))
except:
form = FaceDetectionSetupForm()
if request.method == "POST":
try:
form = FaceDetectionSetupForm(
request.POST, instance=get_facedetection(request)
)
except:
form = FaceDetectionSetupForm(request.POST)
if form.is_valid():
facedetection = form.save(
commit=False,
)
facedetection.company_id = get_company(request)
facedetection.save()
messages.success(request, _("facedetection config created successfully."))
else:
messages.info(request, "Not valid")
return render(request, "face_config.html", {"form": form})