From 5e26e2998172c8e67d4d832e48f76a147aa5316d 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 14:52:05 +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 --- .../models/receivable_flow_report.py | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index d0ec9f3ac..14bcb33f6 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -175,22 +175,26 @@ class ReceivableFlowReport(models.Model): ) penalty_payment_date = latest_penalty_payment[0].date if latest_penalty_payment else None - # 从 wizard 的 penalty_line_ids.remake 解析违约金时间区间 + # 复用 _onchange_calculation_date 逻辑计算违约金时间区间 penalty_range_str = "" - if wz_list: - wz = wz_list[0] - pl_all = list(wz.penalty_line_ids) - penalty_lines = [pl for pl in pl_all if pl.penalty > 0] - if penalty_lines: - all_dates = [] - for pl in penalty_lines: - for d in re.findall(r'(\d{4}-\d{2}-\d{2})', pl.remake or ''): - try: - all_dates.append(datetime.datetime.strptime(d, '%Y-%m-%d').date()) - except ValueError: - pass - if all_dates: - penalty_range_str = f"{min(all_dates).strftime('%Y-%m-%d')} ~ {max(all_dates).strftime('%Y-%m-%d')}" + if rec.is_liquidated_damages and rec.submitted > 0: + # 取最近一笔非违约金收款记录 + non_penalty_lines = [l for l in modify_lines if not l.is_penalty] + today = datetime.date.today() + if non_penalty_lines: + # 有收款记录:从最近一笔收款日期的次日开始 + last_pay_date = max(l.reconciliation_date for l in non_penalty_lines) + base_date = last_pay_date + datetime.timedelta(days=1) + else: + # 无收款记录:从 due_date 次月 1 号开始 + if rec.due_date: + nm = rec.due_date.month + 1 if rec.due_date.month < 12 else 1 + ny = rec.due_date.year if rec.due_date.month < 12 else rec.due_date.year + 1 + base_date = datetime.date(ny, nm, 1) + else: + base_date = None + if base_date and base_date <= today: + penalty_range_str = f"{base_date.strftime('%Y-%m-%d')}至{today.strftime('%Y-%m-%d')}" # ==== 应收租金行 ==== rows.append({