From 7c2a8d4f355ff2fc4d959d28e1053d777b353cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Tue, 24 Mar 2026 14:33:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/receivable_flow_report.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/yuthon_report/models/receivable_flow_report.py b/yuthon_report/models/receivable_flow_report.py index bab025932..d0ec9f3ac 100644 --- a/yuthon_report/models/receivable_flow_report.py +++ b/yuthon_report/models/receivable_flow_report.py @@ -86,19 +86,6 @@ 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 = [] @@ -188,9 +175,22 @@ 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 "" + # 从 wizard 的 penalty_line_ids.remake 解析违约金时间区间 + penalty_range_str = "" + if wz_list: + wz = wz_list[0] + pl_all = list(wz.penalty_line_ids) + penalty_lines = [pl for pl in pl_all if pl.penalty > 0] + if penalty_lines: + all_dates = [] + for pl in penalty_lines: + for d in re.findall(r'(\d{4}-\d{2}-\d{2})', pl.remake or ''): + try: + all_dates.append(datetime.datetime.strptime(d, '%Y-%m-%d').date()) + except ValueError: + pass + if all_dates: + penalty_range_str = f"{min(all_dates).strftime('%Y-%m-%d')} ~ {max(all_dates).strftime('%Y-%m-%d')}" # ==== 应收租金行 ==== rows.append({