Revert "chore(plating): retire fusion_plating_culture — not a priority"

This reverts commit 95310c459d.
This commit is contained in:
gsinghpal
2026-04-20 20:31:02 -04:00
parent 95310c459d
commit 729743e268
20 changed files with 1513 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<!-- ===== CULTURE (top-level under Plating app) ===== -->
<menuitem id="menu_fp_culture_root"
name="Culture"
parent="fusion_plating.menu_fp_root"
sequence="80"
groups="fusion_plating.group_fusion_plating_operator"/>
<menuitem id="menu_fp_values"
name="Values"
parent="menu_fp_culture_root"
action="action_fp_value"
sequence="10"/>
<menuitem id="menu_fp_recognitions"
name="Recognitions"
parent="menu_fp_culture_root"
action="action_fp_value_recognition"
sequence="20"/>
<!-- ===== CULTURE CONFIGURATION (under core Configuration menu) ===== -->
<menuitem id="menu_fp_value_sets"
name="Value Sets"
parent="fusion_plating.menu_fp_config"
action="action_fp_value_set"
sequence="100"
groups="fusion_plating.group_fusion_plating_manager"/>
<menuitem id="menu_fp_value_rotations"
name="Value Rotations"
parent="fusion_plating.menu_fp_config"
action="action_fp_value_rotation"
sequence="110"
groups="fusion_plating.group_fusion_plating_manager"/>
</odoo>

