!5393 添加功能

Merge pull request !5393 from 李鹏宇/zhou
This commit is contained in:
李鹏宇
2025-09-25 07:09:01 +00:00
committed by Gitee
2 changed files with 23 additions and 23 deletions
+15 -17
View File
@@ -1238,23 +1238,21 @@ class HrAttendance(models.Model):
record.shift_name = '行政班次'
def labor_update(self):
start_date = fields.Date.to_date('2025-05-01')
end_date = fields.Date.to_date('2025-05-05')
# 搜索符合条件的考勤记录
attendance_records = self.search([
('current_data', '>=', start_date),
('current_data', '<=', end_date),
('shift_id', '=', False),
])
if attendance_records:
for record in attendance_records:
record.write({
'is_no_card': False,
'is_early_card': False,
'is_late_card': False,
'is_abnormal': False,
'is_approval': True,
})
start_date = fields.Date.to_date('2025-09-01')
end_date = fields.Date.to_date('2025-09-23')
attendance_records = self.env['hr.attendance'].search(
[('current_data', '>=', start_date),
('current_data', '<=', end_date)],
order='current_data, employee_id, id' # 按日期、员工、ID排序,确保顺序稳定
)
processed = set()
for record in attendance_records:
key = (record.employee_id.id, record.current_data)
if key not in processed:
processed.add(key) # 第一次出现,保留
else:
record.unlink()
class card_remind_form(models.Model):
_name = 'card.remind.form'
@@ -183,6 +183,7 @@ class SalaryComputeWizard(models.Model):
internship_ids = self.env['hr.payslip'].search([
('is_push', '=', False),
('company_id', '=', self.company_id.id),
('employee_id.name', '=', '林嘉宜'),
('date_from', '<=', end_date),
('date_to', '>=', start_date),
])
@@ -223,6 +224,7 @@ class SalaryComputeWizard(models.Model):
internship_start = max(original_start_date, contract_start_date)
internship_end = min(original_end_date, contract_end_date)
last_days = self._process_shift_days(internship_start - relativedelta(months=1),internship_start - relativedelta(days=1))
# 判断该员工是否需补发上月工资
if contract_start_date.year == internship_start.year and contract_start_date.month == (internship_start - relativedelta(months=1)).month and contract_start_date.day > 15:
last_internship_days = self._process_shift_days(contract_start_date, internship_start - relativedelta(days=1))
@@ -267,23 +269,23 @@ class SalaryComputeWizard(models.Model):
if field_name == 'performance_bonuses':
if work_days != internship_days:
result = (base_80 * internship_days + line.total * work_days * last_internship_days * RATIO_80) / days
result = (base_80 * internship_days + line.total * work_days) / days
else:
result = base_80 * (internship_days + last_internship_days) / days
result = base_80 * internship_days / days + base_80 * last_internship_days / last_days
result = math.ceil(result * 100) / 100
elif field_name == 'full_attendance_award':
result = line.total * last_internship_days / days
result = line.total * last_internship_days / last_days
elif field_name in ['commuting_allowance', 'seniority_salary']:
if work_days != internship_days:
result = math.ceil(( line.total * internship_days + line.total * work_days + line.total * last_internship_days) / days * 100) / 100
result = math.ceil(( line.total * internship_days + line.total * work_days) / days * 100) / 100
else:
result = math.ceil(line.total * (internship_days + last_internship_days) / days * 100) / 100
result = math.ceil((line.total * internship_days / days + line.total * last_internship_days / last_days) * 100) / 100
elif field_name in ['rank_salary', 'base_salary']:
if work_days != internship_days:
result = ( base_80 * internship_days + line.total * work_days + line.total * last_internship_days * RATIO_80) / days
else:
result = base_80 * (internship_days + last_internship_days) / days
result = base_80 * internship_days / days + base_80 * last_internship_days / last_days
result = math.ceil(result * 100) / 100