From 7a6cdebf30f294088cdcee13bf0464c9531604d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Tue, 24 Mar 2026 16:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_report/models/receivable_flow_report.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index 83dd69030..db09ee21a 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -171,15 +171,15 @@ class ReceivableFlowReport(models.Model): penalty_pay_lines = [] for wz in wz_list: penalty_pay_lines.extend(pay_line_map.get(wz.id, [])) - # 违约金收款金额:取 wizard 的 collected_penalty(已 compute) - total_penalty_collected = sum(wz.collected_penalty for wz in wz_list) - # 违约金收款时间:取 pay_line_ids 中类型为“违约金”的记录的最新 date - penalty_type_pay_lines = [ - l for l in penalty_pay_lines - if l.management_type_id and l.management_type_id.name == '违约金' and l.date - ] - latest_penalty_payment = sorted(penalty_type_pay_lines, key=lambda l: l.date, reverse=True) - penalty_payment_date = latest_penalty_payment[0].date if latest_penalty_payment else None + # 违约金收款金额和时间:直接从 receivable.modify.line 的 is_penalty=True 记录取 + # 这是持久化数据,不依赖临时 wizard + penalty_modify_lines = [l for l in modify_lines if l.is_penalty] + total_penalty_collected = sum(l.amount for l in penalty_modify_lines) + latest_penalty_pay = sorted( + [l for l in penalty_modify_lines if l.reconciliation_date], + key=lambda l: l.reconciliation_date, reverse=True + ) + penalty_payment_date = latest_penalty_pay[0].reconciliation_date if latest_penalty_pay else None # 复用 _onchange_calculation_date 逻辑计算违约金时间区间、逆期天数、违约金 penalty_range_str = ""