累计欠收报表

This commit is contained in:
李鹏宇
2026-02-28 18:13:38 +08:00
parent 9d41a1c74a
commit d8fe1aa44a
2 changed files with 15 additions and 14 deletions
@@ -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}
@@ -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},