diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py
index a6373c48d..458144671 100644
--- a/soong_workflow/models/soong_workflow_mixin.py
+++ b/soong_workflow/models/soong_workflow_mixin.py
@@ -279,7 +279,8 @@ class SoongWorkflowMixin(models.AbstractModel):
self.env['trans.link'].search([]).unlink()
# 退回节点根据日志进行判断
if btn_rec.name == '退回':
- for ret in self.log_ids.search([('approval_state', '=', '2'), ('res_id', '=', self.id), ('node_btn_name', '=', '0')]):
+ approved_logs = self.log_ids.filtered(lambda log: log.approval_state == '2')
+ for ret in approved_logs:
if not self.env['trans.link'].search([('name', '=', ret.name)]):
self.env['trans.link'].create({
'node_button_id': btn_rec.id,
@@ -422,8 +423,7 @@ class SoongWorkflowMixin(models.AbstractModel):
"default_trans_link_id": self.env['trans.link'].search(trans_domain, limit=1).id if btn_rec.name == '转交' else False,
"all_workflow_links": trans_link_ids,
"default_return_link_id": self.env['trans.link'].search(
- [('record_id', '=', self.id)],
- limit=1).id if btn_rec.name == '退回' else False,
+ [('link_type', '=', 'return'), ('record_id', '=', self.id)], limit=1).id if btn_rec.name == '退回' else False,
},
}
diff --git a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
index eafe6843d..9903be318 100644
--- a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
+++ b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml
@@ -43,6 +43,7 @@
+
diff --git a/yuthon_property/models/property_bank_statements.py b/yuthon_property/models/property_bank_statements.py
index e34750213..b07d7991a 100644
--- a/yuthon_property/models/property_bank_statements.py
+++ b/yuthon_property/models/property_bank_statements.py
@@ -47,6 +47,44 @@ class PropertyBankStatements(models.Model):
change_amount = fields.Float(string='修改金额')
receivable_modify_ids = fields.One2many('receivable.modify.line', 'bank_id', string='修改应收单')
+ def update_record(self):
+ selected_records = self.env["property.bank.statements"].browse(
+ self._context.get('active_ids', self._context.get('active_id'))
+ )
+
+ duplicate_groups = {}
+ for record in selected_records:
+ time_key = record.start_time.strftime('%Y-%m-%d %H:%M:%S') if record.start_time else 'no_time'
+ amount_key = round(record.original_amount, 2)
+ group_key = (time_key, amount_key)
+
+ if group_key not in duplicate_groups:
+ duplicate_groups[group_key] = self.env["property.bank.statements"]
+ duplicate_groups[group_key] |= record
+
+ deleted_count = 0
+ kept_records = self.env["property.bank.statements"]
+
+ for group_key, group_records in duplicate_groups.items():
+ if len(group_records) == 1:
+ kept_records |= group_records
+ continue
+
+ reconciled_records = group_records.filtered(lambda r: r.bank_state == 'reconciled')
+
+ if reconciled_records:
+ keep_record = reconciled_records[0]
+ kept_records |= keep_record
+ delete_records = group_records - keep_record
+ else:
+ keep_record = group_records[0]
+ kept_records |= keep_record
+ delete_records = group_records
+
+ if delete_records:
+ delete_records.unlink()
+ deleted_count += len(delete_records)
+
@api.onchange('extract')
def _onchange_extract_set_bank_state(self):
for rec in self: