469 lines
28 KiB
XML
469 lines
28 KiB
XML
<?xml version="1.0" ?>
|
|
<odoo>
|
|
|
|
<menuitem name="Appraisals" id="menu_hr_appraisal_root" web_icon="hr_appraisal,static/description/icon.png" sequence="200"/>
|
|
<menuitem name="Configuration"
|
|
id="menu_hr_appraisal_configuration"
|
|
parent="menu_hr_appraisal_root"
|
|
sequence="99"
|
|
groups="hr_appraisal.group_hr_appraisal_user"/>
|
|
|
|
<record model="ir.ui.view" id="view_hr_appraisal_form">
|
|
<field name="name">hr.appraisal.form</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Appraisal" class="o_appraisal_form">
|
|
<header>
|
|
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight" invisible="state != '1_new' or not is_manager or uid == employee_user_id" data-hotkey="q"/>
|
|
<button name="action_done" string="Mark as Done" type="object" class="oe_highlight" invisible="state != '2_pending' or not is_manager or uid == employee_user_id" data-hotkey="v"/>
|
|
<button name="action_calendar_event" string="Schedule Meeting" invisible="state != '2_pending' or not is_manager or uid == employee_user_id" type="object"/>
|
|
<button name="action_send_appraisal_request" string="Send by email" invisible="uid == employee_user_id and state != '1_new' or uid != employee_user_id and state != '2_pending'" type="object" data-hotkey="g"/>
|
|
<button name="action_back" string="Reset" type="object" invisible="state != '2_pending' or not is_manager or uid == employee_user_id" data-hotkey="w"/>
|
|
<button name="action_reopen" string="Reopen" type="object" invisible="state != '3_done' or not is_manager or uid == employee_user_id" data-hotkey="w"/>
|
|
<field name="state" widget="statusbar" statusbar_visible="1_new,2_pending,3_done" options="{'fold_field': 'fold'}"/>
|
|
</header>
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button class="oe_stat_button" name="action_open_goals" icon="fa-bullseye" type="object">
|
|
<div class="o_field_widget o_stat_info">
|
|
<span class="o_stat_value"><field name="uncomplete_goals_count"/></span>
|
|
<span class="o_stat_text">Goals</span>
|
|
</div>
|
|
</button>
|
|
<button class="oe_stat_button"
|
|
name="action_open_employee_appraisals"
|
|
groups="hr.group_hr_user"
|
|
icon="fa-star-half-o" type="object"
|
|
invisible="employee_appraisal_count < 2 or not employee_id">
|
|
<div class="o_field_widget o_stat_info">
|
|
<span class="o_stat_value"><field name="employee_appraisal_count"/></span>
|
|
<span class="o_stat_text">Appraisals</span>
|
|
</div>
|
|
</button>
|
|
</div>
|
|
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
|
<field name="duplicate_appraisal_id" invisible="1"/>
|
|
<div class="alert alert-warning p-2" role="alert" invisible="not (duplicate_appraisal_id and state == '1_new')">
|
|
Another appraisal with the same people is already ongoing.
|
|
</div>
|
|
<div name="appraisal_info" class="alert alert-info alert-dismissible p-2" role="alert" invisible="state != '2_pending'">
|
|
<div invisible="uid != employee_user_id">
|
|
Fill in the employee's feedback section before <field name="date_close" readonly="1"/>. Then, share it with appraisers.
|
|
</div>
|
|
<div invisible="uid == employee_user_id or not is_manager">
|
|
Fill in the manager's feedback section before <field name="date_close" readonly="1"/>. Then, schedule a meeting to discuss it.
|
|
</div>
|
|
<div name="appraisal_ask_feedback_note">If you need, ask feedback to a selection of colleagues you work with.</div>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"/>
|
|
</div>
|
|
|
|
<div class="oe_title pb-3">
|
|
<label for="employee_id" string="Employee to review" class="pb-2"/>
|
|
<h1>
|
|
<field name="employee_id"
|
|
domain="[('id', 'in', employee_autocomplete_ids)]"
|
|
readonly="state != '1_new'"
|
|
placeholder="e.g. John Doe"
|
|
widget="many2one_avatar_employee"
|
|
/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="manager_ids"
|
|
widget="many2many_avatar_employee"
|
|
options="{'color_field': 'color'}"
|
|
required="1"
|
|
string="Appraisers"
|
|
readonly="state == '3_done' or (state == '2_pending' and not is_manager)"/>
|
|
<field name="date_close" readonly="state == '3_done'"/>
|
|
<field name="appraisal_template_id" string="Template"
|
|
readonly="state != '1_new' or (not is_manager and uid != employee_user_id)"
|
|
invisible="state != '1_new' or uid == employee_user_id"
|
|
options="{'no_edit': True, 'no_create': True}"/>
|
|
</group>
|
|
<group>
|
|
<field name="job_id" invisible="not job_id or uid == employee_user_id" readonly="state != '1_new'"/>
|
|
<field name="department_id" invisible="not department_id or uid == employee_user_id" readonly="state != '1_new'"/>
|
|
<field name="company_id" groups="base.group_multi_company" required="1" invisible="uid == employee_user_id"/>
|
|
<field name="assessment_note" options="{'no_create': True, 'no_open': True}"
|
|
invisible="state == '1_new' or uid == employee_user_id"
|
|
readonly="state == '3_done' or (state == '2_pending' and not is_manager)"/>
|
|
<field name="next_appraisal_date" placeholder="On demand" invisible="not assessment_note or state != '3_done'"/>
|
|
</group>
|
|
</group>
|
|
<field name="appraisal_properties" columns="2"/>
|
|
<notebook>
|
|
<page string="Appraisal" name="appraisal">
|
|
<div class="o_appraisal_both_feedback d-flex flex-column flex-md-row flex-wrap align-items-stretch" style="min-height: 20rem">
|
|
<div class="o_appraisal_feedback col-12 col-md-6">
|
|
<div class="row">
|
|
<div class="o_appraisal_feedback_title col-12 d-flex justify-content-between">
|
|
<h3>Employee's Feedback</h3>
|
|
<div class="h-100" invisible="state != '2_pending'">
|
|
<strong class="text-info" invisible="employee_feedback_published">Private</strong>
|
|
<span invisible="not employee_feedback_published">Private</span>
|
|
<field name="employee_feedback_published" nolabel="1" widget="boolean_toggle_confirm"
|
|
invisible="state == '1_new' and uid == employee_user_id" class="ms-2 me-0"/>
|
|
<span invisible="employee_feedback_published">Shared to Appraisers</span>
|
|
<strong class="text-success" invisible="not employee_feedback_published">Shared to Appraisers</strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 o_appraisal_input scrollable-section position-relative o_height">
|
|
<span class="o_appraisal_overlay o_highlight" invisible="can_see_employee_publish or employee_feedback_published or not employee_feedback_template">
|
|
<div>Self Assessment will show here</div>
|
|
<div>once published</div>
|
|
</span>
|
|
<field name="accessible_employee_feedback" class="o_appraisal_template h-100 overflow-auto" nolabel="1"
|
|
invisible="not employee_feedback_published and not can_see_employee_publish"
|
|
readonly="state not in ['1_new', '2_pending'] or not can_see_employee_publish"/>
|
|
<field name="employee_feedback_template" class="o_appraisal_blur"
|
|
invisible="employee_feedback_published or can_see_employee_publish"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="o_appraisal_feedback o_appraisal_manager_feedback col-12 col-md-6">
|
|
<div class="row">
|
|
<div class="o_appraisal_feedback_title col-12 d-flex justify-content-between">
|
|
<h3>Manager's Feedback</h3>
|
|
<div class="h-100" invisible="state != '2_pending' or not can_see_manager_publish">
|
|
<strong class="text-info" invisible="manager_feedback_published">Private</strong>
|
|
<span invisible="not manager_feedback_published">Private</span>
|
|
<field name="manager_feedback_published" nolabel="1" widget="boolean_toggle" class="ms-2 me-0" invisible="not can_see_manager_publish"/>
|
|
<span invisible="manager_feedback_published">Shared to Employee</span>
|
|
<strong class="text-success" invisible="not manager_feedback_published">Shared to Employee</strong>
|
|
</div>
|
|
</div>
|
|
<div class="col-12 o_appraisal_input scrollable-section position-relative o_height">
|
|
<span class="o_appraisal_overlay" invisible="can_see_manager_publish or manager_feedback_published or not manager_feedback_template">
|
|
<div>Manager Assessment will show here</div>
|
|
<div>once published</div>
|
|
</span>
|
|
<field name="accessible_manager_feedback" class="o_appraisal_template h-100 overflow-auto" nolabel="1"
|
|
invisible="not manager_feedback_published and not can_see_manager_publish"
|
|
readonly="not can_see_manager_publish or state not in ['1_new', '2_pending']"/>
|
|
<field name="manager_feedback_template" class="o_appraisal_blur"
|
|
invisible="manager_feedback_published or can_see_manager_publish"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</page>
|
|
<page string="Private Note" name="private_note" invisible="employee_user_id == uid">
|
|
<field name="note" readonly="state == '3_done' or not is_manager"
|
|
placeholder="Private note (only accessible to people set as managers)"/>
|
|
</page>
|
|
</notebook>
|
|
<field name="active" invisible="1"/>
|
|
<field name="can_see_employee_publish" invisible="1"/>
|
|
<field name="can_see_manager_publish" invisible="1"/>
|
|
<field name="waiting_feedback" invisible="1"/>
|
|
<field name="show_employee_feedback_full" invisible="1"/>
|
|
<field name="show_manager_feedback_full" invisible="1"/>
|
|
<field name="is_manager" invisible="1"/>
|
|
<field name="employee_autocomplete_ids" invisible="1"/>
|
|
<chatter/>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_action_multiple_appraisals" model="ir.actions.act_window">
|
|
<field name="name">Appraisals</field>
|
|
<field name="res_model">hr.appraisal</field>
|
|
<field name="view_mode">kanban,list,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Schedule an appraisal
|
|
</p>
|
|
<p>
|
|
Plan appraisals with your colleagues, collect and discuss feedback.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_open_appraisal_campaign_wizard" model="ir.actions.server">
|
|
<field name="name">Launch Campaign</field>
|
|
<field name="model_id" ref="hr_appraisal.model_hr_appraisal"/>
|
|
<field name="group_ids" eval="[(4, ref('base.group_user'))]"/>
|
|
<field name="binding_view_types">list</field>
|
|
<field name="state">code</field>
|
|
<field name="code">
|
|
action = model.action_open_appraisal_campaign_wizard()
|
|
</field>
|
|
</record>
|
|
|
|
<record model="ir.ui.view" id="view_hr_appraisal_tree">
|
|
<field name="name">hr.appraisal.list</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<list string="Appraisal" multi_edit="1" sample="1" js_class="appraisal_list_view">
|
|
<header>
|
|
<button name="%(action_open_appraisal_campaign_wizard)d"
|
|
class="btn btn-secondary"
|
|
string="Launch Campaign"
|
|
type="action"
|
|
groups="base.group_user"
|
|
display="always"/>
|
|
</header>
|
|
<field name="active" column_invisible="True"/>
|
|
<field name="employee_id" string="Name" readonly="1" widget="many2one_avatar_employee"/>
|
|
<field name="department_id"/>
|
|
<field name="create_date" options="{'show_time': False}" optional="hide"/>
|
|
<field name="date_close" widget="appraisal_remaining_days"/>
|
|
<field name="next_appraisal_date" optional="hide"/>
|
|
<field name="assessment_note" optional="hide"/>
|
|
<field name="state" widget="badge" readonly="1"
|
|
invisible="state == '1_new'" decoration-success="state == '2_pending'"
|
|
decoration-primary="state == '3_done'"/>
|
|
<field name="company_id" readonly="1" optional="hide"/>
|
|
<field name="activity_exception_decoration" widget="activity_exception"/>
|
|
</list>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_tree_orderby_create_date" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.list</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="inherit_id" ref="view_hr_appraisal_tree"/>
|
|
<field name="mode">primary</field>
|
|
<field name="arch" type="xml">
|
|
<list position="attributes">
|
|
<attribute name="default_order">date_close desc</attribute>
|
|
<attribute name="expand">1</attribute>
|
|
</list>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_search" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.search</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Search Appraisal">
|
|
<field name="employee_id"/>
|
|
<field name="department_id"/>
|
|
<field name="job_id"/>
|
|
<field name="activity_user_id" string="Activities of"/>
|
|
<field name="activity_type_id" string="Activity type"/>
|
|
<filter string="To Confirm" name="filter_to_confirm" domain="[('state', '=', '1_new')]"/>
|
|
<filter string="Confirmed" name="filter_confirmed" domain="[('state', '=', '2_pending')]"/>
|
|
<filter string="Done" name="filter_done" domain="[('state', '=', '3_done')]"/>
|
|
<separator/>
|
|
<filter string="My Appraisals" name="my_appraisals" domain="[('employee_id.user_id', '=', uid)]"/>
|
|
<filter string="My team" name="people_i_manage" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_appraisal.group_hr_appraisal_user"/>
|
|
<separator />
|
|
<filter string="Creation Date" name="filter_create_date" date="create_date"/>
|
|
<filter string="Appraisal Date" name="filter_date_close" date="date_close"/>
|
|
<separator/>
|
|
<filter string="Late" name="late_appraisals" domain="[('state', '!=', '3_done'), ('date_close', '<', 'today')]"/>
|
|
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
|
<filter invisible="1" string="Last 365 days" name="created_last_365_days"
|
|
domain="[('create_date', '>=', 'today -1y')]"
|
|
help="Show all records which has been created during the last 365 days"/>
|
|
<filter invisible="1" string="My Activities" name="filter_activities_my"
|
|
domain="[('activity_user_id', '=', uid)]"/>
|
|
<separator invisible="1"/>
|
|
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
|
domain="[('my_activity_date_deadline', '<', 'today')]"
|
|
help="Show all records whose next activity date is past"/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('my_activity_date_deadline', '=', 'today')]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('my_activity_date_deadline', '>', 'today')]"/>
|
|
<separator/>
|
|
<group>
|
|
<filter string='Employee' name="employee" icon="fa-user" domain="[]" context="{'group_by': 'employee_id'}"/>
|
|
<filter string='Department' name="group_by_department_id" context="{'group_by': 'department_id'}"/>
|
|
<filter string='Final Rating' name="group_by_assessment_note" context="{'group_by': 'assessment_note'}"/>
|
|
<filter string='Job' name="groupby_job" context="{'group_by': 'job_id'}"/>
|
|
<filter name="groupby_state" context="{'group_by': 'state'}"/>
|
|
<filter string="Creation Date" name="groupby_create_date" context="{'group_by': 'create_date'}"/>
|
|
<filter name="groupby_date_close" context="{'group_by': 'date_close'}"/>
|
|
<filter string="Properties" name="group_by_appraisal_properties" context="{'group_by': 'appraisal_properties'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_kanban" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.kanban</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<kanban
|
|
quick_create="false"
|
|
default_order="state, date_close desc"
|
|
class="o_hr_employee_kanban"
|
|
sample="1"
|
|
js_class="appraisal_kanban_view">
|
|
<field name="state"/>
|
|
<field name="manager_ids" />
|
|
<field name="waiting_feedback"/>
|
|
<progressbar field="state" colors='{"1_new": "secondary", "2_pending": "success", "3_done": "primary"}'/>
|
|
<header>
|
|
<button name="%(action_open_appraisal_campaign_wizard)d"
|
|
class="btn btn-secondary"
|
|
string="Launch Campaign"
|
|
type="action"
|
|
groups="base.group_user"
|
|
display="always"/>
|
|
</header>
|
|
<templates>
|
|
<t t-name="card" class="flex-row">
|
|
<widget name="web_ribbon" title="Done" bg_color="text-bg-primary" invisible="state != '3_done'"/>
|
|
<widget name="web_ribbon" title="Confirmed" bg_color="text-bg-success" invisible="state != '2_pending'"/>
|
|
<aside class="o_kanban_aside_full">
|
|
<field name="avatar_128" widget="background_image" class="d-block position-relative"/>
|
|
</aside>
|
|
<main class="ms-2">
|
|
<field name="employee_id" class="fw-bolder fs-5" style="max-width: 70%;"/>
|
|
<field name="department_id"/>
|
|
<field name="date_close" widget="appraisal_remaining_days"/>
|
|
<field name="appraisal_properties" widget="properties"/>
|
|
<footer class="pt-0">
|
|
<field name="activity_ids" widget="kanban_activity" class="ms-auto"/>
|
|
<widget name="appraisal_manager_chat" />
|
|
</footer>
|
|
</main>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_activity" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.activity</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<activity string="Appraisal">
|
|
<field name="employee_id" class="o_text_block"/>
|
|
<field name="state" invisible="1"/> <!-- will be used by appraisal_remaining_days widget-->
|
|
<templates>
|
|
<div t-name="activity-box">
|
|
<img class="rounded-circle" t-att-src="activity_image('hr.employee', 'avatar_128', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value"/>
|
|
<div class="ms-2">
|
|
<div>
|
|
<field name="employee_id" class="o_text_block"/>
|
|
</div>
|
|
<div class="text-muted">
|
|
Deadline: <field name="date_close" widget="appraisal_remaining_days"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</templates>
|
|
</activity>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_gantt" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.gantt</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<gantt
|
|
js_class="hr_gantt"
|
|
color="employee_id"
|
|
date_start="date_close"
|
|
date_stop="date_close"
|
|
default_group_by='department_id'>
|
|
<templates>
|
|
<div t-name="gantt-popover">
|
|
<div><strong>Date — </strong><t t-esc="date_close.toFormat('f')"/></div>
|
|
</div>
|
|
</templates>
|
|
</gantt>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_calendar" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.calendar</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<calendar date_start="date_close" date_stop="date_close" mode="month" color="employee_id" quick_create="0">
|
|
<field name="display_name"/>
|
|
<field name="employee_id" filters="1" invisible="1"/>
|
|
<field name="department_id" invisible="1"/>
|
|
<field name="appraisal_properties"/>
|
|
</calendar>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_graph" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.graph</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<graph string="Appraisals" sample="1">
|
|
<field name="employee_appraisal_count" invisible="1"/> <!-- hide field from the measures-->
|
|
<field name="department_id"/>
|
|
<field name="assessment_note"/>
|
|
</graph>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="hr_appraisal_view_pivot" model="ir.ui.view">
|
|
<field name="name">hr.appraisal.pivot</field>
|
|
<field name="model">hr.appraisal</field>
|
|
<field name="arch" type="xml">
|
|
<pivot string="Appraisals" sample="1">
|
|
<field name="employee_appraisal_count" invisible="1"/> <!-- hide field from the measures-->
|
|
<field name="department_id" type="row"/>
|
|
<field name="date_close" interval="quarter" type="col"/>
|
|
</pivot>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_load_appraisal_demo_data" model="ir.actions.server">
|
|
<field name="name">Load appraisal scenario</field>
|
|
<field name="model_id" ref="hr_appraisal.model_hr_appraisal"/>
|
|
<field name="state">code</field>
|
|
<field name="code">action = model._load_demo_data()</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="open_view_hr_appraisal_tree">
|
|
<field name="name">Appraisals</field>
|
|
<field name="path">appraisals</field>
|
|
<field name="res_model">hr.appraisal</field>
|
|
<field name="view_mode">kanban,list,gantt,calendar,form,activity,graph,pivot</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="open_view_hr_appraisal_graph">
|
|
<field name="name">Appraisal Analysis</field>
|
|
<field name="res_model">hr.appraisal</field>
|
|
<field name="view_mode">graph</field>
|
|
<field name="context">{'search_default_created_last_365_days': 1, 'search_default_group_by_department_id':1,'search_default_group_by_assessment_note':1}</field>
|
|
</record>
|
|
|
|
<record model="ir.actions.act_window" id="open_view_hr_appraisal_graph_department">
|
|
<field name="name">Department Appraisals</field>
|
|
<field name="res_model">hr.appraisal</field>
|
|
<field name="view_mode">graph</field>
|
|
<field name="context">{'search_default_department_id': active_id, 'search_default_group_by_assessment_note':1}</field>
|
|
</record>
|
|
|
|
<menuitem name="Appraisals"
|
|
parent="menu_hr_appraisal_root"
|
|
id="menu_open_view_hr_appraisal_tree"
|
|
action="open_view_hr_appraisal_tree"
|
|
sequence="1"
|
|
groups="base.group_user"/>
|
|
|
|
<record id="hr_appraisal_action_from_department" model="ir.actions.act_window">
|
|
<field name="name">Appraisal to start</field>
|
|
<field name="res_model">hr.appraisal</field>
|
|
<field name="view_mode">list,form</field>
|
|
<field name="search_view_id" ref="hr_appraisal_search"/>
|
|
<field name="context">{
|
|
'searchpanel_default_department_id': active_id,
|
|
'default_department_id': active_id,
|
|
}</field>
|
|
<field name="domain">[('state', 'in', ['1_new', '2_pending']), ('department_id', '=', active_id)]</field>
|
|
</record>
|
|
|
|
<menuitem id="menu_hr_appraisal_report" parent="menu_hr_appraisal_root" sequence="20"
|
|
name="Reporting" groups="hr_appraisal.group_hr_appraisal_manager"/>
|
|
|
|
<menuitem id="menu_appraisal_analysis_report"
|
|
name="Appraisal Analysis"
|
|
action="open_view_hr_appraisal_graph"
|
|
parent="menu_hr_appraisal_report"
|
|
sequence="1"/>
|
|
</odoo>
|