diff --git a/finance/views.py b/finance/views.py index e3aeaa1..4816240 100644 --- a/finance/views.py +++ b/finance/views.py @@ -346,22 +346,20 @@ class UnregisteredUserList(APIView): class UserRegisterDetail(APIView): - """入职财务登记列表查询""" + """未入职登记用户列表查询""" def post(self, request, *args, **kwargs): """ - 入职登记列表查询 + 查询在人事管理中已创建,但还没有完成入职财务登记的用户 :param request: :param args: :param kwargs: :return: """ - page = request.data.get('page') - per_page = request.data.get('per_page') - username = request.data.get('username') # 用户名搜索 - times = request.data.get('times') # 开始时间 - end_time = request.data.get('end_time') # 结束时间 - state = request.data.get('state') # 审批状态 + page = request.data.get('page', 1) + per_page = request.data.get('per_page', 10) + username = request.data.get('username', '') # 用户名搜索 + department = request.data.get('department', '') # 部门搜索 if not all([page, per_page]): return Response({ @@ -370,69 +368,74 @@ class UserRegisterDetail(APIView): 'code': 1 }, status=status.HTTP_400_BAD_REQUEST) - # 查询入职财务登记的审批记录 - Q_obj = Q(type="入职财务登记", is_deleted=False) + # 获取所有已完成入职登记的用户ID(状态为"已通过"的入职财务登记) + completed_registration_user_ids = Approval.objects.filter( + type="入职财务登记", + state="已通过", + is_deleted=False + ).values_list('user_id', flat=True) + # 将user_id转换为整数列表(因为user_id是CharField存储的字符串) + completed_user_ids = [] + for user_id_str in completed_registration_user_ids: + try: + completed_user_ids.append(int(user_id_str)) + except (ValueError, TypeError): + continue + + # 查询条件:在人事管理中,但不在已完成入职登记的用户列表中 + Q_obj = Q(is_deleted=False) + + # 排除已完成入职登记的用户 + if completed_user_ids: + Q_obj &= ~Q(id__in=completed_user_ids) + + # 用户名搜索 if username: - Q_obj &= Q(title__icontains=username) | Q(content__icontains=username) - if times and end_time: - Q_obj &= Q(times__gte=times) & Q(times__lte=end_time) - if state: - Q_obj &= Q(state=state) + Q_obj &= Q(username__icontains=username) - approvals = Approval.objects.filter(Q_obj).order_by('-id') - total = len(approvals) + # 部门搜索 + if department: + Q_obj &= Q(department__username__icontains=department) - paginator = Paginator(approvals, per_page) + # 查询用户 + users = User.objects.prefetch_related('department', 'role').filter(Q_obj).order_by('-id') + total = users.count() + + # 分页 + paginator = Paginator(users, per_page) try: - user_agents_page = paginator.page(page) + users_page = paginator.page(page) except PageNotAnInteger: - user_agents_page = paginator.page(1) + users_page = paginator.page(1) except EmptyPage: - user_agents_page = paginator.page(paginator.num_pages) + users_page = paginator.page(paginator.num_pages) data = [] - for approval in user_agents_page.object_list: - # 获取用户信息 - try: - user = User.objects.get(id=int(approval.user_id), is_deleted=False) - user_info = { - 'id': user.id, - 'username': user.username, - 'account': user.account, - 'position': user.position, - 'card': user.card, - 'Dateofjoining': user.Dateofjoining.strftime("%Y-%m-%d") if user.Dateofjoining else None, - 'salary': user.salary, - 'state': user.state, - 'team': user.team - } - except (User.DoesNotExist, ValueError): - user_info = { - 'id': None, - 'username': '用户不存在', - 'account': '', - 'position': '', - 'card': '', - 'Dateofjoining': None, - 'salary': '', - 'state': '', - 'team': '' - } + for user in users_page.object_list: + # 检查是否有待审核的入职登记(状态为"审核中") + pending_approval = Approval.objects.filter( + type="入职财务登记", + user_id=str(user.id), + state="审核中", + is_deleted=False + ).first() - item = { - 'id': approval.id, - 'title': approval.title, - 'content': approval.content, - 'times': approval.times.strftime("%Y-%m-%d") if approval.times else None, - 'completeTiem': approval.completeTiem.strftime("%Y-%m-%d") if approval.completeTiem else None, - 'personincharge': approval.personincharge, - 'state': approval.state, - 'type': approval.type, - 'user_id': approval.user_id, - 'user_info': user_info - } - data.append(item) + data.append({ + 'id': user.id, + 'username': user.username, + 'account': user.account, + 'card': user.card, + 'position': user.position, + 'mobilePhone': user.mobilePhone, + 'department': list(user.department.values('id', 'username')), + 'role': list(user.role.values('id', 'RoleName', 'permissionId')), + 'team': user.team, + 'Dateofjoining': user.Dateofjoining.strftime("%Y-%m-%d") if user.Dateofjoining else None, + 'state': user.state, + 'has_pending_approval': pending_approval is not None, # 是否有待审核的入职登记 + 'pending_approval_id': pending_approval.id if pending_approval else None + }) return Response({ 'message': '查询成功',