@@ -1,4 +1,5 @@
|
||||
from odoo import api, fields, models
|
||||
from decimal import ROUND_HALF_UP, Decimal
|
||||
|
||||
|
||||
class YuthonSalaryYear(models.Model):
|
||||
@@ -49,25 +50,41 @@ class YuthonSalaryYear(models.Model):
|
||||
'天河粮储': ['performance_salary']
|
||||
}
|
||||
|
||||
TWOPLACES = Decimal('0.01')
|
||||
for record in self:
|
||||
company_name = record.company_id.name
|
||||
sum_value = 0.0
|
||||
sum_value = Decimal('0.00') # 使用 Decimal 类型
|
||||
fields_to_sum = company_rules.get(company_name, [])
|
||||
for field_name in fields_to_sum:
|
||||
sum_value += getattr(record, field_name, 0.0)
|
||||
record.sum_salary = sum_value
|
||||
# 获取字段值并转换为 Decimal
|
||||
field_value = getattr(record, field_name, 0.0)
|
||||
if not field_value:
|
||||
field_value = 0.0
|
||||
# 转换为 Decimal 并舍入到两位小数
|
||||
decimal_value = Decimal(str(field_value)).quantize(TWOPLACES, rounding=ROUND_HALF_UP)
|
||||
sum_value += decimal_value
|
||||
# 将结果转换为浮点数并赋值
|
||||
record.sum_salary = float(sum_value)
|
||||
|
||||
@api.depends('sum_salary')
|
||||
def _compute_buckle_salary(self):
|
||||
TWOPLACES = Decimal('0.01')
|
||||
for record in self:
|
||||
# 将 sum_salary 转换为 Decimal 并舍入到两位小数
|
||||
sum_salary = Decimal(str(record.sum_salary)).quantize(TWOPLACES, rounding=ROUND_HALF_UP)
|
||||
rule = self.env['yuthon.personal.rule'].search([
|
||||
('start_number', '<', record.sum_salary),
|
||||
('end_number', '>=', record.sum_salary),
|
||||
('start_number', '<', float(sum_salary)), # 转回浮点数用于查询
|
||||
('end_number', '>=', float(sum_salary)), # 转回浮点数用于查询
|
||||
], limit=1)
|
||||
if rule:
|
||||
record.buckle_salary = record.sum_salary * rule.tax_rate - rule.compute_number
|
||||
tax_rate = Decimal(str(rule.tax_rate))
|
||||
compute_number = Decimal(str(rule.compute_number))
|
||||
# 精确计算扣税金额
|
||||
buckle_salary = (sum_salary * tax_rate - compute_number).quantize(TWOPLACES, rounding=ROUND_HALF_UP)
|
||||
# 转回浮点数赋值
|
||||
record.buckle_salary = float(buckle_salary)
|
||||
else:
|
||||
record.buckle_salary = 0
|
||||
record.buckle_salary = 0.0
|
||||
|
||||
@api.depends('sum_salary', 'buckle_salary')
|
||||
def _compute_solid_salary(self):
|
||||
|
||||
Reference in New Issue
Block a user