diff --git a/yuthon_report/models/cumulative_arrears_report.py b/yuthon_report/models/cumulative_arrears_report.py index 8b2cf593c..62dbcb316 100644 --- a/yuthon_report/models/cumulative_arrears_report.py +++ b/yuthon_report/models/cumulative_arrears_report.py @@ -73,8 +73,8 @@ class CumulativeArrearsReport(models.Model): type_totals = {} total_original = 0.0 # 总应收 total_received = 0.0 # 总已收 + total_discount = 0.0 # 总减免 total_arrears = 0.0 # 总欠收 - for idx, rec in enumerate(receivables, start=1): contract = rec.contract_id @@ -84,8 +84,10 @@ class CumulativeArrearsReport(models.Model): # 已收金额:从预先构建的映射中获取(截止查询日期的累计收款) received = received_amount_map.get(rec.id, 0.0) - # 当前欠收 = 应收 - 已收 - 减免 + # 减免金额 discount = rec.discount_amount or 0.0 + + # 当前欠收 = 应收 - 已收 - 减免 arrears = original - received - discount # 确保欠收不为负数 if arrears < 0: @@ -94,16 +96,17 @@ class CumulativeArrearsReport(models.Model): # 累计统计 total_original += original total_received += received + total_discount += discount total_arrears += arrears - # 按类型统计 type_name = rec.management_type_id.name if rec.management_type_id else "未分类" if type_name not in type_totals: - type_totals[type_name] = {'original': 0.0, 'received': 0.0, 'arrears': 0.0} + type_totals[type_name] = {'original': 0.0, 'received': 0.0, 'discount': 0.0, 'arrears': 0.0} type_totals[type_name]['original'] += original type_totals[type_name]['received'] += received + type_totals[type_name]['discount'] += discount type_totals[type_name]['arrears'] += arrears - + # 计费区间(应收开始 ~ 应收结束) billing_period = "" if rec.due_date and rec.due_date_end: @@ -120,6 +123,7 @@ class CumulativeArrearsReport(models.Model): "应收类型": type_name, "应收金额": round(original, 2), "已收金额": round(received, 2), + "减免金额": round(discount, 2), "当前欠收": round(arrears, 2), "计费区间": billing_period, "所属公司": contract.lessor_id.referred if contract and contract.lessor_id and hasattr(contract.lessor_id, 'referred') else contract.lessor_id.name if contract and contract.lessor_id else "", @@ -130,16 +134,12 @@ class CumulativeArrearsReport(models.Model): for type_name in sorted(type_totals.keys()): summary_stats.append({ 'name': type_name, - 'original': round(type_totals[type_name]['original'], 2), - 'received': round(type_totals[type_name]['received'], 2), - 'arrears': round(type_totals[type_name]['arrears'], 2) + 'amount': round(type_totals[type_name]['arrears'], 2) }) - summary_stats.append({ - 'name': '总合计', - 'original': round(total_original, 2), - 'received': round(total_received, 2), - 'arrears': round(total_arrears, 2) - }) + summary_stats.append({'name': '总应收', 'amount': round(total_original, 2)}) + summary_stats.append({'name': '总已收', 'amount': round(total_received, 2)}) + summary_stats.append({'name': '总减免', 'amount': round(total_discount, 2)}) + summary_stats.append({'name': '总欠收', 'amount': round(total_arrears, 2)}) return {"rows": rows, "stats": summary_stats} diff --git a/yuthon_report/views/cumulative_arrears_report.xml b/yuthon_report/views/cumulative_arrears_report.xml index a0cda980c..dec4e7ec3 100644 --- a/yuthon_report/views/cumulative_arrears_report.xml +++ b/yuthon_report/views/cumulative_arrears_report.xml @@ -19,6 +19,7 @@ {"headerName": "应收类型", "field": "应收类型", "flex": 1}, {"headerName": "应收金额", "field": "应收金额", "flex": 1, "type": "number"}, {"headerName": "已收金额", "field": "已收金额", "flex": 1, "type": "number"}, + {"headerName": "减免金额", "field": "减免金额", "flex": 1, "type": "number"}, {"headerName": "当前欠收", "field": "当前欠收", "flex": 1, "type": "number"}, {"headerName": "计费区间", "field": "计费区间", "flex": 1.5}, {"headerName": "所属公司", "field": "所属公司", "flex": 1},