添加功能
This commit is contained in:
@@ -505,9 +505,73 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
])
|
||||
for other_node_log in other_node_logs:
|
||||
other_node_log.unlink()
|
||||
# 印章分组审批:章内串审,删除同章其他人的待办
|
||||
if getattr(current_node_log, 'stamp_id', False):
|
||||
same_stamp_logs = self.sudo().env["soong.workflow.log"].search(
|
||||
[("model", "=", self.res_model),
|
||||
("res_id", "=", self.res_id),
|
||||
("id", "!=", current_node_log.id),
|
||||
("node_id", "=", self.node_btn_id.node_id.id),
|
||||
("stamp_id", "=", current_node_log.stamp_id.id),
|
||||
("approval_state", "in", ['0', '1']),
|
||||
])
|
||||
same_stamp_logs.unlink()
|
||||
|
||||
# 检查是否为并审模式
|
||||
if self.approval_concatenation == 'bing': # 并审模式考勤异常
|
||||
# 印章分组审批:模型有 type_stamp_ids 字段且转交目标是「印章管理员」节点
|
||||
record_has_stamps = hasattr(record_id, 'type_stamp_ids') and bool(record_id.type_stamp_ids)
|
||||
is_transfer_to_stamp = self.trans_link_id and self.trans_link_id.name == '印章管理员'
|
||||
is_stamp_reviewer = bool(current_node_log and getattr(current_node_log, 'stamp_id', False))
|
||||
|
||||
if is_transfer_to_stamp and record_has_stamps:
|
||||
# 场景1:转交到印章管理员节点,按章分组建待办(章间并审、章内串审)
|
||||
next_node_id = record_id.workflow_id.node_ids.search([
|
||||
('name', '=', self.trans_link_id.name),
|
||||
('workflow_id', '=', record_id.workflow_id.id)
|
||||
], limit=1)
|
||||
all_user_ids = []
|
||||
all_employee_ids = []
|
||||
for stamp in record_id.type_stamp_ids:
|
||||
for user in stamp.user_ids:
|
||||
if user.id not in all_user_ids:
|
||||
all_user_ids.append(user.id)
|
||||
employee = self.env['hr.employee'].sudo().search([('user_id', '=', user.id)], limit=1)
|
||||
if employee and employee.id not in all_employee_ids:
|
||||
all_employee_ids.append(employee.id)
|
||||
self.sudo().env["soong.workflow.log"].create({
|
||||
"code": self.code,
|
||||
"model": self.res_model,
|
||||
"res_id": self.res_id,
|
||||
"node_id": next_node_id.id,
|
||||
"workflow_id": self.node_btn_id.workflow_id.id,
|
||||
"done_by": user.id,
|
||||
"node_btn_name": "4",
|
||||
"stamp_id": stamp.id,
|
||||
"approval_state": "0",
|
||||
})
|
||||
related_record = self.env[self.res_model].browse(self.res_id)
|
||||
if hasattr(related_record, 'self_users_ids'):
|
||||
related_record.self_users_ids = [(6, 0, all_user_ids)] if all_user_ids else [(5,)]
|
||||
record_id.write({'state': self.trans_link_id.name})
|
||||
workflow_record_id = self.env['soong.workflow.record'].sudo().search([('res_id', '=', record_id.id),
|
||||
('res_model', '=', record_id._name)])
|
||||
workflow_record_id.users_ids = [(4, uid) for uid in all_user_ids]
|
||||
workflow_record_id.employee_ids = all_employee_ids
|
||||
workflow_record_id.approve_state = "pending"
|
||||
action_id = self.env['ir.actions.act_window'].search([('res_model', '=', self.res_model)])[0]
|
||||
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8))
|
||||
for uid in all_user_ids:
|
||||
employee = self.env['hr.employee'].sudo().search([('user_id', '=', uid)], limit=1)
|
||||
if not employee:
|
||||
continue
|
||||
url = f'https://oa.thtzjt.com/web#id={record_id.id}&cids=2&menu_id={record_id.id}&action={action_id.id}&model={self.res_model}&view_type=form'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
||||
user_id=employee.wecom_userid,
|
||||
title=record_id._description + "印章审批",
|
||||
description=description, url=url,
|
||||
btntxt="查看详情")
|
||||
|
||||
# 检查是否为并审模式(印章节点的人提交时也走并审,实现章间并审)
|
||||
elif is_stamp_reviewer or self.approval_concatenation == 'bing': # 并审模式
|
||||
expected_employees = self.employee_ids
|
||||
if record_id.log_ids2:
|
||||
log_employee_ids = record_id.log_ids2.mapped('done_by.employee_id.id')
|
||||
|
||||
@@ -52,6 +52,11 @@ class SealsTypeSetting(models.Model):
|
||||
else:
|
||||
record.is_effect = record.start_date <= today <= record.end_date
|
||||
|
||||
class SoongWorkflowLog(models.Model):
|
||||
_inherit = 'soong.workflow.log'
|
||||
stamp_id = fields.Many2one('seals.type.setting', string='用章')
|
||||
|
||||
|
||||
class SealsScopeSetting(models.Model):
|
||||
_name = 'seals.scope.setting'
|
||||
_description = '用章范围'
|
||||
|
||||
Reference in New Issue
Block a user