Merge pull request !1497 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-02-17 09:24:03 +00:00
committed by Gitee
13 changed files with 315 additions and 54 deletions
+29 -29
View File
@@ -6,38 +6,38 @@
name="Workflow"
web_icon="soong_workflow,static/description/icon.png"
sequence="2"/>
<menuitem id="menu_workflow_approval_request_my"
name="待办流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action"
sequence="1"/>
<menuitem id="menu_workflow_approval_request_copy"
name="抄送/传阅流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_copy"
sequence="2"/>
<menuitem id="menu_workflow_approval_request_entrust"
name="委托流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action"
sequence="3"/>
<menuitem id="menu_workflow_approval_request_all"
name="流程查询"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_all"
sequence="4"/>
<menuitem id="menu_workflow_approval_request_admin"
name="流程监控"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_admin"
sequence="4"/>
<menuitem id="menu_workflow_approval_request_new"
name="新建流程"
parent="menu_soong_workflow_root"
action="action_kklw_workflow_approval_request"
sequence="1"/>
<menuitem id="menu_workflow_approval_request_my"
name="待办流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action"
sequence="3"/>
<menuitem id="menu_workflow_approval_request_copy"
name="抄送/传阅流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_copy"
sequence="5"/>
<menuitem id="menu_workflow_approval_request_entrust"
name="委托流程"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action"
sequence="7"/>
<menuitem id="menu_workflow_approval_request_all"
name="流程查询"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_all"
sequence="9"/>
<menuitem id="menu_workflow_approval_request_admin"
name="流程监控"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_admin"
sequence="11"/>
<menuitem id="menu_soong_workflow_entrust"
sequence="6"
sequence="13"
name="流程委托"
action="soong_workflow_entrust_action"
parent="menu_soong_workflow_root"/>
@@ -45,14 +45,14 @@
name="流程回收站"
parent="menu_soong_workflow_root"
action="soong_workflow_record_action_reclaim"
sequence="7"/>
sequence="15"/>
<menuitem id="menu_soong_workflow_inspector_approval"
sequence="8"
sequence="17"
name="督办审批"
action="soong_workflow_inspector_action"
parent="menu_soong_workflow_root"/>
<menuitem id="menu_soong_other_setting"
sequence="9"
sequence="19"
name="其他配置"
parent="menu_soong_workflow_root"
action="soong_note_action"/>
+4 -2
View File
@@ -448,7 +448,7 @@ class HrAttendance(models.Model):
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
def card_lc_shift_remind_on_administrative(self):
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '计划行政')])
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
self.env['card.remind.form'].create({
@@ -457,8 +457,9 @@ class HrAttendance(models.Model):
'shift': user.template_id.planning_name,
'department': user.department_id.name, })
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
def card_lc_shift_remind_out_administrative(self):
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '计划行政')])
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
for user in ba_up_users:
if user.start_datetime.date() == fields.date.today():
self.env['card.remind.form'].create({
@@ -467,6 +468,7 @@ class HrAttendance(models.Model):
'shift': user.template_id.planning_name,
'department': user.department_id.name, })
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
def card_in_comment(self, employee_id, planning_name):
data = f"您的班次是{planning_name},还有10分钟上班,记得打卡"
self.sudo().env["wecom.apps"].sync_send_message(category='att', user_id=employee_id.wecom_userid, message=data)
+2
View File
@@ -32,6 +32,8 @@
'views/inherit_hr_applicant_views.xml',
'views/publish_applicant_setting_views.xml',
'views/inherit_res_groups_views.xml',
'views/yuthon_medical_rule_views.xml',
'views/yuthon_medical_manage_views.xml',
'views/yuthon_job_postings_views.xml',
'views/soong_user_role_views.xml',
'wizard/hr_employee_wizard_views.xml',
+2
View File
@@ -11,4 +11,6 @@ from . import yuthon_job_postings
from . import yuthon_party_setting
from . import inherit_res_groups
from . import soong_user_role
from . import yuthon_medical_manage
from . import yuthon_medical_rule
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
import re
class YuthonMedicalManage(models.Model):
_name = 'yuthon.medical.manage'
_description = '体检费管理'
employee_id = fields.Many2one('hr.employee', string="员工姓名")
current_year_remaining = fields.Float(string="本年剩余")
last_year_quota = fields.Float(string="上年额度")
last_year_balance = fields.Float(string="上年结余")
last_year_used = fields.Float(string="上年使用")
last_year_remaining = fields.Float(string="上年剩余")
prev_last_year_quota = fields.Float(string="前年额度")
prev_last_year_balance = fields.Float(string="前年结余")
prev_last_year_used = fields.Float(string="前年使用")
prev_last_year_remaining = fields.Float(string="前年剩余")
@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
from odoo.exceptions import UserError, ValidationError
from datetime import datetime
import re
class YuthonMedicalRule(models.Model):
_name = 'yuthon.medical.rule'
_description = '体检费规则'
base_amount = fields.Float(string='基数金额')
starting_age = fields.Integer(string='起始年龄')
increase_interval_years = fields.Integer(string='递增间隔(年)')
increment_amount = fields.Float(string='递增金额')
cap = fields.Float(string='封顶金额')
allowance_unmarried_women = fields.Float(string='未婚女性补助')
allowance_married_women = fields.Float(string='已婚女性补助')
start_date = fields.Date(string='开始时间')
end_date = fields.Date(string='结束时间')
is_enable = fields.Boolean(string="是否启用", default=False, compute='compute_is_enable', store=True)
@api.depends('start_date', 'end_date')
def compute_is_enable(self):
for rec in self:
if rec.start_date and rec.end_date:
if rec.start_date <= fields.Date.today() < rec.end_date:
rec.is_enable = True
else:
rec.is_enable = False
@@ -15,4 +15,6 @@ access_yuthon_job_postings,yuthon_job_postings,model_yuthon_job_postings,base.gr
access_interview_message_line,interview_message_line,model_interview_message_line,base.group_user,1,1,1,1
access_yuthon_hr_employee_time_wizard,yuthon_hr_employee_time_wizard,model_yuthon_hr_employee_time_wizard,base.group_user,1,1,1,1
access_hr_job_add_wizard,hr_job_add_wizard,model_hr_job_add_wizard,base.group_user,1,1,1,1
access_yuthon_party_setting,yuthon_party_setting,model_yuthon_party_setting,base.group_user,1,1,1,1
access_yuthon_party_setting,yuthon_party_setting,model_yuthon_party_setting,base.group_user,1,1,1,1
access_yuthon_medical_rule,yuthon_medical_rule,model_yuthon_medical_rule,base.group_user,1,1,1,1
access_yuthon_medical_manage,yuthon_medical_manage,model_yuthon_medical_manage,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
15 access_interview_message_line interview_message_line model_interview_message_line base.group_user 1 1 1 1
16 access_yuthon_hr_employee_time_wizard yuthon_hr_employee_time_wizard model_yuthon_hr_employee_time_wizard base.group_user 1 1 1 1
17 access_hr_job_add_wizard hr_job_add_wizard model_hr_job_add_wizard base.group_user 1 1 1 1
18 access_yuthon_party_setting yuthon_party_setting model_yuthon_party_setting base.group_user 1 1 1 1
19 access_yuthon_medical_rule yuthon_medical_rule model_yuthon_medical_rule base.group_user 1 1 1 1
20 access_yuthon_medical_manage yuthon_medical_manage model_yuthon_medical_manage base.group_user 1 1 1 1
@@ -95,4 +95,23 @@
</xpath>
</field>
</record>
<record id='view_crm_case_categ0_act_job1' model='ir.actions.act_window'>
<field name='name'>面试信息</field>
<field name='res_model'>hr.applicant</field>
<field name='view_mode'>kanban,tree,form,pivot,graph,calendar,activity</field>
<field name="context">{'search_default_stage':1}</field>
<field name="domain">[('stage_id.name','!=',['人才库','待入职'])]</field>
</record>
<record id="view_crm_case_categ0_act_job2" model="ir.actions.act_window">
<field name="name">人才库</field>
<field name="res_model">hr.applicant</field>
<field name="view_mode">kanban,tree,form,pivot,graph,calendar,activity</field>
<field name="domain">[('stage_id.name', '=' , '人才库')]</field>
</record>
<record id="view_crm_case_categ0_act_job3" model="ir.actions.act_window">
<field name="name">待入职</field>
<field name="res_model">hr.applicant</field>
<field name="view_mode">kanban,tree,form,pivot,graph,calendar,activity</field>
<field name="domain">[('stage_id.name', '=', '待入职')]</field>
</record>
</odoo>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_yuthon_medical_manage_tree" model="ir.ui.view">
<field name="name">yuthon.medical.manage.tree</field>
<field name="model">yuthon.medical.manage</field>
<field name="arch" type="xml">
<tree string="体检费管理" editable="bottom">
<field name="employee_id"/>
<field name="current_year_remaining"/>
<field name="last_year_quota"/>
<field name="last_year_balance"/>
<field name="last_year_used"/>
<field name="last_year_remaining"/>
<field name="prev_last_year_quota"/>
<field name="prev_last_year_balance"/>
<field name="prev_last_year_used"/>
<field name="prev_last_year_remaining"/>
</tree>
</field>
</record>
<record id="view_yuthon_medical_manage_action" model="ir.actions.act_window">
<field name="name">体检费管理</field>
<field name="res_model">yuthon.medical.manage</field>
<field name="view_mode">tree</field>
</record>
</odoo>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_yuthon_medical_rule_tree" model="ir.ui.view">
<field name="name">yuthon.medical.rule.tree</field>
<field name="model">yuthon.medical.rule</field>
<field name="arch" type="xml">
<tree string="体检费规则" editable="bottom">
<field name="base_amount"/>
<field name="starting_age"/>
<field name="increase_interval_years"/>
<field name="increment_amount"/>
<field name="cap"/>
<field name="allowance_unmarried_women"/>
<field name="allowance_married_women"/>
<field name="start_date"/>
<field name="end_date"/>
<field name="is_enable"/>
</tree>
</field>
</record>
<record id="view_yuthon_medical_rule_action" model="ir.actions.act_window">
<field name="name">体检费规则</field>
<field name="res_model">yuthon.medical.rule</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -15,6 +15,60 @@ class HrPayrollStructure(models.Model):
end_time = fields.Date(string="失效日期")
is_enable = fields.Boolean(string="启用", default=True)
currency_id = fields.Many2one("res.currency", string="货币", required=True,
default=lambda self: self.env.company.currency_id)
rank_salary = fields.Monetary(string="职级工资", currency_field="currency_id")
performance_bonus = fields.Monetary(string="绩效奖金", currency_field="currency_id")
communication_subsidy = fields.Monetary(string="通讯补贴", currency_field="currency_id")
position_salary = fields.Monetary(string="岗位工资", currency_field="currency_id")
seniority_salary = fields.Monetary(string="工龄工资", currency_field="currency_id")
overtime_pay = fields.Monetary(string="加班费", currency_field="currency_id")
full_attendance_bonus = fields.Monetary(string="全勤奖", currency_field="currency_id")
attendance_deduction = fields.Monetary(string="考勤扣款合计", currency_field="currency_id")
assessment_reserve = fields.Monetary(string="考核保留量", currency_field="currency_id")
temporary_performance_salary = fields.Monetary(string="临时绩效工资", currency_field="currency_id")
post_allowance_bonus = fields.Monetary(string="顶岗奖励", currency_field="currency_id")
excellence_performance_bonus = fields.Monetary(string="评优绩效奖金", currency_field="currency_id")
performance_bonus_recovery = fields.Monetary(string="绩效奖金扣回", currency_field="currency_id")
seniority_award = fields.Monetary(string="年功奖", currency_field="currency_id")
special_management_bonus = fields.Monetary(string="经营特别奖", currency_field="currency_id")
annual_leave_settlement = fields.Monetary(string="年假结算", currency_field="currency_id")
assessment_reserve_payment = fields.Monetary(string="考核保留量发放", currency_field="currency_id")
learning_progress_award = fields.Monetary(string="学习进步奖", currency_field="currency_id")
performance_assessment_excellence_bonus = fields.Monetary(string="绩效考核评优奖金", currency_field="currency_id")
prepaid_performance_bonus_recovery = fields.Monetary(string="预发绩效奖金扣回", currency_field="currency_id")
temporary_performance_wages = fields.Monetary(string="临时绩效工资", currency_field="currency_id")
year_end_double_salary = fields.Monetary(string="年终双薪", currency_field="currency_id")
excellence_award_bonus = fields.Monetary(string="评优绩效奖金", currency_field="currency_id")
excellence_bonus = fields.Monetary(string="评优奖金", currency_field="currency_id")
learning_progress_bonus = fields.Monetary(string="学习进步奖", currency_field="currency_id")
social_security_overdeduction_refund = fields.Monetary(string="多扣社保退回", currency_field="currency_id")
performance_bonus_deduction = fields.Monetary(string="绩效奖金扣回", currency_field="currency_id")
communication_subsidy_deduction = fields.Monetary(string="通讯补贴扣回", currency_field="currency_id")
seniority_award_bonus = fields.Monetary(string="年功奖", currency_field="currency_id")
total_budget_salary = fields.Monetary(string="(预算口径)应发工资合计", currency_field="currency_id")
pre_tax_salary = fields.Monetary(string="税前工资合计", currency_field="currency_id")
year_end_bonus = fields.Monetary(string="年终奖金", currency_field="currency_id")
basic_pension = fields.Monetary(string="基本养老", currency_field="currency_id")
basic_medical = fields.Monetary(string="基本医疗", currency_field="currency_id")
unemployment = fields.Monetary(string="失业", currency_field="currency_id")
housing_fund = fields.Monetary(string="公积金", currency_field="currency_id")
personal_contributions_total = fields.Monetary(string="个人缴纳合计", currency_field="currency_id")
child_education = fields.Monetary(string="子女教育", currency_field="currency_id")
elderly_support = fields.Monetary(string="赡养老人", currency_field="currency_id")
housing_loan = fields.Monetary(string="住房贷款", currency_field="currency_id")
housing_rent = fields.Monetary(string="住房租金", currency_field="currency_id")
continuing_education = fields.Monetary(string="继续教育", currency_field="currency_id")
infant_care = fields.Monetary(string="3岁以下婴幼儿照护", currency_field="currency_id")
special_deductions_total = fields.Monetary(string="专项附加扣除小计", currency_field="currency_id")
corporate_annuity = fields.Monetary(string="企业年金", currency_field="currency_id")
payable_salary = fields.Monetary(string="应发工资", currency_field="currency_id")
social_security_funds = fields.Monetary(string="三险一金", currency_field="currency_id")
annuity = fields.Monetary(string="年金", currency_field="currency_id")
tax_adjustment = fields.Monetary(string="应补(退)税额", currency_field="currency_id")
union_fees = fields.Monetary(string="工会会费", currency_field="currency_id")
actual_salary = fields.Monetary(string="实发工资", currency_field="currency_id")
@api.model
def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
res = super(HrPayrollStructure, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby,
@@ -21,6 +21,57 @@
<field name="lv_name" column_invisible="1"/>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="rank_salary"/>
<field name="performance_bonus"/>
<field name="communication_subsidy"/>
<field name="position_salary"/>
<field name="seniority_salary"/>
<field name="overtime_pay"/>
<field name="full_attendance_bonus"/>
<field name="attendance_deduction"/>
<field name="assessment_reserve"/>
<field name="temporary_performance_salary"/>
<field name="post_allowance_bonus"/>
<field name="excellence_performance_bonus"/>
<field name="performance_bonus_recovery"/>
<field name="seniority_award"/>
<field name="special_management_bonus"/>
<field name="annual_leave_settlement"/>
<field name="assessment_reserve_payment"/>
<field name="learning_progress_award"/>
<field name="performance_assessment_excellence_bonus"/>
<field name="prepaid_performance_bonus_recovery"/>
<field name="temporary_performance_wages"/>
<field name="year_end_double_salary"/>
<field name="excellence_award_bonus"/>
<field name="excellence_bonus"/>
<field name="learning_progress_bonus"/>
<field name="social_security_overdeduction_refund"/>
<field name="performance_bonus_deduction"/>
<field name="communication_subsidy_deduction"/>
<field name="seniority_award_bonus"/>
<field name="total_budget_salary"/>
<field name="pre_tax_salary"/>
<field name="year_end_bonus"/>
<field name="basic_pension"/>
<field name="basic_medical"/>
<field name="unemployment"/>
<field name="housing_fund"/>
<field name="personal_contributions_total"/>
<field name="child_education"/>
<field name="elderly_support"/>
<field name="housing_loan"/>
<field name="housing_rent"/>
<field name="continuing_education"/>
<field name="infant_care"/>
<field name="special_deductions_total"/>
<field name="corporate_annuity"/>
<field name="payable_salary"/>
<field name="social_security_funds"/>
<field name="annuity"/>
<field name="tax_adjustment"/>
<field name="union_fees"/>
<field name="actual_salary"/>
<field name="yuthon_company"/>
<field name="create_time"/>
<field name="end_time"/>
+47 -22
View File
@@ -21,6 +21,21 @@
parent="hr_recruitment_menu_root_board"
action="hr_recruitment.crm_case_categ0_act_job"
sequence="2"/>
<menuitem id="hr_recruitment_interview_message_menu_board"
name="面试信息"
parent="hr_recruitment_all_menu_board"
action="yuthon_hr_employee.view_crm_case_categ0_act_job1"
sequence="1"/>
<menuitem id="hr_recruitment_interview_onboard_board"
name="待入职"
parent="hr_recruitment_all_menu_board"
action="yuthon_hr_employee.view_crm_case_categ0_act_job3"
sequence="3"/>
<menuitem id="hr_recruitment_interview_offboard_board"
name="人才库"
parent="hr_recruitment_all_menu_board"
action="yuthon_hr_employee.view_crm_case_categ0_act_job2"
sequence="5"/>
<menuitem id="hr_process_manage_menu_root_board"
name="个人信息登记表"
parent="hr_recruitment_menu_root_board"
@@ -101,22 +116,22 @@
action="yuthon_sps_approval.view_yuthon_office_supplies_setting_action"
sequence="17"/>
<!-- 人事 -->
<menuitem id="hr_employee_menu_root_board2"
name="花名册"
parent="human_resources_menu_root_board"
groups="yuthon_hr_employee.group_hr_employee_user"
action="hr.open_view_employee_list_my"
sequence="1"/>
<menuitem id="hr_menu_root_board"
name="人事管理"
parent="human_resources_menu_root_board"
groups="yuthon_hr_employee.group_hr_employee_user"
sequence="1"/>
sequence="3"/>
<menuitem id="hr_employee_menu_root_board"
name="员工"
parent="hr_menu_root_board"
groups="yuthon_hr_employee.group_hr_employee_user"
sequence="1"/>
<menuitem id="hr_employee_menu_root_board2"
name="花名册"
parent="hr_employee_menu_root_board"
groups="yuthon_hr_employee.group_hr_employee_user"
action="hr.open_view_employee_list_my"
sequence="1"/>
<menuitem id="hr_recruitment_work_job_menu_board"
name="岗位编制"
parent="hr_employee_menu_root_board"
@@ -141,6 +156,16 @@
groups="yuthon_hr_employee.group_hr_employee_manager"
action="hr_org_chart.action_hr_employee_org_chart"
sequence="10"/>
<menuitem id="hr_employee_medical_message_menu_root_board"
name="体检费管理"
parent="hr_employee_menu_root_board"
action="yuthon_hr_employee.view_yuthon_medical_manage_action"
sequence="13"/>
<menuitem id="hr_employee_medical_rule_menu_root_board"
name="体检费规则"
parent="hr_employee_menu_root_board"
action="yuthon_hr_employee.view_yuthon_medical_rule_action"
sequence="15"/>
<menuitem id="hr_set_process_menu_root_board"
name="流程"
parent="hr_menu_root_board"
@@ -325,11 +350,11 @@
parent="human_pay_setting_structural_tt_board"
action="yuthon_salary.action_view_hr_payroll_structure_list_form1"
sequence="3"/>
<menuitem id="human_pay_setting_payroll_items_tt_board"
name="工资项"
parent="human_pay_setting_structural_tt_board"
action="yuthon_salary.action_salary_rule_form1"
sequence="7"/>
<!-- <menuitem id="human_pay_setting_payroll_items_tt_board"-->
<!-- name="工资项"-->
<!-- parent="human_pay_setting_structural_tt_board"-->
<!-- action="yuthon_salary.action_salary_rule_form1"-->
<!-- sequence="7"/>-->
<menuitem id="human_pay_setting_payroll_items_tt_setting_board"
name="职级类别配置"
parent="human_pay_setting_structural_tt_board"
@@ -349,11 +374,11 @@
parent="human_pay_setting_structural_lc_board"
action="yuthon_salary.action_view_hr_payroll_structure_list_form2"
sequence="3"/>
<menuitem id="human_pay_setting_payroll_items_lc_board"
name="工资项"
parent="human_pay_setting_structural_lc_board"
action="yuthon_salary.action_salary_rule_form2"
sequence="7"/>
<!-- <menuitem id="human_pay_setting_payroll_items_lc_board"-->
<!-- name="工资项"-->
<!-- parent="human_pay_setting_structural_lc_board"-->
<!-- action="yuthon_salary.action_salary_rule_form2"-->
<!-- sequence="7"/>-->
<menuitem id="human_pay_setting_payroll_items_lc_setting_board"
name="职级类别配置"
parent="human_pay_setting_structural_lc_board"
@@ -373,11 +398,11 @@
parent="human_pay_setting_structural_wg_board"
action="yuthon_salary.action_view_hr_payroll_structure_list_form3"
sequence="5"/>
<menuitem id="human_pay_setting_payroll_items_wg_board"
name="工资项"
parent="human_pay_setting_structural_wg_board"
action="yuthon_salary.action_salary_rule_form3"
sequence="7"/>
<!-- <menuitem id="human_pay_setting_payroll_items_wg_board"-->
<!-- name="工资项"-->
<!-- parent="human_pay_setting_structural_wg_board"-->
<!-- action="yuthon_salary.action_salary_rule_form3"-->
<!-- sequence="7"/>-->
<menuitem id="human_pay_setting_payroll_items_wg_setting_board"
name="职级类别配置"
parent="human_pay_setting_structural_wg_board"