diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index 14bcb33f6..f39ebae4e 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -175,18 +175,17 @@ class ReceivableFlowReport(models.Model): ) penalty_payment_date = latest_penalty_payment[0].date if latest_penalty_payment else None - # 复用 _onchange_calculation_date 逻辑计算违约金时间区间 + # 复用 _onchange_calculation_date 逻辑计算违约金时间区间、逆期天数、违约金 penalty_range_str = "" + penalty_days = 0 + penalty_amount_calc = 0.0 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 @@ -195,6 +194,8 @@ class ReceivableFlowReport(models.Model): 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')}" + penalty_days = (today - base_date).days + 1 + penalty_amount_calc = round(rec.submitted * penalty_days * 0.001, 2) # ==== 应收租金行 ==== rows.append({ @@ -223,6 +224,8 @@ class ReceivableFlowReport(models.Model): "收款金额": "", "收款备注": "", "违约金计算时间": penalty_range_str, + "违约金逾期天数": penalty_days if penalty_days else "", + "违约金预计金额": penalty_amount_calc if penalty_amount_calc else "", "违约金明细": { 'model': 'property.accounts.receivable', 'display_name': '违约金明细', diff --git a/yuthon_report/views/receivable_flow_report.xml b/yuthon_report/views/receivable_flow_report.xml index 5211d339c..6244cac9b 100644 --- a/yuthon_report/views/receivable_flow_report.xml +++ b/yuthon_report/views/receivable_flow_report.xml @@ -25,6 +25,8 @@ {"headerName": "收款金额", "field": "收款金额", "flex": 1, "type": "number"}, {"headerName": "收款备注", "field": "收款备注", "flex": 2, "wrapText": true}, {"headerName": "违约金计算时间", "field": "违约金计算时间", "flex": 2.5, "wrapText": true, "autoHeight": true}, + {"headerName": "逾期天数", "field": "违约金逾期天数", "flex": 0.8, "type": "number"}, + {"headerName": "违约金预计", "field": "违约金预计金额", "flex": 1, "type": "number"}, {"headerName": "违约金明细", "field": "违约金明细", "flex": 1, "cellRenderer": "linkRender"}, {"headerName": "违约金收款时间", "field": "违约金收款时间", "flex": 1}, {"headerName": "违约金收款金额", "field": "违约金收款金额", "flex": 1, "type": "number"}