批量补全办结时间

This commit is contained in:
李鹏宇
2026-01-26 10:56:50 +08:00
parent 83bde38b38
commit 165d70f3ab
3 changed files with 64 additions and 0 deletions
@@ -667,6 +667,10 @@ class SoongWorkflowMixin(models.AbstractModel):
sorted_logs = rec.log_ids.sorted(lambda log: log.id)
if sorted_logs and sorted_logs[-1].lase_click_date:
node_update_time = sorted_logs[-1].lase_click_date
# 补丁:如果审批状态已经是结束,但还没拿到时间,则尝试用当前时间作为办结时间
if not node_update_time and record_obj.approve_state == 'end':
node_update_time = fields.Datetime.now()
except Exception as e:
_logger.debug(f"Failed to get node_update_time: {e}")
@@ -622,6 +622,48 @@ class SoongWorkflowRecord(models.Model):
},
}
def action_update_history_end_time(self):
"""
批量计算已结束流程的办结时间
"""
# 寻找所有审批状态为结束(end)且办结时间为空的记录
records = self.search([
('approve_state', '=', 'end'),
('node_update_time', '=', False)
])
count = 0
for rec in records:
if not rec.res_model or not rec.res_id:
continue
try:
# 获取对应的业务单据
source_record = self.env[rec.res_model].browse(rec.res_id)
if not source_record.exists():
continue
# 提取该单据最后一条审批日志的时间
if hasattr(source_record, 'log_ids') and source_record.log_ids:
# 按ID排序,取最后一条记录
sorted_logs = source_record.log_ids.sorted(lambda l: l.id)
if sorted_logs and sorted_logs[-1].lase_click_date:
# 更新办结时间
rec.write({'node_update_time': sorted_logs[-1].lase_click_date})
count += 1
except Exception as e:
_logger.error(f"计算记录 {rec.id} 办结时间失败: {e}")
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'title': '处理完成',
'message': f'成功更新了 {count} 条记录的办结时间',
'sticky': False,
}
}
@@ -92,6 +92,8 @@
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="delete_record" type="object" string="删除" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="action_update_history_end_time" type="object" string="一键补全办结时间" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
</header>
<field name="code"/>
<field name="workflow_id" string="审批类型"/>
@@ -140,6 +142,8 @@
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="delete_record" type="object" string="删除" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="action_update_history_end_time" type="object" string="一键补全办结时间" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
</header>
<field name="code"/>
<field name="workflow_id" string="审批类型"/>
@@ -234,6 +238,8 @@
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="delete_record" type="object" string="删除" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="action_update_history_end_time" type="object" string="一键补全办结时间" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
</header>
<field name="priority" optional="show" widget="priority" nolabel="1"/>
<field name="code"/>
@@ -272,6 +278,8 @@
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="delete_record" type="object" string="删除" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="action_update_history_end_time" type="object" string="一键补全办结时间" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
</header>
<field name="priority" optional="show" widget="priority" nolabel="1"/>
<field name="code"/>
@@ -328,6 +336,8 @@
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="delete_record" type="object" string="删除" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
<button name="action_update_history_end_time" type="object" string="一键补全办结时间" class="oe_highlight"
groups="soong_workflow.group_soong_workflow_manager"/>
</header>
<field name="priority" optional="show" widget="priority" nolabel="1"/>
<field name="code"/>
@@ -491,6 +501,14 @@
<field name="code">action = model.delete_record()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="action_update_history_end_time" model="ir.actions.server">
<field name="name">一键补全办结时间</field>
<field name="model_id" ref="soong_workflow.model_soong_workflow_record"/>
<field name="binding_model_id" ref="soong_workflow.model_soong_workflow_record"/>
<field name="state">code</field>
<field name="code">action = model.action_update_history_end_time()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="action_admin_delete_end" model="ir.actions.server">
<field name="name">管理员强制结束</field>
<field name="model_id" ref="soong_workflow.model_soong_workflow_record"/>