Merge pull request !7486 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-12-31 02:06:53 +00:00
committed by Gitee
@@ -176,34 +176,35 @@ class PenaltyLineWizard(models.Model):
@api.onchange('calculation_date')
def _onchange_calculation_date(self):
realtime_lines = self.penalty_line_ids.filtered(lambda l: l.is_realtime)
non_realtime_lines = self.penalty_line_ids - realtime_lines
update_commands = []
# 2. 保留所有非实时记录(关键:用 (4, id, 0) 指令)
for line in non_realtime_lines:
update_commands.append((4, line.id, 0))
# 3. 删除所有旧的实时记录
for line in realtime_lines:
update_commands.append((2, line.id, 0))
if self.receivable_id.management_type_id.name != '押金':
realtime_lines = self.penalty_line_ids.filtered(lambda l: l.is_realtime)
non_realtime_lines = self.penalty_line_ids - realtime_lines
update_commands = []
# 2. 保留所有非实时记录(关键:用 (4, id, 0) 指令)
for line in non_realtime_lines:
update_commands.append((4, line.id, 0))
# 3. 删除所有旧的实时记录
for line in realtime_lines:
update_commands.append((2, line.id, 0))
if non_realtime_lines:
prev_line = non_realtime_lines[-1]
if round(prev_line.remaining_principal or 0, 2) != 0:
base_date = (prev_line.date + relativedelta(months=1)).replace(day=1)
days_overdue = (self.calculation_date - base_date).days - 1
days_overdue = max(0, days_overdue)
# 计算违约金
current_penalty = prev_line.remaining_principal * days_overdue * 0.001
# 新增新的实时记录
update_commands.append((0, 0, {
'date': self.calculation_date,
'days_overdue': days_overdue,
'remaining_principal': prev_line.remaining_principal,
'remake': f'违约金:{base_date}至{self.calculation_date}',
'penalty': round(current_penalty, 2),
'is_realtime': True,
}))
self.penalty_line_ids = update_commands
if non_realtime_lines:
prev_line = non_realtime_lines[-1]
if round(prev_line.remaining_principal or 0, 2) != 0:
base_date = (prev_line.date + relativedelta(months=1)).replace(day=1)
days_overdue = (self.calculation_date - base_date).days - 1
days_overdue = max(0, days_overdue)
# 计算违约金
current_penalty = prev_line.remaining_principal * days_overdue * 0.001
# 新增新的实时记录
update_commands.append((0, 0, {
'date': self.calculation_date,
'days_overdue': days_overdue,
'remaining_principal': prev_line.remaining_principal,
'remake': f'违约金:{base_date}至{self.calculation_date}',
'penalty': round(current_penalty, 2),
'is_realtime': True,
}))
self.penalty_line_ids = update_commands
class PenaltyComputeLineWizard(models.Model):
_name = 'penalty.compute.line.wizard'