优化自动建案逻辑
This commit is contained in:
@@ -611,16 +611,23 @@ def get_approvers_from_record(business_record, approval=None):
|
||||
|
||||
def ensure_case_for_approved_project(project, approval=None):
|
||||
"""
|
||||
立项审批通过后,若该立项尚未在案件管理中有对应案件,则自动创建一条案件记录。
|
||||
立案时间使用审批通过时间(approval.completeTiem),案件会出现在案件管理列表中。
|
||||
|
||||
立项审批进入「待查看」或「已通过」时,若该立项尚未在案件管理中有对应案件,则自动创建一条案件记录。
|
||||
立案时间 = 最后审批人审批通过的时间(进入待查看时写入 approval.completeTiem),不再是申请人查看时间。
|
||||
- 待查看:最后一个审核人通过后即建案,立案时间 = 当日(completeTiem 在进入待查看时已写入)。
|
||||
- 已通过:申请人查看后若尚未建案则补建,立案时间仍用 approval.completeTiem(最后审批人通过日)。
|
||||
|
||||
Args:
|
||||
project: ProjectRegistration 实例,且 state 已为「已通过」
|
||||
approval: 可选,立项登记的 Approval 记录,用于取 completeTiem;不传则按 user_id 查询
|
||||
project: ProjectRegistration 实例
|
||||
approval: 可选,立项登记的 Approval 记录;不传则按 user_id 查询(仅查已通过)
|
||||
"""
|
||||
from business.models import Case, ProjectRegistration
|
||||
from .models import Approval as ApprovalModel
|
||||
if not project or getattr(project, 'state', None) != "已通过":
|
||||
if not project:
|
||||
return
|
||||
# 允许建案:立项已通过,或审批已进入待查看(审核人全部通过)
|
||||
project_approved = getattr(project, 'state', None) == "已通过"
|
||||
approval_pending_view = approval and getattr(approval, 'state', None) == "待查看"
|
||||
if not project_approved and not approval_pending_view:
|
||||
return
|
||||
if Case.objects.filter(project_id=project.id, is_deleted=False).exists():
|
||||
return
|
||||
@@ -702,15 +709,16 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
# 已通过、已查看、未传 state 均视为申请人已查看完成
|
||||
if state == "已通过" or state == "已查看" or (state is None or state == ""):
|
||||
approval.state = "已通过"
|
||||
# 立项登记在进入待查看时已写入 completeTiem(最后审批人通过时间),此处不改写;其他类型或未写时补写
|
||||
if not approval.completeTiem:
|
||||
approval.completeTiem = date.today() # 审批通过时间,用于案件立案时间等
|
||||
approval.completeTiem = date.today()
|
||||
if "已通过" not in approval.content:
|
||||
approval.content = (approval.content or "") + ",申请人已查看"
|
||||
approval.save(update_fields=['state', 'content', 'completeTiem'])
|
||||
if business_record and hasattr(business_record, 'state'):
|
||||
business_record.state = final_state_map.get("已通过", "已通过")
|
||||
business_record.save(update_fields=['state'])
|
||||
# 立项审批通过后,自动在案件管理中创建案件(立案时间=审批通过时间)
|
||||
# 立项:若待查看时已建案此处不会重复创建;若未建案则补建。立案时间不再按申请人查看日更新
|
||||
if approval_type == "立项登记" and business_record:
|
||||
ensure_case_for_approved_project(business_record, approval=approval)
|
||||
return True, None
|
||||
@@ -811,9 +819,15 @@ def process_approval_flow(approval, business_record, current_approver, state,
|
||||
logger.info(f"process_approval_flow: 最后一个审核人已审核,流转到申请人待查看: {applicant}")
|
||||
approval.personincharge = applicant
|
||||
approval.state = "待查看"
|
||||
# 立项登记:立案时间 = 最后审批人通过时间,在此刻写入 completeTiem
|
||||
if approval_type == "立项登记":
|
||||
approval.completeTiem = date.today()
|
||||
if "待申请人查看" not in (approval.content or ""):
|
||||
approval.content = (approval.content or "") + ",待申请人查看"
|
||||
approval.save(update_fields=['state', 'personincharge', 'content'])
|
||||
approval.save(update_fields=['state', 'personincharge', 'content', 'completeTiem'] if approval_type == "立项登记" else ['state', 'personincharge', 'content'])
|
||||
# 立项登记:进入待查看时即自动建案,立案时间使用刚写入的 completeTiem(最后审批人通过日)
|
||||
if approval_type == "立项登记" and business_record:
|
||||
ensure_case_for_approved_project(business_record, approval=approval)
|
||||
# 不更新业务记录状态,等申请人查看后再设为已通过
|
||||
return False, None
|
||||
# 其他类型:抄送财务
|
||||
@@ -951,6 +965,9 @@ def create_approval_with_team_logic(team_name, approvers, title, content, approv
|
||||
user_id=str(user_id),
|
||||
applicant=applicant
|
||||
)
|
||||
# 立项登记:进入待查看时即自动建案(个人团队无审核人,直接待查看)
|
||||
if approval_type == "立项登记" and business_record:
|
||||
ensure_case_for_approved_project(business_record, approval=approval)
|
||||
# 不更新业务记录状态,等申请人查看后再设为已通过
|
||||
return approval, None, False
|
||||
# 其他类型:个人团队或无团队,直接到财务团队审核
|
||||
|
||||
Reference in New Issue
Block a user