84 lines
3.0 KiB
Python
84 lines
3.0 KiB
Python
import logging
|
|
|
|
from django.shortcuts import get_object_or_404
|
|
from rest_framework.exceptions import PermissionDenied
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from attendance.models import (
|
|
EmployeeWorkSchedule,
|
|
StandardWorkSchedule,
|
|
)
|
|
from employees.models import Employee
|
|
|
|
from ..serializers import (
|
|
EmployeeWorkScheduleSerializer,
|
|
StandardWorkScheduleSerializer,
|
|
default_standard_work_schedule_response,
|
|
default_work_schedule_response,
|
|
)
|
|
from ..support import _check_employee_access, _check_staff_access
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class EmployeeWorkScheduleAPIView(APIView):
|
|
serializer_class = EmployeeWorkScheduleSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_employee(self, employee_id):
|
|
_check_employee_access(self.request.user, employee_id)
|
|
return get_object_or_404(Employee, pk=employee_id)
|
|
|
|
def get(self, request, employee_id):
|
|
employee = self.get_employee(employee_id)
|
|
try:
|
|
schedule = employee.work_schedule
|
|
except EmployeeWorkSchedule.DoesNotExist:
|
|
schedule = None
|
|
if schedule is None:
|
|
return Response(default_work_schedule_response(employee.id))
|
|
return Response(EmployeeWorkScheduleSerializer(schedule).data)
|
|
|
|
def patch(self, request, employee_id):
|
|
if not (request.user.is_staff or request.user.is_superuser):
|
|
raise PermissionDenied("You don't have permission to edit schedules")
|
|
employee = get_object_or_404(Employee, pk=employee_id)
|
|
try:
|
|
schedule = employee.work_schedule
|
|
except EmployeeWorkSchedule.DoesNotExist:
|
|
schedule = None
|
|
serializer = EmployeeWorkScheduleSerializer(
|
|
schedule,
|
|
data=request.data,
|
|
partial=True,
|
|
)
|
|
serializer.is_valid(raise_exception=True)
|
|
instance = serializer.save(employee=employee, updated_by=request.user)
|
|
return Response(EmployeeWorkScheduleSerializer(instance).data)
|
|
|
|
|
|
class StandardWorkScheduleAPIView(APIView):
|
|
serializer_class = StandardWorkScheduleSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get(self, request):
|
|
_check_staff_access(request.user)
|
|
schedule = StandardWorkSchedule.objects.order_by("id").first()
|
|
if schedule is None:
|
|
return Response(default_standard_work_schedule_response())
|
|
return Response(StandardWorkScheduleSerializer(schedule).data)
|
|
|
|
def patch(self, request):
|
|
_check_staff_access(request.user)
|
|
schedule = StandardWorkSchedule.objects.order_by("id").first()
|
|
serializer = StandardWorkScheduleSerializer(
|
|
schedule,
|
|
data=request.data,
|
|
partial=True,
|
|
)
|
|
serializer.is_valid(raise_exception=True)
|
|
instance = serializer.save(updated_by=request.user)
|
|
return Response(StandardWorkScheduleSerializer(instance).data)
|