From 14ed332d544d5643f5a8feac29b22a36762bb8e5 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 18:06:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BC=E9=87=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/deposit_month_received_report.py | 78 +++++++++--------- .../models/deposit_pre_received_report.py | 79 ++++++++++--------- 2 files changed, 85 insertions(+), 72 deletions(-) diff --git a/yuthon_report/models/deposit_month_received_report.py b/yuthon_report/models/deposit_month_received_report.py index a89bf9624..0952d0866 100644 --- a/yuthon_report/models/deposit_month_received_report.py +++ b/yuthon_report/models/deposit_month_received_report.py @@ -67,48 +67,54 @@ class DepositMonthReceivedReport(models.Model): rows = [] total_amount = 0.0 idx = 1 + processed_receivable_ids = set() for line in modify_lines: if not line.receivable_id: continue + receivable_id = line.receivable_id.id + if receivable_id in processed_receivable_ids: + continue + processed_receivable_ids.add(receivable_id) rec = line.receivable_id - # 使用receivable.modify.line的delivered1字段作为金额 - amount = round(line.delivered1 or 0.0, 2) - # 获取收款日期 - payout_date = rec.payout_date - if not payout_date: - continue - # 检查日期是否在本月范围内 - if period_start <= payout_date <= period_end: - total_amount += amount - rows.append({ - "序号": idx, - "合同编号": { - 'model': 'property.lease.contract', - 'id': rec.contract_id.id, - 'display_name': rec.contract_id.contract_code, - } if rec.contract_id else "", - "物业名称": { - 'model': 'yuthon.property', - 'id': rec.contract_id.lease_ids[0].address_id.id, - 'display_name': rec.property_name, - } if rec.contract_id and rec.contract_id.lease_ids and rec.contract_id.lease_ids[0].address_id else rec.property_name or "", - "承租方名称": { - 'model': 'property.tenant.information', - 'id': rec.lessee_id.id, - 'display_name': rec.lessee_id.name, - } if rec.lessee_id else "", - "收款日期": payout_date.strftime("%Y-%m-%d"), - "金额": amount, - "所属公司": rec.company_id.name if rec.company_id else "", - "管理员": { - 'model': 'res.users', - 'id': rec.admin_id.id, - 'display_name': rec.admin_id.name, - } if rec.admin_id else "", - }) - idx += 1 + wizards = self.env['penalty.line.wizard'].search( + [('receivable_id', '=', receivable_id)] + ) + for wizard in wizards: + for pay in wizard.pay_line_ids: + if not pay.date: + continue + if period_start <= pay.date <= period_end: + amount = round(pay.amount, 2) + total_amount += amount + rows.append({ + "序号": idx, + "合同编号": { + 'model': 'property.lease.contract', + 'id': rec.contract_id.id, + 'display_name': rec.contract_id.contract_code, + } if rec.contract_id else "", + "物业名称": { + 'model': 'yuthon.property', + 'id': rec.contract_id.lease_ids[0].address_id.id, + 'display_name': rec.property_name, + } if rec.contract_id and rec.contract_id.lease_ids and rec.contract_id.lease_ids[0].address_id else rec.property_name or "", + "承租方名称": { + 'model': 'property.tenant.information', + 'id': rec.lessee_id.id, + 'display_name': rec.lessee_id.name, + } if rec.lessee_id else "", + "收款日期": pay.date.strftime("%Y-%m-%d"), + "金额": amount, + "所属公司": rec.company_id.name if rec.company_id else "", + "管理员": { + 'model': 'res.users', + 'id': rec.admin_id.id, + 'display_name': rec.admin_id.name, + } if rec.admin_id else "", + }) + idx += 1 stats = [ {'name': '记录总数', 'amount': len(rows)}, diff --git a/yuthon_report/models/deposit_pre_received_report.py b/yuthon_report/models/deposit_pre_received_report.py index 4bc96324e..4ea96fddf 100644 --- a/yuthon_report/models/deposit_pre_received_report.py +++ b/yuthon_report/models/deposit_pre_received_report.py @@ -64,48 +64,55 @@ class DepositPreReceivedReport(models.Model): rows = [] total_amount = 0.0 idx = 1 + # 用于去重,同一应收账单关联的 wizard 只处理一次 + processed_receivable_ids = set() for line in modify_lines: if not line.receivable_id: continue + receivable_id = line.receivable_id.id + if receivable_id in processed_receivable_ids: + continue + processed_receivable_ids.add(receivable_id) rec = line.receivable_id - # 使用receivable.modify.line的delivered1字段作为金额 - amount = round(line.delivered1 or 0.0, 2) - # 获取收款日期 - payout_date = rec.payout_date - if not payout_date: - continue - # 检查日期是否在前期范围内 - if period_start <= payout_date <= period_end: - total_amount += amount - rows.append({ - "序号": idx, - "合同编号": { - 'model': 'property.lease.contract', - 'id': rec.contract_id.id, - 'display_name': rec.contract_id.contract_code, - } if rec.contract_id else "", - "物业名称": { - 'model': 'yuthon.property', - 'id': rec.contract_id.lease_ids[0].address_id.id, - 'display_name': rec.property_name, - } if rec.contract_id and rec.contract_id.lease_ids and rec.contract_id.lease_ids[0].address_id else rec.property_name or "", - "承租方名称": { - 'model': 'property.tenant.information', - 'id': rec.lessee_id.id, - 'display_name': rec.lessee_id.name, - } if rec.lessee_id else "", - "收款日期": payout_date.strftime("%Y-%m-%d"), - "金额": amount, - "所属公司": rec.company_id.name if rec.company_id else "", - "管理员": { - 'model': 'res.users', - 'id': rec.admin_id.id, - 'display_name': rec.admin_id.name, - } if rec.admin_id else "", - }) - idx += 1 + wizards = self.env['penalty.line.wizard'].search( + [('receivable_id', '=', receivable_id)] + ) + for wizard in wizards: + for pay in wizard.pay_line_ids: + if not pay.date: + continue + if period_start <= pay.date <= period_end: + amount = round(pay.amount, 2) + total_amount += amount + rows.append({ + "序号": idx, + "合同编号": { + 'model': 'property.lease.contract', + 'id': rec.contract_id.id, + 'display_name': rec.contract_id.contract_code, + } if rec.contract_id else "", + "物业名称": { + 'model': 'yuthon.property', + 'id': rec.contract_id.lease_ids[0].address_id.id, + 'display_name': rec.property_name, + } if rec.contract_id and rec.contract_id.lease_ids and rec.contract_id.lease_ids[0].address_id else rec.property_name or "", + "承租方名称": { + 'model': 'property.tenant.information', + 'id': rec.lessee_id.id, + 'display_name': rec.lessee_id.name, + } if rec.lessee_id else "", + "收款日期": pay.date.strftime("%Y-%m-%d"), + "金额": amount, + "所属公司": rec.company_id.name if rec.company_id else "", + "管理员": { + 'model': 'res.users', + 'id': rec.admin_id.id, + 'display_name': rec.admin_id.name, + } if rec.admin_id else "", + }) + idx += 1 stats = [ {'name': '记录总数', 'amount': len(rows)},