添加功能
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user