添加功能

This commit is contained in:
zhouzhou
2024-09-19 20:44:21 +08:00
parent a87de0f185
commit 0311350c57
46 changed files with 691 additions and 183 deletions
+11 -4
View File
@@ -6,7 +6,7 @@ class HrJob(models.Model):
_inherit = "hr.job"
company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司")
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
job_lv_id = fields.Many2one('yuthon.job.lv', string="职级")
@@ -15,16 +15,23 @@ class HrJob(models.Model):
is_enable = fields.Boolean(string="是否启用", default=False, compute="compute_is_enable", store=True)
compiling_external = fields.Integer(string="编制外人数")
compiling_status = fields.Selection([('1', '缺编'), ('2', '满编')], compute="_compute_compiling_status", string="状态")
missing_number = fields.Integer(string="缺编人数")
missing_number = fields.Integer(string="缺编人数",compute='_depends_missing_number')
establishment_quotas = fields.Integer(string="编制定员")
job_personnel = fields.Char(string="在岗人员")
remarks = fields.Text(string="备注")
@api.depends('expected_employees', 'no_of_employee')
@api.depends('establishment_quotas', 'no_of_employee')
def _compute_compiling_status(self):
for state in self:
if state.no_of_employee < state.expected_employees:
if state.no_of_employee < state.establishment_quotas:
state.compiling_status = '1'
else:
state.compiling_status = '2'
@api.depends('establishment_quotas', 'no_of_employee')
def _depends_missing_number(self):
for rec in self:
rec.missing_number = rec.establishment_quotas - rec.no_of_employee
@api.depends('start_time', 'end_time')
@@ -13,8 +13,10 @@ class YuthonHrDepartment(models.Model):
department_function = fields.Char(string="部门职能")
is_institution = fields.Boolean(string="是否机构")
is_global_department = fields.Boolean(string="是否全局部门")
create_time = fields.Datetime(string="创建时间", default=fields.Datetime.now)
end_time = fields.Datetime(string="结束时间")
create_date = fields.Date(string="创建时间", default=fields.Date.today())
start_date = fields.Date(string="生效日期", default=fields.Date.today())
expiration_date = fields.Date(string="失效日期", default=fields.Date.today())
end_date = fields.Date(string="结束时间")
department_code = fields.Char(string="部门序号", store=True)
@api.onchange('department_code', 'parent_id')
@@ -96,4 +96,5 @@
</xpath>
</field>
</record>
</odoo>
@@ -23,8 +23,8 @@
<xpath expr="//field[@name='department_id']" position="after">
<field name="job_type_id"/>
<field name="job_lv_id"/>
<field name="company"/>
<field name="expected_employees" string="编制定员"/>
<field name="yuthon_company"/>
<field name="establishment_quotas"/>
<field name="no_of_employee" string="在编人数"/>
<field name="compiling_external"/>
<field name="missing_number"/>
@@ -52,18 +52,14 @@
<field name="arch" type="xml">
<xpath expr="//field[@name='department_id']" position="after">
<field name="job_type_id"/>
<field name="expected_employees" string="编制定员"/>
<field name="establishment_quotas"/>
<field name="no_of_employee" string="在编人数"/>
<field name="compiling_external"/>
<field name="missing_number"/>
<field name="missing_number" force_save="1"/>
<field name="compiling_status"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="after">
<field name="job_lv_id"/>
<field name="company"/>
</xpath>
<xpath expr="//field[@name='description']" position="after">
<attribute name="column_invisible">1</attribute>
<field name="yuthon_company"/>
</xpath>
<div name="recruitment_target" position="after">
<field name="start_time"/>
@@ -9,16 +9,27 @@
<field name="model">hr.department</field>
<field name="inherit_id" ref="hr.view_department_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='total_employee']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='parent_id']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='color']" position="attributes">
<attribute name="column_invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="department_phone"/>
<field name="department_code"/>
<field name="department_phone"/>
<field name="department_fax" column_invisible="1"/>
<field name="department_location"/>
<field name="parent_id" string="上级部门"/>
<field name="total_employee" string="员工数量"/>
<field name="department_function" column_invisible="1"/>
<field name="is_institution" column_invisible="1"/>
<field name="is_global_department" column_invisible="1"/>
<field name="create_time"/>
<field name="end_time"/>
<field name="start_date"/>
<field name="expiration_date"/>
</xpath>
<field name="manager_id" position="attributes">
<attribute name="column_invisible">1</attribute>
+3 -2
View File
@@ -2,7 +2,7 @@
# email:pengyuthon@163.com
{
'name': 'Yuthon hr apporval',
'name': 'Yuthon Hr Apporval',
'summary': '',
'description': '''
''',
@@ -11,9 +11,10 @@
'license': 'LGPL-3',
'author': 'pengyuthon',
'website': 'https://www.pengyuthon.com',
'depends':['base', 'hr', 'hr_recruitment', 'yuthon_hr_employee', 'soong_workflow'],
'depends':['base', 'hr', 'yuthon_hr_employee', 'soong_workflow', 'documents','hr_recruitment'],
'data': [
'security/ir.model.access.csv',
'views/inherit_hr_job_views.xml',
'views/yuthon_message_login_views.xml',
'views/yuthon_onboard_approval_views.xml',
'views/yuthon_enrollment_approval_views.xml',
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="yuthon_account_approval_code" model="ir.sequence">
<field name="name">薪资核算申请表-编号</field>
<field name="code">yuthon_account_approval_code</field>
<field name="prefix">XZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_enrollment_approval_code" model="ir.sequence">
<field name="name">参保方案申请表-编号</field>
<field name="code">yuthon_enrollment_approval_code</field>
<field name="prefix">CB%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_interview_approval_code" model="ir.sequence">
<field name="name">面试信息表-编号</field>
<field name="code">yuthon_interview_approval_code</field>
<field name="prefix">MS%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_leaving_approval_code" model="ir.sequence">
<field name="name">离职申请表-编号</field>
<field name="code">yuthon_leaving_approval_code</field>
<field name="prefix">LZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_message_login_code" model="ir.sequence">
<field name="name">个人信息登记表-编号</field>
<field name="code">yuthon_message_login_code</field>
<field name="prefix">GR%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_onboard_approval_code" model="ir.sequence">
<field name="name">入职申请表-编号</field>
<field name="code">yuthon_onboard_approval_code</field>
<field name="prefix">RZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_prepare_approval_code" model="ir.sequence">
<field name="name">编制调整需求表-编号</field>
<field name="code">yuthon_prepare_approval_code</field>
<field name="prefix">BZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_rank_approval_code" model="ir.sequence">
<field name="name">职级调整申请表-编号</field>
<field name="code">yuthon_rank_approval_code</field>
<field name="prefix">ZJ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_reassignment_approval_code" model="ir.sequence">
<field name="name">调岗申请-编号</field>
<field name="code">yuthon_reassignment_approval_code</field>
<field name="prefix">TG%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_recruitment_approval_code" model="ir.sequence">
<field name="name">招聘需求申请表-编号</field>
<field name="code">yuthon_recruitment_approval_code</field>
<field name="prefix">ZP%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_regularization_approval_code" model="ir.sequence">
<field name="name">转正申请表-编号</field>
<field name="code">yuthon_regularization_approval_code</field>
<field name="prefix">ZZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_salary_approval_code" model="ir.sequence">
<field name="name">员工奖罚-编号</field>
<field name="code">yuthon_salary_approval_code</field>
<field name="prefix">YG%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_service_approval_code" model="ir.sequence">
<field name="name">服务证明表-编号</field>
<field name="code">yuthon_service_approval_code</field>
<field name="prefix">FW%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_system_approval_code" model="ir.sequence">
<field name="name">制度调整申请表-编号</field>
<field name="code">yuthon_system_approval_code</field>
<field name="prefix">ZD%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_title_approval_code" model="ir.sequence">
<field name="name">职称聘任申请表-编号</field>
<field name="code">yuthon_title_approval_code</field>
<field name="prefix">PZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
<record id="yuthon_prepare_approval_code" model="ir.sequence">
<field name="name">编制调整需求表-编号</field>
<field name="code">yuthon_prepare_approval_code</field>
<field name="prefix">BZ%(y)s%(month)s%(day)s</field>
<field name="padding">3</field>
</record>
</odoo>
@@ -1,3 +1,5 @@
from . import hr_employee_page
from . import inherit_hr_job
from . import yuthon_message_login
from . import yuthon_onboard_approval
from . import yuthon_account_approval
@@ -2,63 +2,6 @@
from odoo import api, fields, models, _
class YuthonEmergencyContactLine(models.Model):
_name = 'yuthon.emergency.contact.line'
_description = "紧急联系人明细行"
_inherit = ['soong_workflow', 'mail.activity.mixin']
employee_id = fields.Many2one('hr.employee', string="关联员工")
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记")
name = fields.Char(string="姓名")
user_sfz = fields.Char(string="身份证")
user_relationship = fields.Selection([("parents", "父母"), ("children", "子女"), ("spouse", "配偶"), ("spouse", "其他")], string="关系")
workplace = fields.Char(string="工作单位")
post = fields.Char(string="岗位")
phone_number = fields.Char(string="手机号")
home_address = fields.Char(string="家庭住址")
class YuthonWorkExperienceLine(models.Model):
_name = 'yuthon.work.experience.line'
_description = "工作经验明细行"
employee_id = fields.Many2one('hr.employee', string="关联员工")
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记")
start_date = fields.Date(string="开始日期")
end_date = fields.Date(string="结束日期")
work_place = fields.Char(string="工作单位")
post = fields.Char(string="岗位")
contact_user = fields.Char(string="联系人")
phone_number = fields.Char(string="联系人手机号")
reason_leaving = fields.Char(string="离职原因")
class YuthonEducationExperienceLine(models.Model):
_name = 'yuthon.education.experience.line'
_description = "教育经历明细行"
employee_id = fields.Many2one('hr.employee', string="关联员工")
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记")
name_school = fields.Char(string="学校名称")
start_date = fields.Date(string="入学时间")
end_date = fields.Date(string="毕业时间")
in_school_duties = fields.Char(string="在校职务")
professional = fields.Char(string="专业")
Part_time_degree = fields.Char(string="非全日制学历学位")
full_time_degree = fields.Char(string="全日制学历学位")
major_courses = fields.Char(string="主修课程")
class YuthonSkillsCertificatesLine(models.Model):
_name = 'yuthon.skills.certificates.line'
_description = "技能证书管理明细行"
employee_id = fields.Many2one('hr.employee', string="关联员工")
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记")
rank_name = fields.Char(string='职级名称')
rank_type = fields.Char(string='职级类型')
rank_time = fields.Date(string='职级时间')
class YuthonPersonalSkillsSchedule(models.Model):
_name = 'yuthon.personal.skills.schedule'
@@ -88,10 +31,49 @@ class YuthonMostRecentWorkDetailLine(models.Model):
_name = 'yuthon.recent.work.detail.line'
_description = "最近工作经历明细行"
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记") # 同上
message_login_id = fields.Many2one('yuthon.message.login', string="关联信息登记")
position = fields.Char(string='单位名称')
post = fields.Char(string="岗位")
last_department = fields.Char(string='部门')
work_grades = fields.Char(string='工作内容成绩')
last_training = fields.Char(string='培训')
last_work_reason = fields.Char(string='离职原因')
class YuthonTrialScenarioDetailLine(models.Model):
_name = 'yuthon.trial.scenario.detail.line'
_description = "试用方案明细行 "
regularization_login_id = fields.Many2one('yuthon.regularization.approval', string="关联转正信息")
job_responsibilities = fields.Char(string='工作职责')
mission_objectives = fields.Char(string='工作任务与目标')
completion_flag = fields.Char(string='工作完成标志')
weight = fields.Integer(string='权重')
completion_score = fields.Char(string='完成情况')
assessment_scoring = fields.Char(string='考核评分')
class YuthoJobRequirementDetailLine(models.Model):
_name = 'yuthon.job.requirement.detail.line'
_description = "任职要求明细行"
qualifications_id = fields.Many2one('yuthon.requirement.approval', string="关联招聘需求")
job_lv_work = fields.Many2one('hr.job.type', string="岗位类别")
degree = fields.Selection([('high', '高中'), ('junior_college', '大专'), ('bachelor', '本科'),
('master', '硕士'), ('doctor', '博士')], string="学历")
sex = fields.Selection([('male', '男'), ('female', '女')], string="性别")
specialty = fields.Char(string="专业")
title = fields.Char(string="职称")
admissions = fields.Char(string="执业资格")
political_aspects = fields.Selection([('cpc_dang', '中共党员'), ('nld', '民盟'),
('league_member', '共青团员'), ('people', '群众')], string="政治面貌")
competency_require = fields.Char(string="能力要求")
age = fields.Char(string="年龄")
years_of_service = fields.Char(string="工作年限")
recruitment_ids = fields.One2many('hr.job', 'recruitment_approval_id', string="招聘申请")
class HrJobType(models.Model):
_name = "hr.job.type"
name = fields.Char(string="类别名称")
@@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class HrJob(models.Model):
_inherit = "hr.job"
prepare_approval_id = fields.Many2one('yuthon.prepare.approval')
recruitment_approval_id = fields.Many2one('yuthon.recruitment.approval')
is_pub = fields.Boolean(string="发布状态")
def pub_applicant_approval_button(self):
"""
发布需求审批流程
"""
for pub in self:
if pub.is_pub == True:
raise UserError('该岗位已提交需求申请')
hr_job_ids = self.env["hr.job"].browse(self._context.get('active_ids', self._context.get('active_id')))
hr_job_data = []
for job in hr_job_ids:
hr_job_data.append((0, 0, {
'name': job.name,
'department_id': job.department_id.id,
'job_type_id': job.job_type_id.id,
'job_lv_id': job.job_lv_id.name,
'yuthon_company': job.yuthon_company,
'establishment_quotas': job.establishment_quotas,
'no_of_employee': job.no_of_employee,
'compiling_external': job.compiling_external,
'missing_number' : job.missing_number,
'compiling_status' : job.compiling_status,
'job_personnel' : job.job_personnel,
'remarks' : job.remarks,
}))
form_id = self.env.ref("yuthon_hr_employee_approval.view_yuthon_recruitment_approval_form").id
return {
'type': 'ir.actions.act_window',
'name': '提交岗位需求申请',
'res_model': 'yuthon.recruitment.approval',
"views": [[form_id, "form"]],
"context": {
'default_name': f'{self.department_id.name}部门需求申请表',
'default_recruitment_ids': hr_job_data,
}
}
def pub_prepare_approval_button(self):
"""
发布编制调需求审批
"""
for pub in self:
if pub.is_pub == True:
raise UserError('该岗位编制调整需要已审批')
hr_job_ids = self.env["hr.job"].browse(self._context.get('active_ids', self._context.get('active_id')))
hr_job_data = []
for job in hr_job_ids:
hr_job_data.append((0, 0, {
'name': job.name,
'department_id': job.department_id.id,
'job_type_id': job.job_type_id.id,
'job_lv_id': job.job_lv_id.name,
'yuthon_company': job.yuthon_company,
'establishment_quotas': job.establishment_quotas,
'no_of_employee': job.no_of_employee,
'compiling_external': job.compiling_external,
'missing_number': job.missing_number,
'compiling_status': job.compiling_status,
'job_personnel': job.job_personnel,
'remarks': job.remarks,}
))
form_id = self.env.ref("yuthon_hr_employee_approval.view_yuthon_prepare_approval_form").id
return {
'type': 'ir.actions.act_window',
'name': '提交岗位编制调整申请',
'res_model': 'yuthon.prepare.approval',
"views": [[form_id, "form"]],
"context": {
'default_name': f'{self.department_id.name}部门编制调制申请表',
'default_adjust_information_ids': hr_job_data,
}
}
@@ -8,4 +8,4 @@ class YuthonAccountApproval(models.Model):
name = fields.Char(string='名称')
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_account_approval_code'))
@@ -6,4 +6,7 @@ class YuthonEnrollmentApproval(models.Model):
_description = '参保方案申请表'
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_enrollment_approval'))
@@ -8,4 +8,4 @@ class YuthonInterviewApproval(models.Model):
name = fields.Char(string='名称')
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_interview_approval_code'))
@@ -8,4 +8,4 @@ class YuthonLeavingApproval(models.Model):
name = fields.Char(string='名称')
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_leaving_approval_code'))
@@ -16,10 +16,12 @@ class YuthonMessageLogin(models.Model):
_name = 'yuthon.message.login'
_description = "个人信息登记表"
_rec_name = 'name'
_inherit = 'soong.workflow.mixin'
_inherit = ['soong.workflow.mixin','yuthon.emergency.contact.line','yuthon.work.experience.line','yuthon.education.experience.line']
#基本信息
name = fields.Char(string='名称', default="人员信息登记表")
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_message_login_code'))
staff_name = fields.Char(string='姓名')
sex = fields.Selection([('male', '男'), ('female', '女')], string='性别')
date_birth = fields.Date(string='出生年月')
@@ -53,8 +55,8 @@ class YuthonMessageLogin(models.Model):
#最近工作情况
last_work = fields.Char(string='单位名称')
last_work_department = fields.Char(string='部门')
last_work_position = fields.Char(string='岗位')
last_work_department = fields.Many2one('hr.department', string="部门")
last_work_position = fields.Many2one('hr.job', string="岗位")
last_work_grades = fields.Char(string='工作内容成绩')
last_work_training = fields.Char(string='接受的培训')
last_work_reason = fields.Char(string='离职原因')
@@ -14,12 +14,15 @@ nation_list = [('a', '汉族'), ('b', '壮族'), ('v', '满族'), ('d', '回族'
class YuthonOnboardApproval(models.Model):
_name = 'yuthon.onboard.approval'
_description = "入职申请表"
_inherit = 'soong.workflow.mixin'
_inherit = ['soong.workflow.mixin']
name = fields.Char(string='名称', default='入职申请表')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_onboard_approval_code'))
worker_name = fields.Char(string='姓名')
company = fields.Many2one('res.company', string='公司')
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司")
date_birth = fields.Date(string='出生年月')
nation = fields.Selection(nation_list, string='民族')
grades = fields.Many2one('yuthon.job.lv', string='职级')
@@ -32,4 +35,3 @@ class YuthonOnboardApproval(models.Model):
('two', '两个月'), ('three', '三个月'), ('year', '一年')], string='试用期')
contract_start = fields.Date(string='合同开始日期')
contract_end = fields.Date(string='合同结束日期')
select_company = fields.Many2one('res.company', string='选择入职公司')
@@ -7,4 +7,15 @@ class YuthonPrepareApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_prepare_approval_code'))
subordinate_companies = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司")
department_id = fields.Many2one("hr.department", string="部门", required=True)
reason = fields.Char(string="事由")
notice_documents_ids = fields.Many2many('documents.document', string="附件")
adjust_information_ids = fields.One2many('hr.job', 'prepare_approval_id', string="调整信息")
@@ -7,4 +7,7 @@ class YuthonRankApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_rank_approval_code'))
@@ -7,4 +7,7 @@ class YuthonReassignmentApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_reassignment_approval_code'))
@@ -7,4 +7,27 @@ class YuthonRecruitmentApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
name = fields.Char(string='名称')
workers_name = fields.Char(string='姓名')
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_recruitment_approval_code'))
subordinate_companies = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司")
department_id = fields.Many2one("hr.department", string="部门", required=True)
reason = fields.Char(string="事由")
notice_documents_ids = fields.Many2many('documents.document', string="附件")
degree = fields.Selection([('high', '高中'), ('junior_college', '大专'), ('bachelor', '本科'),
('master', '硕士'), ('doctor', '博士')], string="学历")
sex = fields.Selection([('male', '男'), ('female', '女')], string="性别")
specialty = fields.Char(string="专业")
title = fields.Char(string="职称")
admissions = fields.Char(string="执业资格")
political_aspects = fields.Selection([('cpc_dang', '中共党员'), ('nld', '民盟'),
('league_member', '共青团员'), ('people', '群众')], string="政治面貌")
competency_require = fields.Char(string="能力要求")
age = fields.Char(string="年龄")
years_of_service = fields.Char(string="工作年限")
recruitment_ids = fields.One2many('hr.job', 'recruitment_approval_id', string="招聘申请")
qualifications_ids = fields.One2many('yuthon.job.requirement.detail.line', 'qualifications_id', string="应聘人员")
@@ -7,4 +7,47 @@ class YuthonRegularizationPrepareApproval(models.Model):
_inherit = 'soong.workflow.mixin'
#员工信息
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_regularization_approval_code'))
employee_name = fields.Many2one('hr.employee',string='员工姓名')
department_id = fields.Many2one("hr.department", string="任职部门", required=True)
job_id = fields.Many2one('hr.job', string="主岗")
job = fields.Char(string="职务")
partner_name = fields.Char(string="任职单位")
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
job_lv_id = fields.Many2one('yuthon.job.lv', string="职级")
onboarding_time = fields.Date(string="入职时间")
trial_end_date = fields.Date(string="试用期结束日期")
straight_online = fields.Char(string="直线上级")
business_leader = fields.Char(string="业务线上级")
#
#转正考核
job_coach = fields.Char(string="工作指导人一")
job_coach2 = fields.Char(string="工作指导人二")
scoring_system = fields.Char(string="评分分制")
appraisal_total = fields.Char(string="考核权重合计")
trial_scores = fields.Char(string="试用考核得分")
assessment_date = fields.Date(string="自评日期")
self_evaluation = fields.Text(string="自我评价")
employee_pros = fields.Text(string="员工优点")
improvements = fields.Text(string="需改进事项")
notice_documents_ids = fields.Many2many('documents.document', string="考核文档")
#转正结果
positive_results = fields.Char(string="转正结果")
positive_date = fields.Date(string="转正日期")
is_salary_adjustments = fields.Boolean(string="是否调整薪资")
related_notes = fields.Text(string="转正相关说明")
#试用信息明细行
trial_assessment_ids = fields.One2many('yuthon.trial.scenario.detail.line', 'regularization_login_id', string="试用期考核方案",help='请选择适用本人主岗的试用考核方案,或直接在下方填写')
class HrJobType(models.Model):
_name = "hr.job.type"
name = fields.Char(string="类别名称")
@@ -7,4 +7,7 @@ class YuthonRewardApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_prepare_approval_code'))
@@ -7,5 +7,7 @@ class YuthonSalaryApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_salary_approval_code'))
@@ -7,4 +7,7 @@ class YuthonServiceApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_service_approval_code'))
@@ -7,5 +7,7 @@ class YuthonSystemTitleApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_system_approval_code'))
@@ -7,4 +7,7 @@ class YuthonTitleApproval(models.Model):
_inherit = 'soong.workflow.mixin'
name = fields.Char(string='名称')
code = fields.Char(string="编号",
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_title_approval_code'))
@@ -15,3 +15,7 @@ access_yuthon_salary_approval,yuthon_salary_approval,model_yuthon_salary_approva
access_yuthon_service_approval,yuthon_service_approval,model_yuthon_service_approval,base.group_user,1,1,1,1
access_yuthon_system_approval,yuthon_system_approval,model_yuthon_system_approval,base.group_user,1,1,1,1
access_yuthon_title_approval,yuthon_title_approval,model_yuthon_title_approval,base.group_user,1,1,1,1
access_yuthon_personal_skills_schedule,yuthon_personal_skills_schedule,model_yuthon_personal_skills_schedule,base.group_user,1,1,1,1
access_yuthon_directly_detail_lines,yuthon_directly_detail_lines,model_yuthon_directly_detail_lines,base.group_user,1,1,1,1
access_yuthon_recent_work_detail_line,yuthon_recent_work_detail_line,model_yuthon_recent_work_detail_line,base.group_user,1,1,1,1
access_yuthon_trial_scenario_detail_line,yuthon_trial_scenario_detail_line,model_yuthon_trial_scenario_detail_line,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_yuthon_service_approval yuthon_service_approval model_yuthon_service_approval base.group_user 1 1 1 1
16 access_yuthon_system_approval yuthon_system_approval model_yuthon_system_approval base.group_user 1 1 1 1
17 access_yuthon_title_approval yuthon_title_approval model_yuthon_title_approval base.group_user 1 1 1 1
18 access_yuthon_personal_skills_schedule yuthon_personal_skills_schedule model_yuthon_personal_skills_schedule base.group_user 1 1 1 1
19 access_yuthon_directly_detail_lines yuthon_directly_detail_lines model_yuthon_directly_detail_lines base.group_user 1 1 1 1
20 access_yuthon_recent_work_detail_line yuthon_recent_work_detail_line model_yuthon_recent_work_detail_line base.group_user 1 1 1 1
21 access_yuthon_trial_scenario_detail_line yuthon_trial_scenario_detail_line model_yuthon_trial_scenario_detail_line base.group_user 1 1 1 1
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="inherit_hr_job_approval_tree" model="ir.ui.view">
<field name="name">inherit.hr.job.approval.tree</field>
<field name="model">hr.job</field>
<field name="inherit_id" ref="hr.view_hr_job_tree"/>
<field name="arch" type="xml">
<xpath expr="." position="inside">
<header>
<button name="pub_applicant_approval_button" string="提交需求申请" type="object"/>
<button name="pub_prepare_approval_button" string="提交岗位编制调整申请" type="object"/>
</header>
</xpath>
</field>
</record>
<record id="hr_job_approval_inherit_form" model="ir.ui.view">
<field name="name">hr.job.approval.inherit.form</field>
<field name="model">hr.job</field>
<field name="inherit_id" ref="hr.view_hr_job_form"/>
<field name="arch" type="xml">
<div name="recruitment_target" position="after">
<field name="is_pub"/>
</div>
</field>
</record>
<record id="hr_recruitment.action_hr_job" model="ir.actions.act_window">
<field name="domain">[('is_pub','=',True)]</field>
</record>
</odoo>
+40 -32
View File
@@ -2,89 +2,97 @@
<odoo>
<data>
<!--招聘管理-->
<menuitem id="hr_process_work_job"
name="流程"
parent="hr_recruitment.menu_hr_recruitment_root"
sequence="7"/>
<menuitem id="hr_menu_recruitment_approval"
name="招聘需求申请表"
parent="hr_process_work_job"
action="yuthon_recruitment_approval_action"
sequence="1"/>
<menuitem id="hr_menu_interview_approval"
name="面试信息表"
parent="hr_process_work_job"
action="yuthon_interview_approval_action"
sequence="3"/>
<menuitem id="hr_menu_onboard_approval"
name="入职申请表"
parent="hr_process_work_job"
action="yuthon_onboard_approval_action"
sequence="5"/>
<menuitem id="hr_menu_message_login"
name="个人信息登记表"
parent="hr_process_work_job"
action="yuthon_message_login_action"
sequence="7"/>
<!--人事管理 -->
<menuitem id="hr_set_process_menu"
name="流程"
parent="hr.menu_hr_root"
sequence="7"/>
<menuitem id="hr_menu_message_login"
name="个人信息登记表"
parent="hr_set_process_menu"
action="yuthon_message_login_action"
sequence="1"/>
<menuitem id="hr_menu_onboard_approval"
name="入职申请表"
parent="hr_set_process_menu"
action="yuthon_onboard_approval_action"
sequence="3"/>
<menuitem id="hr_menu_account_approval"
name="职称聘任申请表"
parent="hr_set_process_menu"
action="yuthon_account_approval_action"
sequence="5"/>
<menuitem id="hr_menu_interview_approval"
name="面试信息表"
parent="hr_set_process_menu"
action="yuthon_interview_approval_action"
sequence="7"/>
sequence="1"/>
<menuitem id="hr_menu_leaving_approval"
name="离职申请表"
parent="hr_set_process_menu"
action="yuthon_leaving_approval_action"
sequence="9"/>
sequence="3"/>
<menuitem id="hr_menu_prepare_approval"
name="编制调整申请表"
parent="hr_set_process_menu"
action="yuthon_prepare_approval_action"
sequence="11"/>
sequence="5"/>
<menuitem id="hr_menu_rank_approval"
name="职级调整申请表"
parent="hr_set_process_menu"
action="yuthon_rank_approval_action"
sequence="13"/>
sequence="7"/>
<menuitem id="hr_menu_reassignment_approval"
name="调岗申请"
parent="hr_set_process_menu"
action="yuthon_reassignment_approval_action"
sequence="15"/>
<menuitem id="hr_menu_recruitment_approval"
name="招聘需求申请表"
parent="hr_set_process_menu"
action="yuthon_recruitment_approval_action"
sequence="17"/>
sequence="9"/>
<menuitem id="hr_menu_reward_approval"
name="员工奖罚"
parent="hr_set_process_menu"
action="yuthon_reward_approval_action"
sequence="19"/>
sequence="11"/>
<menuitem id="hr_menu_regularization_approval"
name="转正申请表"
parent="hr_set_process_menu"
action="yuthon_regularization_approval_action"
sequence="21"/>
sequence="13"/>
<menuitem id="hr_menu_salary_approval"
name="薪酬项目调整表"
parent="hr_set_process_menu"
action="yuthon_salary_approval_action"
sequence="23"/>
sequence="15"/>
<menuitem id="hr_menu_service_approval"
name="服务证明表"
parent="hr_set_process_menu"
action="yuthon_service_approval_action"
sequence="25"/>
sequence="17"/>
<menuitem id="hr_menu_system_approval"
name="制度调整申请表"
parent="hr_set_process_menu"
action="yuthon_system_approval_action"
sequence="27"/>
sequence="19"/>
<menuitem id="hr_menu_title_approval"
name="职称聘任申请表"
parent="hr_set_process_menu"
action="yuthon_title_approval_action"
sequence="29"/>
sequence="21"/>
<menuitem id="hr_menu_enrollment_approval"
name="参保方案申请表"
parent="hr_set_process_menu"
action="yuthon_enrollment_approval_action"
sequence="31"/>
sequence="23"/>
</data>
</odoo>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -17,6 +17,7 @@
<sheet>
<group>
<field name="name"/>
<field name="code"/>
</group>
</sheet>
</form>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,7 +6,8 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="company"/>
<field name="code"/>
<field name="yuthon_company"/>
<field name="date_birth"/>
<field name="political"/>
<field name="education"/>
@@ -28,9 +29,8 @@
<group col="4">
<group>
<field name="worker_name" required="1"/>
<field name="company"/>
<field name="yuthon_company"/>
<field name="date_birth"/>
<field name="select_company"/>
</group>
<group>
<field name="nation"/>
@@ -15,9 +15,39 @@
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<div class="col-12 text-center">
<h1>
<field name="name"/>
</h1>
</div>
<group col="2">
<group>
<field name="subordinate_companies"/>
<field name="department_id"/>
</group>
<group>
<field name="reason"/>
<field name="notice_documents_ids" widget="many2many_tags"/>
</group>
</group>
<field name="adjust_information_ids">
<tree editable="bottom">
<field name="name"/>
<field name="prepare_approval_id" column_invisible="1"/>
<field name="department_id"/>
<field name="company_id" column_invisible="1"/>
<field name="job_type_id"/>
<field name="job_lv_id"/>
<field name="yuthon_company"/>
<field name="establishment_quotas"/>
<field name="no_of_employee"/>
<field name="compiling_external"/>
<field name="missing_number"/>
<field name="compiling_status"/>
<field name="job_personnel"/>
<field name="remarks"/>
</tree>
</field>
</sheet>
</form>
</field>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -5,7 +5,16 @@
<field name="model">yuthon.recruitment.approval</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="workers_name"/>
<field name="code"/>
<field name="degree"/>
<field name="subordinate_companies"/>
<field name="department_id"/>
<field name="specialty"/>
<field name="title"/>
<field name="admissions"/>
<field name="years_of_service"/>
<field name="competency_require"/>
</tree>
</field>
</record>
@@ -15,9 +24,55 @@
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<div class="col-12 text-center">
<h1>
<field name="name"/>
</h1>
</div>
<group col="2">
<group>
<field name="subordinate_companies"/>
<field name="department_id"/>
<field name="code"/>
</group>
<group>
<field name="reason"/>
<field name="notice_documents_ids" widget="many2many_tags"/>
</group>
</group>
<field name="recruitment_ids">
<tree editable="bottom">
<field name="name"/>
<field name="recruitment_approval_id" column_invisible="1"/>
<field name="department_id"/>
<field name="company_id" column_invisible="1"/>
<field name="job_type_id"/>
<field name="job_lv_id"/>
<field name="yuthon_company"/>
<field name="establishment_quotas"/>
<field name="no_of_employee"/>
<field name="compiling_external"/>
<field name="missing_number"/>
<field name="compiling_status"/>
<field name="job_personnel"/>
<field name="remarks"/>
</tree>
</field>
<field name="qualifications_ids">
<tree editable="bottom">
<field name="job_lv_work"/>
<field name="degree"/>
<field name="qualifications_id" column_invisible="1"/>
<field name="sex"/>
<field name="specialty"/>
<field name="title"/>
<field name="admissions"/>
<field name="political_aspects"/>
<field name="age"/>
<field name="years_of_service"/>
<field name="competency_require"/>
</tree>
</field>
</sheet>
</form>
</field>
@@ -25,7 +80,7 @@
<record id="yuthon_recruitment_approval_action" model="ir.actions.act_window">
<field name="name">待开发</field>
<field name="name">招聘需要申请表</field>
<field name="res_model">yuthon.recruitment.approval</field>
<field name="view_mode">tree,form</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -15,8 +16,78 @@
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<div class="col-12 text-center">
<h1>
<field name="name"/>
</h1>
</div>
<group string="员工信息" col="4">
<group>
<field name="employee_name" required="1"/>
<field name="partner_name"/>
<field name="onboarding_time"/>
</group>
<group>
<field name="department_id"/>
<field name="trial_end_date"/>
</group>
<group>
<field name="job_id"/>
<field name="job_type_id"/>
<field name="straight_online"/>
</group>
<group>
<field name="job"/>
<field name="job_lv_id"/>
<field name="business_leader"/>
</group>
</group>
<group string="转正考核" col="4">
<group>
<field name="job_coach"/>
<field name="trial_scores"/>
</group>
<group>
<field name="job_coach2"/>
<field name="assessment_date"/>
</group>
<group>
<field name="scoring_system"/>
<field name="notice_documents_ids" widget="many2many_tags"/>
</group>
<group>
<field name="appraisal_total"/>
</group>
</group>
<group>
<field name="trial_assessment_ids">
<tree editable="bottom">
<field name="job_responsibilities" required="1"/>
<field name="regularization_login_id" column_invisible="1"/>
<field name="mission_objectives"/>
<field name="completion_flag"/>
<field name="weight"/>
<field name="completion_score"/>
<field name="assessment_scoring"/>
</tree>
</field>
<group>
<field name="self_evaluation"/>
<field name="employee_pros"/>
<field name="improvements"/>
</group>
</group>
<group col="3" string="转正结果">
<group>
<field name="positive_results"/>
<field name="related_notes"/>
</group>
<group>
<field name="positive_date"/>
</group>
<group>
<field name="is_salary_adjustments"/>
</group>
</group>
</sheet>
</form>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
@@ -6,6 +6,7 @@
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
+43 -48
View File
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- 招聘 -->
<record id="hr_recruitment.menu_hr_recruitment_root" model="ir.ui.menu">
<field name="active">False</field>
</record>
<!-- 人事 -->
<!-- <record id="hr.menu_hr_root" model="ir.ui.menu">-->
<!-- <record id="hr_recruitment.menu_hr_recruitment_root" model="ir.ui.menu">-->
<!-- <field name="active">False</field>-->
<!-- </record>-->
<!-- 人事 -->
<record id="hr.menu_hr_root" model="ir.ui.menu">
<field name="active">False</field>
</record>
<!-- 出勤 -->
<record id="hr_attendance.menu_hr_attendance_root" model="ir.ui.menu">
<field name="active">False</field>
@@ -53,7 +53,7 @@
<menuitem id="hr_recruitment_setting_menu_board"
name="配置"
parent="hr_recruitment_menu_root_board"
sequence="5"/>
sequence="7"/>
<menuitem id="hr_recruitment_set_menu_board"
name="设置"
parent="hr_recruitment_setting_menu_board"
@@ -63,6 +63,30 @@
name="工作岗位"
parent="hr_recruitment_menu_root_board"
sequence="3"/>
<menuitem id="hr_process_work_job_menu_board"
name="流程"
parent="hr_recruitment_menu_root_board"
sequence="5"/>
<menuitem id="hr_menu_recruitment_approval"
name="招聘需求申请表"
parent="hr_process_work_job_menu_board"
action="yuthon_hr_employee_approval.yuthon_recruitment_approval_action"
sequence="3"/>
<menuitem id="hr_menu_interview_approval_root_board"
name="面试信息表"
parent="hr_process_work_job_menu_board"
action="yuthon_none_action"
sequence="5"/>
<menuitem id="hr_process_onboard_menu_root_board"
name="入职申请表"
parent="hr_process_work_job_menu_board"
action="yuthon_hr_employee_approval.yuthon_onboard_approval_action"
sequence="7"/>
<menuitem id="hr_process_manage_menu_root_board"
name="个人信息登记表"
parent="hr_process_work_job_menu_board"
action="yuthon_hr_employee_approval.yuthon_message_login_action"
sequence="9"/>
<menuitem id="hr_recruit_post_menu_root_board"
name="工作岗位"
parent="hr_recruitment_work_job_menu_board"
@@ -149,86 +173,66 @@
name="流程"
parent="hr_menu_root_board"
sequence="7"/>
<menuitem id="hr_process_onboard_menu_root_board"
name="入职申请"
parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.yuthon_onboard_approval_action"
sequence="1"/>
<menuitem id="hr_process_manage_menu_root_board"
name="信息登记"
parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.yuthon_message_login_action"
sequence="3"/>
<menuitem id="hr_menu_account_approval_root_board"
name="薪资核算申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="5"/>
<menuitem id="hr_menu_interview_approval_root_board"
name="面试信息表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="7"/>
sequence="1"/>
<menuitem id="hr_menu_leaving_approval_root_board"
name="离职申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="9"/>
sequence="3"/>
<menuitem id="hr_menu_prepare_approval_root_board"
name="编制调整申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="11"/>
action="yuthon_hr_employee_approval.yuthon_prepare_approval_action"
sequence="5"/>
<menuitem id="hr_menu_rank_approval_root_board"
name="职级调整申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="13"/>
sequence="7"/>
<menuitem id="hr_menu_reassignment_approval_root_board"
name="调岗申请"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="15"/>
<menuitem id="hr_menu_recruitment_approval_root_board"
name="招聘需求申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="17"/>
sequence="9"/>
<menuitem id="hr_menu_reward_approval_root_board"
name="员工奖罚"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="19"/>
sequence="11"/>
<menuitem id="hr_menu_regularization_approval_root_board"
name="转正申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="21"/>
sequence="13"/>
<menuitem id="hr_menu_salary_approval_root_board"
name="薪酬项目调整表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="23"/>
sequence="15"/>
<menuitem id="hr_menu_service_approval_root_board"
name="服务证明表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="25"/>
sequence="17"/>
<menuitem id="hr_menu_system_approval_root_board"
name="制度调整申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="27"/>
sequence="19"/>
<menuitem id="hr_menu_title_approval_root_board"
name="职称聘任申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="29"/>
sequence="21"/>
<menuitem id="hr_menu_enrollment_approval_root_board"
name="参保方案申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_none_action"
sequence="31"/>
sequence="23"/>
<menuitem id="hr_setting_menu_root_board"
name="配置"
parent="hr_menu_root_board"
@@ -291,15 +295,6 @@
parent="hr_set_resume_menu_root_board"
action="hr_skills.hr_resume_type_action"
sequence="1"/>
<menuitem id="hr_set_recruitment_menu_root_board"
name="招聘"
parent="hr_setting_menu_root_board"
sequence="5"/>
<menuitem id="hr_recruit_type_menu_root_board"
name="就业类型"
parent="hr_set_recruitment_menu_root_board"
action="hr.hr_contract_type_action"
sequence="1"/>
<menuitem id="hr_set_planning_menu_root_board"
name="活动规划"
parent="hr_setting_menu_root_board"