From 6a203d108b491581ea2fca4219fd4d639e229ef9 Mon Sep 17 00:00:00 2001 From: Denislav Davidov Date: Wed, 19 Feb 2025 10:19:23 +0000 Subject: [PATCH] adding error handleing --- payroll/api.py | 63 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/payroll/api.py b/payroll/api.py index b8b12cf7..98f2b2c7 100644 --- a/payroll/api.py +++ b/payroll/api.py @@ -2,6 +2,7 @@ from django.conf import settings from django.http import JsonResponse +from django.core.exceptions import ValidationError from core.utils.generic_helpers import get_previous_months_data from payroll.views import EditPayrollBaseView @@ -87,26 +88,52 @@ def post(self, request, *args, **kwargs): ) return JsonResponse({}) - - + class EmployeeNotesApi(EditPayrollBaseView): def post(self, request, *args, **kwargs): - data = json.loads(request.body) - notes = data["notes"] - employee_no = data["employee_no"] - employee_data = payroll_service.get_employee_data( - self.cost_centre, - self.financial_year, - ) - employee = next( - (item for item in employee_data if str(item["employee_no"]) == employee_no), - None, - ) - if employee: - payroll_service.update_employee_notes( - notes, - employee_no, + try: + data = json.loads(request.body) + if not data: + return JsonResponse( + {"error": "Missing request body"}, + status=400 + ) + notes = data.get('notes') + employee_no = data.get('employee_no') + + if not notes or not employee_no: + return JsonResponse( + {"error": "Both 'notes' and 'employee_no' are required"}, + status=400 + ) + employee_data = payroll_service.get_employee_data( self.cost_centre, self.financial_year, ) - return JsonResponse({}) + employee = next( + (item for item in employee_data if str(item["employee_no"]) == employee_no), + None, + ) + if employee: + payroll_service.update_employee_notes( + notes, + employee_no, + self.cost_centre, + self.financial_year, + ) + return JsonResponse({}, status=204) + except json.JSONDecodeError: + return JsonResponse( + {"error": "Invalid JSON format"}, + status=400 + ) + except ValidationError as e: + return JsonResponse( + {"error": str(e)}, + status=400 + ) + except Exception: + return JsonResponse( + {"error": "An error occurred while processing the request"}, + status=500 + ) \ No newline at end of file