添加功能

This commit is contained in:
zhou
2025-07-25 10:44:11 +08:00
parent 089ce45985
commit 640a9c6295
+32 -23
View File
@@ -115,7 +115,7 @@ class SalaryComputeWizard(models.Model):
], limit=1)
if not existing_payslip:
payslip_id = self.env['hr.payslip'].create({
self.env['hr.payslip'].create({
'is_bold': is_bold,
'name': employee.name,
'employee_id': employee.id,
@@ -125,9 +125,7 @@ class SalaryComputeWizard(models.Model):
'salary_group_id': contract_id.salary_group_id.id if contract_id else employee.contract_id.salary_group_id.id,
'payslip_run_id': payslip_run_id.id,
'state': 'draft',
})
payslip_id.compute_sheet()
payslip_id.compute_sheet()
}).compute_sheet()
internship_ids = self.env['hr.payslip'].search([
('is_push', '=', False),
@@ -138,30 +136,20 @@ class SalaryComputeWizard(models.Model):
for internship_id in internship_ids:
employee = internship_id.employee_id
contract = employee.contract_id
year = int(self.select_year)
month = int(self.select_time)
# 更改扣发绩效奖金
performance_deduction = self.salary_performance_deduction(employee, self.select_year, self.select_time, internship_id.performance_bonuses)
internship_id.write({
'performance_deduction': performance_deduction,
})
# 获取离职日期
turnover_date = employee.contract_id.date_end
turnover_date = contract.date_end
start_date = fields.Date.from_string(start_date)
end_date = fields.Date.from_string(end_date)
# 判断员工是否在所选月份已离职
is_turnover = False
if turnover_date:
turnover_year = turnover_date.year
turnover_month = turnover_date.month
# 如果离职年月早于或等于所选年月,则视为已离职
is_turnover = (turnover_year < year) or (turnover_year == year and turnover_month <= month)
# 判断员工是否在试用期
is_probation = False
if contract.start_date and contract.end_date:
# 检查所选月份是否在试用期内
selected_date = fields.Date.to_date(f"{year}-{month:02d}-01")
is_probation = contract.start_date <= selected_date <= contract.end_date
is_turnover = self._is_employee_turnover(employee, year, month)
is_probation = self._is_employee_in_probation(employee, year, month)
original_start_date = internship_id.date_from
original_end_date = internship_id.date_to
@@ -288,10 +276,13 @@ class SalaryComputeWizard(models.Model):
for rec in self.env['hr.payslip'].search([('is_push', '=', False), ('salary_group_id.name', '=', '天河物管领导')]):
rec.compute_sheet()
for rec2 in self.env['hr.payslip'].search([('employee_id.name', '=', '王军'), ('is_push', '=', False)]):
rec2.compute_sheet()
for rec2 in self.env['hr.payslip'].search([('employee_id.name', '=', '蔡思琪'), ('is_push', '=', False)]):
rec2.compute_sheet()
year = int(self.select_year)
month = int(self.select_time)
for rec2 in self.env['hr.payslip'].search(('is_push', '=', False)):
if not self._is_employee_turnover(rec2.employee_id, year, month) and not self._is_employee_in_probation(
rec2.employee_id, year, month):
rec2.compute_sheet()
def _get_chinese_month(self, month):
chinese_months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
@@ -376,6 +367,24 @@ class SalaryComputeWizard(models.Model):
# 满足任一条件即返回 True
return entry_matches or confirmation_matches or retire_matches
def _is_employee_turnover(self, employee, year, month):
"""判断员工是否在指定年月已离职"""
turnover_date = employee.contract_id.date_end
if not turnover_date:
return False
turnover_year = turnover_date.year
turnover_month = turnover_date.month
return (turnover_year < year) or (turnover_year == year and turnover_month <= month)
def _is_employee_in_probation(self, employee, year, month):
"""判断员工在指定年月是否处于试用期"""
contract = employee.contract_id
if not (contract and contract.start_date and contract.end_date):
return False
# 检查所选月份是否在试用期内
selected_date = fields.Date.to_date(f"{year}-{month:02d}-01")
return contract.start_date <= selected_date <= contract.end_date
def salary_performance_deduction(self, employee, selected_year, selected_month, performance_bonuses):
attendance_month_obj = self.env["hr.attendance.month.detail"].search([
('employee_id', '=', employee.id),