添加功能

This commit is contained in:
李鹏宇
2025-09-26 16:37:08 +08:00
parent 8e30b912cf
commit b31a0ad5e7
2 changed files with 65 additions and 0 deletions
@@ -6,6 +6,7 @@ from odoo.osv import expression
from odoo import api, fields, models
from datetime import date, datetime
from odoo.exceptions import UserError, ValidationError
import math
nation_list = [('a', '汉族'), ('b', '壮族'), ('v', '满族'), ('d', '回族'), ('e', '苗族'), ('f', '维吾尔族'),
('g', '土家族'), ('h', '彝族'), ('i', '蒙古族'), ('j', '藏族'), ('k', '布依族'), ('l', '侗族'),
@@ -238,6 +239,62 @@ class YuthonHrEmployee(models.Model):
recovery_sick_leave = fields.Float(string='病假(出院恢复期)')
exam_leave = fields.Integer(string='考试假')
def update_social_base(self):
current_year = fields.Date.today().year
group_company = self.env['res.company'].search([('name', '=', '集团本部')], limit=1)
official_contract_type = self.env['hr.contract.type'].search(
[('name', '=', '正式合同(一签)')],
limit=1
)
eligible_employees = self.env['hr.contract'].search([
('employee_id.company_id', '=', group_company.id),
('contract_type_id', '=', official_contract_type.id),
('date_start', '>=', f'{current_year}-01-01'),
('date_start', '<=', f'{current_year}-12-31')
]).mapped('employee_id')
eighty_percent_items = [
'基本工资',
'职级工资',
'预发绩效奖金'
]
full_amount_items = [
'通讯补贴',
'工龄工资'
]
for employee in eligible_employees:
payslip_id = self.env['hr.payslip'].create({
'employee_id': employee.id,
'name': f"{employee.name}的薪资单-{fields.Date.today().strftime('%Y%m')}",
})
payslip_id.compute_sheet()
eighty_lines = payslip_id.line_ids.filtered(
lambda l: l.name in eighty_percent_items
)
full_lines = payslip_id.line_ids.filtered(
lambda l: l.name in full_amount_items
)
eighty_sum = sum(eighty_lines.mapped('amount'))
total_eighty_part = math.ceil(eighty_sum * 0.8)
total_full_part = sum(full_lines.mapped('amount')) if full_lines else 0
final_total = total_eighty_part + total_full_part + 200
employee.write({
'social_base_on': final_total,
'social_base_off': final_total
})
payslip_id.action_payslip_cancel()
payslip_id.unlink()
social_base_on = fields.Float(string="1-6月公积金基数")
social_base_off = fields.Float(string="7-12月公积金基数")
def get_my_employee_action(self):
current_user = self.env.user
my_employee = self.search([('user_id', '=', current_user.id)], limit=1)
@@ -575,6 +575,14 @@
<field name="state">code</field>
<field name="code">action = model.action_hr_employee()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="all_write_social_base" model="ir.actions.server">
<field name="name">更新公积金</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.update_social_base()</field>
<field name="groups_id" eval="[(4, ref('base.group_system'))]"/>
</record>
<record id="hr.open_view_employee_list_my" model="ir.actions.act_window">
<field name="view_mode">tree,kanban,form,activity,graph,pivot,hierarchy</field>