pengyuthon

This commit is contained in:
李鹏宇
2024-11-07 10:22:24 +08:00
parent 0b2d4123ec
commit 1aa9b00d93
18 changed files with 137 additions and 63 deletions
+1 -2
View File
@@ -11,7 +11,7 @@
'license': 'LGPL-3', 'license': 'LGPL-3',
'author': 'pengyuthon', 'author': 'pengyuthon',
'website': 'https://www.pengyuthon.com', 'website': 'https://www.pengyuthon.com',
'depends': ['base', 'hr', 'hr_recruitment','soong_workflow'], 'depends': ['base', 'hr', 'hr_recruitment', 'soong_workflow'],
'data': [ 'data': [
'data/yuthon.job.lv.csv', 'data/yuthon.job.lv.csv',
'data/job_lv_groups_data.xml', 'data/job_lv_groups_data.xml',
@@ -32,7 +32,6 @@
'views/inherit_hr_applicant_views.xml', 'views/inherit_hr_applicant_views.xml',
'views/publish_applicant_setting_views.xml', 'views/publish_applicant_setting_views.xml',
'views/yuthon_job_postings_views.xml', 'views/yuthon_job_postings_views.xml',
'views/website_employee_views.xml'
], ],
'installable': True, 'installable': True,
'application': False, 'application': False,
@@ -1,6 +1,4 @@
from odoo.http import Controller, request, route from odoo.http import Controller, request, route
from datetime import datetime
from odoo import models, fields, api, http, SUPERUSER_ID, _
class EmployeeBannerRoute(Controller): class EmployeeBannerRoute(Controller):
@@ -29,24 +27,3 @@ class EmployeeBannerRoute(Controller):
</div> </div>
""" """
} }
@http.route('/hr/employee/create', type='http', auth="none")
def hr_employee_create(self, employee_id=None, **kw):
values = {k: v for k, v in request.params.items()}
if not employee_id:
values['error'] = "缺少员工号"
response = request.render('yuthon_hr_employee.website_form_employee', values)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response
values['employee_id'] = int(employee_id)
if request.httprequest.method == 'POST':
record = request.env['hr.employee'].sudo().browse(values['employee_id'])
if "name" in values and values.get("name", ""):
record.name = values.get("name", "")
values["message"] = "员工信息创建成功"
response = request.render('yuthon_hr_employee.website_form_employee', values)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response
@@ -19,6 +19,7 @@ class HrApplicant(models.Model):
tage_ids = fields.Many2many('applicant.tage.setting', string="应聘标签") tage_ids = fields.Many2many('applicant.tage.setting', string="应聘标签")
is_interview_status = fields.Boolean(string="面试状态") is_interview_status = fields.Boolean(string="面试状态")
class HrJobType(models.Model): class HrJobType(models.Model):
_name = "hr.job.type" _name = "hr.job.type"
@@ -7,6 +7,12 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//form[@class='o_applicant_form']" position="replace"> <xpath expr="//form[@class='o_applicant_form']" position="replace">
<form class="o_applicant_form"> <form class="o_applicant_form">
<div class="oe_title">
<label for="name" string="标题"/>
<h1>
<field name="name"/>
</h1>
</div>
<group col="4" string="基本信息"> <group col="4" string="基本信息">
<group> <group>
<field name="partner_name" required="1" string="姓名"/> <field name="partner_name" required="1" string="姓名"/>
+3
View File
@@ -1 +1,4 @@
from . import models from . import models
from . import controllers
from . import wizard
@@ -38,7 +38,9 @@
'views/yuthon_appointment_approval_views.xml', 'views/yuthon_appointment_approval_views.xml',
'views/yuthon_transfer_approval_views.xml', 'views/yuthon_transfer_approval_views.xml',
'views/yuthon_social_files_approval_view.xml', 'views/yuthon_social_files_approval_view.xml',
'views/website_employee_views.xml',
'views/menuitem.xml', 'views/menuitem.xml',
'wizard/yuthon_website_employee_wizard.xml'
], ],
'installable': True, 'installable': True,
'application': False, 'application': False,
@@ -0,0 +1 @@
from . import employee_login
@@ -0,0 +1,32 @@
from odoo.http import Controller, request, route
from odoo import models, fields, api, http, SUPERUSER_ID, _
class EmployeeLogin(Controller):
@http.route('/hr/employee/create', type='http', auth="none")
def hr_employee_create(self, employee_id=None, **kw):
values = {k: v for k, v in request.params.items()}
if not employee_id:
values['error'] = "缺少员工号"
response = request.render('yuthon_hr_employee_approval.website_form_employee', values)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response
values['employee_id'] = int(employee_id)
record = request.env['hr.employee'].sudo().browse(values['employee_id'])
values['name'] = record.name
# 展示字段
# values['name'] = record.name
if request.httprequest.method == 'POST':
if "name" in values and values.get("name", ""):
record.name = values.get("name", "")
# 记录字段
# if "name" in values and values.get("name", ""):
# record.name = values.get("name", "")
values["message"] = "员工信息创建成功"
response = request.render('yuthon_hr_employee_approval.website_form_employee', values)
response.headers['X-Frame-Options'] = 'SAMEORIGIN'
response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
return response
@@ -45,6 +45,7 @@ class YuthonEducationExperienceLine(models.Model):
full_time_degree = fields.Char(string="全日制学历学位") full_time_degree = fields.Char(string="全日制学历学位")
major_courses = fields.Char(string="主修课程") major_courses = fields.Char(string="主修课程")
class YuthonPersonalSkillsSchedule(models.Model): class YuthonPersonalSkillsSchedule(models.Model):
_name = 'yuthon.personal.skills.schedule' _name = 'yuthon.personal.skills.schedule'
_description = "个人技能明细行" _description = "个人技能明细行"
@@ -127,3 +128,7 @@ class HrJobType(models.Model):
name = fields.Char(string="类别名称") name = fields.Char(string="类别名称")
class YuthonPrepareApprovalLine(models.Model):
_name = 'yuthon.prepare.approval.line'
@@ -115,9 +115,28 @@ class YuthonMessageLogin(models.Model):
degree_id_ids = fields.One2many('education.details.line2', 'degree_id', string="学位证") degree_id_ids = fields.One2many('education.details.line2', 'degree_id', string="学位证")
certificate_ids = fields.One2many('certificates.detail.line', 'certificate_id', string="专业证书") certificate_ids = fields.One2many('certificates.detail.line', 'certificate_id', string="专业证书")
#
# def pub_name_button(self):
# code_url = self.get_base_url() + "/hr/employee/create?employee_id=" + str(self.id)
action = {
'type': 'ir.actions.act_window',
'name': "访问地址",
'res_model': 'yuthon.website.employee.wizard',
'views': [(False, 'form')],
'target': 'new',
'context': {
'default_employee_url': code_url,
}
}
return action
# return {
# 'warning': {
# 'title': '邀请链接',
# 'message': code_url
# }
# }
class EducationalDetailsLine(models.Model): class EducationalDetailsLine(models.Model):
_name = 'education.details.line' _name = 'education.details.line'
_description = '学历证(全日制)' _description = '学历证(全日制)'
@@ -7,7 +7,7 @@ class YuthonRecruitmentApproval(models.Model):
_inherit = 'soong.workflow.mixin' _inherit = 'soong.workflow.mixin'
name = fields.Char(string='标题') name = fields.Char(string='标题')
employee_id = fields.Many2one('hr.employee',string='申请人', default=lambda self: self.env.user.employee_id) employee_id = fields.Many2one('hr.employee', string='申请人', default=lambda self: self.env.user.employee_id)
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_recruitment_approval_code')) code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_recruitment_approval_code'))
reason = fields.Html(string="正文") reason = fields.Html(string="正文")
recruitment_ids = fields.One2many('hr.job', 'recruitment_approval_id', string="招聘申请") recruitment_ids = fields.One2many('hr.job', 'recruitment_approval_id', string="招聘申请")
@@ -19,7 +19,6 @@ class YuthonRecruitmentApproval(models.Model):
('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司") ('thlc', '天河粮储'), ('tctj', '天投城建')], string="所属公司")
department_id = fields.Many2one("hr.department", string="部门") department_id = fields.Many2one("hr.department", string="部门")
def put_time_failure(self): def put_time_failure(self):
for record in self: for record in self:
for recruitment in record.recruitment_ids: for recruitment in record.recruitment_ids:
@@ -31,4 +31,6 @@ access_yuthon_transfer_infor_detail_lines,yuthon_transfer_infor_detail_lines,mod
access_yuthon_social_files_approval,yuthon_social_files_approval,model_yuthon_social_files_approval,base.group_user,1,1,1,1 access_yuthon_social_files_approval,yuthon_social_files_approval,model_yuthon_social_files_approval,base.group_user,1,1,1,1
access_new_prepare_approval_line,new_prepare_approval_line,model_new_prepare_approval_line,base.group_user,1,1,1,1 access_new_prepare_approval_line,new_prepare_approval_line,model_new_prepare_approval_line,base.group_user,1,1,1,1
access_interview_approval_line,interview_approval_line,model_interview_approval_line,base.group_user,1,1,1,1 access_interview_approval_line,interview_approval_line,model_interview_approval_line,base.group_user,1,1,1,1
access_prepare_approval_line,prepare_approval_line,model_prepare_approval_line,base.group_user,1,1,1,1 access_prepare_approval_line,prepare_approval_line,model_prepare_approval_line,base.group_user,1,1,1,1
access_yuthon_prepare_approval_line,yuthon_prepare_approval_line,model_yuthon_prepare_approval_line,base.group_user,1,1,1,1
access_yuthon_website_employee_wizard,yuthon_website_employee_wizard,model_yuthon_website_employee_wizard,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
31 access_yuthon_social_files_approval yuthon_social_files_approval model_yuthon_social_files_approval base.group_user 1 1 1 1
32 access_new_prepare_approval_line new_prepare_approval_line model_new_prepare_approval_line base.group_user 1 1 1 1
33 access_interview_approval_line interview_approval_line model_interview_approval_line base.group_user 1 1 1 1
34 access_prepare_approval_line prepare_approval_line model_prepare_approval_line base.group_user 1 1 1 1
35 access_yuthon_prepare_approval_line yuthon_prepare_approval_line model_yuthon_prepare_approval_line base.group_user 1 1 1 1
36 access_yuthon_website_employee_wizard yuthon_website_employee_wizard model_yuthon_website_employee_wizard base.group_user 1 1 1 1
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<template id="yuthon_hr_employee.frontend_layout" name="Frontend Layout" inherit_id="web.layout" primary="True"> <template id="yuthon_hr_employee_approval.frontend_layout" name="Frontend Layout" inherit_id="web.layout" primary="True">
<xpath expr="//head/meta[last()]" position="after"> <xpath expr="//head/meta[last()]" position="after">
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
</xpath> </xpath>
@@ -37,30 +37,26 @@
</xpath> </xpath>
</template> </template>
<template id="yuthon_hr_employee.website_form_employee" name="website_form_employee"> <template id="yuthon_hr_employee_approval.website_form_employee" name="website_form_employee">
<t t-call="yuthon_hr_employee.frontend_layout"> <t t-call="yuthon_hr_employee_approval.frontend_layout">
<div class="container py-5"> <div class="container py-5">
<form class="oe_website_form_room" role="form" t-attf-action="/hr/employee/create" method="post" onsubmit="this.action = '/hr/employee/create' + location.hash"> <form class="oe_website_form_room" role="form" t-attf-action="/hr/employee/create" method="post" onsubmit="this.action = '/hr/employee/create' + location.hash">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/> <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<ul class="nav nav-tabs nav-fill" role="tablist"> <div class="mb-3 field-room_id">
<li class="nav-item" role="presentation"> <label for="employee_id" class="form-label">员工号</label>
<a aria-controls="panel_1" href="#panel_1" t-attf-class="nav-link active" data-bs-toggle="tab" role="tab">第一页</a></li> <input type="text" placeholder="员工号" name="employee_id" t-att-value="employee_id" id="employee_id" t-attf-class="form-control" readonly="readonly"/>
<li class="nav-item" role="presentation"> </div>
<a aria-controls="panel_2" href="#panel_2" t-attf-class="nav-link" data-bs-toggle="tab" role="tab">第二页</a></li>
</ul>
<div class="tab-content"> <div class="mb-3 field-room_id">
<div role="tabpanel" id="panel_1" t-attf-class="tab-pane active bg-100"> <label for="name" class="form-label">姓名</label>
<div class="mb-3 field-room_id"> <input type="text" placeholder="姓名" name="name" t-att-value="name" id="name" t-attf-class="form-control"/>
<label for="employee_id" class="form-label">员工号</label>
<input type="text" placeholder="员工号" name="employee_id" t-att-value="employee_id" id="employee_id" t-attf-class="form-control" readonly="readonly"/>
</div>
</div> </div>
<div role="tabpanel" id="panel_2" t-attf-class="tab-pane bg-100"> <!-- 添加其他字段-->
222 <!-- <div class="mb-3 field-room_id">-->
</div> <!-- <label for="name" class="form-label">姓名</label>-->
</div> <!-- <input type="text" placeholder="姓名" name="name" t-att-value="name" id="name" t-attf-class="form-control"/>-->
<!-- </div>-->
<p class="alert alert-danger" t-if="error" role="alert"> <p class="alert alert-danger" t-if="error" role="alert">
<t t-esc="error"/> <t t-esc="error"/>
@@ -16,6 +16,9 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<sheet> <sheet>
<header>
<button name="pub_name_button" string="发送邀请链接" type="object" class='btn btn-primary'/>
</header>
<field name="image_1920" widget="image" class="oe_avatar" options="{'preview_image': 'image_128'}"/> <field name="image_1920" widget="image" class="oe_avatar" options="{'preview_image': 'image_128'}"/>
<div class="oe_title"> <div class="oe_title">
<label for="name" string="名称"/> <label for="name" string="名称"/>
@@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
from . import yuthon_website_employee_wizard
@@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from odoo import models, api, fields, _
from odoo.exceptions import UserError
class WebsiteEmployeeWizard(models.Model):
_name = "yuthon.website.employee.wizard"
employee_url = fields.Char(string='访问地址')
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_yuthon_website_employee_wizard" model="ir.ui.view">
<field name="name">访问地址</field>
<field name="model">yuthon.website.employee.wizard</field>
<field name="arch" type="xml">
<form create="false" edit="false" delete="false">
<div class="col-12 text-center">
<field name="employee_url" readonly="1"/>
</div>
</form>
</field>
</record>
</odoo>
+12 -13
View File
@@ -6,9 +6,9 @@
<field name="active">False</field> <field name="active">False</field>
</record> </record>
<!-- 人事 --> <!-- 人事 -->
<!-- <record id="hr.menu_hr_root" model="ir.ui.menu">--> <!-- <record id="hr.menu_hr_root" model="ir.ui.menu">-->
<!-- <field name="active">False</field>--> <!-- <field name="active">False</field>-->
<!-- </record>--> <!-- </record>-->
<!-- 出勤 --> <!-- 出勤 -->
<record id="hr_attendance.menu_hr_attendance_root" model="ir.ui.menu"> <record id="hr_attendance.menu_hr_attendance_root" model="ir.ui.menu">
<field name="active">False</field> <field name="active">False</field>
@@ -77,9 +77,7 @@
name="招聘列表" name="招聘列表"
parent="hr_recruitment_menu_root_board" parent="hr_recruitment_menu_root_board"
action="hr_recruitment.crm_case_categ0_act_job" action="hr_recruitment.crm_case_categ0_act_job"
sequence="3"/> sequence="2"/>
<menuitem id="hr_menu_recruitment_process" <menuitem id="hr_menu_recruitment_process"
name="流程" name="流程"
parent="hr_recruitment_menu_root_board" parent="hr_recruitment_menu_root_board"
@@ -104,11 +102,7 @@
parent="hr_menu_recruitment_process" parent="hr_menu_recruitment_process"
action="yuthon_hr_employee_approval.yuthon_message_login_action" action="yuthon_hr_employee_approval.yuthon_message_login_action"
sequence="9"/> sequence="9"/>
<menuitem id="hr_menu_prepare_approval"
name="编制调整申请表"
parent="hr_menu_recruitment_process"
action="yuthon_hr_employee_approval.yuthon_prepare_approval_action"
sequence="11"/>
<menuitem id="hr_recruitment_setting_menu_board" <menuitem id="hr_recruitment_setting_menu_board"
name="配置" name="配置"
parent="hr_recruitment_menu_root_board" parent="hr_recruitment_menu_root_board"
@@ -195,7 +189,7 @@
parent="hr_employee_menu_root_board" parent="hr_employee_menu_root_board"
action="hr.action_hr_job" action="hr.action_hr_job"
sequence="5"/> sequence="5"/>
<menuitem id="hr_set_role_menu_root_board" <menuitem id="hr_set_role_menu_root_board"
name="角色管理" name="角色管理"
parent="hr_employee_menu_root_board" parent="hr_employee_menu_root_board"
action="soong_workflow.view_soong_user_role_action" action="soong_workflow.view_soong_user_role_action"
@@ -219,8 +213,13 @@
parent="hr_set_process_menu_root_board" parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.yuthon_regularization_approval_action" action="yuthon_hr_employee_approval.yuthon_regularization_approval_action"
sequence="1"/> sequence="1"/>
<menuitem id="hr_menu_prepare_approval_board"
name="编制调整申请表"
parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.yuthon_prepare_approval_action"
sequence="2"/>
<menuitem id="hr_menu_reassignment_approval_root_board" <menuitem id="hr_menu_reassignment_approval_root_board"
name="调岗申请" name="调岗申请表"
parent="hr_set_process_menu_root_board" parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.yuthon_reassignment_approval_action" action="yuthon_hr_employee_approval.yuthon_reassignment_approval_action"
sequence="3"/> sequence="3"/>