8月29日,开发绩效板块

This commit is contained in:
Onion-Jasper
2024-08-29 11:59:57 +08:00
parent 686e149b30
commit f29ee2cb24
20 changed files with 744 additions and 241 deletions
+8 -3
View File
@@ -10,11 +10,16 @@
'category': 'Human Resources/Attendances',
'version': '0.1',
'license': 'LGPL-3',
'depends': ['base'],
'depends': ['hr','soong_workflow'],
'data': [
'security/ir.model.access.csv',
'views/yuthon_performance_views.xml',
'views/yuthon_performance_manage_views.xml'
'views/yuthon_Index_management.xml',
'views/yuthon_duty_management.xml',
'views/yuthon_performance_menus.xml',
'views/yuthon_plan_management.xml',
'views/yuthon_Index_approval.xml',
'views/yuthon_duty_approval.xml',
'views/yuthon_plan_approval.xml',
],
'installable': True,
'application': True,
+6 -2
View File
@@ -1,4 +1,8 @@
# -*- coding: utf-8 -*-
from . import yuthon_performance
from . import yuthon_performance_manage
from . import yuthon_Index_management
from . import yuthon_duty_management
from . import yuthon_plan_management
from . import yuthon_Index_approval
from . import yuthon_duty_approval
from . import yuthon_plan_approval
@@ -0,0 +1,12 @@
from odoo import models, fields, api, exceptions, _
class YuthonIndexApproval(models.Model):
_name = 'yuthon.index.approval'
_description = "指标库变更管理"
_rec_name = 'name'
name = fields.Char('标题')
creation_time = fields.Datetime(string='申请日期', default=lambda self: fields.Datetime.now())
job_id = fields.Many2one('hr.job', string="岗位")
reason_text = fields.Html(string='申请事由')
change_index_library_ids = fields.One2many("yuthon.index.management",'change_index_library_id',string="指标库变更明细")
@@ -0,0 +1,37 @@
from odoo import models, fields, api, exceptions, _
class YuthonIndexManagement(models.Model):
_name = 'yuthon.index.management'
_description = "指标库"
dimension = fields.Char('维度', required=True)
development_goals = fields.Char('发展目标', required=True)
index_name = fields.Char('指标名称', required=True)
index_definition = fields.Char('指标定义', required=True)
index_type = fields.Selection([('kpi', 'KPI'),
('gs', 'GS'),
('refused_index', '否决指标'),],'指标类别')
index_compute = fields.Char('指标计算公式', required=True)
compute_type = fields.Selection([('bad_index', '反向指标'),
('good_index', '正向指标'),
('two_index', '双向指标'),],'计算类别')
check_norm = fields.Char('考核标准', required=True)
department_ids = fields.Many2many("hr.department", string="指标来源", required=True)
in_charge_role = fields.Many2one('soong.user.role', string='角色')
employee_id = fields.Many2one('hr.employee', string="员工")
start_index_time = fields.Date(string='指标生效时间', required=True)
end_index_time = fields.Date(string='指标失效时间')
unit_compute = fields.Char('计算单位')
weight = fields.Char(string="权重%")
compute_method = fields.Char(string="计算方法")
compute_act = fields.Char(string="计划安排及具体措施/行动")
change_index_library_id = fields.Many2one("yuthon.index.approval", string="指标库变更明细")
index_duty_id = fields.Many2one('yuthon.duty.management', string="绩效明细")
index_duty_approval_id = fields.Many2one('yuthon.duty.approval', string="部门责任变更明细")
@@ -0,0 +1,15 @@
from odoo import models, fields, api, exceptions, _
class YuthonDutyApproval(models.Model):
_name = 'yuthon.duty.approval'
_description = "部门责任书变更管理"
_rec_name = 'name'
name = fields.Char('标题')
creation_time = fields.Datetime(string='申请日期', default=lambda self: fields.Datetime.now())
job_id = fields.Many2one('hr.job', string="岗位")
reason_text = fields.Html(string='申请事由')
# 指标变更
# change_duty_kpi_ids = fields.One2many('yuthon.kpi.line', 'change_duty_kpi_id', string="KPI变更明细")
# change_duty_gs_ids = fields.One2many('yuthon.gs.line', 'change_duty_gs_id', string="GS变更明细")
index_duty_approval_ids = fields.One2many('yuthon.index.management', 'index_duty_approval_id', string="部门责任变更明细")
@@ -0,0 +1,89 @@
from odoo import models, fields, api, exceptions, _
class YuthonDutyManagement(models.Model):
_name = 'yuthon.duty.management'
_description = "部门责任书"
_rec_name = 'name'
name = fields.Char('标题')
assessment_time = fields.Char('考核时间', required=True)
cycle = fields.Selection([('monthly', '月度'),
('quarter', '季度'),
('up_half', '上半年'),
('down_half', '下半年'),
('year', '年度'), ], '周期', required=True)
department_id = fields.Many2one("hr.department", string="部门", required=True)
start_index_time = fields.Date('指标生效时间')
end_index_time = fields.Date('指标失效时间')
index_statu = fields.Selection([('work', '生效'), ('void', '作废')], '状态', required=True)
# 绩效考核
# performance_kpi_ids = fields.One2many('yuthon.kpi.line', 'performance_kpi_id', string="KPI")
# performance_gs_ids = fields.One2many('yuthon.gs.line', 'performance_gs_id', string="GS")
index_duty_ids = fields.One2many('yuthon.index.management', 'index_duty_id', string="绩效明细")
@api.onchange('assessment_time', 'cycle', 'department_id')
def _onchange_year_department(self):
if self.cycle and self.department_id and self.assessment_time:
cycle_dict = {'monthly': '月度', 'quarter': '季度', 'up_half': '上半年', 'down_half': '下半年',
'year': '年度'}
cycle_display = cycle_dict.get(self.cycle, self.cycle)
self.name = f"{self.assessment_time}{cycle_display}{self.department_id.name}责任书"
# class YuthonKpiLine(models.Model):
# _name = 'yuthon.kpi.line'
# _description = "KPI明细行"
#
# # 链接部门责任书和变更菜单
# performance_kpi_id = fields.Many2one('yuthon.duty.management', string="KPI")
# change_duty_kpi_id = fields.Many2one('yuthon.duty.approval', string="KPI变更明细")
#
# KPI
# 指标名称
# index_name_id = fields.Many2one('yuthon.index.management')
# duty_index_name = fields.Char(related='index_name_id.index_name', string='考核任务名称', store=True)
# index_definition_id = fields.Many2one('yuthon.index.management')
# duty_index_definition = fields.Char(related='index_definition_id.index_definition', string="指标定义")
#
# index_id = fields.Many2one('yuthon.index.management')
# duty_index_type = fields.Selection(related='index_id.compute_type', string='计算类别', store=True)
#
# in_charge_role_id = fields.Many2one('yuthon.index.management')
# in_charge_role = fields.Many2one('soong.user.role', related='in_charge_role_id.in_charge_role', string='角色')
#
# duty_employee_id = fields.Many2one('yuthon.index.management')
# employee_id = fields.Many2one('hr.employee', related='duty_employee_id.employee_id', string="员工", store=True)
#
# unit_compute = fields.Char('计算单位')
# weight = fields.Char(string="权重%")
# compute_method = fields.Char(string="计算方法")
#
#
# class YuthonGsLine(models.Model):
# _name = 'yuthon.gs.line'
# _description = "GS明细行"
#
# # 链接部门责任书和变更菜单
# performance_gs_id = fields.Many2one('yuthon.duty.management', string="GS")
# change_duty_gs_id = fields.Many2one('yuthon.duty.approval', string="GS变更明细")
# # index_duty_gs_id = fields.Many2one('yuthon.index.management', string="GS变更明细")
# # 指标名称
# index_name_id = fields.Many2one('yuthon.index.management')
# work_task = fields.Char(related='index_name_id.index_name', string="工作任务")
#
# compute_act = fields.Char(string="计划安排及具体措施/行动")
#
# index_id = fields.Many2one('yuthon.index.management', string='Index')
# duty_index_type = fields.Selection(related='index_id.compute_type', string='计算类别', store=True)
#
# in_charge_role_id = fields.Many2one('yuthon.index.management')
# in_charge_role = fields.Many2one('soong.user.role', related='in_charge_role_id.in_charge_role', string='角色')
#
# duty_employee_id = fields.Many2one('yuthon.index.management')
# employee_id = fields.Many2one('hr.employee', string="员工", related='duty_employee_id.employee_id', store=True)
#
# weight = fields.Char(string="权重%")
@@ -1,46 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, exceptions, _
class YuthonPerformace(models.Model):
_name = 'yuthon.performance'
_description = "员工绩效"
name = fields.Char(string="绩效名称")
performance_type = fields.Char(string="指标来源")
performance_ids = fields.One2many('yuthon.performance.line', 'performance_id', string="绩效类型")
class YuthonPerformaceLine(models.Model):
_name = 'yuthon.performance.line'
_description = "员工绩效明细"
performance_id = fields.Many2one('yuthon.performance', string="绩效")
metric_type = fields.Char(string="指标类型")
metric_name = fields.Char(string="指标名称")
metric_define = fields.Char(string="指标定义")
work_task = fields.Char(string="工作任务")
weight = fields.Char(string="权重%")
compute_method = fields.Char(string="计算方法")
compute_uom = fields.Char(string="计算单位")
compute_act = fields.Char(string="计划安排及具体措施/行动")
# 上半年
half_t1 = fields.Integer(string="底线值T1")
half_t2 = fields.Integer(string="基准值T2")
half_t3 = fields.Integer(string="努力值T3")
half_node = fields.Date(string="节点目标")
half_quality = fields.Char(string="质量目标")
# 下半年
later_t1 = fields.Integer(string="底线值T1")
later_t2 = fields.Integer(string="基准值T2")
later_t3 = fields.Integer(string="努力值T3")
later_node = fields.Date(string="节点目标")
later_quality = fields.Char(string="质量目标")
# 年度
annual_t1 = fields.Integer(string="底线值T1")
annual_t2 = fields.Integer(string="基准值T2")
annual_t3 = fields.Integer(string="努力值T3")
annual_node = fields.Date(string="节点目标")
annual_quality = fields.Char(string="质量目标")
@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, fields, api, exceptions, _
class YuthonPerformaceManage(models.Model):
_name = 'yuthon.performance.manage'
_description = "管理"
#员工,时间,指标名称,指标类型,指标来源,绩效数值
employee_id = fields.Many2one('hr.employee', string="员工")
create_time = fields.Datetime(string="创建时间")
metric_name = fields.Char(string="指标名称")
metric_type = fields.Char(string="指标类型")
performance_type = fields.Char(string="指标来源")
Performance_numbers = fields.Float(string="绩效分值")
@@ -0,0 +1,12 @@
from odoo import models, fields, api, exceptions, _
class YuthonPlanApproval(models.Model):
_name = 'yuthon.plan.approval'
_description = "个人计划变更管理"
_rec_name = 'name'
name = fields.Char('标题')
creation_time = fields.Datetime(string='申请日期', default=lambda self: fields.Datetime.now())
job_id = fields.Many2one('hr.job', string="岗位")
reason_text = fields.Html(string='申请事由')
change_plan_ids = fields.One2many("yuthon.plan.management.line",'change_plan_id',string="个人计划变更明细")
@@ -0,0 +1,31 @@
from odoo import models, fields, api, exceptions, _
class YuthonPlanManagement(models.Model):
_name = 'yuthon.plan.management'
_description = "计划管理"
_rec_name = 'name'
name = fields.Char('标题')
creation_time = fields.Datetime(string='填报日期', default=lambda self: fields.Datetime.now())
job_id = fields.Many2one('hr.job', string="岗位")
employee_id = fields.Many2one('hr.employee', string="员工")
department_id = fields.Many2one('hr.department', string="部门")
plan_ids = fields.One2many('yuthon.plan.management.line','plan_id' ,'计划明细')
class YuthonPlanManagementLine(models.Model):
_name = 'yuthon.plan.management.line'
_description = "计划管理明细"
plan_id = fields.Many2one('yuthon.plan.management','计划明细')
change_plan_id = fields.Many2one('yuthon.plan.approval','个人计划变更明细')
index_name = fields.Char('工作任务名称')
index_plan = fields.Char('计划安排及具体措施/行动')
index_type = fields.Selection([('kpi', 'KPI'),
('gs', 'GS'),
('refused_index', '否决指标'),],'指标类别')
expected_goals = fields.Char('预期目标')
resource_requirements = fields.Char('资源要求')
completion_summary = fields.Char('完成情况总结')
@@ -1,6 +1,10 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_yuthon_performance,yuthon_performance,model_yuthon_performance,base.group_user,1,1,1,1
access_yuthon_performance_line,yuthon_performance_line,model_yuthon_performance_line,base.group_user,1,1,1,1
access_yuthon_performance_manage,yuthon_performance_manage,model_yuthon_performance_manage,base.group_user,1,1,1,1
access_yuthon_index_management,yuthon_index_management,model_yuthon_index_management,base.group_user,1,1,1,1
access_yuthon_duty_management,yuthon_duty_management,model_yuthon_duty_management,base.group_user,1,1,1,1
access_yuthon_plan_management,yuthon_plan_management,model_yuthon_plan_management,base.group_user,1,1,1,1
access_yuthon_plan_management_line,yuthon_plan_management_line,model_yuthon_plan_management_line,base.group_user,1,1,1,1
access_yuthon_index_approval,yuthon_index_approval,model_yuthon_index_approval,base.group_user,1,1,1,1
access_yuthon_duty_approval,yuthon_duty_approval,model_yuthon_duty_approval,base.group_user,1,1,1,1
access_yuthon_plan_approval,yuthon_plan_approval,model_yuthon_plan_approval,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_yuthon_performance access_yuthon_index_management yuthon_performance yuthon_index_management model_yuthon_performance model_yuthon_index_management base.group_user 1 1 1 1
3 access_yuthon_performance_line access_yuthon_duty_management yuthon_performance_line yuthon_duty_management model_yuthon_performance_line model_yuthon_duty_management base.group_user 1 1 1 1
4 access_yuthon_performance_manage access_yuthon_plan_management yuthon_performance_manage yuthon_plan_management model_yuthon_performance_manage model_yuthon_plan_management base.group_user 1 1 1 1
5 access_yuthon_plan_management_line yuthon_plan_management_line model_yuthon_plan_management_line base.group_user 1 1 1 1
6 access_yuthon_index_approval yuthon_index_approval model_yuthon_index_approval base.group_user 1 1 1 1
7 access_yuthon_duty_approval yuthon_duty_approval model_yuthon_duty_approval base.group_user 1 1 1 1
8 access_yuthon_plan_approval yuthon_plan_approval model_yuthon_plan_approval base.group_user 1 1 1 1
9
10
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_Index_approval_tree" model="ir.ui.view">
<field name="name">yuthon.index.approval.tree</field>
<field name="model">yuthon.index.approval</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="creation_time"/>
</tree>
</field>
</record>
<!-- Form-->
<record id="yuthon_Index_approval_form" model="ir.ui.view">
<field name="name">yuthon.index.approval.form</field>
<field name="model">yuthon.index.approval</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="creation_time"/>
<field name="reason_text"/>
</group>
<group>
<field name="job_id"/>
</group>
</group>
<notebook>
<page string="更改明细">
<field name="change_index_library_ids">
<tree editable="bottom">
<field name="dimension"/>
<field name="development_goals"/>
<field name="index_name"/>
<field name="index_definition"/>
<field name="index_type"/>
<field name="index_compute"/>
<field name="compute_type"/>
<field name="check_norm"/>
<field name="department_ids" widget="many2many_tags"/>
<field name="in_charge_role"/>
<field name="employee_id"/>
<field name="start_index_time"/>
<field name="end_index_time"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="yuthon_Index_approval_search" model="ir.ui.view">
<field name="name">yuthon.index.approval.search</field>
<field name="model">yuthon.index.approval</field>
<field name="arch" type="xml">
<search string="指标库变更查询">
<field name="name"/>
</search>
</field>
</record>
<!-- Action-->
<record id="yuthon_Index_approval_action" model="ir.actions.act_window">
<field name="name">指标库变更</field>
<field name="res_model">yuthon.index.approval</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_index_management_tree" model="ir.ui.view">
<field name="name">yuthon.index.management.tree</field>
<field name="model">yuthon.index.management</field>
<field name="arch" type="xml">
<tree>
<field name="dimension"/>
<field name="development_goals"/>
<field name="index_name"/>
<field name="index_definition"/>
<field name="index_type"/>
<field name="index_compute"/>
<field name="compute_type"/>
<field name="check_norm"/>
<field name="department_ids" widget="many2many_tags"/>
<field name="in_charge_role"/>
<field name="employee_id"/>
<field name="start_index_time"/>
<field name="end_index_time"/>
</tree>
</field>
</record>
<!-- Action-->
<record id="yuthon_index_management_action" model="ir.actions.act_window">
<field name="name">指标库</field>
<field name="res_model">yuthon.index.management</field>
<field name="view_mode">tree</field>
</record>
</odoo>
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_duty_approval_tree" model="ir.ui.view">
<field name="name">yuthon.duty.approval.tree</field>
<field name="model">yuthon.duty.approval</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="creation_time"/>
</tree>
</field>
</record>
<!-- Form-->
<record id="yuthon_duty_approval_form" model="ir.ui.view">
<field name="name">yuthon.duty.approval.form</field>
<field name="model">yuthon.duty.approval</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="creation_time"/>
<field name="reason_text"/>
</group>
<group>
<field name="job_id"/>
</group>
</group>
<notebook>
<page string="绩效明细">
<group>
<group string="KPI">
<field name="index_duty_approval_ids">
<tree editable="bottom">
<field name="index_name" string="考核任务名称"/>
<field name="index_definition" string="指标定义"/>
<field name="compute_type" string="计算类别"/>
<field name="weight"/>
<field name="compute_method"/>
<field name="unit_compute"/>
<field name="employee_id"/>
<field name="in_charge_role"/>
</tree>
</field>
</group>
</group>
<group>
<group string="GS">
<field name="index_duty_approval_ids">
<tree editable="bottom">
<field name="index_name" string="工作任务"/>
<field name="compute_type" string="计算类别"/>
<field name="compute_act"/>
<field name="weight"/>
<field name="employee_id"/>
<field name="in_charge_role"/>
</tree>
</field>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="yuthon_duty_approval_search" model="ir.ui.view">
<field name="name">yuthon.duty.approval.search</field>
<field name="model">yuthon.duty.approval</field>
<field name="arch" type="xml">
<search string="责任书变更查询">
<field name="name"/>
</search>
</field>
</record>
<!-- Action-->
<record id="yuthon_duty_approval_action" model="ir.actions.act_window">
<field name="name">部门责任变更</field>
<field name="res_model">yuthon.duty.approval</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,86 @@
<odoo>
<!-- Views -->
<record id="yuthon_duty_management_tree" model="ir.ui.view">
<field name="name">yuthon.duty.management.tree</field>
<field name="model">yuthon.duty.management</field>
<field name="arch" type="xml">
<tree string="责任书"
decoration-danger="index_statu == 'void'"
decoration-success="index_statu == 'work'">
<field name="department_id"/>
<field name="name"/>
<field name="start_index_time"/>
<field name="end_index_time"/>
<field name="index_statu"/>
</tree>
</field>
</record>
<record id="yuthon_duty_management_form" model="ir.ui.view">
<field name="name">yuthon.duty.management.form</field>
<field name="model">yuthon.duty.management</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="department_id"/>
<field name="index_statu"/>
</group>
<group>
<field name="assessment_time"/>
<field name="cycle"/>
</group>
</group>
<notebook>
<page string="绩效明细">
<group>
<group string="KPI">
<field name="index_duty_ids">
<tree editable="bottom">
<field name="index_name" string="考核任务名称"/>
<field name="index_definition" string="指标定义"/>
<field name="compute_type" string="计算类别"/>
<field name="weight"/>
<field name="compute_method"/>
<field name="unit_compute"/>
<field name="employee_id"/>
<field name="in_charge_role"/>
</tree>
</field>
</group>
</group>
<group>
<group string="GS">
<field name="index_duty_ids">
<tree editable="bottom">
<field name="index_name" string="工作任务"/>
<field name="compute_type" string="计算类别"/>
<field name="compute_act"/>
<field name="weight"/>
<field name="employee_id"/>
<field name="in_charge_role"/>
</tree>
</field>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Action-->
<record id="yuthon_duty_management_action" model="ir.actions.act_window">
<field name="name">部门责任书</field>
<field name="res_model">yuthon.duty.management</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_performance_manage_tree" model="ir.ui.view">
<field name="name">yuthon.performance.manage.tree</field>
<field name="model">yuthon.performance.manage</field>
<field name="arch" type="xml">
<tree >
<field name="employee_id" string="员工"/>
<field name="create_time" string="创建时间"/>
<field name="metric_name" string="指标名称"/>
<field name="metric_type" string="指标类型"/>
<field name="performance_type" string="指标来源"/>
<field name="Performance_numbers" type="float" string="绩效分值"/>
</tree>
</field>
</record>
<!-- Action-->
<record id="yuthon_performance_manage_action" model="ir.actions.act_window">
<field name="name">管理</field>
<field name="res_model">yuthon.performance.manage</field>
<field name="view_mode">tree,form</field>
</record>
<!-- 菜单-->
<menuitem
id="yuthon_performance_menu_config_manage"
parent="yuthon_performance_menu_config_root"
name="经理"
sequence="2"
action="yuthon_performance_manage_action"/>
<menuitem
id="yuthon_performance_manage_menu"
parent="yuthon_performance_menu_config_manage"
name="员工"
sequence="8"
action="yuthon_performance_manage_action"/>
<menuitem
id="yuthon_performance_manage_performance_menu"
parent="yuthon_performance_menu_config_manage"
name="绩效"
sequence="5"
action="yuthon_performance_manage_action"/>
</odoo>
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<menuitem
id="yuthon_performance_menu_config_root"
name="绩效考核"
web_icon="yuthon_performance,static/description/icon.png"
sequence="4"/>
<!-- 部门责任书-->
<menuitem
id="yuthon_performance_duty_menu"
parent="yuthon_performance_menu_config_root"
name="绩效考核"
sequence="10"/>
<menuitem
id="yuthon_organization_performance_menu"
parent="yuthon_performance_duty_menu"
name="组织绩效"
sequence="10"
action="yuthon_duty_management_action"/>
<menuitem
id="yuthon_employee_performance_menu"
parent="yuthon_performance_duty_menu"
name="员工绩效"
sequence="20"
action="yuthon_duty_management_action"/>
<!-- 指标库-->
<menuitem
id="yuthon_Index_management_menu"
parent="yuthon_performance_menu_config_root"
name="指标库"
sequence="20"
action="yuthon_index_management_action"/>
<menuitem
id="yuthon_organization_performance_library"
parent="yuthon_Index_management_menu"
name="组织绩效指标库"
sequence="10"
action="yuthon_index_management_action"/>
<menuitem
id="yuthon_employee_performance_library"
parent="yuthon_Index_management_menu"
name="员工绩效指标库"
sequence="20"
action="yuthon_index_management_action"/>
<!-- 计划管理-->
<menuitem
id="yuthon_plan_management_menu"
parent="yuthon_performance_menu_config_root"
name="计划管理"
sequence="30"/>
<menuitem
id="yuthon_plan_management"
parent="yuthon_plan_management_menu"
name="个人计划"
sequence="10"
action="yuthon_plan_management_action"/>
<!-- 绩效变更管理-->
<menuitem
id="yuthon_performance_approval_management_menu"
parent="yuthon_performance_menu_config_root"
name="指标变更管理"
sequence="40"/>
<menuitem
id="yuthon_Index_approval_management"
parent="yuthon_performance_approval_management_menu"
name="指标库变更"
sequence="10"
action="yuthon_Index_approval_action"/>
<menuitem
id="yuthon_duty_approval_management"
parent="yuthon_performance_approval_management_menu"
name="部门责任书变更"
sequence="20"
action="yuthon_duty_approval_action"/>
<menuitem
id="yuthon_plan_approval_management"
parent="yuthon_performance_approval_management_menu"
name="个人计划变更"
sequence="30"
action="yuthon_plan_approval_action"/>
</odoo>
@@ -1,116 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_performance_tree" model="ir.ui.view">
<field name="name">yuthon.performance.tree</field>
<field name="model">yuthon.performance</field>
<field name="arch" type="xml">
<tree string="员工绩效">
<field name="name"/>
<field name="performance_type"/>
</tree>
</field>
</record>
<record id="yuthon_performance_form" model="ir.ui.view">
<field name="name">yuthon.performance.form</field>
<field name="model">yuthon.performance</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
<field name="performance_type"/>
</group>
<group>
</group>
</group>
<notebook>
<page string="绩效明细">
<field name="performance_ids">
<tree>
<field name="performance_id" optional="hidden"/>
<field name="metric_type"/>
<field name="metric_name"/>
<field name="metric_define"/>
<field name="work_task"/>
<field name="compute_act"/>
</tree>
<form>
# 上半年
half_t1 = fields.Integer(string="底线值T1")
half_t2 = fields.Integer(string="基准值T2")
half_t3 = fields.Integer(string="努力值T3")
half_node = fields.Date(string="节点目标")
half_quality = fields.Char(string="质量目标")
# 下半年
later_t1 = fields.Integer(string="底线值T1")
later_t2 = fields.Integer(string="基准值T2")
later_t3 = fields.Integer(string="努力值T3")
later_node = fields.Date(string="节点目标")
later_quality = fields.Char(string="质量目标")
# 年度
annual_t1 = fields.Integer(string="底线值T1")
annual_t2 = fields.Integer(string="基准值T2")
annual_t3 = fields.Integer(string="努力值T3")
annual_node = fields.Date(string="节点目标")
annual_quality = fields.Char(string="质量目标")
<sheet>
<group>
performance_id = fields.Many2one('yuthon.performance', string="绩效")
metric_type = fields.Char(string="指标类型")
metric_name = fields.Char(string="指标名称")
metric_define = fields.Char(string="指标定义")
work_task = fields.Char(string="工作任务")
weight = fields.Char(string="权重%")
compute_method = fields.Char(string="计算方法")
compute_uom = fields.Char(string="计算单位")
compute_act = fields.Char(string="计划安排及具体措施/行动")
<group>
<field name="performance_id" invisible="1"/>
<field name="metric_type"/>
<field name="metric_name"/>
<field name="metric_define"/>
</group>
<group>
<field name="work_task"/>
<field name="compute_act"/>
</group>
</group>
</sheet>
</form>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Actions -->
<record id="yuthon_performance_action" model="ir.actions.act_window">
<field name="name">员工绩效配置</field>
<field name="res_model">yuthon.performance</field>
<field name="view_mode">tree,form</field>
</record>
<!-- Menus -->
<menuitem
id="yuthon_performance_menu_config_root"
name="绩效考核"
web_icon="yuthon_performance,static/description/icon.png"
sequence="4"
action="yuthon_performance_action"/>
<menuitem
id="yuthon_performance_menu_config_setting"
parent="yuthon_performance_menu_config_root"
name="配置"
sequence="8"
action="yuthon_performance_action"/>
<menuitem
id="yuthon_performance_menu_config"
parent="yuthon_performance_menu_config_setting"
name="绩效配置"
action="yuthon_performance_action"
sequence="1"/>
</odoo>
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Views -->
<record id="yuthon_plan_approval_tree" model="ir.ui.view">
<field name="name">yuthon.plan.approval.tree</field>
<field name="model">yuthon.plan.approval</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="creation_time"/>
</tree>
</field>
</record>
<!-- Form-->
<record id="yuthon_plan_approval_form" model="ir.ui.view">
<field name="name">yuthon.plan.approval.form</field>
<field name="model">yuthon.plan.approval</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="creation_time"/>
<field name="reason_text"/>
</group>
<group>
<field name="job_id"/>
</group>
</group>
<notebook>
<page string="计划明细">
<field name="change_plan_ids">
<tree editable="bottom">
<field name="plan_id"/>
<field name="index_name"/>
<field name="index_plan"/>
<field name="index_type"/>
<field name="expected_goals"/>
<field name="resource_requirements"/>
<field name="completion_summary"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="yuthon_plan_approval_search" model="ir.ui.view">
<field name="name">yuthon.plan.approval.search</field>
<field name="model">yuthon.plan.approval</field>
<field name="arch" type="xml">
<search string="责任书变更查询">
<field name="name"/>
</search>
</field>
</record>
<!-- Action-->
<record id="yuthon_plan_approval_action" model="ir.actions.act_window">
<field name="name">个人计划变更</field>
<field name="res_model">yuthon.plan.approval</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
@@ -0,0 +1,80 @@
<odoo>
<!-- Views -->
<record id="yuthon_plan_management_tree" model="ir.ui.view">
<field name="name">yuthon.plan.management.tree</field>
<field name="model">yuthon.plan.management</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="department_id"/>
<field name="job_id"/>
<field name="employee_id"/>
<field name="creation_time"/>
</tree>
</field>
</record>
<record id="yuthon_plan_management_form" model="ir.ui.view">
<field name="name">yuthon.plan.management.form</field>
<field name="model">yuthon.plan.management</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="department_id"/>
<field name="job_id"/>
</group>
<group>
<field name="employee_id"/>
<field name="creation_time"/>
</group>
</group>
<notebook>
<page string="计划明细">
<field name="plan_ids">
<tree editable="bottom">
<field name="plan_id"/>
<field name="index_name"/>
<field name="index_plan"/>
<field name="index_type"/>
<field name="expected_goals"/>
<field name="resource_requirements"/>
<field name="completion_summary"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="yuthon_plan_management_search" model="ir.ui.view">
<field name="name">yuthon.plan.management.search</field>
<field name="model">yuthon.plan.management</field>
<field name="arch" type="xml">
<search string="计划查询">
<field name="department_id"/>
<field name="employee_id"/>
<field name="job_id"/>
<field name="creation_time"/>
</search>
</field>
</record>
<!-- Action-->
<record id="yuthon_plan_management_action" model="ir.actions.act_window">
<field name="name">计划管理</field>
<field name="res_model">yuthon.plan.management</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>