227 lines
11 KiB
XML
227 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
<!-- Dashboard Builder Form View -->
|
|
<record id="view_base_dashboard_form" model="ir.ui.view">
|
|
<field name="name">Dashboard Builder</field>
|
|
<field name="model">base.dashbord</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Dashboard Service Configuration">
|
|
<sheet>
|
|
<!-- Avatar / Icon Selection -->
|
|
<!-- Avatar / Icon Selection -->
|
|
<div class="oe_title">
|
|
<label for="icon_type" class="oe_edit_only"/>
|
|
<field name="icon_type" widget="radio" class="oe_edit_only" options="{'horizontal': true}"/>
|
|
</div>
|
|
|
|
<!-- Image Widget (Visible if 'image') - NOT REQUIRED -->
|
|
<field name="card_image" widget="image" class="oe_avatar"
|
|
options="{'preview_image': 'card_image'}"
|
|
invisible="icon_type == 'icon'" />
|
|
|
|
<!-- Icon Preview Widget (Visible if 'icon') -->
|
|
<field name="icon_preview_html" widget="html" class="oe_avatar"
|
|
style="padding:0; border:none; background:transparent;"
|
|
invisible="icon_type == 'image'" />
|
|
|
|
<div class="oe_title">
|
|
<h1>
|
|
<field name="name" placeholder="Service Name" required="True"/>
|
|
</h1>
|
|
<div invisible="icon_type == 'image'" class="o_row">
|
|
<!-- NOTE: Removed required attr to allow default fallback -->
|
|
<field name="icon_name" placeholder="fa-plane"/>
|
|
<a href="https://fontawesome.com/v4/icons/" target="_blank" class="btn btn-link" role="button">
|
|
<i class="fa fa-external-link"/> Browse Icons
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Main Configuration Groups -->
|
|
<group>
|
|
<group string="Model Configuration">
|
|
<field name="model_id"
|
|
options="{'no_create_edit': True}"
|
|
required="1"/>
|
|
<field name="model_name" invisible="1"/>
|
|
<field name="action_id"
|
|
options="{'no_create_edit': True}"
|
|
domain="[('res_model','=',model_name)]"
|
|
required="1"
|
|
help="The action to open when clicking this card"/>
|
|
</group>
|
|
<group string="Display Options">
|
|
<field name="sequence" help="Lower numbers appear first"/>
|
|
<field name="is_self_service"
|
|
help="Enable for employee self-service cards" widget="boolean_toggle"/>
|
|
<field name="is_financial_impact"
|
|
help="Mark if this service has no financial impact" widget="boolean_toggle"/>
|
|
</group>
|
|
</group>
|
|
|
|
<group>
|
|
<group string="Employee Filter Configuration">
|
|
<field name="search_field"
|
|
placeholder="e.g., employee_id.user_id or user_id"
|
|
help="The field path used to filter records for current user. Examples: • 'employee_id.user_id' - For HR models (hr.leave, hr.expense, etc.) • 'user_id' - For models with direct user reference (purchase.order, etc.) • 'create_uid' - For records created by the user"/>
|
|
</group>
|
|
<group string="Advanced View Settings"
|
|
invisible="not model_id">
|
|
<field name="form_view_id"
|
|
options="{'no_create_edit': True}"
|
|
domain="[('type','=','form'),('model','=',model_name)]"
|
|
help="Optional: Custom form view for this service"/>
|
|
<field name="list_view_id"
|
|
options="{'no_create_edit': True}"
|
|
domain="[('type','=','list'),('model','=',model_name)]"
|
|
help="Optional: Custom list view for this service"/>
|
|
</group>
|
|
</group>
|
|
|
|
<!-- Hidden computed fields -->
|
|
<field name="action_domain" invisible="1"/>
|
|
<field name="action_context" invisible="1"/>
|
|
<field name="is_button" invisible="1"/>
|
|
<field name="is_stage" invisible="1"/>
|
|
<field name="is_double" invisible="1"/>
|
|
<field name="is_state" invisible="1"/>
|
|
|
|
<!-- State/Stage Configuration Notebook -->
|
|
<notebook>
|
|
<page name="state_config" string="State/Stage Configuration">
|
|
<!-- Initial state - show info and load button -->
|
|
<div invisible="is_button" >
|
|
<div class="alert alert-info" role="alert">
|
|
<i class="fa fa-info-circle"/> Click the button below to detect available states/stages for the selected model.
|
|
</div>
|
|
<button name="compute_selection"
|
|
string="Load Model States"
|
|
type="object"
|
|
class="btn-primary"
|
|
icon="fa-download"/>
|
|
</div>
|
|
|
|
<!-- After loading - show action buttons above the list -->
|
|
<div class="d-flex mb-3" invisible="not is_button">
|
|
<button name="update_selection"
|
|
string="Refresh States"
|
|
type="object"
|
|
class="btn-primary"
|
|
icon="fa-refresh"/>
|
|
<button name="unlink_nodes"
|
|
string="Remove All States"
|
|
type="object"
|
|
class="btn-danger ml-2"
|
|
icon="fa-trash"
|
|
confirm="Are you sure you want to remove all loaded states?"/>
|
|
</div>
|
|
|
|
<field name="line_ids"
|
|
invisible="not is_button"
|
|
context="{'default_model_name':model_name,'default_model_id':model_id}">
|
|
<list editable="bottom">
|
|
<field name="sequence" widget="handle"/>
|
|
<field name="group_ids"
|
|
widget="many2many_tags"
|
|
options="{'no_quick_create': True, 'color_field': 'color'}"
|
|
required="1"
|
|
placeholder="Select user groups..."/>
|
|
<field name="model_name" invisible="1"/>
|
|
<field name="model_id" invisible="1"/>
|
|
<field name="state_id"
|
|
column_invisible="not parent.is_state and not parent.is_double"
|
|
options="{'no_create': True, 'no_create_edit': True}"
|
|
domain="[('model_id', '=', model_id)]"/>
|
|
<field name="stage_id"
|
|
column_invisible="not parent.is_stage"
|
|
options="{'no_create': True, 'no_create_edit': True}"
|
|
domain="[('model_id', '=', model_id)]"/>
|
|
</list>
|
|
</field>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- Dashboard Builder Tree View -->
|
|
<record id="view_base_dashbord_tree" model="ir.ui.view">
|
|
<field name="name">base.dashbord.tree</field>
|
|
<field name="model">base.dashbord</field>
|
|
<field name="arch" type="xml">
|
|
<list string="Dashboard Cards">
|
|
<field name="sequence" widget="handle"/>
|
|
<field name="name"/>
|
|
<field name="model_id"/>
|
|
<field name="is_self_service"/>
|
|
</list>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- Dashboard Builder Action -->
|
|
<record id="action_base_dashbord" model="ir.actions.act_window">
|
|
<field name="name">Dashboard Cards</field>
|
|
<field name="res_model">base.dashbord</field>
|
|
<field name="view_mode">list,form</field>
|
|
</record>
|
|
|
|
<!-- Menu for Dashboard Cards -->
|
|
<menuitem
|
|
id="menu_dashboard_cards"
|
|
name="Dashboard Cards"
|
|
parent="menu_dashboard_config"
|
|
action="action_base_dashbord"
|
|
sequence="10"
|
|
/>
|
|
|
|
<!-- Node State Tree View -->
|
|
<record id="view_node_state_tree" model="ir.ui.view">
|
|
<field name="name">node.state.tree</field>
|
|
<field name="model">node.state</field>
|
|
<field name="arch" type="xml">
|
|
<list string="States" create="false" edit="false">
|
|
<field name="name"/>
|
|
<field name="state"/>
|
|
<field name="model_id"/>
|
|
<field name="is_workflow"/>
|
|
</list>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- Node State Action -->
|
|
<record id="action_node_state" model="ir.actions.act_window">
|
|
<field name="name">States</field>
|
|
<field name="res_model">node.state</field>
|
|
<field name="view_mode">list</field>
|
|
</record>
|
|
|
|
<!-- Menu for States -->
|
|
|
|
|
|
<!-- Stage Tree View -->
|
|
<record id="view_stage_stage_tree" model="ir.ui.view">
|
|
<field name="name">stage.stage.tree</field>
|
|
<field name="model">stage.stage</field>
|
|
<field name="arch" type="xml">
|
|
<list string="Stages" create="false" edit="false">
|
|
<field name="name"/>
|
|
<field name="value"/>
|
|
<field name="model_id"/>
|
|
</list>
|
|
</field>
|
|
</record>
|
|
|
|
<!-- Stage Action -->
|
|
<record id="action_stage_stage" model="ir.actions.act_window">
|
|
<field name="name">Stages</field>
|
|
<field name="res_model">stage.stage</field>
|
|
<field name="view_mode">list</field>
|
|
</record>
|
|
|
|
<!-- Menu for Stages -->
|
|
|
|
</data>
|
|
</odoo>
|