Merge pull request !2760 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-05-16 07:14:32 +00:00
committed by Gitee
+24 -7
View File
@@ -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):