!2072 添加功能

Merge pull request !2072 from dev_zhou
This commit is contained in:
李鹏宇
2025-03-24 10:53:59 +00:00
committed by Gitee
3 changed files with 28 additions and 4 deletions
@@ -222,3 +222,20 @@ class InheritHrPayslip(models.Model):
"view_mode": "form",
"target": "new",
}
def compute_sheet(self, custom_date):
payslips = self.filtered(lambda slip: slip.state in ['draft', 'verify'])
# delete old payslip lines
payslips.line_ids.unlink()
# this guarantees consistent results
self.env.flush_all()
today = custom_date if custom_date else fields.Date.today()
for payslip in payslips:
number = payslip.number or self.env['ir.sequence'].next_by_code('salary.slip')
payslip.write({
'number': number,
'state': 'verify',
'compute_date': today
})
self.env['hr.payslip.line'].create(payslips._get_payslip_lines())
return True
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _, SUPERUSER_ID
from odoo.exceptions import ValidationError, UserError
from odoo.exceptions import ValidationError
from pypinyin import pinyin, Style
import xlrd
import base64
@@ -60,18 +61,23 @@ class SalaryComputeWizard(models.Model):
'state': 'draft',
'payslip_count': 0
})
struct_id = contract_id.structure_type_id.default_struct_id
existing_payslip = self.env['hr.payslip'].search([
('employee_id', '=', employee.id),
('date_from', '<=', end_date),
('date_to', '>=', start_date)
])
if existing_payslip:
raise UserError( f"员工 {employee.name} 在 {start_date} 到 {end_date} 日期范围内已有工资单记录,无法创建新的工资单。")
payslip = self.env['hr.payslip'].create({
'name': employee.name,
'employee_id': employee.id,
'contract_id': contract_id.id,
'date_from': start_date,
'date_to': end_date,
'struct_id': struct_id.id,
'payslip_run_id': payslip_run_id.id,
'state': 'draft',
})
payslip.compute_sheet()
payslip.compute_sheet(start_date)
def _get_chinese_month(self, month):
chinese_months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
@@ -37,7 +37,8 @@ class SalaryPayslipWizard(models.Model):
'state': 'draft',
'payslip_count': 0
})
payslip_id = self.env['hr.payslip'].search([('employee_id', '=', employee_id.id), ('is_push', '=', True), ('is_salary_push', '=', False)])
payslip_id = self.env['hr.payslip'].search([('employee_id', '=', employee_id.id), ('is_push', '=', True), ('is_salary_push', '=', False),
('date_from', '>=', row[4].value), ('date_to', '<=', row[5].value)])
payslip_id.write({
'name': employee_id.name,
'employee_id': employee_id.id,