@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user