View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_fp_value_recognition_list" model="ir.ui.view">
<field name="name">fp.value.recognition.list</field>
<field name="model">fusion.plating.value.recognition</field>
<field name="arch" type="xml">
<list string="Recognitions">
<field name="reference"/>
<field name="name"/>
<field name="recognized_employee_id"/>
<field name="value_id"/>
<field name="nominated_by_id"/>
<field name="nomination_date"/>
<field name="state" widget="badge"
decoration-info="state == 'draft'"
decoration-success="state == 'published'"
decoration-muted="state == 'archived'"/>
</list>
</field>
</record>
<record id="view_fp_value_recognition_form" model="ir.ui.view">
<field name="name">fp.value.recognition.form</field>
<field name="model">fusion.plating.value.recognition</field>
<field name="arch" type="xml">
<form string="Recognition">
<header>
<button name="action_publish"
type="object"
string="Publish"
class="btn-primary"
invisible="state != 'draft'"/>
<button name="action_archive_recognition"
type="object"
string="Archive"
invisible="state != 'published'"/>
<button name="action_reset_to_draft"
type="object"
string="Reset to Draft"
invisible="state == 'draft'"/>
<field name="state" widget="statusbar" statusbar_visible="draft,published,archived"/>
</header>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Sarah stayed late for the customer"/></h1>
<div class="text-muted">
<field name="reference"/>
</div>
</div>
<group>
<group>
<field name="recognized_employee_id"/>
<field name="value_id"/>
<field name="set_id"/>
</group>
<group>
<field name="nominated_by_id"/>
<field name="nomination_date"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
<notebook>
<page string="Story">
<field name="story" placeholder="What happened? Describe the moment you saw the value being lived."/>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="view_fp_value_recognition_kanban" model="ir.ui.view">
<field name="name">fp.value.recognition.kanban</field>
<field name="model">fusion.plating.value.recognition</field>
<field name="arch" type="xml">
<kanban default_group_by="state" class="o_fp_recognition_kanban">
<field name="id"/>
<field name="name"/>
<field name="reference"/>
<field name="recognized_employee_id"/>
<field name="value_id"/>
<field name="nomination_date"/>
<field name="state"/>
<field name="color"/>
<templates>
<t t-name="card">
<div t-attf-class="o_fp_recognition_card oe_kanban_color_#{record.color.raw_value}">
<div class="d-flex align-items-start justify-content-between">
<strong><field name="name"/></strong>
<i class="fa fa-thumbs-up text-muted" aria-hidden="true"/>
</div>
<div class="mt-2 small text-muted">
<i class="fa fa-user me-1" aria-hidden="true"/>
<field name="recognized_employee_id"/>
</div>
<div class="mt-1 small text-muted">
<i class="fa fa-star me-1" aria-hidden="true"/>
<field name="value_id"/>
</div>
<div class="mt-1 small text-muted">
<field name="nomination_date"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_fp_value_recognition_search" model="ir.ui.view">
<field name="name">fp.value.recognition.search</field>
<field name="model">fusion.plating.value.recognition</field>
<field name="arch" type="xml">
<search string="Recognitions">
<field name="name"/>
<field name="recognized_employee_id"/>
<field name="value_id"/>
<field name="nominated_by_id"/>
<filter string="Draft" name="draft" domain="[('state', '=', 'draft')]"/>
<filter string="Published" name="published" domain="[('state', '=', 'published')]"/>
<filter string="Archived" name="archived_state" domain="[('state', '=', 'archived')]"/>
<separator/>
<filter string="My Nominations" name="my_nominations"
domain="[('nominated_by_id', '=', uid)]"/>
<group>
<filter string="Employee" name="group_employee" context="{'group_by': 'recognized_employee_id'}"/>
<filter string="Value" name="group_value" context="{'group_by': 'value_id'}"/>
<filter string="Status" name="group_state" context="{'group_by': 'state'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_value_recognition" model="ir.actions.act_window">
<field name="name">Recognitions</field>
<field name="res_model">fusion.plating.value.recognition</field>
<field name="view_mode">kanban,list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Recognize a teammate
</p>
<p>
Record peer recognitions tied to a specific value — a
shout-out for someone living the fundamentals in their
daily work.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_fp_value_rotation_list" model="ir.ui.view">
<field name="name">fp.value.rotation.list</field>
<field name="model">fusion.plating.value.rotation</field>
<field name="arch" type="xml">
<list string="Rotations">
<field name="name"/>
<field name="set_id"/>
<field name="rotation_period"/>
<field name="current_value_id"/>
<field name="last_rotation_date"/>
<field name="next_rotation_date"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="active" widget="boolean_toggle"/>
</list>
</field>
</record>
<record id="view_fp_value_rotation_form" model="ir.ui.view">
<field name="name">fp.value.rotation.form</field>
<field name="model">fusion.plating.value.rotation</field>
<field name="arch" type="xml">
<form string="Rotation">
<header>
<button name="action_advance"
type="object"
string="Advance Now"
class="btn-primary"
invisible="not active"/>
</header>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Weekly Fundamental"/></h1>
</div>
<group>
<group>
<field name="set_id"/>
<field name="rotation_period"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
<group>
<field name="current_value_id"/>
<field name="last_rotation_date"/>
<field name="next_rotation_date"/>
<field name="active" widget="boolean_toggle"/>
</group>
</group>
<p class="text-muted mt-3">
This module does not ship an ir.cron — wire one to
<code>fusion.plating.value.rotation._cron_advance_rotation</code>
if you want automatic advancement, or click
<em>Advance Now</em> manually at a stand-up.
</p>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="action_fp_value_rotation" model="ir.actions.act_window">
<field name="name">Rotations</field>
<field name="res_model">fusion.plating.value.rotation</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Set up a rotation schedule
</p>
<p>
A rotation surfaces a "Fundamental of the Day/Week/Month"
from one of your value sets.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_fp_value_set_list" model="ir.ui.view">
<field name="name">fp.value.set.list</field>
<field name="model">fusion.plating.value.set</field>
<field name="arch" type="xml">
<list string="Value Sets">
<field name="name"/>
<field name="code"/>
<field name="value_count"/>
<field name="is_primary" widget="boolean_toggle"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="active" widget="boolean_toggle"/>
</list>
</field>
</record>
<record id="view_fp_value_set_form" model="ir.ui.view">
<field name="name">fp.value.set.form</field>
<field name="model">fusion.plating.value.set</field>
<field name="arch" type="xml">
<form string="Value Set">
<header/>
<sheet>
<widget name="web_ribbon" title="Primary" bg_color="text-bg-success" invisible="not is_primary"/>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Our Way, Core Fundamentals"/></h1>
<div class="text-muted">
<field name="code" placeholder="our_way"/>
</div>
</div>
<group>
<group>
<field name="company_id" groups="base.group_multi_company"/>
<field name="is_primary"/>
</group>
<group>
<field name="value_count"/>
<field name="active" widget="boolean_toggle"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description" placeholder="What does this set represent? How does the shop use it?"/>
</page>
<page string="Values">
<field name="value_ids" context="{'default_set_id': id}">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="number"/>
<field name="name"/>
<field name="icon"/>
<field name="color" widget="color_picker" optional="show"/>
<field name="recognition_count" optional="hide"/>
<field name="active" widget="boolean_toggle"/>
</list>
</field>
</page>
</notebook>
</sheet>
<chatter/>
</form>
</field>
</record>
<record id="view_fp_value_set_search" model="ir.ui.view">
<field name="name">fp.value.set.search</field>
<field name="model">fusion.plating.value.set</field>
<field name="arch" type="xml">
<search string="Value Sets">
<field name="name"/>
<field name="code"/>
<filter string="Primary" name="primary" domain="[('is_primary', '=', True)]"/>
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
<group>
<filter string="Company" name="group_company" context="{'group_by': 'company_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_value_set" model="ir.actions.act_window">
<field name="name">Value Sets</field>
<field name="res_model">fusion.plating.value.set</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create your shop's first value set
</p>
<p>
A value set is your shop's named collection of fundamentals,
core behaviours, or beliefs. Nothing ships pre-loaded — each
shop defines its own.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_fp_value_list" model="ir.ui.view">
<field name="name">fp.value.list</field>
<field name="model">fusion.plating.value</field>
<field name="arch" type="xml">
<list string="Values">
<field name="sequence" widget="handle"/>
<field name="number"/>
<field name="name"/>
<field name="set_id"/>
<field name="recognition_count"/>
<field name="active" widget="boolean_toggle"/>
</list>
</field>
</record>
<record id="view_fp_value_form" model="ir.ui.view">
<field name="name">fp.value.form</field>
<field name="model">fusion.plating.value</field>
<field name="arch" type="xml">
<form string="Value">
<header/>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Do What's Best for the Customer"/></h1>
</div>
<group>
<group>
<field name="set_id"/>
<field name="number"/>
<field name="sequence"/>
</group>
<group>
<field name="icon" placeholder="fa-star"/>
<field name="color" widget="color_picker"/>
<field name="recognition_count"/>
<field name="active" widget="boolean_toggle"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description" placeholder="What does this value mean? How does it show up in daily work?"/>
</page>
<page string="Stories &amp; Examples">
<field name="examples" placeholder="Stories of people living this value."/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_fp_value_kanban" model="ir.ui.view">
<field name="name">fp.value.kanban</field>
<field name="model">fusion.plating.value</field>
<field name="arch" type="xml">
<kanban default_group_by="set_id" class="o_fp_value_kanban">
<field name="id"/>
<field name="name"/>
<field name="number"/>
<field name="icon"/>
<field name="color"/>
<field name="set_id"/>
<field name="recognition_count"/>
<templates>
<t t-name="card">
<div t-attf-class="o_fp_value_card oe_kanban_color_#{record.color.raw_value}">
<div class="d-flex align-items-start justify-content-between">
<div class="o_fp_value_number">
<t t-if="record.number.raw_value">
#<field name="number"/>
</t>
<t t-else="">
<i t-attf-class="fa #{record.icon.raw_value or 'fa-star'}" aria-hidden="true"/>
</t>
</div>
<i t-attf-class="fa #{record.icon.raw_value or 'fa-star'} o_fp_value_icon text-muted" aria-hidden="true"/>
</div>
<div class="o_fp_value_name mt-2">
<strong><field name="name"/></strong>
</div>
<div class="o_fp_value_meta mt-2 small text-muted">
<i class="fa fa-thumbs-up me-1" aria-hidden="true"/>
<field name="recognition_count"/> recognitions
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_fp_value_search" model="ir.ui.view">
<field name="name">fp.value.search</field>
<field name="model">fusion.plating.value</field>
<field name="arch" type="xml">
<search string="Values">
<field name="name"/>
<field name="set_id"/>
<field name="number"/>
<filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
<group>
<filter string="Set" name="group_set" context="{'group_by': 'set_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_fp_value" model="ir.actions.act_window">
<field name="name">Values</field>
<field name="res_model">fusion.plating.value</field>
<field name="view_mode">kanban,list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a value to your shop's set
</p>
<p>
Values are your shop's fundamentals — short, memorable
statements of how people are expected to behave. Create a
Value Set first, then add values to it.
</p>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2026 Nexa Systems Inc.
License OPL-1 (Odoo Proprietary License v1.0)
Part of the Fusion Plating product family.
-->
<odoo>
<record id="view_hr_employee_form_fp_culture" model="ir.ui.view">
<field name="name">hr.employee.form.fp.culture</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Culture" name="fp_culture">
<group>
<group>
<field name="x_fc_recognition_count"/>
<field name="x_fc_last_recognized_date"/>
</group>
</group>
<field name="x_fc_recognition_ids" readonly="1">
<list>
<field name="reference"/>
<field name="name"/>
<field name="value_id"/>
<field name="nominated_by_id"/>
<field name="nomination_date"/>
<field name="state" widget="badge"
decoration-info="state == 'draft'"
decoration-success="state == 'published'"
decoration-muted="state == 'archived'"/>
</list>
</field>
</page>
</xpath>
</field>
</record>
</odoo>