67 lines
2.2 KiB
Python

import logging
from django.utils import timezone
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from attendance.services import (
get_attendance_auto_sync_settings,
run_attendance_auto_sync,
)
from ..serializers import (
AttendanceAutoSyncSettingsSerializer,
)
from ..support import _check_staff_access
logger = logging.getLogger(__name__)
class AttendanceAutoSyncSettingsAPIView(APIView):
serializer_class = AttendanceAutoSyncSettingsSerializer
permission_classes = [IsAuthenticated]
def get(self, request):
_check_staff_access(request.user)
return Response(
AttendanceAutoSyncSettingsSerializer(
get_attendance_auto_sync_settings()
).data
)
def patch(self, request):
_check_staff_access(request.user)
settings = get_attendance_auto_sync_settings()
was_enabled = settings.enabled
old_frequency = settings.frequency_minutes
serializer = AttendanceAutoSyncSettingsSerializer(
settings,
data=request.data,
partial=True,
)
serializer.is_valid(raise_exception=True)
instance = serializer.save(updated_by=request.user)
update_fields = ["updated_by", "updated_at"]
if not instance.enabled:
instance.next_run_at = None
update_fields.append("next_run_at")
elif not was_enabled or old_frequency != instance.frequency_minutes:
instance.next_run_at = timezone.now()
update_fields.append("next_run_at")
if update_fields != ["updated_by", "updated_at"]:
instance.save(update_fields=update_fields)
return Response(AttendanceAutoSyncSettingsSerializer(instance).data)
class AttendanceAutoSyncRunNowAPIView(APIView):
serializer_class = AttendanceAutoSyncSettingsSerializer
permission_classes = [IsAuthenticated]
def post(self, request):
_check_staff_access(request.user)
settings = run_attendance_auto_sync(force=True)
return Response(AttendanceAutoSyncSettingsSerializer(settings).data)