From a2fb88581bc67943d89002d17ce7cc42ddf9f061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 20 Mar 2026 14:26:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9D=E7=BA=A6=E9=87=91=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E6=AC=A0=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/penalty_arrears_report.py | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/yuthon_report/models/penalty_arrears_report.py b/yuthon_report/models/penalty_arrears_report.py index 069f0e981..ceac61d0a 100644 --- a/yuthon_report/models/penalty_arrears_report.py +++ b/yuthon_report/models/penalty_arrears_report.py @@ -61,12 +61,14 @@ class PenaltyArrearsReport(models.Model): total_penalty = total_collected = total_uncollected = 0.0 for idx, rec in enumerate(receivables, start=1): - per_day = rec.per_day or 0.0 + # 获取每天违约金(从difference_amount字段) + per_day = rec.difference_amount or rec.per_day or 0.0 penalty_amount = rec.penalty or 0.0 penalty_days = round(penalty_amount / per_day, 2) if per_day else 0.0 amount = rec.original_amount or 0.0 - rent_owed = rec.rent_owed or 0.0 + # 计算欠租金额(从original_amount字段) + rent_owed = rec.original_amount or rec.rent_owed or 0.0 collected = rec.delivered1 or 0.0 uncollected = rec.submitted or 0.0 @@ -76,10 +78,36 @@ class PenaltyArrearsReport(models.Model): # 计算违约计算时间区间 billing_period = "" - if rec.due_date and rec.due_date_end: - billing_period = f"{rec.due_date.strftime('%Y-%m-%d')} ~ {rec.due_date_end.strftime('%Y-%m-%d')}" - elif rec.due_date: - billing_period = rec.due_date.strftime("%Y-%m-%d") + if rec.due_date: + start_date = rec.due_date + # 确定结束日期 + if rec.payout_date: + # 已缴费,结束日期为缴费日期 + end_date = rec.payout_date + else: + # 未缴费,结束日期为查询月的最后一天 + if date_end: + end_date_obj = datetime.datetime.fromisoformat(date_end).date() + # 获取查询月的最后一天 + if end_date_obj.month == 12: + last_day = datetime.date(end_date_obj.year, 12, 31) + else: + last_day = datetime.date(end_date_obj.year, end_date_obj.month + 1, 1) - datetime.timedelta(days=1) + end_date = last_day + else: + # 无查询日期,使用当前月最后一天 + today = datetime.date.today() + if today.month == 12: + last_day = datetime.date(today.year, 12, 31) + else: + last_day = datetime.date(today.year, today.month + 1, 1) - datetime.timedelta(days=1) + end_date = last_day + + # 计算违约天数 + days_diff = (end_date - start_date).days + 1 # 包含开始和结束日期 + + # 构建时间区间字符串 + billing_period = f"{days_diff} {start_date.strftime('%Y-%m-%d')} ~ {end_date.strftime('%Y-%m-%d')}" rows.append({ "序号": idx,