@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user