报表
This commit is contained in:
@@ -69,37 +69,31 @@ class ReceivableFlowReport(models.Model):
|
||||
modify_map.setdefault(ml.receivable_id.id, []).append(ml)
|
||||
|
||||
# 2. 批量查违约金wizard(sudo跳过多公司权限)
|
||||
# 每个 receivable_id 只保留最新的一个 wizard(每次点按都会新建记录)
|
||||
all_wizards = self.env['penalty.line.wizard'].sudo().search([
|
||||
('receivable_id', 'in', rec_ids),
|
||||
])
|
||||
# 按 receivable_id 分组
|
||||
wizard_map = {} # {receivable_id: [wizards]}
|
||||
], order='id desc')
|
||||
# 按 receivable_id 分组,只取最新一条
|
||||
wizard_map = {} # {receivable_id: wizard}
|
||||
for wz in all_wizards:
|
||||
wizard_map.setdefault(wz.receivable_id.id, []).append(wz)
|
||||
# 预取所有 pay_line_ids 和 penalty_line_ids
|
||||
all_pay_lines = all_wizards.mapped('pay_line_ids')
|
||||
all_wizards.mapped('penalty_line_ids') # 预加载违约金计算明细
|
||||
# 预先触发 compute 字段,避免循环内惰性计算
|
||||
all_wizards.mapped('days_overdue')
|
||||
all_wizards.mapped('total_penalty')
|
||||
all_wizards.mapped('collected_penalty') # 预加载已收违约金
|
||||
# 预加载 pay_line management_type_id
|
||||
all_pay_lines.mapped('management_type_id')
|
||||
# 按 wizard_id 分组
|
||||
pay_line_map = {} # {wizard_id: [pay_lines]}
|
||||
for pl in all_pay_lines:
|
||||
pay_line_map.setdefault(pl.penalty_id.id, []).append(pl)
|
||||
|
||||
# 3. 直接批量查 penalty.pay.line,按 receivable_id 建索引(违约金收款持久化数据源)
|
||||
all_penalty_pay_lines = self.env['penalty.pay.line'].sudo().search([
|
||||
('penalty_id.receivable_id', 'in', rec_ids),
|
||||
])
|
||||
if wz.receivable_id.id not in wizard_map:
|
||||
wizard_map[wz.receivable_id.id] = wz
|
||||
latest_wizards = list(wizard_map.values())
|
||||
latest_wizard_ids = [wz.id for wz in latest_wizards]
|
||||
# 批量查 penalty.pay.line,通过最新 wizard_ids 查询
|
||||
if latest_wizard_ids:
|
||||
all_penalty_pay_lines = self.env['penalty.pay.line'].sudo().search([
|
||||
('penalty_id', 'in', latest_wizard_ids),
|
||||
])
|
||||
else:
|
||||
all_penalty_pay_lines = self.env['penalty.pay.line']
|
||||
all_penalty_pay_lines.mapped('management_type_id') # 预加载类型
|
||||
# 按 receivable_id 分组 {receivable_id: [penalty_pay_lines]}
|
||||
penalty_pay_map = {}
|
||||
for ppl in all_penalty_pay_lines:
|
||||
rid = ppl.penalty_id.receivable_id.id
|
||||
penalty_pay_map.setdefault(rid, []).append(ppl)
|
||||
rid = ppl.penalty_id.receivable_id.id if ppl.penalty_id and ppl.penalty_id.receivable_id else None
|
||||
if rid:
|
||||
penalty_pay_map.setdefault(rid, []).append(ppl)
|
||||
# ===== 预加载结束 =====
|
||||
|
||||
rows = []
|
||||
@@ -178,7 +172,7 @@ class ReceivableFlowReport(models.Model):
|
||||
if rec.submitted == 0:
|
||||
charge_status = "已收"
|
||||
|
||||
wz_list = wizard_map.get(rec.id, [])
|
||||
wz_list = [wizard_map[rec.id]] if rec.id in wizard_map else []
|
||||
# 违约金收款:直接从 penalty.pay.line 取(持久化数据源)
|
||||
rec_penalty_pay_lines = penalty_pay_map.get(rec.id, [])
|
||||
# 违约金收款金额:类型为“违约金”的金额之和
|
||||
|
||||
Reference in New Issue
Block a user