diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py index c2e4681cc..0ceaea526 100644 --- a/yuthon_hr_employee/models/yuthon_hr_employee.py +++ b/yuthon_hr_employee/models/yuthon_hr_employee.py @@ -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) diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml index 5e41a9488..a2a3e6cb3 100644 --- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml @@ -575,6 +575,14 @@ code action = model.action_hr_employee() + + + 更新公积金 + + + code + action = model.update_social_base() + tree,kanban,form,activity,graph,pivot,hierarchy