优化了投标待办
This commit is contained in:
@@ -886,14 +886,37 @@ class roxyExhibition(APIView):
|
||||
except Exception:
|
||||
completed_bid_query = completed_bid_applicant
|
||||
|
||||
# 组合查询:部门匹配 OR 审批员匹配 OR 财务匹配 OR 已通过的待办查询 OR 已通过的投标登记(申请人/审批人可见)
|
||||
# 立项登记审批完成后,申请人与审批人均可见
|
||||
completed_project_query = Q()
|
||||
completed_project_applicant = Q(type="立项登记", state="已通过", applicant=user.username)
|
||||
try:
|
||||
approved_project_ids = list(Approval.objects.filter(type="立项登记", state="已通过").values_list('user_id', flat=True))
|
||||
project_ids_where_user_is_approver = []
|
||||
if approved_project_ids:
|
||||
project_ids_int = [int(x) for x in approved_project_ids if str(x).isdigit()]
|
||||
from business.models import ProjectRegistration
|
||||
for proj in ProjectRegistration.objects.filter(id__in=project_ids_int, is_deleted=False):
|
||||
try:
|
||||
order = json.loads(proj.approvers_order or '[]')
|
||||
if isinstance(order, list) and user.username in order:
|
||||
project_ids_where_user_is_approver.append(proj.id)
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
pass
|
||||
if project_ids_where_user_is_approver:
|
||||
completed_project_query = completed_project_applicant | Q(type="立项登记", state="已通过", user_id__in=[str(x) for x in project_ids_where_user_is_approver])
|
||||
else:
|
||||
completed_project_query = completed_project_applicant
|
||||
except Exception:
|
||||
completed_project_query = completed_project_applicant
|
||||
|
||||
# 组合查询:部门匹配 OR 审批员匹配 OR 财务匹配 OR 已通过的待办查询 OR 已通过的投标/立项登记(申请人/审批人可见)
|
||||
# 如果用户有部门,使用部门匹配;否则只使用审批员匹配
|
||||
# 注意:审批员匹配必须精确匹配当前用户名,确保多人团队审核时,只有当前审核人能看到
|
||||
if user_department_ids_str:
|
||||
query &= (department_query | person_query | finance_query | completed_todo_query | completed_bid_query)
|
||||
query &= (department_query | person_query | finance_query | completed_todo_query | completed_bid_query | completed_project_query)
|
||||
else:
|
||||
# 如果用户没有部门,匹配审批员或财务(仅财务部人员)或已通过的待办或已通过的投标登记
|
||||
query &= (person_query | finance_query | completed_todo_query | completed_bid_query)
|
||||
# 如果用户没有部门,匹配审批员或财务(仅财务部人员)或已通过的待办或已通过的投标/立项登记
|
||||
query &= (person_query | finance_query | completed_todo_query | completed_bid_query | completed_project_query)
|
||||
|
||||
# 添加调试日志
|
||||
import logging
|
||||
@@ -1361,8 +1384,33 @@ class roxyExhibition(APIView):
|
||||
settlement_salary = salary_match.group(1)
|
||||
itme["settlement_salary"] = settlement_salary
|
||||
|
||||
# 如果是立项登记类型,检索冲突信息并添加到返回字段
|
||||
# 如果是立项登记类型:返回申请人、审批流程、冲突信息等(审批人--->申请人,审批完成后申请人/审批人可见)
|
||||
if info.type == "立项登记":
|
||||
# 申请人:优先从 Approval.applicant 取,否则从 content 解析「申请人:xxx」
|
||||
submitter_proj = getattr(info, 'applicant', None)
|
||||
if not submitter_proj and content and "申请人:" in content:
|
||||
import re
|
||||
m = re.search(r'申请人:([^,→\s]+)', content)
|
||||
if m:
|
||||
submitter_proj = m.group(1).strip()
|
||||
itme["submitter"] = submitter_proj or ""
|
||||
itme["applicant"] = submitter_proj or ""
|
||||
try:
|
||||
project_id = int(info.user_id)
|
||||
project = ProjectRegistration.objects.filter(id=project_id, is_deleted=False).first()
|
||||
approvers_order_list_proj = []
|
||||
if project and getattr(project, 'approvers_order', None):
|
||||
try:
|
||||
order = json.loads(project.approvers_order or '[]')
|
||||
approvers_order_list_proj = order if isinstance(order, list) else []
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
pass
|
||||
itme["approvers_order"] = approvers_order_list_proj
|
||||
content_val_proj = itme.get("content") or ""
|
||||
if submitter_proj and "申请人:" not in content_val_proj and "提交人:" not in content_val_proj:
|
||||
itme["content"] = content_val_proj.rstrip() + ",申请人:" + submitter_proj
|
||||
except (ValueError, TypeError, AttributeError):
|
||||
itme["approvers_order"] = []
|
||||
try:
|
||||
from business.views import search_related_records
|
||||
|
||||
|
||||
Reference in New Issue
Block a user