67 lines
2.2 KiB
Python
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)
|