diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index 431e9ccb9..bab025932 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -86,6 +86,19 @@ class ReceivableFlowReport(models.Model): pay_line_map = {} # {wizard_id: [pay_lines]} for pl in all_pay_lines: pay_line_map.setdefault(pl.penalty_id.id, []).append(pl) + # 3. 批量查违约金应收记录(按合同分组) + contract_ids = list(set(rec.contract_id.id for rec in receivables if rec.contract_id)) + penalty_type = self.env['yuthon.management.type'].sudo().search([('name', '=', '违约金')], limit=1) + all_penalty_recs = self.env['property.accounts.receivable'].sudo().search([ + ('contract_id', 'in', contract_ids), + ('management_type_id', '=', penalty_type.id), + ('is_invalid', '=', False), + ], order='due_date asc') if penalty_type else self.env['property.accounts.receivable'] + # 按 contract_id 分组 {contract_id: [charging_range, ...]} + penalty_range_map = {} # {contract_id: [charging_range]} + for pr in all_penalty_recs: + if pr.charging_range: + penalty_range_map.setdefault(pr.contract_id.id, []).append(pr.charging_range) # ===== 预加载结束 ===== rows = [] @@ -149,6 +162,7 @@ class ReceivableFlowReport(models.Model): "违约金明细": "", "违约金收款时间": "", "违约金收款金额": "", + "违约金计算时间": "", }) # ==== 每条应收记录 ==== @@ -174,6 +188,10 @@ class ReceivableFlowReport(models.Model): ) penalty_payment_date = latest_penalty_payment[0].date if latest_penalty_payment else None + # 取该合同下所有违约金记录的 charging_range + penalty_ranges = penalty_range_map.get(rec.contract_id.id, []) if rec.contract_id else [] + penalty_range_str = "\n".join(penalty_ranges) if penalty_ranges else "" + # ==== 应收租金行 ==== rows.append({ "row_type": "主", @@ -200,6 +218,7 @@ class ReceivableFlowReport(models.Model): "收款日期": "", "收款金额": "", "收款备注": "", + "违约金计算时间": penalty_range_str, "违约金明细": { 'model': 'property.accounts.receivable', 'display_name': '违约金明细', @@ -230,6 +249,7 @@ class ReceivableFlowReport(models.Model): "违约金明细": "", "违约金收款时间": "", "违约金收款金额": "", + "违约金计算时间": "", }) diff --git a/yuthon_report/views/receivable_flow_report.xml b/yuthon_report/views/receivable_flow_report.xml index 4753f7037..f104c616b 100644 --- a/yuthon_report/views/receivable_flow_report.xml +++ b/yuthon_report/views/receivable_flow_report.xml @@ -24,6 +24,7 @@ {"headerName": "收款日期", "field": "收款日期", "flex": 1}, {"headerName": "收款金额", "field": "收款金额", "flex": 1, "type": "number"}, {"headerName": "收款备注", "field": "收款备注", "flex": 2, "wrapText": true}, + {"headerName": "违约金计算时间", "field": "违约金计算时间", "flex": 2.5, "wrapText": true}, {"headerName": "违约金明细", "field": "违约金明细", "flex": 1, "cellRenderer": "linkRender"}, {"headerName": "违约金收款时间", "field": "违约金收款时间", "flex": 1}, {"headerName": "违约金收款金额", "field": "违约金收款金额", "flex": 1, "type": "number"}