diff --git a/soong_workflow/models/soong_workflow_log.py b/soong_workflow/models/soong_workflow_log.py
index 5d52bbcc1..ee89f05c6 100644
--- a/soong_workflow/models/soong_workflow_log.py
+++ b/soong_workflow/models/soong_workflow_log.py
@@ -29,7 +29,7 @@ class SoongWorkflowLog(models.Model):
date_create = fields.Datetime(string="时间", default=lambda self: fields.Datetime.now())
document_ids = fields.Many2many('ir.attachment', string="附件")
active = fields.Boolean(string="归档", default=True)
-
+ is_active_operate = fields.Boolean(string="归档操作")
display_field = fields.Char(string="显示字段", compute="_compute_display_field")
@api.depends("lase_click_date", "done_by")
diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py
index 9fe7dca3a..29b427174 100644
--- a/soong_workflow/models/soong_workflow_mixin.py
+++ b/soong_workflow/models/soong_workflow_mixin.py
@@ -110,20 +110,17 @@ class SoongWorkflowMixin(models.AbstractModel):
def _compute_is_active(self):
current_user_id = self.env.user.id
- if hasattr(self, 'user_id') and self.user_id:
- query_user_id = self.user_id.id
- elif hasattr(self, 'users_id') and self.users_id:
- query_user_id = self.users_id.id
- else:
- query_user_id = self.env.user.id
if self.log_ids:
- if query_user_id == current_user_id and self.work_end and self.log_ids[-1].approval_state in ['0', '1']:
+ if self.log_ids[0].done_by.id == current_user_id and self.work_end and self.log_ids[-1].approval_state in ['0', '1']:
self.is_active = True
else:
self.is_active = False
else:
self.is_active = False
+ if self.log_ids[-1].name == '归档' and self.log_ids[-1].is_active_operate == True:
+ self.is_active = False
+
def _compute_is_confirm(self):
for record in self:
record.is_confirm = False
@@ -137,6 +134,10 @@ class SoongWorkflowMixin(models.AbstractModel):
if (not lg1 and not lg2) or not record.is_confirm:
record.is_end = True
+ if record.log_ids:
+ if record.log_ids[-1].name == '归档':
+ record.is_end = False
+
@api.depends("node_id", "log_ids")
def _compute_approval_sign_ids(self):
for record in self:
diff --git a/soong_workflow/models/soong_workflow_node.py b/soong_workflow/models/soong_workflow_node.py
index 84486ad5b..6bb3310e7 100644
--- a/soong_workflow/models/soong_workflow_node.py
+++ b/soong_workflow/models/soong_workflow_node.py
@@ -893,6 +893,8 @@ class SoongWorkflowNodeButton(models.Model):
result = True
if result:
# Run Proper Action
+ if rec.action_type == 'confirm':
+ rec.action_type = 'code'
func = getattr(self, "_run_%s" % rec.action_type)
func_result = func()
try:
diff --git a/soong_workflow/templates/soong_workflow_templates.xml b/soong_workflow/templates/soong_workflow_templates.xml
index 61b18e989..4a0cb1b8f 100644
--- a/soong_workflow/templates/soong_workflow_templates.xml
+++ b/soong_workflow/templates/soong_workflow_templates.xml
@@ -11,6 +11,7 @@
+
@@ -68,6 +69,7 @@
+
diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py
index 9b82c4fd6..cdbe495b0 100644
--- a/soong_workflow/wizard/soong_workflow_comment_wizard.py
+++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py
@@ -616,33 +616,27 @@ class SoongWorkflowCommentWizard(models.TransientModel):
# if not record_id.log_ids2.search([('approval_state', '=', '0')]) or record_id.log_ids2:
last_log = record_id.log_ids[-1] if record_id.log_ids else None
if last_log:
- applicant = None
- for field_name in ['user_id', 'users_id']:
- if hasattr(record_id, field_name):
- applicant = getattr(record_id, field_name)
- if applicant:
- break
same_name_logs = record_id.log_ids.filtered(
lambda log: log.name == last_log.name and log.node_btn_name == '4' and log.id != last_log.id
)
- all_approved = all(log.approval_state == '3' for log in same_name_logs) or not same_name_logs
+ all_approved = all(log.approval_state in ['2', '3'] for log in same_name_logs) or not same_name_logs
log2_ids_all_qualified = True
if record_id.log_ids2:
- log2_ids_all_qualified = all(log2.approval_state == '2' for log2 in record_id.log_ids2)
+ log2_ids_all_qualified = all(log2.approval_state in ['2', '3'] for log2 in record_id.log_ids2)
- if all_approved and log2_ids_all_qualified:
+ if all_approved and log2_ids_all_qualified and not self.circulated_employee_ids:
workflow_record = self.env['soong.workflow.record'].search([('code', '=', record_id.code)],
limit=1)
has_archive_btn = any(btn_name.name == '归档' for btn_name in self.node_btn_id.node_id.button_ids)
if has_archive_btn:
+ log_id = record_id.log_ids.filtered(lambda l: l.name == '归档')
if workflow_record:
workflow_record.write({
'approve_state': 'end',
- 'employee_ids': [(6, 0, [applicant.employee_ids.id])],
+ 'employee_ids': [(6, 0, [record_id.log_ids[0].done_by.employee_id.id])],
'soong_state': 'to_active',
'node_id': False,
})
- log_id = record_id.log_ids.filtered(lambda l: l.name == '归档')
if not log_id:
self.env["soong.workflow.log"].create({
'name': '归档',
@@ -651,10 +645,19 @@ class SoongWorkflowCommentWizard(models.TransientModel):
"res_id": self.res_id,
"workflow_id": self.node_btn_id.workflow_id.id,
"lase_click_date": fields.Datetime.now(),
- "done_by": applicant.id,
+ "done_by": record_id.log_ids[0].done_by.id,
"approval_state": "0",
"node_btn_id": self.node_btn_id.id,
})
+ else:
+ log_id.write({
+ "approval_state": "2",
+ })
+ workflow_record.write({
+ 'soong_state': 'active',
+ 'employee_ids': False,
+ })
+
else:
if workflow_record:
workflow_record.write({
@@ -705,7 +708,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
title=record_id._description,
description=f"标题为{record_id.name}的{record_id._description}已结束,请归档",
url=url, btntxt="查看详情")
- self.node_btn_id.with_context(cx).run()
+
+ self.node_btn_id.with_context(cx).run()
if self.node_btn_name == "分发":
record_id.is_send = True
menu_id = self.env['ir.ui.menu'].search([('name', '=', '行政收文')])
@@ -838,14 +842,18 @@ class SoongWorkflowCommentWizard(models.TransientModel):
url = self.sudo().env["wecom.apps"].generate_oauth_login_url(target_url, category='oa')
description = "标题: {}\n".format(record_id.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8))
record = self.env[self.res_model].search([('id', '=', self.res_id)])
- record.log_ids[-1].write({'approval_state': '2'})
- if self.document_ids:
- record.log_ids[-1].write({'document_ids': [(6, 0, self.document_ids.ids)]})
- record.log_ids[-1].write({"comment": self.comment})
- workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)])
- workflow_record_id.write({'soong_state': 'active',
- 'employee_ids':False
+ record.log_ids[-1].write({'is_active_operate': True,
+ 'approval_state': '1'
})
+ workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)])
+ if not self.circulated_employee_ids:
+ record.log_ids[-1].write({'approval_state': '2'})
+ if self.document_ids:
+ record.log_ids[-1].write({'document_ids': [(6, 0, self.document_ids.ids)]})
+ record.log_ids[-1].write({"comment": self.comment})
+ workflow_record_id.write({'soong_state': 'active',
+ 'employee_ids':False
+ })
if self.circulated_employee_ids:
for employee in self.circulated_employee_ids:
if employee.user_id.id not in log_done_by_ids:
@@ -857,6 +865,7 @@ class SoongWorkflowCommentWizard(models.TransientModel):
]
log2_id = self.sudo().env["soong.workflow.log2"].search(log2_domain, limit=1)
if not log2_id:
+ workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.circulated_employee_ids if employee.user_id]
log2_id = self.sudo().env["soong.workflow.log2"].create({
"model": self.res_model,
"res_id": self.res_id,