odex30_standard/odex30_base/system_dashboard_classic/views/config.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.&#10;&#10;Examples:&#10;• 'employee_id.user_id' - For HR models (hr.leave, hr.expense, etc.)&#10;• 'user_id' - For models with direct user reference (purchase.order, etc.)&#10;• '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>