diff --git a/finance/views.py b/finance/views.py index b46a77c..70ca49c 100644 --- a/finance/views.py +++ b/finance/views.py @@ -135,27 +135,56 @@ class UserRegister(APIView): 'code': 1 }, status=status.HTTP_400_BAD_REQUEST) - # 验证审批人是否存在(personincharge应该是用户名,不是部门ID) + # 判断personincharge是部门ID还是用户名 from User.utils import is_department_id + from User.models import Department + + final_personincharge = None # 最终用于审批记录的personincharge值 + if is_department_id(personincharge): - # 不允许使用部门ID,必须直接选择某个人 - return Response({ - 'status': 'error', - 'message': '请直接选择审批人(用户名),不能使用部门ID', - 'code': 1 - }, status=status.HTTP_400_BAD_REQUEST) + # 如果是部门ID,从部门中选择一个用户作为审批人 + try: + department_id = int(personincharge) + department = Department.objects.get(id=department_id, is_deleted=False) + except (Department.DoesNotExist, ValueError): + return Response({ + 'status': 'error', + 'message': f'部门ID"{personincharge}"不存在或无效', + 'code': 1 + }, status=status.HTTP_404_NOT_FOUND) + + # 获取部门中的用户列表 + department_users = User.objects.filter( + department__id=department_id, + is_deleted=False + ).order_by('id') + + if not department_users.exists(): + return Response({ + 'status': 'error', + 'message': f'部门"{department.username}"中没有可用用户,请选择其他审批人', + 'code': 1 + }, status=status.HTTP_400_BAD_REQUEST) + + # 选择部门中的第一个用户作为审批人 + approver = department_users.first() + # 审批记录中使用部门ID(符合审批系统的规则) + final_personincharge = personincharge # 使用部门ID + + else: + # 如果是用户名,直接验证用户是否存在 + try: + approver = User.objects.get(username=personincharge, is_deleted=False) + # 审批记录中使用用户名 + final_personincharge = personincharge # 使用用户名 + except User.DoesNotExist: + return Response({ + 'status': 'error', + 'message': f'审批人"{personincharge}"不存在或已被删除', + 'code': 1 + }, status=status.HTTP_404_NOT_FOUND) - # 验证审批人用户是否存在 - try: - approver = User.objects.get(username=personincharge, is_deleted=False) - except User.DoesNotExist: - return Response({ - 'status': 'error', - 'message': f'审批人"{personincharge}"不存在或已被删除', - 'code': 1 - }, status=status.HTTP_404_NOT_FOUND) - - # 创建审批记录(直接使用审批人用户名) + # 创建审批记录 # 审批内容包含从人事管理同步的团队信息 content_parts = [ f"{username}在{Dateofjoining}办理入职", @@ -171,7 +200,7 @@ class UserRegister(APIView): title=username + "入职财务登记", content=",".join(content_parts), times=formatted_date, - personincharge=personincharge, # 直接使用审批人用户名 + personincharge=final_personincharge, # 使用部门ID或用户名 state='审核中', type="入职财务登记", user_id=str(user.id)