diff --git a/yuthon_salary/models/inherit_hr_payslip.py b/yuthon_salary/models/inherit_hr_payslip.py index 98a84927f..c877bbe93 100644 --- a/yuthon_salary/models/inherit_hr_payslip.py +++ b/yuthon_salary/models/inherit_hr_payslip.py @@ -109,13 +109,13 @@ class InheritHrPayslip(models.Model): def action_refresh_from_work_entries(self): if any(p.state not in ['draft', 'verify'] for p in self): raise UserError(_('The payslips should be in Draft or Waiting state.')) - payslip_records = self.browse(self._context.get('active_ids', self._context.get('active_id'))) - for pay in payslip_records: - # payslips = self.filtered(lambda p: not p.edited) - pay.mapped('worked_days_line_ids').unlink() - pay.mapped('line_ids').unlink() - pay._compute_worked_days_line_ids() - pay.compute_sheet() + payslip_records = self.browse(self._context.get('active_ids', self._context.get('active_id'))) + for pay in payslip_records: + # payslips = self.filtered(lambda p: not p.edited) + pay.mapped('worked_days_line_ids').unlink() + pay.mapped('line_ids').unlink() + pay._compute_worked_days_line_ids() + pay.compute_sheet() @api.depends('line_ids') def _compute_salary(self): @@ -317,7 +317,7 @@ class InheritHrPayslip(models.Model): "target": "new", } - def compute_sheet(self): + def compute_sheet_new(self): payslips = self.filtered(lambda slip: slip.state in ['draft', 'verify']) # delete old payslip lines payslips.line_ids.unlink() diff --git a/yuthon_salary/models/yuthon_salary_year.py b/yuthon_salary/models/yuthon_salary_year.py index d94e2947c..abe6a4160 100644 --- a/yuthon_salary/models/yuthon_salary_year.py +++ b/yuthon_salary/models/yuthon_salary_year.py @@ -61,10 +61,10 @@ class YuthonSalaryYear(models.Model): for record in self: rule = self.env['yuthon.personal.rule'].search([ ('start_number', '<', record.sum_salary), - ('end_number', '>', record.sum_salary), + ('end_number', '>=', record.sum_salary), ], limit=1) if rule: - record.buckle_salary = record.sum_salary * rule.tax_rate + record.buckle_salary = record.sum_salary * rule.tax_rate - rule.compute_number else: record.buckle_salary = 0 diff --git a/yuthon_salary/wizard/salary_compute_wizard.py b/yuthon_salary/wizard/salary_compute_wizard.py index 97d04a08e..df384752d 100644 --- a/yuthon_salary/wizard/salary_compute_wizard.py +++ b/yuthon_salary/wizard/salary_compute_wizard.py @@ -91,10 +91,23 @@ class SalaryComputeWizard(models.Model): 'payslip_run_id': payslip_run_id.id, 'state': 'draft', }) - payslip.mapped('worked_days_line_ids').unlink() - payslip.mapped('line_ids').unlink() - payslip._compute_worked_days_line_ids() - payslip.compute_sheet() + payslip.compute_sheet_new() + month = int(self.select_time) + month_mapping = { + 1: '一月', 2: '二月', 3: '三月', 4: '四月', + 5: '五月', 6: '六月', 7: '七月', 8: '八月', + 9: '九月', 10: '十月', 11: '十一月', 12: '十二月' + } + month_name = month_mapping.get(month, '一月') + payslip_records = self.env['hr.payslip'].search([ + ('is_push', '=', False), + ('payslip_run_id.name', 'like', f'%年-{month_name}') # 匹配格式:"2025年-一月" + ]) + for pay in payslip_records: + pay.mapped('worked_days_line_ids').unlink() + pay.mapped('line_ids').unlink() + pay._compute_worked_days_line_ids() + pay.compute_sheet() internship_ids = self.env['hr.payslip'].search([ ('employee_id.contract_id.is_probation', '=', True),