@@ -24,6 +24,7 @@
|
||||
'views/yuthon_message_login_views.xml',
|
||||
'views/yuthon_onboard_approval_views.xml',
|
||||
'views/yuthon_enrollment_approval_views.xml',
|
||||
'views/yuthon_retired_approval_views.xml',
|
||||
'views/yuthon_account_approval_views.xml',
|
||||
'views/yuthon_interview_approval_views.xml',
|
||||
'views/yuthon_leaving_approval_views.xml',
|
||||
|
||||
@@ -104,4 +104,10 @@
|
||||
<field name="padding">3</field>
|
||||
</record>
|
||||
|
||||
<record id="yuthon_retired_approval_code" model="ir.sequence">
|
||||
<field name="name">退休申请表-编号</field>
|
||||
<field name="code">yuthon_retired_approval_code</field>
|
||||
<field name="prefix">TX%(y)s%(month)s%(day)s</field>
|
||||
<field name="padding">3</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -19,4 +19,5 @@ from . import yuthon_system_approval
|
||||
from . import yuthon_service_approval
|
||||
from . import yuthon_social_files_approval
|
||||
from . import yuthon_appointment_approval
|
||||
from . import yuthon_transfer_approval
|
||||
from . import yuthon_transfer_approval
|
||||
from . import yuthon_retired_approval
|
||||
@@ -39,6 +39,22 @@ class YuthonHrEmployee(models.Model):
|
||||
}
|
||||
|
||||
|
||||
def pub_retired_employee(self):
|
||||
record_id = self.env["hr.employee"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
user_id = record_id.user_id
|
||||
if len(record_id) != 1:
|
||||
raise UserError("请选择一个员工")
|
||||
form_id = self.env.ref('yuthon_hr_employee_approval.view_retired_approval_form').id
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "退休申请",
|
||||
"res_model": "yuthon.retired.approval",
|
||||
"views": [[form_id, "form"]],
|
||||
"context": {
|
||||
'default_employee_id':user_id.employee_id.id,
|
||||
}
|
||||
}
|
||||
|
||||
def pub_regularization_employee(self):
|
||||
record_id = self.env["hr.employee"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
user_id = record_id.user_id
|
||||
@@ -54,3 +70,4 @@ class YuthonHrEmployee(models.Model):
|
||||
'default_employee_id':user_id.id,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,48 +7,29 @@ class YuthonLeavingApproval(models.Model):
|
||||
_description = '离职申请'
|
||||
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
|
||||
name = fields.Char(string='标题')
|
||||
text = fields.Text(string='正文')
|
||||
code = fields.Char(string="编号",
|
||||
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_leaving_approval_code'))
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
||||
contract = fields.Many2one('hr.contract', string='合同')
|
||||
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_leaving_approval_code'))
|
||||
phone = fields.Char(related='users_id.employee_id.work_phone',string='手机号')
|
||||
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'),
|
||||
('thlc', '天河粮储')], string="任职单位")
|
||||
job_id = fields.Many2one(related='users_id.employee_id.job_id', string="主岗")
|
||||
duties = fields.Char(string="职务")
|
||||
job_type_id = fields.Many2one('hr.job.type', string="岗位类别")
|
||||
onboarding_date = fields.Date(related='users_id.employee_id.open_start_time',string="入职日期")
|
||||
end_of_contract = fields.Date(string="合同结束日期")
|
||||
reason_application = fields.Text(string="事由")
|
||||
employee_id = fields.Many2one('hr.employee', string="员工")
|
||||
department_id = fields.Many2one(related='employee_id.department_id', string="部门")
|
||||
phone = fields.Char(related='employee_id.mobile_phone', string="联系方式")
|
||||
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
id_number = fields.Char(related='employee_id.identification_id', string="身份证号")
|
||||
job_id = fields.Many2one(related='employee_id.job_id', string="岗位")
|
||||
onboarding_time = fields.Date(related='employee_id.open_start_time', string="入职日期")
|
||||
expected_departure_date = fields.Date(string="预计离职日期")
|
||||
parent_id = fields.Many2one(related='users_id.employee_id.parent_id', string="直线上级")
|
||||
business_superior = fields.Many2one("hr.employee", string="业务上级")
|
||||
use_user_type = fields.Selection(related="users_id.employee_id.use_user_type", string="聘用形式")
|
||||
type_resignation = fields.Selection([('1', '个人辞职'), ('2', '被动离职')], string="辞职类型")
|
||||
application_data = fields.Date(string="申请日期")
|
||||
notice_documents_ids= fields.Many2many('ir.attachment', string="辞职申请")
|
||||
resignation_reason = fields.Text(string="辞职原因")
|
||||
is_issues = fields.Boolean(string='是否上会')
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
is_leaving = fields.Boolean(string="同意离职")
|
||||
leaving_date = fields.Date(string="工作期限")
|
||||
handover_person = fields.Many2one("hr.employee", string="交接人")
|
||||
is_handover = fields.Boolean(string="交接完成")
|
||||
|
||||
@api.onchange('is_issues')
|
||||
def _onchange_is_issues(self):
|
||||
if self.is_issues:
|
||||
issue_id = self.env['issue.library'].create({'name': self.name})
|
||||
self.related_issues_id = issue_id.id
|
||||
workflow_record_id = self.env["soong.workflow.record"].search([("res_model", "=", self._name), ("res_id", "=", self.id)])
|
||||
self.env['issue.library.approval.line'].create({
|
||||
'issue_library_id': issue_id.id,
|
||||
'workflow_record_id': workflow_record_id.id,
|
||||
'approval_type': workflow_record_id.workflow_id.id,
|
||||
'code': self.code,
|
||||
'approval_date': fields.Datetime.now(),
|
||||
})
|
||||
elif self.related_issues_id:
|
||||
raise UserError("已经创建了相关的上会记录,不能取消勾选")
|
||||
departure_type = fields.Selection([
|
||||
('voluntary', '主动离职'),
|
||||
('contract_expired', '合同到期'),
|
||||
('negotiated_termination', '协商解除'),
|
||||
('other', '其他')
|
||||
], string='离职类型')
|
||||
handover_line_ids = fields.One2many('yuthon.handover.line', 'leaving_id', string="工作交接")
|
||||
return_line_ids = fields.One2many('yuthon.return.line', 'leaving_id', string="资产归还")
|
||||
goods_line_ids = fields.One2many('yuthon.goods.line', 'leaving_id', string="物品交接")
|
||||
|
||||
class HrJobType(models.Model):
|
||||
_name = "hr.job.type"
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
from odoo import models, fields, api
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class YuthonRetiredApproval(models.Model):
|
||||
_name = 'yuthon.retired.approval'
|
||||
_description = '退休申请表'
|
||||
|
||||
name = fields.Char(string='标题')
|
||||
text = fields.Text(string='正文')
|
||||
code = fields.Char(string="编号",
|
||||
default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_retired_approval_code'))
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
reason_application = fields.Text(string="事由")
|
||||
employee_id = fields.Many2one('hr.employee', string="员工")
|
||||
department_id = fields.Many2one(related='employee_id.department_id', string="部门")
|
||||
phone = fields.Char(related='employee_id.mobile_phone', string="联系方式")
|
||||
id_number = fields.Char(related='employee_id.identification_id', string="身份证号")
|
||||
job_id = fields.Many2one(related='employee_id.job_id', string="岗位")
|
||||
onboarding_time = fields.Date(related='employee_id.open_start_time', string="入职日期")
|
||||
expected_departure_date = fields.Date(string="预计离职日期")
|
||||
retirement_type = fields.Selection([('normal', '正常退休'), ('special_job_early', '特殊工种提前退休'), ('sick', '病退')], string='退休类型')
|
||||
social_security_card = fields.Char(string='社保卡')
|
||||
treatment_choice = fields.Selection([('pension_payment', '养老金发放'), ('enterprise_annuity', '企业年金')], string='待遇选择')
|
||||
account = fields.Char(string='账号')
|
||||
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
handover_line_ids = fields.One2many('yuthon.handover.line', 'retired_id', string="工作交接")
|
||||
return_line_ids = fields.One2many('yuthon.return.line', 'retired_id', string="资产归还")
|
||||
goods_line_ids = fields.One2many('yuthon.goods.line', 'retired_id', string="物品交接")
|
||||
|
||||
|
||||
class YuthonHandoverLine(models.Model):
|
||||
_name = 'yuthon.handover.line'
|
||||
_description = '工作交接'
|
||||
|
||||
name = fields.Char(string="交接事项")
|
||||
employee_id = fields.Many2one('hr.employee', string="交接人")
|
||||
state = fields.Selection([('done', '已完成'), ('undone', '未完成')], string="交接状态")
|
||||
remake = fields.Char(string="备注")
|
||||
retired_id = fields.Many2one('yuthon.retired.approval', string="关联退休申请")
|
||||
leaving_id = fields.Many2one('yuthon.leaving.approval', string="关联离职申请")
|
||||
|
||||
|
||||
class YuthonReturnLine(models.Model):
|
||||
_name = 'yuthon.return.line'
|
||||
_description = '资产归还'
|
||||
|
||||
name = fields.Char(string="资产类型")
|
||||
model = fields.Char(string="型号")
|
||||
state = fields.Selection([('done', '已完成'), ('undone', '未完成')], string="归还状态")
|
||||
remake = fields.Char(string="备注")
|
||||
retired_id = fields.Many2one('yuthon.retired.approval', string="关联退休申请")
|
||||
leaving_id = fields.Many2one('yuthon.leaving.approval', string="关联离职申请")
|
||||
|
||||
|
||||
class YuthonGoodsLine(models.Model):
|
||||
_name = 'yuthon.goods.line'
|
||||
_description = '办公用品'
|
||||
|
||||
name = fields.Char(string="物品名称")
|
||||
number = fields.Integer(string="数量")
|
||||
state = fields.Selection([('done', '已完成'), ('undone', '未完成')], string="归还状态")
|
||||
remake = fields.Char(string="备注")
|
||||
retired_id = fields.Many2one('yuthon.retired.approval', string="关联退休申请")
|
||||
leaving_id = fields.Many2one('yuthon.leaving.approval', string="关联离职申请")
|
||||
|
||||
|
||||
|
||||
@@ -40,4 +40,8 @@ access_yuthon_reward_punishment_details,yuthon_reward_punishment_details,model_y
|
||||
access_yuthon_trial_scenario_detail_line,yuthon_trial_scenario_detail_line,model_yuthon_trial_scenario_detail_line,base.group_user,1,1,1,1
|
||||
access_interview_approval_wizard,interview_approval_wizard,model_interview_approval_wizard,base.group_user,1,1,1,1
|
||||
access_interview_approval_wizard_line,interview_approval_wizard_line,model_interview_approval_wizard_line,base.group_user,1,1,1,1
|
||||
access_kindred_line,kindred_line,model_kindred_line,base.group_user,1,1,1,1
|
||||
access_kindred_line,kindred_line,model_kindred_line,base.group_user,1,1,1,1
|
||||
access_yuthon_retired_approval,yuthon_retired_approval,model_yuthon_retired_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_handover_line,yuthon_handover_line,model_yuthon_handover_line,base.group_user,1,1,1,1
|
||||
access_yuthon_return_line,yuthon_return_line,model_yuthon_return_line,base.group_user,1,1,1,1
|
||||
access_yuthon_goods_line,yuthon_goods_line,model_yuthon_goods_line,base.group_user,1,1,1,1
|
||||
|
@@ -9,6 +9,7 @@
|
||||
<button name="pub_reassignment_employee" string="调岗" type="object"/>
|
||||
<button name="pub_leaving_employee" string="离职" type="object"/>
|
||||
<button name="pub_regularization_employee" string="转正" type="object"/>
|
||||
<button name="pub_retired_employee" string="退休" type="object"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -4,13 +4,10 @@
|
||||
<field name="name">yuthon.leaving.approval.tree</field>
|
||||
<field name="model">yuthon.leaving.approval</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="users_id"/>
|
||||
<field name="phone"/>
|
||||
<field name="department_id" string="部门"/>
|
||||
<field name="use_user_type"/>
|
||||
<field name="is_leaving" string="离职审批状态"/>
|
||||
<field name="is_handover" string='离职交接状态'/>
|
||||
<tree string="退休申请">
|
||||
<field name="name"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="departure_type"/>
|
||||
<field name="expected_departure_date"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -24,66 +21,77 @@
|
||||
<group>
|
||||
<field name="code" readonly="1" string="流水号:"/>
|
||||
</group>
|
||||
<group col="4" string="员工信息">
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group string="审批事项">
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="yuthon_company"/>
|
||||
<field name="onboarding_date"/>
|
||||
<field name="use_user_type"/>
|
||||
<field name="reason_application"/>
|
||||
<field name="documents_ids" widget="preview_many2many"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="退休信息" col="3">
|
||||
<group>
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
<field name="departure_type"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="department_id"/>
|
||||
<field name="end_of_contract"/>
|
||||
<field name="phone"/>
|
||||
<field name="id_number"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="onboarding_time"/>
|
||||
<field name="expected_departure_date"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="job_id"/>
|
||||
<field name="job_type_id"/>
|
||||
<field name="parent_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="duties"/>
|
||||
<field name="business_superior"/>
|
||||
</group>
|
||||
</group>
|
||||
<group col="3" string="辞职说明">
|
||||
<group>
|
||||
<field name="type_resignation"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="application_data"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="notice_documents_ids" widget="preview_many2many"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="resignation_reason"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="审批信息" col="3">
|
||||
<group>
|
||||
<field name="is_leaving"/>
|
||||
<field name="is_handover"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="leaving_date"/>
|
||||
<field name="is_issues"/>
|
||||
<field name="related_issues_id" invisible="not is_issues"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="handover_person"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="工作交接">
|
||||
<field name="handover_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="leaving_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="资产归还">
|
||||
<field name="return_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="leaving_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="model"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="办公用品">
|
||||
<field name="goods_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="leaving_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="number"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="yuthon_leaving_approval_action" model="ir.actions.act_window">
|
||||
<field name="name">员工辞职</field>
|
||||
<field name="res_model">yuthon.leaving.approval</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="view_retired_approval_tree" model="ir.ui.view">
|
||||
<field name="name">retired.approval.tree</field>
|
||||
<field name="model">yuthon.retired.approval</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="退休申请">
|
||||
<field name="name"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="retirement_type"/>
|
||||
<field name="treatment_choice"/>
|
||||
<field name="expected_departure_date"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_retired_approval_form" model="ir.ui.view">
|
||||
<field name="name">retired.approval.form</field>
|
||||
<field name="model">yuthon.retired.approval</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="退休申请">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="code" readonly="1" string="流水号:"/>
|
||||
</group>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1>
|
||||
<field name="name"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group string="审批事项">
|
||||
<group>
|
||||
<field name="users_id"/>
|
||||
<field name="reason_application"/>
|
||||
<field name="documents_ids" widget="preview_many2many"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="退休信息" col="3">
|
||||
<group>
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
<field name="retirement_type"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="phone"/>
|
||||
<field name="id_number"/>
|
||||
<field name="social_security_card"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="onboarding_time"/>
|
||||
<field name="expected_departure_date"/>
|
||||
<field name="treatment_choice"/>
|
||||
<field name="account" invisible="treatment_choice != 'pension_payment'"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="工作交接">
|
||||
<field name="handover_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="retired_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="资产归还">
|
||||
<field name="return_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="retired_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="model"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="办公用品">
|
||||
<field name="goods_line_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="retired_id" column_invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="number"/>
|
||||
<field name="state"/>
|
||||
<field name="remake"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_retired_approval_action" model="ir.actions.act_window">
|
||||
<field name="name">退休审批</field>
|
||||
<field name="res_model">yuthon.retired.approval</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -8,9 +8,11 @@
|
||||
<xpath expr="//field[@name='is_notice']" position="before">
|
||||
<field name="is_issue"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='meeting_type_id']" position="after">
|
||||
<xpath expr="//field[@name='department_id']" position="before">
|
||||
<field name="company_page"/>
|
||||
<field name="number_of_meetings"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='meeting_type_id']" position="after">
|
||||
<field name="number_of_meetings"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='sign']" position="after">
|
||||
<page string="关联议题" invisible="is_issue == False">
|
||||
|
||||
@@ -206,6 +206,11 @@
|
||||
parent="hr_set_process_menu_root_board"
|
||||
action="yuthon_hr_employee_approval.yuthon_transfer_approval_action"
|
||||
sequence="13"/>
|
||||
<menuitem id="hr_yuthon_retired_approval_root_board"
|
||||
name="退休申请"
|
||||
parent="hr_set_process_menu_root_board"
|
||||
action="yuthon_hr_employee_approval.view_retired_approval_action"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="hr_setting_menu_root_board"
|
||||
name="配置"
|
||||
|
||||
Reference in New Issue
Block a user