From 8f661b4de0efd9e7a34c8abbf7695971d721901c Mon Sep 17 00:00:00 2001 From: Horilla Date: Mon, 6 Oct 2025 20:27:55 +0530 Subject: [PATCH] [UPDT] HORILLA_API: Work type name field in serializers --- .../api_serializers/attendance/serializers.py | 3 ++ horilla_api/api_views/attendance/views.py | 39 +++++++++++++------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/horilla_api/api_serializers/attendance/serializers.py b/horilla_api/api_serializers/attendance/serializers.py index 71e7332f3..1bdd22025 100644 --- a/horilla_api/api_serializers/attendance/serializers.py +++ b/horilla_api/api_serializers/attendance/serializers.py @@ -61,6 +61,9 @@ class AttendanceRequestSerializer(serializers.ModelSerializer): source="employee_id.employee_last_name", read_only=True ) shift_name = serializers.CharField(source="shift_id.employee_shift", read_only=True) + work_type_name = serializers.CharField( + source="work_type_id.work_type", read_only=True + ) badge_id = serializers.CharField(source="employee_id.badge_id", read_only=True) employee_profile_url = serializers.SerializerMethodField(read_only=True) diff --git a/horilla_api/api_views/attendance/views.py b/horilla_api/api_views/attendance/views.py index e47a20715..9b4164fa9 100644 --- a/horilla_api/api_views/attendance/views.py +++ b/horilla_api/api_views/attendance/views.py @@ -436,29 +436,44 @@ class AttendanceRequestView(APIView): return pagenation.get_paginated_response(serializer.data) def post(self, request): - serializer = AttendanceRequestSerializer(data=request.data) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data, status=200) + from attendance.forms import NewRequestForm + + form = NewRequestForm(data=request.data) + if form.is_valid(): + work_type = form.cleaned_data.get("work_type_id") + + if not WorkType.objects.filter(pk=getattr(work_type, "pk", None)).exists(): + form.cleaned_data["work_type_id"] = None + + if form.new_instance is not None: + form.new_instance.save() + + return Response(form.data, status=200) employee_id = request.data.get("employee_id") attendance_date = request.data.get("attendance_date", date.today()) if Attendance.objects.filter( employee_id=employee_id, attendance_date=attendance_date ).exists(): return Response( - {error: list(message) for error, message in serializer.errors.items()}, + {error: list(message) for error, message in form.errors.items()}, status=400, ) - return Response(serializer.errors, status=404) + return Response(form.errors, status=404) - @manager_permission_required("attendance.update_attendance") def put(self, request, pk): + from attendance.forms import AttendanceRequestForm + attendance = Attendance.objects.get(id=pk) - serializer = AttendanceRequestSerializer(instance=attendance, data=request.data) - if serializer.is_valid(): - instance = serializer.save() + form = AttendanceRequestForm(data=request.data, instance=attendance) + if form.is_valid(): + attendance = Attendance.objects.get(id=form.instance.pk) + instance = form.save() instance.employee_id = attendance.employee_id instance.id = attendance.id + work_type = form.cleaned_data.get("work_type_id") + + if not WorkType.objects.filter(pk=getattr(work_type, "pk", None)).exists(): + form.cleaned_data["work_type_id"] = None if attendance.request_type != "create_request": attendance.requested_data = json.dumps(instance.serialize()) attendance.request_description = instance.request_description @@ -469,8 +484,8 @@ class AttendanceRequestView(APIView): instance.is_validate_request_approved = False instance.is_validate_request = True instance.save() - return Response(serializer.data, status=200) - return Response(serializer.errors, status=404) + return Response(form.data, status=200) + return Response(form.errors, status=404) class AttendanceRequestApproveView(APIView):