批量补全办结时间
This commit is contained in:
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user