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 = ""