Initial commit: Core packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:45 +02:00
commit 12c29a983b
9512 changed files with 8379910 additions and 0 deletions

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Top menu item -->
<menuitem id="menu_board_root" name="Dashboards" sequence="260" web_icon="base,static/description/board.png" groups="base.group_user"/>
<menuitem id="menu_reporting_dashboard" name="Dashboards" parent="menu_board_root" sequence="0"/>
<menuitem id="menu_reporting_config" name="Configuration" parent="menu_board_root" sequence="100" groups="base.group_system"/>
<!-- Top menu item -->
<menuitem name="Settings"
id="menu_administration"
web_icon="base,static/description/settings.png"
sequence="550"
groups="base.group_erp_manager"/>
<menuitem id="menu_management" name="Apps" sequence="500" web_icon="base,static/description/modules.png" groups="base.group_system"/>
<menuitem id="menu_administration_shortcut" parent="menu_administration" name="Custom Shortcuts" sequence="50"/>
<!-- FYI The group no_one on 'User & Companies' and 'Translations' is a FP/APR request -->
<menuitem id="menu_users" name="Users &amp; Companies" parent="menu_administration" sequence="1"/>
<menuitem id="menu_translation" name="Translations" parent="menu_administration" sequence="2" groups="base.group_no_one"/>
<menuitem id="menu_translation_app" name="Application Terms" parent="menu_translation" sequence="4" groups="base.group_no_one"/>
<menuitem id="menu_translation_export" name="Import / Export" parent="menu_translation" sequence="3" groups="base.group_no_one"/>
<menuitem id="menu_config" name="General Settings" parent="menu_administration" sequence='3'/>
<menuitem id="menu_custom" name="Technical" parent="menu_administration" sequence="110" groups="base.group_no_one"/>
<menuitem id="next_id_2" name="User Interface" parent="menu_custom"/>
<menuitem id="menu_email" name="Email" parent="menu_custom" sequence="1"/>
<menuitem id="next_id_9" name="Database Structure" parent="base.menu_custom"/>
<menuitem id="menu_automation" name="Automation" parent="base.menu_custom"/>
<menuitem id="menu_security" name="Security" parent="menu_custom" sequence="25"/>
<menuitem id="menu_ir_property" name="Parameters" parent="menu_custom" sequence="24"/>
<menuitem id="base.menu_tests" name="Tests" sequence="1000" web_icon="test_exceptions,static/description/icon.svg"/>
<record model="ir.ui.menu" id="base.menu_administration">
<field name="groups_id" eval="[Command.set([ref('group_system'), ref('group_erp_manager')])]"/>
</record>
<record id="action_client_base_menu" model="ir.actions.client">
<field name="name">Open Settings Menu</field>
<field name="tag">reload</field>
<field name="params" eval="{'menu_id': ref('base.menu_administration')}"/>
</record>
<record id="open_menu" model="ir.actions.todo">
<field name="name">Open Menu</field>
<field name="action_id" ref="action_client_base_menu"/>
<field name="sequence">100</field>
<field name="state">done</field>
</record>
<record id="action_open_website" model="ir.actions.act_url">
<field name="name">Home Menu</field>
<field name="target">self</field>
<field name="url">/web</field>
</record>
</odoo>

View file

@ -0,0 +1,39 @@
<?xml version="1.0"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_decimal_precision_form">
<field name="name">Decimal Precision</field>
<field name="model">decimal.precision</field>
<field name="arch" type="xml">
<form string="Decimal Precision">
<sheet>
<group col="4">
<field name="name" attrs="{'readonly': [('id', '!=', False)]}"/>
<field name="digits"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_decimal_precision_tree">
<field name="name">Decimal Precision List</field>
<field name="model">decimal.precision</field>
<field name="arch" type="xml">
<tree string="Decimal Precision">
<field name="name"/>
<field name="digits"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_decimal_precision_form">
<field name="name">Decimal Accuracy</field>
<field name="res_model">decimal.precision</field>
</record>
<menuitem
parent="base.next_id_9"
id="menu_decimal_precision_form"
action="action_decimal_precision_form"/>
</data>
</odoo>

View file

@ -0,0 +1,469 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ir.actions -->
<record id="action_view" model="ir.ui.view">
<field name="name">ir.actions.actions</field>
<field name="model">ir.actions.actions</field>
<field name="arch" type="xml">
<form string="Action">
<sheet>
<group>
<field name="name"/>
<field name="type"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_view_tree" model="ir.ui.view">
<field name="name">ir.actions.actions.tree</field>
<field name="model">ir.actions.actions</field>
<field name="arch" type="xml">
<tree string="Action">
<field name="name"/>
<field name="type"/>
</tree>
</field>
</record>
<record id="action_view_search" model="ir.ui.view">
<field name="name">ir.actions.actions.search</field>
<field name="model">ir.actions.actions</field>
<field name="arch" type="xml">
<search string="Action">
<field name="name" filter_domain="['|', ('name','ilike',self), ('type','ilike',self)]" string="Action"/>
</search>
</field>
</record>
<record id="ir_sequence_actions" model="ir.actions.act_window">
<field name="name">Actions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.actions.actions</field>
<field name="view_id" ref="action_view_tree"/>
<field name="search_view_id" ref="action_view_search"/>
</record>
<menuitem id="next_id_6" name="Actions" parent="base.menu_custom" sequence="5"/>
<menuitem action="ir_sequence_actions" id="menu_ir_sequence_actions" parent="next_id_6"/>
<!-- ir.actions.report -->
<record id="act_report_xml_view" model="ir.ui.view">
<field name="name">ir.actions.report</field>
<field name="model">ir.actions.report</field>
<field name="arch" type="xml">
<form string="Report">
<field name="binding_model_id" invisible="1"/>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="create_action" string="Add in the 'Print' menu" type="object"
attrs="{'invisible':[('binding_model_id','!=',False)]}" icon="fa-plus-square"
help="Display an option on related documents to print this report" class="oe_stat_button"/>
<button name="unlink_action" string="Remove from the 'Print' menu" type="object"
attrs="{'invisible':[('binding_model_id','=',False)]}" icon="fa-minus-square"
help="Remove the contextual action related to this report" class="oe_stat_button"/>
<button name="associated_view" string="QWeb views" type="object"
attrs="{'invisible':[('report_type', 'not in', ['qweb-pdf', 'qweb-html', 'qweb-text'])]}" icon='fa-code'
class="oe_stat_button"/>
</div>
<group>
<group>
<field name="name"/>
<field name="report_type"/>
<field name="paperformat_id"
attrs="{'invisible':[('report_type','not in',['qweb-pdf'])]}"/>
</group>
<group>
<field name="model"/>
<field name="report_name"/>
<field name="print_report_name" />
</group>
</group>
<notebook>
<page name="security" string="Security">
<field name="groups_id"/>
</page>
<page name='advanced' string="Advanced Properties">
<group>
<field name="attachment_use"/>
<field name="attachment"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="act_report_xml_view_tree" model="ir.ui.view">
<field name="name">ir.actions.report.tree</field>
<field name="model">ir.actions.report</field>
<field name="arch" type="xml">
<tree string="Report xml">
<field name="name"/>
<field name="model"/>
<field name="type"/>
<field name="report_name"/>
<field name="report_type"/>
<field name="attachment"/>
</tree>
</field>
</record>
<record id="act_report_xml_search_view" model="ir.ui.view">
<field name="name">ir.actions.report.search</field>
<field name="model">ir.actions.report</field>
<field name="arch" type="xml">
<search string="Report Xml">
<field name="name"
filter_domain="['|', '|', '|', '|', ('name','ilike',self), ('model','ilike',self), ('type','ilike',self), ('report_name','ilike',self), ('report_type','ilike',self)]"
string="Report"/>
<field name="model" filter_domain="[('model','=', self)]" string="Model"/>
<group expand="0" string="Group By" colspan="4">
<filter string="Report Type" name="report_type" domain="[]" context="{'group_by':'report_type'}"/>
<filter string="Report Model" name="report_model" domain="[]" context="{'group_by':'model'}"/>
</group>
</search>
</field>
</record>
<record id="ir_action_report" model="ir.actions.act_window">
<field name="name">Reports</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.actions.report</field>
<field name="view_id" ref="act_report_xml_view_tree"/>
<field name="search_view_id" ref="act_report_xml_search_view"/>
</record>
<menuitem action="ir_action_report" id="menu_ir_action_report" parent="base.next_id_6"/>
<!-- ir.actions.act_window -->
<record id="view_window_action_tree" model="ir.ui.view">
<field name="name">ir.actions.windows.tree</field>
<field name="model">ir.actions.act_window</field>
<field name="arch" type="xml">
<tree string="Open Window">
<field name="name"/>
<field name="res_model"/>
<field name="view_id"/>
<field name="domain"/>
<field name="context"/>
</tree>
</field>
</record>
<record id="view_window_action_form" model="ir.ui.view">
<field name="name">ir.actions.windows.form</field>
<field name="model">ir.actions.act_window</field>
<field name="arch" type="xml">
<form string="Open a Window">
<sheet>
<group>
<group name="main_details">
<field name="name"/>
<field name="xml_id" string="External ID"/>
<field name="res_model" string="Object"/>
</group>
<group name="action_details">
<field name="usage"/>
<field name="type" readonly="1"/>
<field name="target"/>
</group>
</group>
<notebook>
<page name="general_settings" string="General Settings">
<group>
<group name="views" string="Views">
<field name="view_mode"/>
<field name="view_id"/>
<field name="search_view_id"/>
</group>
<group name="filters" string="Filters">
<field name="domain"/>
<field name="context"/>
<field name="limit"/>
<field name="filter"/>
</group>
</group>
<group name="help" string="Help">
<field colspan="2" name="help" nolabel="1" class="oe-bordered-editor"/>
</group>
<group name="views_tree" string="Views">
<field colspan="2" name="view_ids" nolabel="1">
<form string="Views">
<group>
<field name="sequence"/>
<field name="view_mode"/>
<field domain="[('type', '=', view_mode)]" name="view_id"/>
</group>
</form>
<tree string="Views">
<field name="sequence" widget="handle"/>
<field name="view_mode"/>
<field name="view_id"/>
</tree>
</field>
</group>
</page>
<page string="Security" name="security">
<field name="groups_id"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_window_action_search" model="ir.ui.view">
<field name="name">ir.actions.windows.search</field>
<field name="model">ir.actions.act_window</field>
<field name="arch" type="xml">
<search string="Open a Window">
<field name="name" filter_domain="['|', ('name','ilike',self), ('res_model','ilike',self)]" string="Action"/>
</search>
</field>
</record>
<record id="ir_action_window" model="ir.actions.act_window">
<field name="name">Window Actions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.actions.act_window</field>
<field name="search_view_id" ref="view_window_action_search"/>
</record>
<record id="ir_action_window_view1" model="ir.actions.act_window.view">
<field eval="1" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_window_action_tree"/>
<field name="act_window_id" ref="ir_action_window"/>
</record>
<record id="ir_action_window_view2" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_window_action_form"/>
<field name="act_window_id" ref="ir_action_window"/>
</record>
<menuitem action="ir_action_window" id="menu_ir_action_window" parent="base.next_id_6"/>
<!-- ir.actions.server -->
<record id="view_server_action_form" model="ir.ui.view">
<field name="name">Server Action</field>
<field name="model">ir.actions.server</field>
<field name="arch" type="xml">
<form string="Server Action">
<header>
<field name="binding_model_id" invisible="1"/>
<button name="create_action" string="Create Contextual Action" type="object"
class="btn-primary"
attrs="{'invisible':[('binding_model_id','!=',False)]}"
help="Display an option in the 'More' top-menu in order to run this action."/>
<button name="unlink_action" string="Remove Contextual Action" type="object"
attrs="{'invisible':[('binding_model_id','=',False)]}"
help="Remove 'More' top-menu contextual action related to this action"/>
<button name="run" string="Run" type="object"
class="btn-primary"
attrs="{'invisible':['|', ('model_id', '!=', %(base.model_ir_actions_server)s), ('state', '!=', 'code')]}"
help="Run this action manually."/>
</header>
<sheet>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Update order quantity"/></h1>
</div>
<group name="action_wrapper">
<group name="action_content">
<field name="model_id" options="{'no_create': True}"/>
<field name="model_name" invisible="1"/>
</group>
<group>
<field name="state"/>
<field name="type" invisible="1"/>
<field name="crud_model_id"
options="{'no_create': True}"
attrs="{'invisible': [('state', '!=', 'object_create')], 'required': [('state', '=', 'object_create')]}"/>
<field name="crud_model_name" invisible="1"/>
<field name="link_field_id"
domain="[('model_id', '=', model_id), ('relation', '=', crud_model_name),
('ttype', 'in', ['many2one', 'one2many', 'many2many'])]"
options="{'no_create': True}"
attrs="{'invisible': [('state', '!=', 'object_create')]}"
context="{'default_model_id': model_id, 'default_relation': crud_model_name}"/>
</group>
</group>
<notebook>
<page string="Python Code" name='code'
attrs="{'invisible': [('state', '!=', 'code')]}">
<field name="code" widget="ace" options="{'mode': 'python'}" placeholder="Enter Python code here. Help about Python expression is available in the help tab of this document."/>
</page>
<page string="Data to Write" name="page_object"
attrs="{'invisible':[('state', 'not in', ['object_create', 'object_write'])]}">
<p attrs="{'invisible': [('model_id', '!=', False)]}">
Please set the Model to Create before choosing values
</p>
<field name="fields_lines">
<tree string="Field Mappings" editable="bottom">
<field name="col1"
options="{'no_create': True}"
domain="['|', ('model_id', '=', parent.crud_model_id), ('model_id', '=', parent.model_id)]"/>
<field name="evaluation_type"/>
<field name="resource_ref"
options="{'hide_model': True, 'no_create': True}"
attrs="{'readonly': [('evaluation_type', '!=', 'reference')]}"/>
<field name="value"
attrs="{'readonly': [('evaluation_type', '=', 'reference')]}"
options="{'no_create': True}"
force_save="1"/>
</tree>
</field>
</page>
<page name="security" string="Security">
<field name="groups_id"/>
</page>
<page string="Actions" name="actions"
attrs="{'invisible': [('state', '!=', 'multi')]}">
<p class="oe_grey">
If several child actions return an action, only the last one will be executed.
This may happen when having server actions executing code that returns an action, or server actions returning a client action.
</p>
<field name="child_ids" domain="[('model_id', '=', model_id)]"/>
</page>
<page string="Help" name="help_info"
attrs="{'invisible': [('state', '!=', 'code')]}">
<div style="margin-top: 4px;">
<h3>Help with Python expressions</h3>
<p>Various fields may use Python code or Python expressions. The following variables can be used:</p>
<ul>
<li><code>env</code>: Odoo Environment on which the action is triggered</li>
<li><code>model</code>: Odoo Model of the record on which the action is triggered; is a void recordset</li>
<li><code>record</code>: record on which the action is triggered; may be be void</li>
<li><code>records</code>: recordset of all records on which the action is triggered in multi mode; may be void</li>
<li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li>
<li><code>log(message, level='info')</code>: logging function to record debug information in <code>ir.logging</code> table</li>
<li><code>UserError</code>: Warning Exception to use with <code>raise</code></li>
<li><code>Command</code>: x2Many commands namespace</li>
<li>To return an action, assign: <code>action = {...}</code></li>
</ul>
<div attrs="{'invisible': [('state', '!=', 'code')]}">
<p>Example of Python code</p>
<code style='white-space: pre-wrap'>
partner_name = record.name + '_code' \n
env['res.partner'].create({'name': partner_name})
</code>
</div>
</div>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_server_action_tree" model="ir.ui.view">
<field name="name">Server Actions</field>
<field name="model">ir.actions.server</field>
<field name="arch" type="xml">
<tree string="Server Actions">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="state"/>
<field name="model_id"/>
<field name="usage"/>
</tree>
</field>
</record>
<record id="view_server_action_search" model="ir.ui.view">
<field name="name">ir.actions.server.search</field>
<field name="model">ir.actions.server</field>
<field name="arch" type="xml">
<search string="Server Actions">
<field name="name" string="Server Action"/>
<field name="model_id"/>
<field name="state"/>
<group expand="0" string="Group By" colspan="4" col="4">
<filter string="Action Type" name="action_type" domain="[]" context="{'group_by':'state'}"/>
<filter string="Model" name="model" domain="[]" context="{'group_by':'model_id'}"/>
<filter string="Usage" name="usage" domain="[]" context="{'group_by':'usage'}"/>
</group>
</search>
</field>
</record>
<record id="action_server_action" model="ir.actions.act_window">
<field name="name">Server Actions</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.actions.server</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="view_server_action_tree"/>
<field name="search_view_id" ref="view_server_action_search"/>
<field name="context">{'key':'server_action'}</field>
</record>
<menuitem action="action_server_action" id="menu_server_action" parent="base.next_id_6"/>
<!-- ir.actions.todo -->
<record id="ir_actions_todo_tree" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">Config Wizard Steps</field>
<field name="arch" type="xml">
<tree string="Config Wizard Steps">
<field name="sequence" widget='handle'/>
<field name="action_id"/>
<field name="state" readonly="1"/>
<button name="action_launch" states="open" string="Launch" type="object" icon="fa-cogs" help="Launch Configuration Wizard"/>
<button name="action_open" states="done"
string="Todo" type="object" help="Set as Todo"
icon="fa-exchange"/>
</tree>
</field>
</record>
<record id="config_wizard_step_view_form" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">Config Wizard Steps</field>
<field name="arch" type="xml">
<form string="Config Wizard Steps">
<header>
<button name="action_launch"
states="open" string="Launch"
type="object" icon="fa-cogs" class="oe_highlight"
help="Launch Configuration Wizard"/>
<button name="action_open" states="done"
string="Set as Todo" type="object"
icon="fa-exchange" class="oe_highlight"/>
<field name="state" widget="statusbar" statusbar_visible="open,done" nolabel="1" readonly="1" />
</header>
<sheet>
<group col="4">
<field name="action_id"/>
<field name="sequence"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="config_wizard_step_view_search" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">ir.actions.todo.select</field>
<field name="arch" type="xml">
<search string="Search Actions">
<filter string="To Do" name="todo" domain=" [('state','=','open')]" help="Wizards to be Launched"/>
<field name="action_id"/>
<field name="state"/>
</search>
</field>
</record>
<record id="act_ir_actions_todo_form" model="ir.actions.act_window">
<field name="name">Configuration Wizards</field>
<field name="res_model">ir.actions.todo</field>
<field name="view_id" ref="ir_actions_todo_tree"/>
<field name="help">The configuration wizards are used to help you configure a new instance of Odoo. They are launched during the installation of new modules, but you can choose to restart some wizards manually from this menu.</field>
</record>
<menuitem id="menu_ir_actions_todo_form" action="act_ir_actions_todo_form" parent="base.next_id_6"/>
<record id="action_run_ir_action_todo" model="ir.actions.server">
<field name="name">Config: Run Remaining Action Todo</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_res_config"/>
<field name="state">code</field>
<field name="code">
config = model.next() or {}
if config.get('type') not in ('ir.actions.act_window_close',):
action = config
</field>
</record>
</odoo>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="asset_view_form" model="ir.ui.view">
<field name="model">ir.asset</field>
<field name="arch" type="xml">
<form string="Assets">
<sheet>
<group>
<group>
<field name="name"/>
<field name="bundle"/>
<field name="directive"/>
<field name="sequence"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<field name="target" attrs="{'invisible': [('directive', 'not in', ['after', 'before', 'replace'])]}"/>
<field name="path"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="asset_view_tree" model="ir.ui.view">
<field name="model">ir.asset</field>
<field name="arch" type="xml">
<tree string="Assets">
<field name="name"/>
<field name="bundle"/>
<field name="sequence"/>
<field name="active"/>
</tree>
</field>
</record>
<record id="asset_view_search" model="ir.ui.view">
<field name="model">ir.asset</field>
<field name="arch" type="xml">
<search string="Assets">
<field name="name"/>
<field name="bundle"/>
<field name="directive"/>
<field name="sequence"/>
<field name="path"/>
<filter string="Active" name="active" domain="[('active', '=', True)]"/>
</search>
</field>
</record>
<record id="action_asset" model="ir.actions.act_window">
<field name="name">Assets</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.asset</field>
<field name="view_id" ref="asset_view_tree"/>
<field name="context">{'search_default_active': 1}</field>
</record>
<menuitem action="action_asset" id="menu_action_asset" parent="base.next_id_9"/>
</odoo>

View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Attachment -->
<record id="view_attachment_form" model="ir.ui.view">
<field name="model">ir.attachment</field>
<field name="arch" type="xml">
<form string="Attachments">
<sheet>
<label for="name"/>
<h1>
<field name="name"/>
</h1>
<group>
<group>
<field name="type"/>
<field name="datas" filename="name" attrs="{'invisible':[('type','=','url')]}"/>
<field name="url" widget="url" attrs="{'invisible':[('type','=','binary')]}"/>
<field name="mimetype" groups="base.group_no_one"/>
</group>
<group string="Attached To" groups="base.group_no_one">
<field name="res_model"/>
<field name="res_field"/>
<field name="res_id"/>
<field name="res_name"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
<field name="public"/>
</group>
<group string="History" groups="base.group_no_one" attrs="{'invisible':[('create_date','=',False)]}">
<label for="create_uid" string="Creation"/>
<div name="creation_div">
<field name="create_uid" readonly="1" class="oe_inline"/> on
<field name="create_date" readonly="1" class="oe_inline"/>
</div>
</group>
<group name="description_group" string="Description" groups="base.group_no_one" colspan="4">
<field name="description" nolabel="1" colspan="2"/>
</group>
<group groups="base.group_no_one" string="Indexed Content" colspan="4">
<field name="index_content" nolabel="1" colspan="2"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_attachment_tree" model="ir.ui.view">
<field name="model">ir.attachment</field>
<field name="arch" type="xml">
<tree string="Attachments">
<field name="name"/>
<field name="res_model"/>
<field name="res_field"/>
<field name="res_id"/>
<field name="type"/>
<field name="file_size"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="create_uid"/>
<field name="create_date"/>
</tree>
</field>
</record>
<record id="view_attachment_search" model="ir.ui.view">
<field name="model">ir.attachment</field>
<field name="arch" type="xml">
<search string="Attachments">
<field name="name" filter_domain="[('name','ilike',self)]" string="Attachment"/>
<field name="create_date"/>
<filter name="my_documents_filter"
string="My Document(s)"
domain="[('create_uid','=',uid)]"
help="Filter on my documents"/>
<filter name="url_filter" string="URL" domain="[('type', '=', 'url')]"/>
<filter name="binary_filter" string="Stored" domain="[('type', '=', 'binary')]"/>
<separator/>
<field name="create_uid" string="Created by"/>
<field name="type"/>
<group expand="0" string="Group By">
<filter name="owner" string="Owner" domain="[]" context="{'group_by':'create_uid'}"/>
<filter string="Type" name="type" domain="[]" context="{'group_by':'type'}" groups="base.group_no_one"/>
<filter string="Company" name="company" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Creation Date" name="creation_month" domain="[]" context="{'group_by':'create_date'}"/>
</group>
</search>
</field>
</record>
<record id="action_attachment" model="ir.actions.act_window">
<field name="name">Attachments</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.attachment</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="view_attachment_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new document
</p>
<p>
Also you will find here all the related documents and download it by clicking on any individual document.
</p>
</field>
</record>
<menuitem action="action_attachment" id="menu_action_attachment" parent="base.next_id_9"/>
</odoo>

View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="view_ir_config_search">
<field name="model">ir.config_parameter</field>
<field name="arch" type="xml">
<search string="System Properties">
<field name="key" string="Key"/>
<field name="value"/>
</search>
</field>
</record>
<record model="ir.ui.view" id="view_ir_config_list">
<field name="model">ir.config_parameter</field>
<field name="arch" type="xml">
<tree string="System Parameters">
<field name="key"/>
<field name="value"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_ir_config_form">
<field name="model">ir.config_parameter</field>
<field name="arch" type="xml">
<form string="System Parameters">
<sheet>
<group>
<field name="key"/>
<field name="value"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_config_list_action" model="ir.actions.act_window">
<field name="name">System Parameters</field>
<field name="res_model">ir.config_parameter</field>
</record>
<menuitem id="ir_config_menu" name="System Parameters" parent="menu_ir_property" action="ir_config_list_action"/>
</odoo>

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_cron_trigger_view_form" model="ir.ui.view">
<field name="name">ir.cron.trigger.view.form</field>
<field name="model">ir.cron.trigger</field>
<field name="arch" type="xml">
<form string="Cron Trigger">
<sheet>
<group>
<field name="cron_id"/>
<field name="call_at"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_cron_trigger_view_tree" model="ir.ui.view">
<field name="name">ir.cron.trigger.view.tree</field>
<field name="model">ir.cron.trigger</field>
<field name="arch" type="xml">
<tree string="Cron Triggers">
<field name="cron_id"/>
<field name="call_at"/>
</tree>
</field>
</record>
<record id="ir_cron_trigger_view_search" model="ir.ui.view">
<field name="name">ir.cron.trigger.view.search</field>
<field name="model">ir.cron.trigger</field>
<field name="arch" type="xml">
<search string="Cron Triggers">
<field name="cron_id"/>
<field name="call_at"/>
</search>
</field>
</record>
<record id="ir_cron_trigger_action" model="ir.actions.act_window">
<field name="name">Scheduled Actions Triggers</field>
<field name="res_model">ir.cron.trigger</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="ir_cron_trigger_menu"
action="ir_cron_trigger_action"
parent="base.menu_automation"
sequence="3"/>
</odoo>

View file

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ir.cron -->
<record id="ir_cron_view_form" model="ir.ui.view">
<field name="name">ir.cron.view.form</field>
<field name="model">ir.cron</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="base.view_server_action_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='create_action']" position="replace">
<button name="method_direct_trigger" type="object" string="Run Manually" class="oe_highlight" attrs="{'invisible': [('state', '!=', 'code')]}"/>
</xpath>
<xpath expr="//button[@name='unlink_action']" position="replace">
</xpath>
<xpath expr="//button[@name='run']" position="replace">
</xpath>
<xpath expr="//group[@name='action_content']" position="inside">
<field name="user_id"/>
<label for="interval_number" string="Execute Every"/>
<div>
<field name="interval_number" class="oe_inline"/>
<field name="interval_type" class="oe_inline"/>
</div>
<field name="active" widget="boolean_toggle"/>
<field name="nextcall"/>
<field name="numbercall"/>
<field name="priority"/>
<field name="doall"/>
</xpath>
<field name="state" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<record id="ir_cron_view_tree" model="ir.ui.view">
<field name="model">ir.cron</field>
<field name="arch" type="xml">
<tree string="Scheduled Actions" decoration-muted="(not active)">
<field name="priority"/>
<field name="name"/>
<field name="model_id"/>
<field name="nextcall"/>
<field name="interval_number"/>
<field name="interval_type"/>
<field name="numbercall"/>
<field name="user_id" invisible="1"/>
<field name="active"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="ir_cron_view_calendar">
<field name="model">ir.cron</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Scheduled Actions" date_start="nextcall" color="user_id">
<field name="name"/>
<field name="user_id" filters="1" invisible="1"/>
</calendar>
</field>
</record>
<record id="ir_cron_view_search" model="ir.ui.view">
<field name="model">ir.cron</field>
<field name="arch" type="xml">
<search string="Scheduled Actions">
<field name="name" string="Scheduled Action"/>
<field name="user_id"/>
<field name="model_id"/>
<field name="nextcall"/>
<field name="active"/>
<separator/>
<filter string="All" name="all" domain="['|', ('active', '=', False), ('active', '=', True)]" />
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By">
<filter string="User" name="user" domain="[]" context="{'group_by': 'user_id'}"/>
<filter string="Execution" name="execution" domain="[]" context="{'group_by': 'nextcall'}" />
<filter string="Model" name="groupby_model_id" domain="[]" context="{'group_by': 'model_id'}"/>
</group>
</search>
</field>
</record>
<record id="ir_cron_act" model="ir.actions.act_window">
<field name="name">Scheduled Actions</field>
<field name="res_model">ir.cron</field>
<field name="view_mode">tree,form,calendar</field>
<field name="context">{'search_default_all': 1}</field>
<field name="view_id" ref="ir_cron_view_tree"/>
</record>
<menuitem id="menu_ir_cron_act"
parent="base.menu_automation"
action="ir_cron_act"
sequence="2"/>
</odoo>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_default_form_view" model="ir.ui.view">
<field name="name">ir.default form view</field>
<field name="model">ir.default</field>
<field name="arch" type="xml">
<form string="User-defined Defaults">
<sheet>
<group>
<group name="field_value">
<field name="field_id" options="{'no_create': True}"/>
<field name="json_value"/>
<field name="condition"/>
</group>
<group name="user_company_details">
<field name="user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_default_tree_view" model="ir.ui.view">
<field name="name">ir.default tree view</field>
<field name="model">ir.default</field>
<field name="arch" type="xml">
<tree string="User-defined Defaults">
<field name="field_id"/>
<field name="json_value"/>
<field name="condition" optional="hide"/>
<field name="user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
<record id="ir_default_search_view" model="ir.ui.view">
<field name="name">ir.default search view</field>
<field name="model">ir.default</field>
<field name="arch" type="xml">
<search string="User-defined Defaults">
<field name="field_id"/>
<field name="user_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<group expand="0" string="Group By">
<filter string="User" name="groupby_user" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Company" name="groupby_company" domain="[]" context="{'group_by':'company_id'}"/>
</group>
</search>
</field>
</record>
<record id="ir_default_menu_action" model="ir.actions.act_window">
<field name="name">User-defined Defaults</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.default</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="ir_default_search_view"/>
</record>
<menuitem action="ir_default_menu_action" id="ir_default_menu" parent="next_id_6"/>
</odoo>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="ir_filters_view_form" model="ir.ui.view">
<field name="model">ir.filters</field>
<field name="arch" type="xml">
<form string="Filters">
<sheet>
<group col="4">
<field name="name"/>
<field name="user_id" string="Available for User"/>
<field name="model_id"/>
<field name="is_default"/>
<field name="action_id"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<field name="domain" widget="domain" options="{'model': 'model_id'}"/>
<field name="context"/>
<field name="sort"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_filters_view_tree" model="ir.ui.view">
<field name="model">ir.filters</field>
<field name="arch" type="xml">
<tree string="Filters">
<field name="name"/>
<field name="model_id"/>
<field name="user_id"/>
<field name="is_default"/>
<field name="action_id"/>
<field name="domain" groups="base.group_no_one"/>
<field name="context" groups="base.group_no_one"/>
<field name="sort" groups="base.group_no_one"/>
</tree>
</field>
</record>
<record id="ir_filters_view_search" model="ir.ui.view">
<field name="model">ir.filters</field>
<field name="arch" type="xml">
<search string="Filters">
<field name="name" string="Filter Name"/>
<filter string="User" domain="[('user_id','!=',False)]" name="user" help="Filters visible only for one user"/>
<filter string="Shared" domain="[('user_id','=',False)]" name="shared" help="Filters shared with all users"/>
<filter string="My filters" domain="[('user_id','=',uid)]" name="my_filters" help="Filters created by myself"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By">
<filter string="User" name="user" domain="[]" context="{'group_by':'user_id'}"/>
<filter string="Model" name="model" domain="[]" context="{'group_by':'model_id'}"/>
</group>
<field name="model_id"/>
<field name="user_id"/>
</search>
</field>
</record>
<record id="actions_ir_filters_view" model="ir.actions.act_window">
<field name="name">User-defined Filters</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.filters</field>
</record>
<menuitem parent="base.next_id_2" name="User-defined Filters"
id="menu_ir_filters" action="actions_ir_filters_view" sequence="5"/>
</data>
</odoo>

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record model="ir.ui.view" id="ir_logging_form_view">
<field name="model">ir.logging</field>
<field name="arch" type="xml">
<form string="Log">
<sheet>
<group name="creation_details" string="Creation details">
<field name="create_date" />
<field name="create_uid" />
<field name="dbname" />
</group>
<group name="log_details" string="Logging details">
<field name="type" />
<field name="name" />
<field name="level" />
<field name="path" />
<field name="line" />
<field name="func" />
<field name="message" />
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="ir_logging_tree_view">
<field name="model">ir.logging</field>
<field name="arch" type="xml">
<tree string="Logs">
<field name="create_date" />
<field name="create_uid" />
<field name="dbname" />
<field name="type" />
<field name="name" />
<field name="level" />
<field name="path" />
<field name="line" />
<field name="func" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="ir_logging_search_view">
<field name="model">ir.logging</field>
<field name="arch" type="xml">
<search string="Logs">
<field name="dbname" />
<field name="type" />
<field name="name" />
<field name="level" />
<field name="message" />
<group expand="0" string="Group By">
<filter string="Database" name="database" domain="[]" context="{'group_by': 'dbname'}" />
<filter string="Level" name="group_by_level" domain="[]" context="{'group_by': 'level'}" />
<filter string="Type" name="group_by_type" domain="[]" context="{'group_by': 'type'}" />
<filter string="Creation Date" name="group_by_month" domain="[]" context="{'group_by': 'create_date'}" />
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="ir_logging_all_act">
<field name="name">Logging</field>
<field name="res_model">ir.logging</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="ir_logging_search_view" />
</record>
<menuitem parent="base.next_id_9" id="ir_logging_all_menu" action="ir_logging_all_act" />
</odoo>

View file

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ir.mail.server -->
<record model="ir.ui.view" id="ir_mail_server_form">
<field name="model">ir.mail_server</field>
<field name="arch" type="xml">
<form string="Outgoing Mail Servers">
<header>
<button string="Test Connection" type="object"
name="test_smtp_connection" class="btn-primary"/>
</header>
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<group>
<field name="name" placeholder="e.g. My Outgoing Server"/>
<field name="from_filter"/>
</group>
<group>
<field name="sequence"/>
<field name="active" invisible="1"/>
</group>
</group>
<group>
<group>
<field name="smtp_authentication" widget="radio"/>
</group>
<group>
<div class="text-muted fst-italic" role="alert" colspan="2"
attrs="{'invisible': [('smtp_authentication_info', '=', False)]}">
<field name="smtp_authentication_info"/>
</div>
</group>
</group>
<notebook colspan="4">
<page name="connection" string="Connection">
<group>
<group>
<field name="smtp_encryption" widget="radio"/>
<field name="smtp_host"/>
<field name="smtp_port" options="{'format': false}"/>
<field name="smtp_debug" groups="base.group_no_one"/>
</group>
<group>
<field name="smtp_user" attrs="{'invisible': [('smtp_authentication', '=', 'certificate')]}" force_save="1"/>
<field name="smtp_pass" attrs="{'invisible': [('smtp_authentication', '!=', 'login')]}" password="True" force_save="1"/>
<field name="smtp_ssl_certificate" attrs="{'invisible': [('smtp_authentication', '!=', 'certificate')]}" force_save="1"/>
<field name="smtp_ssl_private_key" attrs="{'invisible': [('smtp_authentication', '!=', 'certificate')]}" force_save="1"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="ir_mail_server_list">
<field name="model">ir.mail_server</field>
<field name="arch" type="xml">
<tree string="Outgoing Mail Servers">
<field name="sequence"/>
<field name="name"/>
<field name="smtp_host"/>
<field name="smtp_user"/>
<field name="smtp_encryption"/>
<field name="from_filter" optional="hide"/>
</tree>
</field>
</record>
<record id="view_ir_mail_server_search" model="ir.ui.view">
<field name="model">ir.mail_server</field>
<field name="arch" type="xml">
<search string="Outgoing Mail Servers">
<field name="name"
filter_domain="['|', '|',
('name', 'ilike', self),
('smtp_host', 'ilike', self),
('smtp_user', 'ilike', self)]"
string="Outgoing Mail Server"/>
<field name="smtp_encryption"/>
<field name="from_filter"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_ir_mail_server_list">
<field name="name">Outgoing Mail Servers</field>
<field name="res_model">ir.mail_server</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="ir_mail_server_list" />
<field name="search_view_id" ref="view_ir_mail_server_search"/>
</record>
<menuitem id="menu_mail_servers" parent="menu_email" action="action_ir_mail_server_list" sequence="5" groups="base.group_no_one"/>
</odoo>

View file

@ -0,0 +1,708 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- menu_create from model form -->
<record id="view_model_menu_create" model="ir.ui.view">
<field name="name">Create Menu</field>
<field name="model">wizard.ir.model.menu.create</field>
<field name="arch" type="xml">
<form string="Create Menu">
<group>
<field name="name"/>
<field name="menu_id"/>
</group>
<footer>
<button name="menu_create" string="Create Menu" type="object" class="btn-primary" data-hotkey="q"/>
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z" />
</footer>
</form>
</field>
</record>
<record id="act_menu_create" model="ir.actions.act_window">
<field name="name">Create Menu</field>
<field name="res_model">wizard.ir.model.menu.create</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="context">{'model_id': active_id}</field>
</record>
<!-- model -->
<record id="view_model_form" model="ir.ui.view">
<field name="model">ir.model</field>
<field name="arch" type="xml">
<form string="Model Description">
<header><!-- used for override --></header>
<sheet>
<group>
<group>
<field name="id" invisible="1"/>
<field name="name"/>
<field name="model" attrs="{'readonly': [('id', '!=', False)]}"/>
<field name="order"/>
<field name="transient" attrs="{'readonly': [('id', '!=', False)]}" groups="base.group_no_one"/>
</group>
<group>
<field name="state" readonly="1" groups="base.group_no_one"/>
<field name="modules" groups="base.group_no_one"/>
</group>
</group>
<notebook>
<page string="Fields" name="fields">
<field name="field_id">
<tree string="Fields Description">
<field name="name"/>
<field name="field_description"/>
<field name="ttype"/>
<field name="required"/>
<field name="readonly"/>
<field name="index" groups="base.group_no_one"/>
<field name="state" groups="base.group_no_one"/>
</tree>
<form string="Fields Description">
<group>
<group>
<field name="name"/>
<field name="field_description"/>
</group>
<group>
<field name="ttype"/>
<field name="help"/>
</group>
</group>
<notebook>
<page name="base" string="Properties">
<group string="Base Properties">
<group>
<field name="required"/>
<field name="readonly"/>
<field name="store" groups="base.group_no_one"/>
<field name="index" groups="base.group_no_one"/>
<field name="copied" groups="base.group_no_one"/>
</group>
<group>
<field name="translate"
attrs="{'readonly': [('ttype','not in',['char','text','html'])],
'invisible': [('ttype','not in',['char','text','html'])]}"/>
<field name="size" groups="base.group_no_one"
attrs="{'readonly': [('ttype','not in',['char','reference'])],
'invisible': [('ttype','not in',['char','reference'])]}"/>
<field name="relation"
attrs="{'required': [('ttype','in',['many2one','one2many','many2many'])],
'readonly': [('ttype','not in',['many2one','one2many','many2many'])],
'invisible': [('ttype','not in',['many2one','one2many','many2many'])]}"/>
<field name="on_delete" groups="base.group_no_one"
attrs="{'readonly': [('ttype','!=','many2one')],
'invisible': [('ttype','!=','many2one')]}"/>
<field name="relation_field"
attrs="{'required': [('ttype','=','one2many')],
'readonly': [('ttype','!=','one2many')],
'invisible': [('ttype','!=','one2many')]}"/>
<field name="relation_table" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="column1" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="column2" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="domain" groups="base.group_no_one"
attrs="{'readonly': [('ttype','not in',['many2one','one2many','many2many'])],
'invisible': [('ttype','not in',['many2one','one2many','many2many'])]}"/>
</group>
</group>
<group attrs="{'readonly': [('ttype','not in',['selection','reference'])],
'invisible': [('ttype','not in',['selection','reference'])]}">
<field name="selection_ids">
<tree editable="bottom">
<field name="sequence" widget="handle"/>
<field name="value"/>
<field name="name"/>
</tree>
</field>
</group>
<group string="Advanced Properties" groups="base.group_no_one">
<field name="related"/>
<field name="depends" attrs="{'required': [('compute', 'not in', [False, ''])]}"/>
<field name="compute" widget="ace" options="{'mode': 'python'}"/>
</group>
<div groups="base.group_no_one">
<h3>How to define a computed field</h3>
<p>Computed fields are defined with the fields
<strong>Dependencies</strong> and <strong>Compute</strong>.</p>
<p>The field <strong>Dependencies</strong> lists the fields that
the current field depends on. It is a comma-separated list of
field names, like <code>name, size</code>. You can also refer to
fields accessible through other relational fields, for instance
<code>partner_id.company_id.name</code>.</p>
<p>The field <strong>Compute</strong> is the Python code to
compute the value of the field on a set of records. The value of
the field must be assigned to each record with a dictionary-like
assignment.</p>
<pre>
for record in self:
record['size'] = len(record.name)
</pre>
<p>The only predefined variables are</p>
<ul>
<li><code>self</code> (the set of records to compute)</li>
<li><code>datetime</code> (Python module)</li>
<li><code>dateutil</code> (Python module)</li>
<li><code>time</code> (Python module)</li>
</ul>
<p>Other features are accessible through <code>self</code>, like
<code>self.env</code>, etc.</p>
</div>
</page>
<page name="groups" string="Access Rights">
<field name="groups"/>
</page>
<page name="misc" string="Miscellaneous" groups="base.group_no_one">
<group>
<field name="state"/>
<field name="modules"/>
</group>
</page>
</notebook>
</form>
</field>
<button groups="base.group_no_one"
icon="fa-align-justify"
name="%(act_menu_create)d"
string="Create a Menu" type="action"
target="new" />
</page>
<page string="Access Rights" name="access_rights">
<field name="access_ids">
<tree string="Access Rights" editable="top"
decoration-warning="not group_id and
(perm_read or perm_write or
perm_create or perm_unlink)">
<field name="name"/>
<field name="group_id"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</page>
<page string="Record Rules" name="record_rules">
<field name="rule_ids">
<tree string="Record Rules" editable="top" decoration-info="not groups">
<field name="name"/>
<field name="groups" widget="many2many_tags" options="{'no_create':True}"/>
<field name="domain_force"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</page>
<page string="Notes" name="notes" groups="base.group_no_one">
<field name="info"/>
</page>
<page string="Views" name="views" groups="base.group_no_one">
<field name="view_ids"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_model_tree" model="ir.ui.view">
<field name="model">ir.model</field>
<field name="arch" type="xml">
<tree string="Model Description">
<field name="model"/>
<field name="name"/>
<field name="state"/>
<field name="transient"/>
</tree>
</field>
</record>
<record id="view_model_search" model="ir.ui.view">
<field name="model">ir.model</field>
<field name="arch" type="xml">
<search string="Model Description">
<field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="Model"/>
<field name="model" filter_domain="[('model','ilike',self)]" string="Technical Name"/>
<filter string="Transient" name="transient" domain="[('transient', '=', True)]"/>
<separator/>
<filter string="Custom" name="custom" domain="[('state', '=', 'manual')]"/>
<filter string="Base" name="base" domain="[('state', '=', 'base')]"/>
</search>
</field>
</record>
<record id="action_model_model" model="ir.actions.act_window">
<field name="name">Models</field>
<field name="res_model">ir.model</field>
<field name="context">{}</field>
<field name="view_id" ref="view_model_tree"/>
</record>
<menuitem action="action_model_model" id="ir_model_model_menu" parent="next_id_9"/>
<!-- ir model fields -->
<record id="view_model_fields_form" model="ir.ui.view">
<field name="model">ir.model.fields</field>
<field name="arch" type="xml">
<form string="Fields" duplicate="false">
<field name="state" invisible="1"/>
<sheet>
<group>
<group>
<field name="name"/>
<field name="field_description"/>
<field name="model_id" attrs="{'readonly': [('state','!=', 'manual')]}"/>
</group>
<group>
<field name="ttype"/>
<field name="help"/>
</group>
</group>
<notebook>
<page name="base" string="Properties">
<group string="Base Properties">
<group>
<field name="required"/>
<field name="readonly"/>
<field name="store" groups="base.group_no_one"/>
<field name="index" groups="base.group_no_one"/>
<field name="copied" groups="base.group_no_one"/>
</group>
<group>
<field name="translate"
attrs="{'readonly': [('ttype','not in',['char','text','html'])],
'invisible': [('ttype','not in',['char','text','html'])]}"/>
<field name="size" groups="base.group_no_one"
attrs="{'readonly': [('ttype','not in',['char','reference'])],
'invisible': [('ttype','not in',['char','reference'])]}"/>
<field name="relation"
attrs="{'required': [('ttype','in',['many2one','one2many','many2many'])],
'readonly': [('ttype','not in',['many2one','one2many','many2many'])],
'invisible': [('ttype','not in',['many2one','one2many','many2many'])]}"/>
<field name="group_expand" groups="base.group_no_one"
attrs="{'readonly': [('ttype','not in', ['many2one', 'selection'])],
'invisible': [('ttype','not in', ['many2one', 'selection'])]}"/>
<field name="on_delete" groups="base.group_no_one"
attrs="{'readonly': [('ttype','!=','many2one')],
'invisible': [('ttype','!=','many2one')]}"/>
<field name="relation_field"
attrs="{'required': [('ttype','=','one2many')],
'readonly': [('ttype','!=','one2many')],
'invisible': [('ttype','!=','one2many')]}"/>
<field name="relation_table" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="column1" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="column2" groups="base.group_no_one"
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
<field name="domain" groups="base.group_no_one"
attrs="{'readonly': [('ttype','not in',['many2one','one2many','many2many'])],
'invisible': [('ttype','not in',['many2one','one2many','many2many'])]}"/>
</group>
</group>
<group attrs="{'readonly': [('ttype','not in',['selection','reference'])],
'invisible': [('ttype','not in',['selection','reference'])]}">
<field name="selection_ids">
<tree editable="bottom">
<field name="sequence" widget="handle"/>
<field name="value"/>
<field name="name"/>
</tree>
</field>
</group>
<group string="Advanced Properties" groups="base.group_no_one">
<field name="related"/>
<field name="depends" attrs="{'required': [('compute', 'not in', [False, ''])]}"/>
<field name="compute" widget="ace" options="{'mode': 'python'}"/>
</group>
<div groups="base.group_no_one">
<h3>How to define a computed field</h3>
<p>Computed fields are defined with the fields
<strong>Dependencies</strong> and <strong>Compute</strong>.</p>
<p>The field <strong>Dependencies</strong> lists the fields that
the current field depends on. It is a comma-separated list of
field names, like <code>name, size</code>. You can also refer to
fields accessible through other relational fields, for instance
<code>partner_id.company_id.name</code>.</p>
<p>The field <strong>Compute</strong> is the Python code to
compute the value of the field on a set of records. The value of
the field must be assigned to each record with a dictionary-like
assignment.</p>
<pre>
for record in self:
record['size'] = len(record.name)
</pre>
<p>The only predefined variables are</p>
<ul>
<li><code>self</code> (the set of records to compute)</li>
<li><code>datetime</code> (Python module)</li>
<li><code>dateutil</code> (Python module)</li>
<li><code>time</code> (Python module)</li>
</ul>
<p>Other features are accessible through <code>self</code>, like
<code>self.env</code>, etc.</p>
</div>
</page>
<page name="groups" string="Access Rights">
<field name="groups"/>
</page>
<page name="misc" string="Miscellaneous" groups="base.group_no_one">
<group>
<field name="state"/>
<field name="modules"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_model_fields_tree" model="ir.ui.view">
<field name="model">ir.model.fields</field>
<field name="arch" type="xml">
<tree string="Fields" duplicate="false">
<field name="name"/>
<field name="field_description"/>
<field name="model_id"/>
<field name="ttype"/>
<field name="state"/>
<field name="index"/>
<field name="store"/>
<field name="readonly"/>
<field name="relation"/>
</tree>
</field>
</record>
<record id="view_model_fields_search" model="ir.ui.view">
<field name="model">ir.model.fields</field>
<field name="arch" type="xml">
<search string="Fields">
<field name="name" filter_domain="['|', ('name','ilike',self), ('field_description','ilike',self)]" string="Field"/>
<filter string="Required" name="required" domain="[('required', '=', True)]"/>
<separator/>
<filter string="Readonly" name="readonly" domain="[('readonly', '=', True)]"/>
<separator/>
<filter string="Custom" name="custom" domain="[('state', '=', 'manual')]"/>
<filter string="Base" name="base" domain="[('state', '=', 'base')]"/>
<separator/>
<filter string="Translate" name="translate" domain="[('translate', '=', True)]"/>
<field name="model_id"/>
<field name="ttype"/>
<field name="required"/>
<field name="readonly"/>
<field name="relation"/>
<group expand="0" string="Group By">
<filter string="Model" name="group_by_object" domain="[]" context="{'group_by':'model_id'}"/>
<filter string="Field Type" name="group_by_ttype" domain="[]" context="{'group_by':'ttype'}"/>
</group>
</search>
</field>
</record>
<record id="action_model_fields" model="ir.actions.act_window">
<field name="name">Fields</field>
<field name="res_model">ir.model.fields</field>
<field name="context">{}</field>
<field name="view_id" ref="view_model_fields_tree"/>
</record>
<menuitem action="action_model_fields" id="ir_model_model_fields" parent="base.next_id_9"/>
<!-- ir model fields selection -->
<record id="view_model_fields_selection_form" model="ir.ui.view">
<field name="model">ir.model.fields.selection</field>
<field name="arch" type="xml">
<form string="Fields" duplicate="false">
<sheet>
<group>
<field name="field_id" options="{'no_create': True}"/>
<field name="value" groups="base.group_no_one"/>
<field name="name"/>
<field name="sequence" groups="base.group_no_one"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_model_fields_selection_tree" model="ir.ui.view">
<field name="model">ir.model.fields.selection</field>
<field name="arch" type="xml">
<tree>
<field name="sequence" widget="handle"/>
<field name="field_id"/>
<field name="value"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="view_model_fields_selection_search" model="ir.ui.view">
<field name="model">ir.model.fields.selection</field>
<field name="arch" type="xml">
<search string="Fields">
<field name="field_id" string="Field"/>
<field name="name"
filter_domain="['|', ('name','ilike',self), ('value','ilike',self)]"
string="Selection" />
<filter name="group_by_field"
context="{'group_by':'field_id'}"
string="Field"/>
</search>
</field>
</record>
<record id="action_model_fields_selection" model="ir.actions.act_window">
<field name="name">Fields Selection</field>
<field name="res_model">ir.model.fields.selection</field>
<field name="view_id" ref="view_model_fields_selection_tree"/>
</record>
<menuitem action="action_model_fields_selection" id="ir_model_model_fields_selection" parent="base.next_id_9"/>
<!-- ir model data -->
<record model="ir.ui.view" id="view_model_data_form">
<field name="model">ir.model.data</field>
<field name="arch" type="xml">
<form string="External Identifiers">
<sheet>
<h1>
<field name="complete_name"/>
</h1>
<group>
<group>
<field name="module"/>
<field name="name"/>
<field name="noupdate"/>
<field name="write_date" />
<field name="create_date" />
</group>
<group>
<field name="display_name"/>
<field name="model"/>
<field name="res_id"/>
<field name="reference" widget="reference" string="Record"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_model_data_list" model="ir.ui.view">
<field name="model">ir.model.data</field>
<field name="arch" type="xml">
<tree string="External Identifiers">
<field name="complete_name"/>
<field name="display_name"/>
<field name="model" groups="base.group_no_one"/>
<field name="module" invisible="1"/>
<field name="res_id"/>
</tree>
</field>
</record>
<record id="view_model_data_search" model="ir.ui.view">
<field name="model">ir.model.data</field>
<field name="arch" type="xml">
<search string="External Identifiers">
<field name="name" filter_domain="[('name','ilike',self)]" string="External Identifier"/>
<filter string="Updatable" name="updatable" domain="[('noupdate', '=', False)]"/>
<field name="module"/>
<field name="model"/>
<field name="res_id"/>
<field name="noupdate"/>
<group expand="0" string="Group By">
<filter string="Module" name="group_by_module" domain="[]" context="{'group_by':'module'}"/>
<filter string="Model" name="group_by_object" domain="[]" context="{'group_by':'model'}"/>
</group>
</search>
</field>
</record>
<record id="action_model_data" model="ir.actions.act_window">
<field name="name">External Identifiers</field>
<field name="res_model">ir.model.data</field>
<field name="view_id" ref="view_model_data_list"/>
</record>
<menuitem id="next_id_5" name="Sequences &amp; Identifiers" parent="base.menu_custom" sequence="21" groups="base.group_no_one"/>
<menuitem action="action_model_data" id="ir_model_data_menu" parent="base.next_id_5"
groups="base.group_no_one"/>
<!-- ir model contraints -->
<record model="ir.ui.view" id="view_model_constraint_form">
<field name="model">ir.model.constraint</field>
<field name="arch" type="xml">
<form string="Model Constraints">
<sheet>
<group col="4">
<field name="type"/>
<field name="name"/>
<field name="module" can_create="false"/>
<field name="model"/>
</group>
<group>
<field name="message"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_model_constraint_list" model="ir.ui.view">
<field name="model">ir.model.constraint</field>
<field name="arch" type="xml">
<tree string="Model Constraints">
<field name="type"/>
<field name="name"/>
<field name="module"/>
<field name="model"/>
</tree>
</field>
</record>
<record id="view_model_constraint_search" model="ir.ui.view">
<field name="model">ir.model.constraint</field>
<field name="arch" type="xml">
<search string="Constraints">
<field name="model"/>
<field name="name"/>
<field name="message"/>
<group expand="1" string="Group By">
<filter name="module" string="Module" context="{'group_by' : 'module'}"/>
<filter name="model" string="Model" context="{'group_by': 'model'}"/>
<filter name="type" string="Constraint type" context="{'group_by' : 'type'}"/>
</group>
</search>
</field>
</record>
<record id="action_model_constraint" model="ir.actions.act_window">
<field name="name">Model Constraints</field>
<field name="res_model">ir.model.constraint</field>
<field name="view_id" ref="view_model_constraint_list"/>
<field name="search_view_id" ref="view_model_constraint_search"/>
</record>
<menuitem action="action_model_constraint" id="ir_model_constraint_menu" parent="base.next_id_9"
groups="base.group_no_one"/>
<!-- ir model relations -->
<record model="ir.ui.view" id="view_model_relation_form">
<field name="model">ir.model.relation</field>
<field name="arch" type="xml">
<form string="ManyToMany Relations">
<sheet>
<group col="4">
<field name="name"/>
<field name="module" can_create="false"/>
<field name="model"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_model_relation_list" model="ir.ui.view">
<field name="model">ir.model.relation</field>
<field name="arch" type="xml">
<tree string="ManyToMany Relations">
<field name="name"/>
<field name="module"/>
<field name="model"/>
</tree>
</field>
</record>
<record id="action_model_relation" model="ir.actions.act_window">
<field name="name">ManyToMany Relations</field>
<field name="res_model">ir.model.relation</field>
<field name="view_id" ref="view_model_relation_list"/>
</record>
<menuitem action="action_model_relation" id="ir_model_relation_menu" parent="base.next_id_9"
groups="base.group_no_one"/>
<!-- ir.model.access -->
<record id="ir_access_view_tree" model="ir.ui.view">
<field name="name">ir.model.access.view.tree</field>
<field name="model">ir.model.access</field>
<field name="arch" type="xml">
<tree string="Access Rights"
decoration-warning="not group_id and
(perm_read or perm_write or
perm_create or perm_unlink)">
<field name="name"/>
<field name="model_id"/>
<field name="group_id"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</record>
<record id="ir_access_view_tree_edition" model="ir.ui.view">
<field name="name">ir.model.access.view.tree.edition</field>
<field name="model">ir.model.access</field>
<field name="arch" type="xml">
<tree string="Access Rights" editable="top"
decoration-warning="not group_id and
(perm_read or perm_write or
perm_create or perm_unlink)">
<field name="name"/>
<field name="model_id"/>
<field name="group_id"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</record>
<record id="ir_access_view_form" model="ir.ui.view">
<field name="model">ir.model.access</field>
<field name="arch" type="xml">
<form string="Access Rights">
<sheet>
<div class="alert alert-warning text-center" role="alert">
Please note that modifications will be applied for all users of the specified group
</div>
<group col="4">
<field name="name"/>
<field name="model_id"/>
<field name="group_id"/>
<field name="active" widget='boolean_toggle'/>
</group>
<group string="Access" col="4">
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_access_view_search" model="ir.ui.view">
<field name="model">ir.model.access</field>
<field name="arch" type="xml">
<search string="Access Rights">
<field name="name" string="Access Rights"/>
<filter string="Global" name="global" domain="[('group_id', '=', False)]"/>
<separator/>
<filter string="Full Access" name="full_access" domain="[('perm_read', '=', True), ('perm_write', '=', True), ('perm_create', '=', True), ('perm_unlink', '=', True)]"/>
<filter string="Read Access" name="read_access" domain="[('perm_read', '=', True)]"/>
<filter string="Write Access" name="write_access" domain="[('perm_write', '=', True)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<field name="model_id"/>
<field name="group_id"/>
<group expand="0" string="Group By" colspan="11" col="11" groups="base.group_no_one">
<filter string="Group" name="group" domain="[]" context="{'group_by': 'group_id'}"/>
<filter string="Model" name="group_by_object" domain="[]" context="{'group_by': 'model_id'}"/>
</group>
</search>
</field>
</record>
<record id="ir_access_act" model="ir.actions.act_window">
<field name="name">Access Rights</field>
<field name="res_model">ir.model.access</field>
<field name="view_id" ref="ir_access_view_tree_edition"/>
<field name="search_view_id" ref="ir_access_view_search"/>
</record>
<menuitem action="ir_access_act" id="menu_ir_access_act" parent="base.menu_security"/>
</odoo>

View file

@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Modules Categories -->
<record id="view_module_category_form" model="ir.ui.view">
<field name="name">ir.module.category.form</field>
<field name="model">ir.module.category</field>
<field name="arch" type="xml">
<form string="Module Category">
<group col="4">
<field name="name"/>
<field name="parent_id"/>
<field name="sequence"/>
</group>
<field name="description"/>
</form>
</field>
</record>
<record id="view_module_category_tree" model="ir.ui.view">
<field name="name">ir.module.category.tree</field>
<field name="model">ir.module.category</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Module Category">
<field name="name"/>
<field name="module_nr"/>
</tree>
</field>
</record>
<!-- Click on a category -->
<record id="view_module_filter" model="ir.ui.view">
<field name="name">ir.module.module.list.select</field>
<field name="model">ir.module.module</field>
<field name="arch" type="xml">
<search string="Search modules">
<field name="name" filter_domain="['|', '|', ('summary', 'ilike', self), ('shortdesc', 'ilike', self), ('name',
'ilike', self)]" string="Module"/>
<filter name="app" string="Apps" domain="[('application', '=', True)]"/>
<filter name="extra" string="Extra" domain="[('application', '=', False)]"/>
<separator/>
<filter name="installed" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
<filter name="not_installed" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
<field name="category_id"/>
<group expand="0" string="Group By">
<filter string="Author" name="author" domain="[]" context="{'group_by':'author'}"/>
<filter string="Category" name="category" domain="[]" context="{'group_by':'category_id'}"/>
<filter string="Status" name="state" domain="[]" context="{'group_by':'state'}"/>
</group>
<searchpanel>
<field name="category_id" string="Categories" enable_counters="1"/>
</searchpanel>
</search>
</field>
</record>
<!-- Modules -->
<record id="module_form" model="ir.ui.view">
<field name="name">ir.module.module.form</field>
<field name="model">ir.module.module</field>
<field name="arch" type="xml">
<form create="0" edit="0" string="Module" class="o_module_form">
<link rel="stylesheet" href="/base/static/src/css/description.css"></link>
<sheet>
<field name="icon_image" widget="image" class="oe_avatar"/>
<div class="oe_title mb32">
<h1><field name="shortdesc" placeholder="Module Name"/></h1>
<h3 class="oe_fade">
By <field name="author" class="oe_inline" placeholder="Author Name"/>
</h3>
<div>
<field name="state" invisible="1"/>
<field name="to_buy" invisible="1"/>
<field name="has_iap" invisible="1"/>
<button name="button_immediate_install" string="Activate" attrs="{'invisible': ['|', ('to_buy','=',True), ('state','!=', 'uninstalled')]}" type="object" class="btn btn-primary me-1" groups="base.group_system"/>
<a href="https://odoo.com/pricing?utm_source=db&amp;utm_medium=module#hosting=on_premise" target="_blank" class="btn btn-primary me-1"
attrs="{'invisible': ['|', ('to_buy','=',False), ('state', 'not in', ('uninstalled', 'uninstallable'))]}" role="button">Upgrade</a>
<button name="button_immediate_upgrade" states="installed" string="Upgrade" type="object" class="btn btn-primary me-1" groups="base.group_system"/>
<button name="button_uninstall_wizard" states="installed" string="Uninstall" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
<button name="button_uninstall_cancel" states="to remove" string="Cancel Uninstall" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
<button name="button_upgrade_cancel" states="to upgrade" string="Cancel Upgrade" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
<button name="button_install_cancel" states="to install" string="Cancel Install" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
</div>
<h6 class="text-muted mt-2" attrs="{'invisible': [('has_iap', '=', False)]}">Contains In-App Purchases</h6>
</div>
<div class="clearfix"/>
<notebook groups="base.group_no_one">
<page string="Information" name="information">
<group>
<group>
<field name="website" widget="url" attrs="{'invisible':[('website','=',False)]}"/>
<field name="category_id" options="{'no_open': True, 'no_create': True}"/>
<field name="summary"/>
</group>
<group>
<field name="name"/>
<field name="license"/>
<field name="installed_version"/>
</group>
</group>
</page>
<page string="Technical Data" name="technical_data">
<group col="4">
<field name="demo"/>
<field name="application"/>
<field name="state"/>
</group>
<group string="Created Views" attrs="{'invisible':[('state','!=','installed')]}"/>
<p class="oe_grey" attrs="{'invisible': ['|',('views_by_module','not in',[None,False]),('state','!=','installed')]}"> -This module does not create views.</p>
<field name="views_by_module"/>
<group string="Dependencies"/>
<p class="oe_grey" attrs="{'invisible': [('dependencies_id','not in',[None,False])]}"> -This module does not depends on any other module.</p>
<field name="dependencies_id">
<tree string="Dependencies">
<field name="name"/>
<field name="state"/>
</tree>
</field>
<group string="Exclusions"/>
<p class="oe_grey" attrs="{'invisible': [('exclusion_ids','not in',[None,False])]}"> -This module does not exclude any other module.</p>
<field name="exclusion_ids">
<tree string="Exclusions">
<field name="name"/>
<field name="state"/>
</tree>
</field>
</page>
<page string="Installed Features" name="installed_features" attrs="{'invisible':[('state','!=','installed')]}">
<group string="Created Menus"/>
<p class="oe_grey" attrs="{'invisible': [('menus_by_module','not in',[None,False])]}"> -This module does not create menu.</p>
<field name="menus_by_module"/>
<group string="Defined Reports"/>
<p class="oe_grey" attrs="{'invisible': [('reports_by_module','not in',[None,False])]}"> -This module does not create report.</p>
<field name="reports_by_module"/>
</page>
</notebook>
<field name="description_html" class='oe_styling_v8'/>
</sheet>
</form>
</field>
</record>
<record id="module_tree" model="ir.ui.view">
<field name="name">ir.module.module.tree</field>
<field name="model">ir.module.module</field>
<field name="arch" type="xml">
<tree create="false" string="Apps" decoration-info="state == 'uninstalled'" decoration-muted="state == 'uninstallable'">
<header>
<button name="button_immediate_install" type="object" string="Install" groups="base.group_system"/>
</header>
<field name="shortdesc"/>
<field name="name" groups="base.group_no_one"/>
<field name="author"/>
<field name="website"/>
<field name="installed_version"/>
<field name="state" widget="badge"
decoration-muted="state == 'uninstallable'"
decoration-info="state == 'uninstalled'"
decoration-success="state == 'installed'"/>
<field name="category_id" invisible="1"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="module_view_kanban">
<field name="name">Apps Kanban</field>
<field name="model">ir.module.module</field>
<field name="arch" type="xml">
<kanban create="false" class="o_modules_kanban">
<field name="icon"/>
<field name="to_buy"/>
<field name="name"/>
<field name="state"/>
<field name="summary"/>
<field name="website"/>
<field name="application"/>
<templates>
<t t-name="kanban-box">
<div class="oe_module_vignette">
<t t-set="installed" t-value="record.state.raw_value == 'installed'"/>
<div class="o_dropdown_kanban dropdown" tabindex="-1">
<a class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-offset="0,-2" href="#" role="button" aria-label="Dropdown menu" title="Dropdown menu">
<span class="fa fa-ellipsis-v"/>
</a>
<div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="dLabel">
<a type="edit" class="dropdown-item">Module Info</a>
<a t-if="record.website.raw_value" role="menuitem" class="dropdown-item o-hidden-ios" t-att-href="record.website.raw_value" target="_blank">Learn More</a>
<a t-if="installed" name="button_immediate_upgrade" type="object" role="menuitem" class="dropdown-item" groups="base.group_system">Upgrade</a>
<a t-if="installed" name="button_uninstall_wizard" type="object" role="menuitem" class="dropdown-item" groups="base.group_system">Uninstall</a>
</div>
</div>
<img t-attf-src="#{record.icon.value}" class="oe_module_icon" alt="Icon"/>
<div class="oe_module_desc" t-att-title="record.shortdesc.value">
<h4 class="o_kanban_record_title">
<field name="shortdesc"/>&amp;nbsp;
</h4>
<p class="oe_module_name">
<field groups="!base.group_no_one" name="summary"/>
<code groups="base.group_no_one"><field name="name"/></code>
</p>
<div class="oe_module_action d-flex flex-wrap justify-content-between">
<button type="object" class="btn btn-primary btn-sm" name="button_immediate_install" states="uninstalled" t-if="! record.to_buy.raw_value" groups="base.group_system">Activate</button>
<div t-if="installed" class="d-flex align-items-center text-muted float-start">Installed</div>
<a t-att-href="record.website.raw_value" target="_blank" attrs="{'invisible':[('website', 'in', (False, ''))]}" class="btn btn-sm btn-secondary float-end o-hidden-ios" role="button">Learn More</a>
<a type="edit" class="btn btn-secondary btn-sm float-end" role="button" attrs="{'invisible': [('website', '&lt;&gt;', '')]}">Module Info</a>
<a href="https://odoo.com/pricing?utm_source=db&amp;utm_medium=module#hosting=on_premise" target="_blank" class="btn btn-info btn-sm" states="uninstalled,uninstallable" t-if="record.to_buy.raw_value" role="button" groups="base.group_system">Upgrade</a>
<button states="to remove" type="object" class="btn btn-sm btn-primary" name="button_uninstall_cancel" groups="base.group_system">Cancel Uninstall</button>
<button states="to install" type="object" class="btn btn-sm btn-primary" name="button_install_cancel" groups="base.group_system">Cancel Install</button>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="open_module_tree" model="ir.actions.act_window">
<field name="name">Apps</field>
<field name="res_model">ir.module.module</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[("to_buy", "=", False)]</field>
<field name="context">{'search_default_app':1}</field>
<field name="search_view_id" ref="view_module_filter"/>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
No module found!
</p><p>
You should try other search criteria.
</p>
</field>
</record>
<!--top menu -->
<menuitem id="menu_apps" name="Apps" parent="menu_management" sequence="5"/>
<!--submenu -->
<menuitem id="menu_module_tree" parent="menu_apps" name="Main Apps" sequence="5" action="open_module_tree" />
<menuitem id="theme_store" parent="menu_apps" name="Theme Store" sequence="15"/>
<!--link to stores-->
<record model='ir.actions.act_url' id='action_third_party'>
<field name='name'>Third-Party Apps</field>
<field name='url'>https://apps.odoo.com/apps/modules</field>
</record>
<menuitem id="menu_third_party" parent="menu_apps" name="Third-Party Apps" sequence="20" action="action_third_party"/>
<record model='ir.actions.act_url' id='action_theme_store'>
<field name='name'>Theme Store</field>
<field name='url'>https://apps.odoo.com/apps/themes</field>
</record>
<menuitem id="menu_theme_store" parent="menu_apps" name="Theme Store" sequence="10" action="action_theme_store"/>
<!-- Apps modules -->
<record model="ir.actions.client" id="modules_act_cl">
<field name="name">App Store</field>
<field name="tag">apps</field>
</record>
<menuitem id="module_mi" parent="base.menu_management" sequence="10" action="modules_act_cl" groups="base.group_no_one"/>
<record model="ir.actions.client" id="modules_updates_act_cl">
<field name="name">Updates</field>
<field name="tag">apps.updates</field>
<field name="params">{}</field>
</record>
<menuitem id="menu_module_updates" parent="base.menu_management" sequence="20" action="modules_updates_act_cl" groups="base.group_no_one"/>
</data>
</odoo>

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_profile_view_search" model="ir.ui.view">
<field name="name">IR Profile Search</field>
<field name="model">ir.profile</field>
<field name="arch" type="xml">
<search>
<field name="name" string="Name"/>
<field name="session" string="Session"/>
<filter name="group_session" string="Session" context="{'group_by':'session'}"/>
</search>
</field>
</record>
<record id="ir_profile_view_list" model="ir.ui.view">
<field name="name">IR Profile List</field>
<field name="model">ir.profile</field>
<field name="arch" type="xml">
<tree string="Profile Session" default_order="session desc, id desc">
<field name="create_date"/>
<field name="session"/>
<field name="name"/>
<field name="entry_count"/>
<field name="sql_count" optional="hide"/>
<field name="speedscope_url" widget="url"/>
<field name="duration"/>
</tree>
</field>
</record>
<record id="ir_profile_view_form" model="ir.ui.view">
<field name="name">IR Profile Form</field>
<field name="model">ir.profile</field>
<field name="arch" type="xml">
<form string="IR Profile">
<group>
<field name="name"/>
<field name="session"/>
<field name="entry_count"/>
<!-- Do not rely on sql field for the invisible attrs to avoid fetching whole trace from server. -->
<field name="sql_count" attrs="{'invisible': [('sql_count', '=', 0)]}"/>
<field name="speedscope_url" widget="url"/>
</group>
<group attrs="{'invisible': [('qweb','=', False)]}">
<field name="qweb" widget="profiling_qweb_view" nolabel="1" colspan="2"/>
</group>
</form>
</field>
</record>
<record id="enable_profiling_wizard" model="ir.ui.view">
<field name="name">Enable profiling</field>
<field name="model">base.enable.profiling.wizard</field>
<field name="arch" type="xml">
<form string="Enable profiling">
<div class="alert alert-warning" role="alert">
<h3>Profiling is currently disabled.</h3>
Profiling is a developer feature that should be used with caution on production database.
It may add some load on the server, and potentially make it less responsive.
Enabling the profiling here allows all users to activate profiling on their session.
Profiling can be disabled at any moment in the settings.
</div>
<group>
<field name="duration"/>
<field name="expiration"/>
</group>
<footer>
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z"/>
<button string="Enable profiling" type="object" name="submit" class="btn btn-primary"/>
</footer>
</form>
</field>
</record>
<record id="action_menu_ir_profile" model="ir.actions.act_window">
<field name="name">Ir profile</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.profile</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_group_session': 1}</field>
</record>
<menuitem
name="Profiling"
action="action_menu_ir_profile"
id="menu_ir_profile"
parent="base.next_id_9"/>
</odoo>

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Properties -->
<record id="ir_property_view_search" model="ir.ui.view">
<field name="name">ir.property.search</field>
<field name="model">ir.property</field>
<field name="arch" type="xml">
<search string="Parameters">
<field name="name" string="Name"/>
<filter string="Generic" name="generic"
help="Parameters that are used by all resources."
domain="[('res_id','=',False)]"/>
<field name="fields_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</search>
</field>
</record>
<record id="ir_property_view" model="ir.ui.view">
<field name="name">ir.property.form</field>
<field name="model">ir.property</field>
<field name="arch" type="xml">
<form string="Parameters">
<sheet>
<group col="4">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
<newline/>
<field name="fields_id"/>
<field name="type"/>
<field name="res_id"/>
</group>
<group>
<field name="value_integer" string="Value" attrs="{'invisible' : [('type', 'not in', ('integer', 'boolean'))]}"/>
<field name="value_float" string="Value" attrs="{'invisible' : [('type', '!=', 'float')]}"/>
<field name="value_datetime" string="Value" attrs="{'invisible' : [('type', 'not in', ('date', 'datetime'))]}"/>
<field name="value_text" string="Value" attrs="{'invisible' : [('type', 'not in', ('char', 'text', 'selection'))]}"/>
<field name="value_reference" string="Value" attrs="{'invisible' : [('type', '!=', 'many2one')]}"/>
<field name="value_binary" string="Value" attrs="{'invisible' : [('type', '!=', 'binary')]}"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="ir_property_view_tree" model="ir.ui.view">
<field name="name">ir.property.tree</field>
<field name="model">ir.property</field>
<field name="arch" type="xml">
<tree string="Parameters">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="fields_id"/>
<field name="res_id"/>
<field name="type"/>
</tree>
</field>
</record>
<record id="ir_property_form" model="ir.actions.act_window">
<field name="name">Company Properties</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.property</field>
<field name="view_id" ref="ir_property_view_tree"/>
</record>
<menuitem id="menu_ir_property_form_all" parent="menu_ir_property" action="ir_property_form"/>
</data>
</odoo>

View file

@ -0,0 +1,53 @@
<odoo>
<template id="contact_name">
<div t-if="'name' in fields">
<t t-if="object.name">
<span itemprop="name" t-esc="name"/>
</t>
<t t-if="not object.name and object.parent_name">
<span itemprop="name" t-esc="object.parent_name"/>
</t>
<t t-if="options.get('country_image') and 'country_id' in fields and object.country_id and object.country_id.image_url">
<span t-field="object.country_id.image_url" t-options='{"widget": "image_url", "class": "country_flag"}'/>
</t>
</div>
</template>
<template id="contact">
<address t-ignore="true" class="mb-0" itemscope="itemscope" itemtype="http://schema.org/Organization">
<div t-if="not (('name' in fields) or (address and 'address' in fields) or (city and 'city' in fields) or (mobile and 'mobile' in fields) or (website and 'website' in fields) or (email and 'email' in fields))" class="css_non_editable_mode_hidden">
--<span class="text-muted" t-esc="name"/>--
</div>
<t t-if="object.country_id.name_position != 'after'">
<t t-call="base.contact_name"/>
</t>
<div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
<div t-if="address and 'address' in fields" class="d-flex align-items-baseline">
<i t-if="not options.get('no_marker')" class="fa fa-map-marker fa-fw" role="img" aria-label="Address" title="Address"/>
<span class="w-100 d-block" itemprop="streetAddress" t-esc="address"/>
</div>
<div t-if="city and 'city' in fields" class="d-flex align-items-baseline">
<i t-if="not options.get('no_marker')" class="fa fa-map-marker fa-fw" role="img" aria-label="Address" title="Address"/>
<span>
<div>
<span itemprop="addressLocality" t-esc="city"/>,
<span itemprop="addressCountry" t-esc="country_id"/>
</div>
</span>
</div>
<div t-if="phone and 'phone' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-phone fa-fw' role="img" aria-label="Phone" title="Phone"/> <span class="o_force_ltr" itemprop="telephone" t-esc="phone"/></div>
<div t-if="mobile and 'mobile' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-mobile fa-fw' role="img" aria-label="Mobile" title="Mobile"/> <span class="o_force_ltr" itemprop="telephone" t-esc="mobile"/></div>
<!-- Prevent issue with iOS Safari parsing of schema data without telephone itemprops -->
<div t-if="not (phone and 'phone' in fields) and not (mobile and 'mobile' in fields)" itemprop="telephone"/>
<div t-if="website and 'website' in fields">
<i t-if="not options.get('no_marker')" class='fa fa-globe' role="img" aria-label="Website" title="Website"/>
<a t-att-href="website and '%s%s' % ('http://' if '://' not in website else '',website)"><span itemprop="website" t-esc="website"/></a>
</div>
<div t-if="email and 'email' in fields"><i t-if="not options.get('no_marker')" class='fa fa-envelope fa-fw' role="img" aria-label="Email" title="Email"/> <span itemprop="email" t-esc="email"/></div>
</div>
<div t-if="vat and 'vat' in fields"><span t-esc="vat_label"/>: <span itemprop="vatID" t-esc="vat"/></div>
<t t-if="object.country_id and object.country_id.name_position == 'after'">
<t t-call="base.contact_name"/>
</t>
</address>
</template>
</odoo>

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Rules -->
<record id="view_rule_form" model="ir.ui.view">
<field name="model">ir.rule</field>
<field name="arch" type="xml">
<form string="Record rules">
<sheet>
<group>
<group string="General">
<field name="name"/>
<field name="model_id"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group string="Access Rights">
<group>
<field name="perm_read"/>
<field name="perm_create"/>
</group>
<group>
<field name="perm_write"/>
<field name="perm_unlink"/>
</group>
</group>
</group>
<separator string="Rule Definition (Domain Filter)"/>
<field name="domain_force" colspan="2" nolabel="1"/>
<group string="Groups (no group = global)">
<field name="global"/>
<field name="groups" nolabel="1" colspan="2"/>
</group>
<i class="fa fa-info fa-3x text-info float-start" role="img" aria-label="Info" title="Info"/>
<h3>Interaction between rules</h3>
<div>
<p>
Global rules (non group-specific) are restrictions, and cannot be bypassed.
Group-specific rules grant additional permissions, but are constrained within the bounds of global ones.
The first group rules restrict further the global rules, but can be relaxed by additional group rules.
</p>
<p>
Detailed algorithm:
<ol>
<li>Global rules are combined together with a logical AND operator, and with the result of the following steps</li>
<li>Group-specific rules are combined together with a logical OR operator</li>
<li>If user belongs to several groups, the results from step 2 are combined with logical OR operator</li>
</ol>
</p>
<p>Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 OR GROUP_A_RULE_2) OR (GROUP_B_RULE_1 OR GROUP_B_RULE_2) )</p>
</div>
</sheet>
</form>
</field>
</record>
<record id="view_rule_tree" model="ir.ui.view">
<field name="model">ir.rule</field>
<field name="arch" type="xml">
<tree string="Record Rules" decoration-info="not groups">
<field name="name"/>
<field name="model_id"/>
<field name="groups" widget="many2many_tags" options="{'no_create':True}"/>
<field name="domain_force"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</record>
<record id="view_rule_search" model="ir.ui.view">
<field name="model">ir.rule</field>
<field name="arch" type="xml">
<search string="Record Rules">
<field name="name" string="Record Rule"/>
<field name="model_id"/>
<field name="groups"/>
<filter string="Global" name="global" domain="[('global', '=', True)]"/>
<separator/>
<filter string="Full Access Right" name="full_access_right" domain="[('perm_read', '=', True), ('perm_write', '=', True), ('perm_create', '=', True), ('perm_unlink', '=', True)]"/>
<filter string="Read Access Right" name="read_access_right" domain="[('perm_read', '=', True)]"/>
<filter string="Write Access Right" name="write_access_right" domain="[('perm_write', '=', True)]"/>
<filter string="Create Access Right" name="create_access_right" domain="[('perm_create', '=' ,True)]"/>
<filter string="Delete Access Right" name="delete_access_right" domain="[('perm_unlink', '=', True)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<group string="Group By">
<filter string="Model" name="group_by_object" domain="[]" context="{'group_by': 'model_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_rule" model="ir.actions.act_window">
<field name="name">Record Rules</field>
<field name="res_model">ir.rule</field>
<field name="view_id" ref="view_rule_tree"/>
<field name="search_view_id" ref="view_rule_search"/>
</record>
<menuitem action="action_rule" id="menu_action_rule" parent="base.menu_security" sequence="3"/>
<record id="property_rule" model="ir.rule">
<field name="name">Property multi-company</field>
<field name="model_id" ref="model_ir_property"/>
<field eval="True" name="global"/>
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
</record>
</odoo>

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Sequences -->
<record id="sequence_view" model="ir.ui.view">
<field name="model">ir.sequence</field>
<field name="arch" type="xml">
<form string="Sequences">
<sheet>
<group>
<group>
<field name="name"/>
<field name="implementation"/>
</group>
<group>
<field name="code"/>
<field name="active" widget="boolean_toggle"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
<notebook>
<page string="Sequence" name="sequence">
<group>
<group>
<field name="prefix"/>
<field name="suffix"/>
<field name="use_date_range"/>
</group>
<group>
<field name="padding"/>
<field name="number_increment"/>
<field name="number_next_actual" string="Next Number" attrs="{'invisible': [('use_date_range', '=', True)]}"/>
</group>
</group>
<field name="date_range_ids" attrs="{'invisible': [('use_date_range', '=', False)]}">
<tree string="Sequences" editable="top">
<field name="date_from"/>
<field name="date_to"/>
<field name="number_next_actual" string="Next Number"/>
</tree>
</field>
<group col="3" string="Legend (for prefix, suffix)">
<group>
<span colspan="2">Current Year with Century: %%(year)s</span>
<span colspan="2">Current Year without Century: %%(y)s</span>
<span colspan="2">Month: %%(month)s</span>
<span colspan="2">Day: %%(day)s</span>
</group>
<group>
<span colspan="2">Day of the Year: %%(doy)s</span>
<span colspan="2">Week of the Year: %%(woy)s</span>
<span colspan="2">Day of the Week (0:Monday): %%(weekday)s</span>
</group>
<group>
<span colspan="2">Hour 00->24: %%(h24)s</span>
<span colspan="2">Hour 00->12: %%(h12)s</span>
<span colspan="2">Minute: %%(min)s</span>
<span colspan="2">Second: %%(sec)s</span>
</group>
</group>
<group attrs="{'invisible': [('use_date_range', '=', False)]}">
<div colspan="2">
When subsequences per date range are used, you can prefix variables with 'range_'
to use the beginning of the range instead of the current date, e.g. %%(range_year)s instead of %%(year)s.
</div>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="sequence_view_tree" model="ir.ui.view">
<field name="model">ir.sequence</field>
<field name="arch" type="xml">
<tree string="Sequences">
<field name="code"/>
<field name="name"/>
<field name="prefix"/>
<field name="padding"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="number_next_actual" string="Next Number"/>
<field name="number_increment"/>
<field name="implementation"/>
</tree>
</field>
</record>
<record id="view_sequence_search" model="ir.ui.view">
<field name="model">ir.sequence</field>
<field name="arch" type="xml">
<search string="Sequences">
<field name="name" string="Sequence"/>
<field name="code"/>
<field name="company_id" groups="base.group_multi_company"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="ir_sequence_form" model="ir.actions.act_window">
<field name="name">Sequences</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.sequence</field>
<field name="view_id" ref="sequence_view_tree"/>
<field name="context">{'active_test': False}</field>
</record>
<menuitem action="ir_sequence_form" id="menu_ir_sequence_form" parent="next_id_5"/>
</odoo>

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="edit_menu_access" model="ir.ui.view">
<field name="model">ir.ui.menu</field>
<field name="arch" type="xml">
<form string="Menu">
<sheet>
<field name="active" invisible="1"/>
<group>
<group>
<field name="name"/>
<field name="parent_id" groups="base.group_no_one"/>
<field name="sequence" groups="base.group_no_one"/>
</group>
<group groups="base.group_no_one">
<field name="complete_name"/>
<field name="action"/>
<field name="web_icon"/>
<field name="web_icon_data"/>
</group>
</group>
<notebook>
<page string="Access Rights" name="access_rights">
<field name="groups_id"/>
</page>
<page string="Submenus" name="submenus" groups="base.group_no_one">
<!-- Note: make sure you have 'ir.ui.menu.full_list'
in the context to see all submenus! -->
<field name="child_id" context="{'default_parent_id': active_id}">
<tree string="Menu">
<field name="sequence"/>
<field icon="icon" name="name" string="Menu"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="edit_menu" model="ir.ui.view">
<field name="model">ir.ui.menu</field>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<tree string="Menu">
<field name="sequence" widget='handle'/>
<field icon="icon" name="complete_name" string="Menu"/>
</tree>
</field>
</record>
<record id="edit_menu_access_search" model="ir.ui.view">
<field name="name">ir.ui.menu.search</field>
<field name="model">ir.ui.menu</field>
<field name="arch" type="xml">
<search string="Menu">
<field name="name" string="Menu"/>
<field name="parent_id"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="grant_menu_access" model="ir.actions.act_window">
<field name="name">Menu Items</field>
<field name="res_model">ir.ui.menu</field>
<field name="view_id" ref="edit_menu"/>
<field name="context">{'ir.ui.menu.full_list':True}</field>
<field name="search_view_id" ref="edit_menu_access_search"/>
<field name="help">Manage and customize the items available and displayed in your Odoo system menu. You can delete an item by clicking on the box at the beginning of each line and then delete it through the button that appeared. Items can be assigned to specific groups in order to make them accessible to some users within the system.</field>
</record>
<menuitem action="grant_menu_access" id="menu_grant_menu_access" parent="base.next_id_2" sequence="1"/>
</odoo>

View file

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- View -->
<record id="view_view_form" model="ir.ui.view">
<field name="model">ir.ui.view</field>
<field name="arch" type="xml">
<form string="Views">
<sheet>
<group>
<group>
<field name="name"/>
<field name="type"/>
<field name="model"/>
<field name="priority"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group groups="base.group_no_one">
<field name="field_parent"/>
<field name="inherit_id"/>
<field name="mode"/>
<field name="model_data_id"/>
<field name="xml_id" class="text-break"/>
</group>
</group>
<div class="oe_edit_only alert alert-info" role="alert">
Be aware that editing the architecture of a standard view is not advised, since the changes will be overwritten during future module updates.<br/>
We recommend applying modifications to standard views through inherited views or customization with Odoo Studio.
</div>
<notebook>
<page string="Architecture" name="architecture">
<field name="arch_db" class="oe_edit_only oe_no_translation_content"/>
<field name="arch_base" string="View Architecture" widget="ace" options="{'mode': 'xml'}" required="1"/>
</page>
<page string="Access Rights" name="access_rights">
<field name="groups_id"/>
</page>
<page name="inherit_children" string="Inherited Views">
<field name="inherit_children_ids" context="{'default_model':model,'default_type':type,'default_inherit_id':active_id,'default_mode':'extension', 'active_test': False}">
<tree default_order="priority,id" decoration-muted="not active">
<field name="active" invisible="1"/>
<field name="id"/>
<field name="priority"/>
<field name="name"/>
<field name="xml_id"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_view_tree" model="ir.ui.view">
<field name="model">ir.ui.view</field>
<field name="arch" type="xml">
<tree string="Views">
<field name="priority" string="Sequence" widget="handle"/>
<field name="name"/>
<field name="type"/>
<field name="model"/>
<field name="xml_id" groups="base.group_no_one"/>
<field name="inherit_id"/>
</tree>
</field>
</record>
<record id="view_view_search" model="ir.ui.view">
<field name="model">ir.ui.view</field>
<field name="arch" type="xml">
<search string="Views">
<field name="name" filter_domain="['|', '|', ('name','ilike',self), ('model','ilike',self), ('model_data_id','ilike',self)]" string="View"/>
<field name="key"/>
<field name="model"/>
<field name="inherit_id"/>
<field name="type"/>
<field name="arch_db" string="View Architecture"/>
<filter string="Form" name="form" domain="[('type', '=','form')]"/>
<filter string="Tree" name="tree" domain="[('type', '=', 'tree')]"/>
<filter string="Kanban" name="kanban" domain="[('type', '=', 'kanban')]"/>
<filter string="Search" name="search" domain="[('type', '=', 'search')]"/>
<filter string="QWeb" name="qweb" domain="[('type', '=', 'qweb')]"/>
<separator/>
<filter string="Modified Architecture" name="arch_updated" domain="[('arch_updated', '=',True)]"/>
<separator/>
<filter string="Active" name="active" domain="[('active', '=',True)]"/>
<filter string="Inactive" name="inactive" domain="[('active', '=',False)]"/>
<group expand="0" string="Group By">
<filter string="Model" name="object" domain="[]" context="{'group_by':'model'}"/>
<filter string="Type" name="type" domain="[]" context="{'group_by':'type'}"/>
<filter string="Inherit" name="inherit" domain="[]" context="{'group_by':'inherit_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_ui_view" model="ir.actions.act_window">
<field name="name">Views</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.ui.view</field>
<field name="view_id" ref="view_view_tree"/>
<field name="context">{'search_default_active': 1}</field>
<field name="help">Views allows you to personalize each view of Odoo. You can add new fields, move fields, rename them or delete the ones that you do not need.</field>
</record>
<menuitem action="action_ui_view" id="menu_action_ui_view" parent="base.next_id_2" sequence="2"/>
<!-- Reset view wizard -->
<record id="reset_view_arch_wizard_view" model="ir.ui.view">
<field name="name">Reset View Architecture</field>
<field name="model">reset.view.arch.wizard</field>
<field name="arch" type="xml">
<form string="Reset View Architecture">
<group>
<group>
<field name="has_diff" invisible="1"/>
<field name="view_id" invisible="1"/>
<field name="view_name"/>
<field name="compare_view_id" attrs="{'invisible': [('reset_mode', '!=', 'other_view')]}" options="{'no_create': True, 'no_open': True}"/>
</group>
<group>
<field name="reset_mode" widget="radio"/>
</group>
</group>
<field name="arch_diff" attrs="{'invisible': [('arch_diff', '=', False)]}"/>
<div class="alert alert-warning my-2" role="alert" attrs="{'invisible': [('arch_diff', '!=', False)]}">
<span attrs="{'invisible': [('reset_mode', '!=', 'soft')]}">This view has no previous version.</span>
<span attrs="{'invisible': [('reset_mode', '!=', 'hard')]}">This view is not coming from a file.</span>
<span attrs="{'invisible': [('reset_mode', '!=', 'other_view')]}">You need two views to compare.</span>
</div>
<footer>
<button string="Reset View" name="reset_view_button" type="object" class="btn-primary" attrs="{'invisible': [('has_diff', '=', False)]}" data-hotkey="q"/>
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z" />
</footer>
</form>
</field>
</record>
<record id="reset_view_arch_wizard_action" model="ir.actions.act_window">
<field name="name">Compare/Reset</field>
<field name="res_model">reset.view.arch.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="model_ir_ui_view"/>
<field name="binding_view_types">form,list</field>
</record>
<!-- View customizations -->
<record id="view_view_custom_form" model="ir.ui.view">
<field name="model">ir.ui.view.custom</field>
<field name="arch" type="xml">
<form string="Customized Views">
<sheet>
<group col="4">
<field name="user_id"/>
<field name="ref_id"/>
<separator string="View Architecture" colspan="4" />
<field name="arch" colspan="4" nolabel="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_view_custom_tree" model="ir.ui.view">
<field name="model">ir.ui.view.custom</field>
<field name="arch" type="xml">
<tree string="Customized Views">
<field name="user_id"/>
<field name="ref_id"/>
</tree>
</field>
</record>
<record id="view_view_custom_search" model="ir.ui.view">
<field name="model">ir.ui.view.custom</field>
<field name="arch" type="xml">
<search string="Customized Views">
<field name="user_id"/>
<field name="ref_id"/>
</search>
</field>
</record>
<record id="action_ui_view_custom" model="ir.actions.act_window">
<field name="name">Customized Views</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">ir.ui.view.custom</field>
<field name="help" type="html"><p class="o_view_nocontent_smiling_face">Create a customized view</p><p>Customized views are used when users reorganize the content of their dashboard views (via web client)</p></field>
</record>
<menuitem id="menu_action_ui_view_custom" action="action_ui_view_custom" parent="base.next_id_2" sequence="3"/>
</odoo>

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="onboarding_container">
<div class="modal o_onboarding_modal o_technical_modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Onboarding Tips</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"/>
</div>
<div class="modal-body">
<p>Are you sure you want to hide these onboarding tips?</p>
</div>
<div class="modal-footer justify-content-start">
<a type="action" class="btn btn-primary" data-bs-dismiss="modal"
data-o-hide-banner="true"
t-att-data-model="close_model" t-att-data-method="close_method">
Remove
</a>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
</div>
</div>
</div>
</div>
<div class="o_onboarding_container collapse show">
<div t-att-class="'o_onboarding_main position-relative overflow-hidden ' + classes"
t-att-style="'background-image:url(' + bg_image + ')'">
<div class="o_onboarding_wrap py-5">
<a href="#" data-bs-toggle="modal" data-bs-target=".o_onboarding_modal" class="o_onboarding_btn_close position-absolute top-0 end-0 py-2 px-3 h2" title="Close the onboarding panel"><i class="oi oi-close"/></a>
<div class="o_onboarding_steps d-flex" t-out="0"/>
<div t-if="state.get('onboarding_state') in ('done', 'just_done')"
t-att-state="state.get('onboarding_state')"
class="o_onboarding_completed_message position-absolute end-0 bottom-0 start-0 border-bottom py-4 bg-white d-flex align-items-center justify-content-center">
<span class="h3 m-0">
<i class="fa fa-check text-success me-3" />
<t t-if="text_completed" t-out="text_completed" />
<t t-else="">Nice work! Your configuration is done.</t>
</span>
<a type="action" class="btn btn-primary ms-4" data-bs-toggle="collapse" href=".o_onboarding_container" t-att-data-model="close_model" t-att-data-method="close_method">
Close
</a>
</div>
</div>
</div>
</div>
</template>
<template id="onboarding_step">
<div class="o_onboarding_step position-relative d-flex flex-column align-items-center justify-content-start text-center" t-att-data-step-state="state">
<img t-if="state == 'just_done'" class="o_onboarding_confetti position-absolute w-100" src="/base/static/img/onboarding_confetti.svg" alt="o_onboarding_confetti"/>
<div class="o_onboarding_step_side d-flex pt-0 flex-grow-1">
<div class="o_onboarding_progress position-absolute"/>
<span t-attf-class="o_onboarding_dot fa fa-check d-inline-block rounded-circle small {{state != 'not_done' and 'o_onboarding_dot_isChecked' or ''}}"/>
</div>
<div class="o_onboarding_step_content py-3 flex-grow-1 d-flex flex-column align-items-center justify-content-around">
<div class="o_onboarding_step_content_info mb-3">
<a type="action" data-reload-on-close="true" role="button" t-att-data-method="method" t-att-data-model="model">
<h4 class="o_onboarding_step_title" t-out="title"/>
</a>
<p class="text-white-75 m-0" t-out="description"/>
</div>
<a t-if="state == 'not_done'" class="o_onboarding_step_action btn px-4" type="action" data-reload-on-close="true" role="button" t-att-data-method="method" t-att-data-model="model">
<span>
<t t-if="btn_text" t-out="btn_text" />
<t t-else="">Let's do it</t>
</span>
</a>
<a t-else="" class="o_onboarding_step_action__done btn" type="action" data-reload-on-close="true" role="button" t-att-data-method="method" t-att-data-model="model">
<span>
<i t-attf-class="me-2 fa #{done_icon if done_icon else 'fa-check'}" />
<t t-if="done_text" t-out="done_text" />
<t t-else="">All done!</t>
</span>
</a>
</div>
</div>
</template>
<!-- ONBOARDING STEPS -->
<template id="onboarding_company_step">
<t t-call="base.onboarding_step">
<t t-set="title">Company Data</t>
<t t-set="description">
Set your company's data for documents header/footer.
</t>
<t t-set="btn_text">Let's start!</t>
<t t-set="method" t-value="'action_open_base_onboarding_company'" />
<t t-set="model" t-value="'res.company'" />
<t t-set="state" t-value="state.get('base_onboarding_company_state')" />
</t>
</template>
<!-- COMPANY FORM -->
<record id="base_onboarding_company_form" model="ir.ui.view">
<field name="name">base.company.onboarding.form</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form" />
<field name="mode">primary</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<xpath expr="//group[@name='social_media']" position="replace" />
<form position="inside">
<footer position="replace">
<button name="action_save_onboarding_company_step" class="btn btn-primary" type="object" string="Apply" data-hotkey="q"/>
<button special="cancel" data-hotkey="z" string="Cancel" />
</footer>
</form>
</field>
</record>
<record id="action_open_base_onboarding_company" model="ir.actions.act_window">
<field name="name">Set your company data</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.company</field>
<field name="view_mode">form</field>
<field name="view_id" ref="base_onboarding_company_form" />
<field name="target">new</field>
</record>
</odoo>

View file

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- report.paperformat -->
<record id="paperformat_view_tree" model="ir.ui.view">
<field name="name">paper_format_view_tree</field>
<field name="model">report.paperformat</field>
<field name="arch" type="xml">
<tree string="Paper format configuration">
<field name="name" />
</tree>
</field>
</record>
<record id="paperformat_view_form" model="ir.ui.view">
<field name="name">paper_format_view_form</field>
<field name="model">report.paperformat</field>
<field name="arch" type="xml">
<form string="Paper format configuration">
<sheet>
<group>
<field name="name" />
<field name="format" />
<field name="page_height" attrs="{'invisible': [('format','!=','custom')]}" />
<field name="page_width" attrs="{'invisible': [('format','!=','custom')]}" />
<field name="orientation" />
<field name="margin_top" />
<field name="margin_bottom" />
<field name="margin_left" />
<field name="margin_right" />
<field name="header_line" />
<field name="header_spacing" />
<field name="disable_shrinking" />
<field name="dpi" />
<field name="report_ids" widget="many2many_tags" options="{'not_delete': True}"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="paper_format_action" model="ir.actions.act_window">
<field name="name">Paper Format General Configuration</field>
<field name="res_model">report.paperformat</field>
<field name="view_mode">tree,form</field>
</record>
<record id='reports_action' model='ir.actions.act_window'>
<field name="name">Reports</field>
<field name="res_model">ir.actions.report</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem
id="reporting_menuitem"
name="Reporting"
parent="base.menu_custom"
sequence="15"
groups="base.group_no_one"
/>
<menuitem
id="paper_format_menuitem"
name="Paper Format"
parent="reporting_menuitem"
action="paper_format_action"
sequence="2"
groups="base.group_no_one"
/>
<menuitem
id="reports_menuitem"
name="Reports"
parent="reporting_menuitem"
action="reports_action"
sequence="3"
groups="base.group_no_one"
/>
</data>
</odoo>

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_res_bank_form" model="ir.ui.view">
<field name="name">res.bank.form</field>
<field name="model">res.bank</field>
<field name="arch" type="xml">
<form string="Bank">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group name="bank_details" col="4">
<field name="name"/>
<field name="bic"/>
</group>
<group>
<group name="address_details">
<label for="street" string="Bank Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
</group>
<group name="communication_details">
<field name="phone" class="o_force_ltr"/>
<field name="email" widget="email"/>
<field name="active" invisible="1"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_res_bank_tree" model="ir.ui.view">
<field name="name">res.bank.tree</field>
<field name="model">res.bank</field>
<field name="arch" type="xml">
<tree string="Banks">
<field name="name"/>
<field name="bic"/>
<field name="country"/>
</tree>
</field>
</record>
<record id="res_bank_view_search" model="ir.ui.view">
<field name="name">res.bank.view.search</field>
<field name="model">res.bank</field>
<field name="arch" type="xml">
<search string="Search Bank">
<field name="name"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="action_res_bank_form" model="ir.actions.act_window">
<field name="name">Banks</field>
<field name="res_model">res.bank</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="res_bank_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Bank
</p><p>
Banks are the financial institutions at which you and your contacts have their accounts.
</p>
</field>
</record>
<record id="view_partner_bank_form" model="ir.ui.view">
<field name="name">res.partner.bank.form</field>
<field name="model">res.partner.bank</field>
<field name="priority">15</field>
<field name="arch" type="xml">
<form string="Bank account" name="bank_account_form">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<group>
<field name="sequence" invisible="1"/>
<field name="acc_type" invisible="1"/>
<field name="acc_number"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
<field name="partner_id"/>
<field name="acc_holder_name"/>
</group>
<group>
<field name="bank_id"/>
<field name="currency_id" groups="base.group_multi_currency" options="{'no_create': True}"/>
<field name="allow_out_payment" widget="boolean_toggle"/>
<field name="active" invisible="1"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_partner_bank_tree" model="ir.ui.view">
<field name="name">res.partner.bank.tree</field>
<field name="model">res.partner.bank</field>
<field name="arch" type="xml">
<tree string="Bank Accounts">
<field name="sequence" widget="handle"/>
<field name="acc_number"/>
<field name="bank_name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="partner_id"/>
<field name="acc_holder_name" invisible="1"/>
<field name="allow_out_payment" widget="boolean_toggle"/>
</tree>
</field>
</record>
<record id="view_partner_bank_search" model="ir.ui.view">
<field name="name">res.partner.bank.search</field>
<field name="model">res.partner.bank</field>
<field name="arch" type="xml">
<search string="Bank Accounts">
<field name="bank_name" filter_domain="['|', ('bank_name','ilike',self), ('acc_number','ilike',self)]" string="Bank Name"/>
<field name="company_id" invisible="context.get('company_hide', True)"/>
<field name="partner_id"/>
</search>
</field>
</record>
<record id="action_res_partner_bank_account_form" model="ir.actions.act_window">
<field name="name">Bank Accounts</field>
<field name="res_model">res.partner.bank</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Bank Account
</p><p>
From here you can manage all bank accounts linked to you and your contacts.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.form</field>
<field name="model">res.company</field>
<field name="arch" type="xml">
<form string="Company">
<sheet>
<field name="logo" widget="image" class="oe_avatar"/>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name" placeholder="e.g. My Company"/>
</h1>
</div>
<notebook colspan="4">
<page string="General Information" name="general_info">
<group>
<group>
<field name="partner_id" string="Contact" readonly="1" required="0" groups="base.group_no_one"/>
<label for="street" string="Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
<field name="vat"/>
<field name="company_registry"/>
<field name="currency_id" options="{'no_create': True, 'no_open': True}" id="company_currency" context="{'active_test': False}"/>
</group>
<group>
<field name="phone" class="o_force_ltr"/>
<field name="mobile" class="o_force_ltr"/>
<field name="email"/>
<field name="website" string="Website" widget="url" placeholder="e.g. https://www.odoo.com"/>
<field name="parent_id" groups="base.group_multi_company"/>
<field name="sequence" invisible="1"/>
<field name="favicon" widget="image" class="float-start oe_avatar" groups="base.group_no_one"/>
</group>
<group name="social_media"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_company_tree" model="ir.ui.view">
<field name="name">res.company.tree</field>
<field name="model">res.company</field>
<field name="arch" type="xml">
<tree string="Companies">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<record id="view_res_company_kanban" model="ir.ui.view">
<field name="name">res.company.kanban</field>
<field name="model">res.company</field>
<field name="arch" type="xml">
<kanban>
<field name="name"/>
<field name="email"/>
<field name="phone"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div t-attf-class="#{!selection_mode ? 'text-center' : ''}">
<i class="fa fa-building" role="img" aria-label="Enterprise" title="Enterprise"></i> <strong><field name="name"/></strong>
</div>
<hr class="mt4 mb4"/>
<div class="row" t-if="!selection_mode">
<div t-if="record.email.value" class="col-6 text-center">
<strong>Email:</strong>
</div>
<div t-if="record.phone.value" class="col-6 text-center">
<strong>Phone</strong>
</div>
<div t-if="record.email.value" class="col-6 text-center">
<field name="email"/>
</div>
<div t-if="record.phone.value" class="col-6 text-center o_force_ltr">
<field name="phone"/>
</div>
</div>
<div t-else="">
<div t-if="record.email.value">
<strong>Email:</strong>
<field name="email"/>
</div>
<div t-if="record.phone.value" class="o_force_ltr">
<strong>Phone:</strong>
<field name="phone"/>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="action_res_company_form" model="ir.actions.act_window">
<field name="name">Companies</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.company</field>
<field name="view_mode">tree,kanban,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new company
</p><p>
Create and manage the companies that will be managed by Odoo from here. Shops or subsidiaries can be created and maintained from here.
</p>
</field>
</record>
<menuitem action="action_res_company_form" id="menu_action_res_company_form" parent="base.menu_users"/>
</data>
</odoo>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form</field>
<field name="model">res.config.settings</field>
<field name="arch" type="xml">
<form string="Settings" class="oe_form_configuration o_base_settings" js_class="base_settings">
<div class="o_setting_container">
<div class="settings"/>
</div>
</form>
</field>
</record>
<record id="res_config_setting_act_window" model="ir.actions.act_window">
<field name="name">Settings</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_config_view_base" model="ir.ui.view">
<field name="name">res.config.view.base</field>
<field name="model">res.config</field>
<field name="arch" type="xml">
<form string="Configuration">
<group name="res_config_contents"/>
<footer>
<button name="action_next" type="object" string="Apply" class="btn-primary" data-hotkey="q"/>
<button name="action_skip" type="object" special="cancel" data-hotkey="z" string="Cancel" class="btn-secondary"/>
</footer>
</form>
</field>
</record>
<record id="res_config_installer" model="ir.ui.view">
<field name="name">Inheritable view for installer objects</field>
<field name="model">res.config.installer</field>
<field name="arch" type="xml">
<form string="Configuration Installer">
<separator string="title" colspan="4"/>
<footer>
<button name="action_next" type="object" string="Install Apps" class="btn-primary" data-hotkey="q"/>
<button string="Skip" class="btn-secondary" special="cancel" data-hotkey="z"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!--
Country
-->
<record id="view_country_tree" model="ir.ui.view">
<field name="name">res.country.tree</field>
<field name="model">res.country</field>
<field name="arch" type="xml">
<tree string="Country" create="0" delete="0">
<field name="name"/>
<field name="code"/>
</tree>
</field>
</record>
<record id="view_country_form" model="ir.ui.view">
<field name="name">res.country.form</field>
<field name="model">res.country</field>
<field name="arch" type="xml">
<form create="0" delete="0">
<sheet>
<div class="oe_button_box" name="button_box">
</div>
<field name="image_url" widget="image_url" class="oe_avatar" options="{'size': [128,128]}"/>
<group name="main_group">
<group name="country_details">
<field name="name"/>
<field name="currency_id"/>
<field name="code" required="1"/>
</group>
<group name="phone_vat_settings">
<field name="phone_code" options="{'format': false}"/>
<field name="vat_label"/>
<field name="zip_required"/>
<field name="state_required"/>
</group>
</group>
<group name="advanced_address_formatting" string="Advanced Address Formatting" groups="base.group_no_one">
<label for="address_view_id"/>
<div class="o_row">
<field name="address_view_id"/>
<div class="text-muted ms-2">Choose a subview of partners that includes only address fields, to change the way users can input addresses.</div>
</div>
<label for="address_format"/>
<div class="o_row">
<field name="address_format" placeholder="Address format..."/>
<div name="div_address_format ms-2" class="text-muted">Change the way addresses are displayed in reports</div>
</div>
<field name="name_position" class="oe_inline"/>
</group>
<label for="state_ids"/>
<field name="state_ids">
<tree editable="bottom">
<field name="name"/>
<field name="code"/>
</tree>
</field>
</sheet>
</form>
</field>
</record>
<record id="action_country" model="ir.actions.act_window">
<field name="name">Countries</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.country</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Country Found!
</p><p>
Manage the list of countries that can be set on your contacts.
</p>
</field>
</record>
<record id="view_country_group_tree" model="ir.ui.view">
<field name="name">res.country.group.tree</field>
<field name="model">res.country.group</field>
<field name="arch" type="xml">
<tree string="Country Group">
<field name="name"/>
</tree>
</field>
</record>
<record id="view_country_group_form" model="ir.ui.view">
<field name="name">res.country.group.form</field>
<field name="model">res.country.group</field>
<field name="arch" type="xml">
<form string="Country Group">
<sheet>
<div class="oe_title">
<label for="name" string="Group Name"/>
<h1><field name="name" placeholder="e.g. Europe"/></h1>
</div>
<group name="country_group">
<field name="country_ids" widget="many2many_tags" options="{'no_open': True, 'no_create': True}"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_country_group" model="ir.actions.act_window">
<field name="name">Country Group</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.country.group</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Country Group
</p><p>
Use groups to organize countries that are frequently selected together (e.g. "LATAM", "BeNeLux", "ASEAN").
</p>
</field>
</record>
<!-- State -->
<record id="view_country_state_tree" model="ir.ui.view">
<field name="name">res.country.state.tree</field>
<field name="model">res.country.state</field>
<field name="arch" type="xml">
<tree string="State" editable="bottom">
<field name="name"/>
<field name="code"/>
<field name="country_id" options="{'no_create': True, 'no_open': True}"/>
</tree>
</field>
</record>
<record id="view_country_state_form" model="ir.ui.view">
<field name="name">res.country.state.form</field>
<field name="model">res.country.state</field>
<field name="arch" type="xml">
<form string="State">
<sheet>
<group>
<field name="name"/>
<field name="code"/>
<field name="country_id" options='{"no_open": True, "no_create": True}'/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_country_state_search" model="ir.ui.view">
<field name="name">res.country.state.search</field>
<field name="model">res.country.state</field>
<field name="arch" type="xml">
<search string="Country">
<field name="name"/>
<field name="country_id"/>
<group string="Group By">
<filter name="groupby_country" string="Country" context="{'group_by': 'country_id'}"/>
</group>
</search>
</field>
</record>
<record id="action_country_state" model="ir.actions.act_window">
<field name="name">Fed. States</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.country.state</field>
<field name="view_id" ref="view_country_state_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a State
</p><p>
Federal States belong to countries and are part of your contacts' addresses.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_currency_rate_search" model="ir.ui.view">
<field name="name">res.currency.rate.search</field>
<field name="model">res.currency.rate</field>
<field name="arch" type="xml">
<search string="Currency Rates">
<field name="name" string="Date"/>
</search>
</field>
</record>
<record id="view_currency_rate_tree" model="ir.ui.view">
<field name="name">res.currency.rate.tree</field>
<field name="model">res.currency.rate</field>
<field name="arch" type="xml">
<tree string="Currency Rates" editable="bottom">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="company_rate" digits="[12,12]"/>
<field name="inverse_company_rate" digits="[12,12]"/>
<field name="rate" digits="[12,12]" optional="hide"/>
<field name="write_date" optional="hide"/>
</tree>
</field>
</record>
<record id="view_currency_rate_form" model="ir.ui.view">
<field name="name">res.currency.rate.form</field>
<field name="model">res.currency.rate</field>
<field name="arch" type="xml">
<form string="Currency Rate">
<sheet>
<group>
<group>
<field name="name"/>
<field name="rate" digits="[12,12]" groups="base.group_no_one"/>
<field name="company_rate" digits="[12,12]"/>
<field name="inverse_company_rate" digits="[12,12]"/>
</group>
<group>
<field name="currency_id"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="act_view_currency_rates" model="ir.actions.act_window">
<field name="name">Show Currency Rates</field>
<field name="res_model">res.currency.rate</field>
<field name='view_mode'>tree,form</field>
<field name='view_id' ref='view_currency_rate_tree'/>
<field name="domain">[('currency_id','=', active_id)]</field>
<field name="context">{'default_currency_id': active_id}</field>
<!-- <field name="target">fullscreen</field> -->
<field name="binding_model_id" ref="model_res_currency"/>
<field name="binding_view_types">form</field>
</record>
<record id="view_currency_search" model="ir.ui.view">
<field name="name">res.currency.search</field>
<field name="model">res.currency</field>
<field name="arch" type="xml">
<search string="Currencies">
<field name="name" string="Currency" filter_domain="('|','|','|','|',
('name', 'ilike', self),
('full_name', 'ilike', self),
('symbol', 'ilike', self),
('currency_unit_label', 'ilike', self),
('currency_subunit_label', 'ilike', self),
)"/>
<filter name="active" string="Active" domain="[('active','=',True)]" help="Show active currencies"/>
<filter name="inactive" string="Inactive" domain="[('active','=',False)]" help="Show inactive currencies"/>
</search>
</field>
</record>
<record id="view_currency_tree" model="ir.ui.view">
<field name="name">res.currency.tree</field>
<field name="model">res.currency</field>
<field name="arch" type="xml">
<tree string="Currencies" decoration-muted="(not active)">
<field name="name"/>
<field name="symbol"/>
<field name="full_name" string="Name" optional="show"/>
<field name="date" string="Last Update"/>
<field name="rate" digits="[12,6]"/>
<field name="inverse_rate" digits="[12,6]" optional="hide"/>
<field name="active" widget="boolean_toggle"/>
</tree>
</field>
</record>
<record id="view_currency_kanban" model="ir.ui.view">
<field name="name">res.currency.kanban</field>
<field name="model">res.currency</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="name"/>
<field name="symbol"/>
<field name="full_name"/>
<field name="active"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="row mb4">
<div class="col-2">
<h3><t t-esc="record.name.value"/></h3>
</div>
<div class="col-5">
<span class="badge rounded-pill"><t t-esc="record.symbol.value"/></span>
</div>
<div class="col-5 text-end">
<t t-if="! record.active.raw_value"><span class="badge rounded-pill bg-light border">inactive</span></t>
</div>
</div>
<div class="row">
<div class="col-12">
<div><field name="rate_string"/></div>
<t t-if="record.date.raw_value"><div>Last update: <field name="date"/></div></t>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_currency_form" model="ir.ui.view">
<field name="name">res.currency.form</field>
<field name="model">res.currency</field>
<field name="arch" type="xml">
<form string="Currency">
<field name="is_current_company_currency" invisible="1"/>
<div class="oe_edit_only alert alert-info text-center" role="alert" groups="base.group_no_one">
You cannot reduce the number of decimal places of a currency already used on an accounting entry.
</div>
<div class="alert alert-info text-center" role="alert" attrs="{'invisible': [('is_current_company_currency','=',False)]}">
This is your company's currency.
</div>
<sheet>
<group>
<group>
<field name="name"/>
<field name="full_name" string="Name"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<field name="currency_unit_label"/>
<field name="currency_subunit_label"/>
</group>
</group>
<group groups="base.group_no_one">
<group string="Price Accuracy">
<field name="rounding"/>
<field name="decimal_places"/>
</group>
<group string="Display">
<field name="symbol"/>
<field name="position"/>
</group>
</group>
<notebook class="o_currency_rate_list" attrs="{'invisible': [('is_current_company_currency','=',True)]}">
<page string="Rates" name="rates">
<field name="rate_ids" widget="one2many">
<tree string="Rates" editable="top" limit="25">
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="company_rate" digits="[12,12]"/>
<field name="inverse_company_rate" digits="[12,12]"/>
<field name="rate" digits="[12,12]" optional="hide"/>
<field name="write_date" optional="hide"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_currency_form" model="ir.actions.act_window">
<field name="name">Currencies</field>
<field name="res_model">res.currency</field>
<field name="view_mode">tree,kanban,form</field>
<field name="search_view_id" ref="view_currency_search"/>
<field name="context">{'active_test': False}</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_lang_tree" model="ir.ui.view">
<field name="name">res.lang.tree</field>
<field name="model">res.lang</field>
<field name="arch" type="xml">
<tree string="Languages" limit="200">
<header>
<button name="action_activate_langs" type="object" string="Activate"/>
</header>
<field name="name"/>
<field name="code" groups="base.group_no_one"/>
<field name="iso_code" groups="base.group_no_one"/>
<field name="url_code" groups="base.group_no_one" invisible="1"/>
<field name="direction" groups="base.group_no_one"/>
<field name="active"/>
<button name="%(base.action_view_base_language_install)d"
string="Activate"
type="action"
icon="fa-check"
attrs="{'invisible': [('active', '=', True)]}"/>
<button name="%(base.action_view_base_language_install)d"
string="Update"
type="action"
icon="fa-refresh"
attrs="{'invisible': [('active', '!=', True)]}"/>
<button name="action_archive"
string="Disable"
type="object"
icon="fa-times"
attrs="{'invisible': [('active', '!=', True)]}"/>
</tree>
</field>
</record>
<record id="res_lang_form" model="ir.ui.view">
<field name="name">res.lang.form</field>
<field name="model">res.lang</field>
<field name="arch" type="xml">
<form string="Languages">
<sheet>
<div class="oe_button_box" name="button_box">
<button string="Activate and Translate"
name="%(base.action_view_base_language_install)d"
type="action"
class="oe_stat_button"
icon="fa-refresh" />
</div>
<field name="flag_image" widget="image" class="oe_avatar"/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. French"/></h1>
</div>
<group >
<group>
<field name="code"/>
<field name="iso_code"/>
<field name="url_code" invisible="1" required="0"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<field name="direction"/>
<field name="grouping"/>
<field name="decimal_point"/>
<field name="thousands_sep"/>
<field name="date_format"/>
<field name="time_format"/>
<field name="week_start"/>
</group>
</group>
<div class="row">
<div class="col-md-8 row">
<div class="col-12">
<div class="o_horizontal_separator mb-3 mt-4 text-uppercase fw-bolder small">Legends for supported Date and Time Formats</div>
</div>
<div class="col-sm">
<div>%a - Abbreviated day of the week.</div>
<div>%A - Full day of the week.</div>
<div>%b - Abbreviated month name.</div>
<div>%B - Full month name."</div>
<div>%d - Day of the month [01,31]."</div>
<div>%j - Day of the year [001,366]."</div>
<div>%H - Hour (24-hour clock) [00,23]."</div>
<div>%I - Hour (12-hour clock) [01,12]."</div>
</div>
<div class="col-sm">
<div>%M - Minute [00,59]."</div>
<div>%p - Equivalent of either AM or PM."</div>
<div>%S - Seconds [00,61]."</div>
<div>%w - Day of the week number [0(Sunday),6]."</div>
<div>%y - Year without century [00,99]."</div>
<div>%Y - Year with century."</div>
<div>%m - Month number [01,12]."</div>
</div>
</div>
<div class="col-md-4 text-info">
<div class="o_horizontal_separator mb-3 mt-4 text-uppercase fw-bolder small">Examples</div>
<div>1. %b, %B ==> Dec, December</div>
<div>2. %a ,%A ==> Fri, Friday</div>
<div>3. %y, %Y ==> 08, 2008</div>
<div>4. %d, %m ==> 05, 12</div>
<div>5. %H:%M:%S ==> 18:25:20</div>
<div>6. %I:%M:%S %p ==> 06:25:20 PM</div>
<div>7. %j ==> 340</div>
<div>8. %S ==> 20</div>
<div>9. %w ==> 5 ( Friday is the 6th day)</div>
</div>
</div>
</sheet>
</form>
</field>
</record>
<record id="res_lang_search" model="ir.ui.view">
<field name="name">res.lang.search</field>
<field name="model">res.lang</field>
<field name="arch" type="xml">
<search string="Languages">
<field name="name"
filter_domain="['|', '|', ('name', 'ilike', self), ('code', 'ilike', self), ('iso_code', 'ilike', self)]"
string="Language"/>
<field name="direction"/>
<separator/>
<filter string="Active" name="active" domain="[('active', '=', True)]"/>
</search>
</field>
</record>
<record id="res_lang_act_window" model="ir.actions.act_window">
<field name="name">Languages</field>
<field name="res_model">res.lang</field>
<field name="context">{'active_test': False}</field>
<field name="search_view_id" ref="res_lang_search"/>
</record>
<menuitem action="res_lang_act_window" id="menu_res_lang_act_window" parent="menu_translation" sequence="1"/>
</data>
</odoo>

View file

@ -0,0 +1,734 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Partner Titles -->
<record id="view_partner_title_tree" model="ir.ui.view">
<field name="name">res.partner.title.tree</field>
<field name="model">res.partner.title</field>
<field name="arch" type="xml">
<tree string="Partner Titles" editable="bottom">
<field name="name"/>
<field name="shortcut"/>
</tree>
</field>
</record>
<record id="view_partner_title_form" model="ir.ui.view">
<field name="name">res.partner.title.form</field>
<field name="model">res.partner.title</field>
<field name="arch" type="xml">
<form string="Partner Titles">
<sheet>
<group col="4">
<field name="name"/>
<field name="shortcut"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_partner_title_contact" model="ir.actions.act_window">
<field name="name">Contact Titles</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.title</field>
<field name="domain">[]</field>
<field name="context">{}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Title
</p><p>
Manage Contact Titles as well as their abbreviations (e.g. "Mr.", "Mrs.", etc).
</p>
</field>
</record>
<!-- PARTNER TREE VIEW + MUTI_EDIT: VISIBLE FIELDS WITH ONCHANGE ON BASE/PARTNER
VIEW WON'T BE EDITABLE ON "MULTI_EDIT" MODE:
- parent_id
- country_id
- state_id
- company_type
- company_id
-->
<!-- Partner -->
<record id="view_partner_tree" model="ir.ui.view">
<field name="name">res.partner.tree</field>
<field name="model">res.partner</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Contacts" sample="1" multi_edit="1">
<field name="display_name" string="Name" invisible="1"/>
<field name="translated_display_name" string="Name"/>
<field name="function" invisible="1"/>
<field name="phone" class="o_force_ltr" optional="show"/>
<field name="email" optional="show"/>
<field name="user_id" optional="show" widget="many2one_avatar_user" domain="[('share', '=', False)]"/>
<field name="city" optional="show"/>
<field name="state_id" optional="hide" readonly="1"/>
<field name="country_id" optional="show" readonly="1"/>
<field name="vat" optional="hide" readonly="1"/>
<field name="category_id" optional="hide" widget="many2many_tags" options="{'color_field': 'color'}"/>
<field name="company_id" groups="base.group_multi_company" readonly="1"/>
<field name="is_company" invisible="1"/>
<field name="parent_id" invisible="1" readonly="1"/>
<field name="active" invisible="1"/>
</tree>
</field>
</record>
<record id="view_partner_simple_form" model="ir.ui.view">
<field name="name">res.partner.simplified.form</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<form string="Contact">
<field name="is_company" invisible="1"/>
<field name="type" invisible="1"/>
<field name="avatar_128" invisible="1"/>
<field name="user_id" invisible="1"/>
<field name="image_1920" widget='image' class="oe_avatar" options='{"preview_image": "avatar_128"}'/>
<div class="oe_title">
<field name="company_type" options="{'horizontal': true}" widget="radio" groups="base.group_no_one"/>
<h1>
<field id="company" name="name" default_focus="1" placeholder="e.g. Lumber Inc" attrs="{'required' : [('type', '=', 'contact'),('is_company','=', True)], 'invisible': [('is_company','=', False)]}"/>
<field id="individual" name="name" default_focus="1" placeholder="e.g. Brandom Freeman" attrs="{'required' : [('type', '=', 'contact'),('is_company','=', False)], 'invisible': [('is_company','=', True)]}"/>
</h1>
<field name="parent_id"
widget="res_partner_many2one"
placeholder="Company Name..."
domain="[('is_company', '=', True)]" context="{'default_is_company': True, 'show_vat': True, 'default_user_id': user_id}"
attrs="{'invisible': [('is_company','=', True)]}"/>
</div>
<group>
<field name="function" placeholder="e.g. Sales Director" attrs="{'invisible': [('is_company','=', True)]}"/>
<field name="user_ids" invisible="1"/>
<field name="email" widget="email" context="{'gravatar_image': True}" required="context.get('force_email', False)" attrs="{'required': [('user_ids','!=', [])]}"/>
<field name="phone" widget="phone" options="{'enable_sms': false}"/>
<field name="mobile" widget="phone" options="{'enable_sms': false}"/>
</group>
</form>
</field>
</record>
<!-- Open partner address -->
<record id="view_partner_address_form" model="ir.ui.view">
<field name="name">res.partner.form.address</field>
<field name="model">res.partner</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form string="Partner">
<field name="avatar_128" invisible="1"/>
<field name="image_1920" widget='image' class="oe_avatar" options='{"preview_image": "avatar_128"}' readonly="1"/>
<div class="oe_title">
<h1>
<field name="name" readonly="1"/>
</h1>
</div>
<field name="parent_id" invisible="1"/>
<group>
<group>
<label for="type" attrs="{'invisible': [('parent_id','=', False)]}" groups="base.group_no_one"/>
<div attrs="{'invisible': [('parent_id','=', False)]}" name="div_type" groups="base.group_no_one">
<field name="type" class="oe_inline"/>
</div>
<label for="street" string="Address"/>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_quick_create': True}" context="{'default_country_id': country_id}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
<field name="website" string="Website" widget="url" placeholder="e.g. https://www.odoo.com"/>
</group>
<group>
</group>
</group>
</form>
</field>
</record>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form</field>
<field name="model">res.partner</field>
<field name="priority" eval="1"/>
<field name="arch" type="xml">
<form string="Partners">
<div class="alert alert-warning oe_edit_only" role="alert" attrs="{'invisible': [('same_vat_partner_id', '=', False)]}">
A partner with the same <span><span class="o_vat_label">Tax ID</span></span> already exists (<field name="same_vat_partner_id"/>), are you sure to create a new one?
</div>
<div class="alert alert-warning oe_edit_only" role="alert" attrs="{'invisible': [('same_company_registry_partner_id', '=', False)]}">
A partner with the same <span><span class="o_vat_label">Company Registry</span></span> already exists (<field name="same_company_registry_partner_id"/>), are you sure to create a new one?
</div>
<sheet>
<div class="oe_button_box" name="button_box"/>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="avatar_128" invisible="1"/>
<field name="image_1920" widget='image' class="oe_avatar" options='{"preview_image": "avatar_128"}'/>
<div class="oe_title mb24">
<field name="is_company" invisible="1"/>
<field name="commercial_partner_id" invisible="1"/>
<field name="active" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="country_code" invisible="1"/>
<field name="company_type" widget="radio" options="{'horizontal': true}"/>
<h1>
<field id="company" class="text-break" name="name" default_focus="1" placeholder="e.g. Lumber Inc" attrs="{'required' : [('type', '=', 'contact')], 'invisible': [('is_company','=', False)]}"/>
<field id="individual" class="text-break" name="name" default_focus="1" placeholder="e.g. Brandom Freeman" attrs="{'required' : [('type', '=', 'contact')], 'invisible': [('is_company','=', True)]}"/>
</h1>
<div class="o_row">
<field name="parent_id"
widget="res_partner_many2one"
placeholder="Company Name..."
domain="[('is_company', '=', True)]" context="{'default_is_company': True, 'show_vat': True, 'default_user_id': user_id}"
attrs="{'invisible': ['|', '&amp;', ('is_company','=', True),('parent_id', '=', False),('company_name', '!=', False),('company_name', '!=', '')]}"/>
<field name="company_name" attrs="{'invisible': ['|', '|', ('company_name', '=', False), ('company_name', '=', ''), ('is_company', '=', True)]}"/>
<button name="create_company" icon="fa-plus-square" string="Create company"
type="object" class="oe_edit_only btn-link"
attrs="{'invisible': ['|', '|', ('is_company','=', True), ('company_name', '=', ''), ('company_name', '=', False)]}"/>
</div>
</div>
<group>
<group>
<span class="o_form_label o_td_label" name="address_name">
<field name="type" attrs="{'invisible': [('is_company','=', True)], 'required': [('is_company','!=', True)], 'readonly': [('user_ids', '!=', [])]}" class="fw-bold"/>
<b attrs="{'invisible': [('is_company', '=', False)]}">Address</b>
</span>
<div class="o_address_format">
<field name="street" placeholder="Street..." class="o_address_street"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="city" placeholder="City" class="o_address_city"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_quick_create': True}"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" context="{'country_id': country_id, 'default_country_id': country_id, 'zip': zip}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<div name="partner_address_country" class="d-flex justify-content-between">
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
</div>
</div>
<field name="vat" placeholder="e.g. BE0477472701" attrs="{'readonly': [('parent_id','!=',False)]}"/>
</group>
<group>
<field name="function" placeholder="e.g. Sales Director"
attrs="{'invisible': [('is_company','=', True)]}"/>
<field name="phone" widget="phone"/>
<field name="mobile" widget="phone"/>
<field name="user_ids" invisible="1"/>
<field name="email" widget="email" context="{'gravatar_image': True}" attrs="{'required': [('user_ids','!=', [])]}"/>
<field name="website" string="Website" widget="url" placeholder="e.g. https://www.odoo.com"/>
<field name="title" options='{"no_open": True}' placeholder="e.g. Mister"
attrs="{'invisible': [('is_company', '=', True)]}"/>
<field name="active_lang_count" invisible="1"/>
<field name="lang" attrs="{'invisible': [('active_lang_count', '&lt;=', 1)]}"/>
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"
placeholder='e.g. "B2B", "VIP", "Consulting", ...'/>
</group>
</group>
<notebook colspan="4">
<page string="Contacts &amp; Addresses" name="contact_addresses" autofocus="autofocus">
<field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_lang': lang, 'default_user_id': user_id, 'default_type': 'other'}">
<kanban>
<field name="id"/>
<field name="color"/>
<field name="name"/>
<field name="title"/>
<field name="type"/>
<field name="email"/>
<field name="parent_id"/>
<field name="is_company"/>
<field name="function"/>
<field name="phone"/>
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="mobile"/>
<field name="state_id"/>
<field name="image_128"/>
<field name="avatar_128"/>
<field name="lang"/>
<!-- fields in form x2many view to diminish requests -->
<field name="comment"/>
<field name="display_name"/>
<templates>
<t t-name="kanban-box">
<t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
<div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'">
<div class="o_kanban_image">
<img alt="Contact image" t-att-src="kanban_image('res.partner', 'avatar_128', record.id.raw_value)"/>
</div>
<div class="oe_kanban_details">
<field name="name"/>
<div t-if="record.function.raw_value"><field name="function"/></div>
<div t-if="record.email.raw_value"><field name="email" widget="email"/></div>
<div t-if="record.type.raw_value != 'contact'">
<div>
<field name="zip"/><t t-if="record.city"> </t>
<field name="city"/>
</div>
<field t-if="record.state_id.raw_value" name="state_id"/><t t-if="record.country_id"> </t>
<field name="country_id"/>
</div>
<div t-if="record.phone.raw_value">Phone: <t t-esc="record.phone.value"/></div>
<div t-if="record.mobile.raw_value">Mobile: <t t-esc="record.mobile.value"/></div>
</div>
</div>
</t>
</templates>
</kanban>
<form string="Contact / Address">
<sheet>
<field name="type" required="1" widget="radio" options="{'horizontal': true}"/>
<field name="parent_id" invisible="1"/>
<div class="text-muted oe_edit_only">
<p class="mb-0" attrs="{'invisible': [('type', '!=', 'contact')]}">
<span>Use this to organize the contact details of employees of a given company (e.g. CEO, CFO, ...).</span>
</p>
<p class="mb-0" attrs="{'invisible': [('type', '!=', 'invoice')]}">
<span>Preferred address for all invoices. Selected by default when you invoice an order that belongs to this company.</span>
</p>
<p class="mb-0" attrs="{'invisible': [('type', '!=', 'delivery')]}">
<span>Preferred address for all deliveries. Selected by default when you deliver an order that belongs to this company.</span>
</p>
<p class="mb-0" attrs="{'invisible': [('type', '!=', 'private')]}">
<span>Private addresses are only visible by authorized users and contain sensitive data (employee home addresses, ...).</span>
</p>
<p class="mb-0" attrs="{'invisible': [('type', '!=', 'other')]}">
<span>Other address for the company (e.g. subsidiary, ...)</span>
</p>
</div>
<hr/>
<group>
<group>
<field name="name" string="Contact Name" attrs="{'required' : [('type', '=', 'contact')]}"/>
<field name="title" options="{'no_open': True}" placeholder="e.g. Mr."
attrs="{'invisible': [('type','!=', 'contact')]}"/>
<field name="function" placeholder="e.g. Sales Director"
attrs="{'invisible': [('type','!=', 'contact')]}"/>
<label for="street" string="Address" attrs="{'invisible': [('type','=', 'contact')]}"/>
<div attrs="{'invisible': [('type','=', 'contact')]}">
<div class="o_address_format" name="div_address">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_quick_create': True}" context="{'country_id': country_id, 'default_country_id': country_id, 'zip': zip}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
</div>
</group>
<group>
<field name="email" widget="email"/>
<field name="phone" widget="phone"/>
<field name="mobile" widget="phone"/>
<field name="company_id" invisible="1"/>
</group>
</group>
<group>
<field name="comment" placeholder="Internal notes..." nolabel="1" colspan="2"/>
</group>
<field name="lang" invisible="True"/>
<field name="user_id" invisible="True"/>
</sheet>
</form>
</field>
</page>
<page name='sales_purchases' string="Sales &amp; Purchase">
<group name="container_row_2">
<group string="Sales" name="sale" priority="1">
<field name="user_id" widget="many2one_avatar_user" domain="[('share', '=', False)]"/>
</group>
<group string="Purchase" name="purchase" priority="2">
</group>
<group name="misc" string="Misc">
<field name="company_registry" attrs="{'invisible': [('parent_id','!=',False)]}"/>
<field name="ref" string="Reference"/>
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" attrs="{'readonly': [('parent_id', '!=', False)]}" force_save="1"/>
<field name="industry_id" attrs="{'invisible': [('is_company', '=', False)]}" options="{'no_create': True}"/>
</group>
</group>
</page>
<page name='internal_notes' string="Internal Notes">
<field name="comment" placeholder="Internal notes..."/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- Special restricted view for private address, with limited "named" info that
can be traced back to the employee -->
<record id="res_partner_view_form_private" model="ir.ui.view">
<field name="name">res.partner.view.form.private</field>
<field name="model">res.partner</field>
<field name="priority" eval="300"/>
<field name="arch" type="xml">
<form string="Private Address Form">
<sheet>
<field name="type" invisible="1"/>
<field name="parent_id" invisible="1"/>
<label for="name" class="oe_edit_only"/>
<field name="name" required="0"/>
<group>
<group>
<label for="street" string="Address"/>
<div>
<div class="o_address_format" name="div_address">
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="state_id" class="o_address_state" placeholder="State" options="{'no_open': True, 'no_quick_create': True}" context="{'country_id': country_id, 'default_country_id': country_id, 'zip': zip}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
</div>
</div>
</group>
<group>
<field name="phone" widget="phone" options="{'enable_sms': false}"/>
<field name="mobile" widget="phone" options="{'enable_sms': false}"/>
<field name="email"/>
<field name="lang"/>
</group>
</group>
<group string="Bank Accounts">
<field name="bank_ids">
<tree editable="bottom">
<field name="bank_id"/>
<field name="acc_number"/>
<field name="acc_holder_name" invisible="1"/>
</tree>
</field>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_res_partner_filter" model="ir.ui.view">
<field name="name">res.partner.select</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<search string="Search Partner">
<field name="name"
filter_domain="['|', '|', '|', '|', ('display_name', 'ilike', self), ('ref', 'ilike', self), ('email', 'ilike', self), ('vat', 'ilike', self), ('company_registry', 'ilike', self)]"/>
<field name="parent_id" domain="[('is_company', '=', True)]" operator="child_of"/>
<field name="email" filter_domain="[('email', 'ilike', self)]"/>
<field name="phone" filter_domain="['|', ('phone', 'ilike', self), ('mobile', 'ilike', self)]"/>
<field name="category_id" string="Tag" operator="child_of"/>
<field name="user_id"/>
<separator/>
<filter string="Individuals" name="type_person" domain="[('is_company', '=', False)]"/>
<filter string="Companies" name="type_company" domain="[('is_company', '=', True)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
<separator/>
<group expand="0" name="group_by" string="Group By">
<filter name="salesperson" string="Salesperson" domain="[]" context="{'group_by' : 'user_id'}" />
<filter name="group_company" string="Company" context="{'group_by': 'parent_id'}"/>
<filter name="group_country" string="Country" context="{'group_by': 'country_id'}"/>
</group>
</search>
</field>
</record>
<!-- Partner Kanban View -->
<record model="ir.ui.view" id="res_partner_kanban_view">
<field name="name">res.partner.kanban</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<kanban class="o_res_partner_kanban" sample="1">
<field name="id"/>
<field name="color"/>
<field name="display_name"/>
<field name="title"/>
<field name="email"/>
<field name="parent_id"/>
<field name="is_company"/>
<field name="function"/>
<field name="phone"/>
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="mobile"/>
<field name="state_id"/>
<field name="category_id"/>
<field name="avatar_128"/>
<field name="type"/>
<field name="active"/>
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click o_kanban_record_has_image_fill o_res_partner_kanban">
<t t-if="!record.is_company.raw_value">
<t t-set="background_image" t-value="kanban_image('res.partner', 'avatar_128', record.id.raw_value)"/>
<div class="o_kanban_image_fill_left d-none d-md-block" t-attf-style="background-image:url('#{background_image}')">
<img class="o_kanban_image_inner_pic" t-if="record.parent_id.raw_value" t-att-alt="record.parent_id.value" t-att-src="kanban_image('res.partner', 'avatar_128', record.parent_id.raw_value)"/>
</div>
<div class="o_kanban_image d-md-none" t-attf-style="background-image: url(#{background_image})">
<img class="o_kanban_image_inner_pic" t-if="record.parent_id.raw_value" t-att-alt="record.parent_id.value" t-att-src="kanban_image('res.partner', 'avatar_128', record.parent_id.raw_value)"/>
</div>
</t>
<t t-else="">
<div class="o_kanban_image_fill_left o_kanban_image_full" t-attf-style="background-image: url(#{kanban_image('res.partner', 'avatar_128', record.id.raw_value)})" role="img"/>
</t>
<div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">
<span class="bg-danger">Archived</span>
</div>
<div class="oe_kanban_details d-flex flex-column justify-content-between">
<div>
<strong class="o_kanban_record_title oe_partner_heading"><field name="display_name" invisible="1"/></strong>
<strong class="o_kanban_record_title oe_partner_heading"><field name="translated_display_name"/></strong>
<div class="o_kanban_tags_section oe_kanban_partner_categories"/>
<ul>
<li t-if="record.parent_id.raw_value and !record.function.raw_value"><field name="parent_id"/></li>
<li t-elif="!record.parent_id.raw_value and record.function.raw_value"><field name="function"/></li>
<li t-elif="record.parent_id.raw_value and record.function.raw_value"><field name="function"/> at <field name="parent_id"/></li>
<li t-if="record.city.raw_value or record.country_id.raw_value">
<t t-if="record.city.raw_value"><field name="city"/><t t-if="record.country_id.raw_value">, </t></t>
<t t-if="record.country_id.raw_value"><field name="country_id"/></t>
</li>
<li t-if="record.email.raw_value" class="o_text_overflow"><field name="email"/></li>
</ul>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left"/>
<div class="oe_kanban_bottom_right"/>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="action_partner_form" model="ir.actions.act_window">
<field name="name">Customers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{'res_partner_search_mode': 'customer'}</field>
<field name="search_view_id" ref="view_res_partner_filter"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Contact in your address book
</p><p>
Odoo helps you track all activities related to your contacts.
</p>
</field>
</record>
<record id="action_partner_form_view1" model="ir.actions.act_window.view">
<field eval="0" name="sequence"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="res_partner_kanban_view"/>
<field name="act_window_id" ref="action_partner_form"/>
</record>
<record id="action_partner_form_view2" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_partner_form"/>
<field name="act_window_id" ref="action_partner_form"/>
</record>
<record id="action_partner_tree_view1" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_partner_tree"/>
<field name="act_window_id" ref="action_partner_form"/>
</record>
<record id="action_partner_customer_form" model="ir.actions.act_window">
<field name="name">Customers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[]</field>
<field name="context">{'res_partner_search_mode': 'customer', 'default_is_company': True}</field>
<field name="filter" eval="True"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new customer in your address book
</p><p>
Odoo helps you easily track all activities related to a customer.
</p>
</field>
</record>
<record id="action_partner_customer_form_view1" model="ir.actions.act_window.view">
<field eval="1" name="sequence"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="res_partner_kanban_view"/>
<field name="act_window_id" ref="action_partner_customer_form"/>
</record>
<record id="action_partner_customer_form_view2" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_partner_tree"/>
<field name="act_window_id" ref="action_partner_customer_form"/>
</record>
<record id="action_partner_customer_form_view3" model="ir.actions.act_window.view">
<field eval="3" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_partner_form"/>
<field name="act_window_id" ref="action_partner_customer_form"/>
</record>
<record id="action_partner_supplier_form" model="ir.actions.act_window">
<field name="name">Vendors</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="domain">[]</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context">{'res_partner_search_mode': 'supplier', 'default_is_company': True}</field>
<field name="filter" eval="True"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new vendor in your address book
</p><p>
Odoo helps you easily track all activities related to a vendor.
</p>
</field>
</record>
<record id="action_partner_vendor_form_view1" model="ir.actions.act_window.view">
<field eval="1" name="sequence"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="res_partner_kanban_view"/>
<field name="act_window_id" ref="action_partner_supplier_form"/>
</record>
<record id="action_partner_vendor_form_view2" model="ir.actions.act_window.view">
<field eval="2" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_partner_tree"/>
<field name="act_window_id" ref="action_partner_supplier_form"/>
</record>
<record id="action_partner_vendor_form_view3" model="ir.actions.act_window.view">
<field eval="3" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_partner_form"/>
<field name="act_window_id" ref="action_partner_supplier_form"/>
</record>
<!-- Categories -->
<record id="view_partner_category_form" model="ir.ui.view">
<field name="name">Contact Tags</field>
<field name="model">res.partner.category</field>
<field name="arch" type="xml">
<form string="Contact Tag">
<sheet>
<group col="4">
<field name="name" placeholder='e.g. "Consulting Services"'/>
<field name="color" widget="color_picker"/>
<field name="parent_id"/>
<field name="active" widget="boolean_toggle"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_partner_category_list" model="ir.ui.view">
<field name="name">Contact Tags</field>
<field name="model">res.partner.category</field>
<field eval="6" name="priority"/>
<field name="arch" type="xml">
<tree string="Contact Tags">
<field name="display_name"/>
<field name="color" widget="color_picker"/>
</tree>
</field>
</record>
<record id="res_partner_category_view_search" model="ir.ui.view">
<field name="name">res.partner.category.view.search</field>
<field name="model">res.partner.category</field>
<field name="arch" type="xml">
<search string="Search Partner Category">
<field name="name"/>
<field name="display_name"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="action_partner_category_form" model="ir.actions.act_window">
<field name="name">Contact Tags</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.category</field>
<field name="search_view_id" ref="res_partner_category_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Contact Tag
</p><p>
Assign tags to your contacts to organize, filter and track them.
</p>
</field>
</record>
<!-- Industry -->
<record id="res_partner_industry_view_form" model="ir.ui.view">
<field name="name">Industry</field>
<field name="model">res.partner.industry</field>
<field name="arch" type="xml">
<form string="Industry">
<sheet>
<group col="4">
<field name="name"/>
<field name="full_name"/>
<field name="active" widget="boolean_toggle"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="res_partner_industry_view_tree" model="ir.ui.view">
<field name="name">Industry</field>
<field name="model">res.partner.industry</field>
<field eval="6" name="priority"/>
<field name="arch" type="xml">
<tree string="Industry" editable="bottom">
<field name="name"/>
<field name="full_name"/>
<field name="active" invisible="1"/>
</tree>
</field>
</record>
<record id="res_partner_industry_view_search" model="ir.ui.view">
<field name="name">res.partner.industry.view.search</field>
<field name="model">res.partner.industry</field>
<field name="arch" type="xml">
<search string="Search Partner Industry">
<field name="name"/>
<field name="full_name"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="res_partner_industry_action" model="ir.actions.act_window">
<field name="name">Industries</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.industry</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="res_partner_industry_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Industry
</p><p>
Specify industries to classify your contacts and draw up reports.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,562 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="change_password_own_form" model="ir.ui.view">
<field name="name">Change Own Password</field>
<field name="model">change.password.own</field>
<field name="arch" type="xml">
<form string="Change Password">
<group>
<field name="new_password" password="True" required="1"/>
<field name="confirm_password" password="True" required="1"/>
</group>
<footer>
<button string="Change Password" name="change_password" type="object" class="btn-primary" data-hotkey="q"/>
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z" />
</footer>
</form>
</field>
</record>
<!-- change password wizard -->
<record id="change_password_wizard_view" model="ir.ui.view">
<field name="name">Change Password</field>
<field name="model">change.password.wizard</field>
<field name="arch" type="xml">
<form string="Change Password">
<field mode="tree" name="user_ids"/>
<footer>
<button string="Change Password" name="change_password_button" type="object" class="btn-primary" data-hotkey="q"/>
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z" />
</footer>
</form>
</field>
</record>
<record id="change_password_wizard_user_tree_view" model="ir.ui.view">
<field name="name">Change Password Users</field>
<field name="model">change.password.user</field>
<field name="arch" type="xml">
<!-- the user list is editable, but one cannot add or delete rows -->
<tree string="Users" editable="bottom" create="false" delete="false">
<field name="user_id" invisible="1"/>
<field name="user_login" force_save="1"/>
<field name="new_passwd" required="True" password="True" width="20px"/>
</tree>
</field>
</record>
<record id="change_password_wizard_action" model="ir.actions.act_window">
<field name="name">Change Password</field>
<field name="res_model">change.password.wizard</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="base.model_res_users"/>
</record>
<record id="identity_check_wizard" model="ir.ui.view">
<field name="model">res.users.identitycheck</field>
<field name="arch" type="xml">
<form string="Password Confirmation">
<sheet class="bg-primary">
<h3><strong>Please enter your password to confirm you own this account</strong></h3>
<br/>
<div>
<field class="o_field_highlight col-10 col-md-6 px-0" name="password" autocomplete="current-password"
required="True" password="True" placeholder="************"/>
</div>
<a href="/web/reset_password/" class="btn btn-link" role="button">Forgot password?</a>
</sheet>
<footer>
<button string="Confirm Password" type="object" name="run_check" class="btn btn-primary" data-hotkey="q"/>
<button string="Cancel" special="cancel" data-hotkey="z" class="btn btn-secondary"/>
</footer>
</form>
</field>
</record>
<!-- res.groups -->
<record id="view_groups_search" model="ir.ui.view">
<field name="name">res.groups.search</field>
<field name="model">res.groups</field>
<field name="arch" type="xml">
<search string="Groups">
<field name="name" filter_domain="['|', ('full_name','ilike',self), ('category_id','ilike',self)]" string="Group"/>
<separator orientation="vertical"/>
<field name="share"/>
<filter name="filter_no_share" string="Internal Groups" domain="[('share','=',False)]"/>
</search>
</field>
</record>
<record id="view_groups_form" model="ir.ui.view">
<field name="name">res.groups.form</field>
<field name="model">res.groups</field>
<field name="arch" type="xml">
<form string="Groups">
<sheet>
<group col="4">
<field name="category_id"/>
<field name="name"/>
<field name="share"/>
</group>
<notebook>
<page string="Users" name="users">
<field name="users" context="{'search_default_filter_no_share':1}"/>
</page>
<page string="Inherited" name="inherit_groups">
<label for="implied_ids" string="Users added to this group are automatically added in the following groups."/>
<field name="implied_ids"/>
</page>
<page string="Menus" name="menus">
<field name="menu_access"/>
</page>
<page string="Views" name="views">
<field name="view_access" groups="base.group_system"/>
</page>
<page string="Access Rights" name="access_rights">
<field name="model_access">
<tree string="Access Rights" editable="top">
<field name="name"/>
<field name="model_id"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</page>
<page string="Record Rules" name="record_rules">
<field name="rule_groups">
<tree string="Record Rules" editable="top">
<field name="name"/>
<field name="model_id"/>
<field name="domain_force"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</tree>
</field>
</page><page string="Notes" name="notes">
<field name="comment"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_res_groups" model="ir.actions.act_window">
<field name="name">Groups</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.groups</field>
<field name="context">{'search_default_filter_no_share': 1}</field>
<field name="help">A group is a set of functional areas that will be assigned to the user in order to give them access and rights to specific applications and tasks in the system. You can create custom groups or edit the ones existing by default in order to customize the view of the menu that users will be able to see. Whether they can have a read, write, create and delete access right can be managed from here.</field>
</record>
<menuitem action="action_res_groups" id="menu_action_res_groups" parent="base.menu_users" groups="base.group_no_one" sequence="3"/>
<!-- res.users -->
<record id="view_users_simple_form" model="ir.ui.view">
<field name="name">res.users.simplified.form</field>
<field name="model">res.users</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<form string="Users">
<sheet>
<field name="id" invisible="1"/>
<div class="alert alert-info text-center mb-3" attrs="{'invisible': [('id', '>', 0)]}" role="alert">
You are inviting a new user.
</div>
<field name="avatar_128" invisible="1"/>
<field name="image_1920" widget='image' class="oe_avatar" options='{"zoom": true, "preview_image": "avatar_128"}'/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. John Doe" required="1"/></h1>
<field name="email" invisible="1"/>
<label for="login" string="Email Address"/>
<h2>
<field name="login"
placeholder="e.g. email@yourcompany.com"/>
</h2>
<label for="company_id" groups="base.group_multi_company"/>
<field name="company_id" context="{'user_preference': 0}" groups="base.group_multi_company"/>
</div>
<group name="phone_numbers">
<label for="groups_id" string="Access Rights"
attrs="{'invisible': [('id', '>', 0)]}" groups="base.group_no_one"/>
<div attrs="{'invisible': [('id', '>', 0)]}" groups="base.group_no_one">
<field name="groups_id" readonly="1" widget="many2many_tags" options="{'color_field': 'color'}" style="display: inline;"/> You will be able to define additional access rights by editing the newly created user under the Settings / Users menu.
</div>
<field name="phone" widget="phone"/>
<field name="mobile" widget="phone"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.form</field>
<field name="model">res.users</field>
<field name="arch" type="xml">
<form string="Users">
<header>
</header>
<sheet>
<field name="id" invisible="1"/>
<div class="oe_button_box" name="button_box">
<button name="action_show_groups" type="object" groups="base.group_no_one" class="oe_stat_button" icon="fa-users">
<field string="Groups" name="groups_count" widget="statinfo"/>
</button>
<button name="action_show_accesses" type="object" groups="base.group_no_one" class="oe_stat_button" icon="fa-list">
<field string="Access Rights" name="accesses_count" widget="statinfo"/>
</button>
<button name="action_show_rules" type="object" groups="base.group_no_one" class="oe_stat_button" icon="fa-list-ul">
<field string="Record Rules" name="rules_count" widget="statinfo"/>
</button>
</div>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="active_partner" required="0" readonly="1" invisible="1"/>
<div class="alert alert-info text-center o_form_header"
attrs="{'invisible': [
'|', '|',
'&amp;', ('active', '=', True), ('active_partner', '=', True),
'&amp;', ('active', '=', False), ('active_partner', '=', False),
'&amp;', ('active', '=', True), ('active_partner', '=', False),
]}"
role="alert">
<a class="close" data-bs-dismiss="alert" href="#">x</a>
<div>
<strong>The contact linked to this user is still active</strong>
</div>
<div>You can archive the contact
<field name="partner_id" required="0" readonly="1"/>
</div>
</div>
<field name="avatar_128" invisible="1"/>
<field name="image_1920" widget='image' class="oe_avatar" options='{"preview_image": "avatar_128"}'/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. John Doe" required="1"/></h1>
<field name="email" invisible="1"/>
<label for="login" string="Email Address"/>
<h2><field name="login" placeholder="e.g. email@yourcompany.com"/></h2>
<group>
<field name="partner_id" readonly="1" required="0" groups="base.group_no_one"
attrs="{'invisible': [('id', '=', False)]}"/>
<field name="share" invisible="1"/>
</group>
</div>
<notebook colspan="4">
<page name="access_rights" string="Access Rights">
<group string="Multi Companies" attrs="{'invisible': [('companies_count', '&lt;=', 1)]}">
<field string="Allowed Companies" name="company_ids" widget="many2many_tags" options="{'no_create': True}"/>
<field string="Default Company" name="company_id" context="{'user_preference': 0}"/>
<field string="Companies count" name="companies_count" invisible="1"/>
</group>
<field name="groups_id"/>
</page>
<page string="Preferences" name="preferences">
<group>
<group string="Localization" name="preferences">
<field name="active" invisible="1"/>
<label for="lang" />
<div class="o_row">
<field name="lang" required="1"/>
<button
type="action"
name="%(base.action_view_base_language_install)d"
class="oe_edit_only btn-sm btn-link mb4 fa fa-globe"
aria-label="Add a language"
title="Add a language"/>
</div>
<field name="tz" widget="timezone_mismatch" options="{'tz_offset_field': 'tz_offset'}" />
<field name="tz_offset" invisible="1"/>
</group>
<group string="Menus Customization" groups="base.group_no_one"
attrs="{'invisible': [('share', '=', True)]}">
<field name="action_id"/>
</group>
</group>
<group name="messaging">
<field name="signature" options="{'style-inline': true, 'codeview': true}"/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_users_tree" model="ir.ui.view">
<field name="name">res.users.tree</field>
<field name="model">res.users</field>
<field name="arch" type="xml">
<tree string="Users">
<field name="name"/>
<field name="login"/>
<field name="lang"/>
<field name="login_date"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
<record id="view_res_users_kanban" model="ir.ui.view">
<field name="name">res.users.kanban</field>
<field name="model">res.users</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="id"/>
<field name="name"/>
<field name="login"/>
<field name="lang"/>
<field name="active"/>
<field name="login_date"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_global_click">
<div class="o_kanban_image">
<img alt="Avatar" t-att-src="kanban_image('res.users', 'avatar_128', record.id.raw_value)"/>
</div>
<div class="oe_kanban_details">
<ul>
<li class="text-success float-end mb4" t-if="record.active.raw_value"><i class="fa fa-circle" role="img" aria-label="Ok" title="Ok"></i></li>
<li class="text-danger float-end mb4" t-if="!record.active.raw_value"><i class="fa fa-circle" role="img" aria-label="Invalid" title="Invalid"></i></li>
<li class="mb4">
<strong><field name="name"/></strong>
</li>
<li class="badge rounded-pill float-end mb4" t-if="record.lang.raw_value"><field name="lang"/></li>
<li class="mb4" t-if="record.login.raw_value" title="Login"><i class="fa fa-envelope" role="img" aria-label="Login"/> <field name="login"/></li>
</ul>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_users_search" model="ir.ui.view">
<field name="name">res.users.search</field>
<field name="model">res.users</field>
<field name="arch" type="xml">
<search string="Users">
<field name="name" filter_domain="['|', '|', ('name','ilike',self), ('login','ilike',self), ('email','ilike',self)]" string="User"/>
<field name="company_ids" string="Company" groups="base.group_multi_company"/>
<field name="share"/>
<filter name="filter_no_share" string="Internal Users" domain="[('share', '=', False)]"/>
<filter name="filter_share" string="Portal Users" domain="[('share', '=', True)]"/>
<separator/>
<filter name="Inactive" string="Inactive Users" domain="[('active','=',False)]"/>
</search>
</field>
</record>
<record id="user_groups_view" model="ir.ui.view">
<field name="name">res.users.groups</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="view_users_form"/>
<field name="arch" type="xml">
<!-- dummy, will be modified by groups -->
<field name="groups_id" position="after"/>
</field>
</record>
<!-- dummy update on group, to force the view above to be update -->
<record model="res.groups" id="group_no_one"/>
<record id="action_res_users" model="ir.actions.act_window">
<field name="name">Users</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.users</field>
<field name="view_mode">tree,kanban,form</field>
<field name="view_id" ref="view_users_tree"/>
<field name="search_view_id" ref="view_users_search"/>
<field name="context">{'search_default_filter_no_share': 1, 'show_user_group_warning': True}</field>
<field name="help">Create and manage users that will connect to the system. Users can be deactivated should there be a period of time during which they will/should not connect to the system. You can assign them groups in order to give them specific access to the applications they need to use in the system.</field>
</record>
<record id="action_res_users_view1" model="ir.actions.act_window.view">
<field eval="10" name="sequence"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="view_users_tree"/>
<field name="act_window_id" ref="action_res_users"/>
</record>
<record id="action_res_users_view2" model="ir.actions.act_window.view">
<field eval="20" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_users_form"/>
<field name="act_window_id" ref="action_res_users"/>
</record>
<menuitem action="action_res_users" id="menu_action_res_users" parent="base.menu_users" sequence="0"/>
<record id="action_res_users_keys_description" model="ir.actions.act_window">
<field name="name">API Key: description input wizard</field>
<field name="res_model">res.users.apikeys.description</field>
<field name="target">new</field>
<field name="view_mode">form</field>
</record>
<record id="form_res_users_key_description" model="ir.ui.view">
<field name="name">API Key: description input form</field>
<field name="model">res.users.apikeys.description</field>
<field name="arch" type="xml">
<form>
<sheet>
<h3 class="fw-bold">
Name your key
</h3>
<p>Enter a description of and purpose for the key.</p>
<field name="name" placeholder="What's this key for?"/>
<p>
It is very important that this description be clear
and complete, <strong>it will be the only way to
identify the key once created</strong>.
</p>
<footer>
<button name="make_key" type="object" string="Generate key" class="btn-primary" data-hotkey="q"/>
<button special="cancel" data-hotkey="z" string="Cancel" class="btn-secondary"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="form_res_users_key_show" model="ir.ui.view">
<field name="name">API Key: show</field>
<field name="model">res.users.apikeys.show</field>
<field name="arch" type="xml">
<form>
<sheet>
<h3 class="fw-bold">
Write down your key
</h3>
<p>
Here is your new API key, use it instead of a password for RPC access.
Your login is still necessary for interactive usage.
</p>
<p><code><field name="key" readonly="True"/></code></p>
<p class="alert alert-warning" role="alert">
<strong>Important:</strong>
The key cannot be retrieved later and provides <b>full access</b>
to your user account, it is very important to store it securely.
</p>
<footer>
<button special="cancel" data-hotkey="z" string="Done!"/>
</footer>
</sheet>
</form>
</field>
</record>
<record id="view_users_form_simple_modif" model="ir.ui.view">
<field name="name">res.users.preferences.form</field>
<field name="model">res.users</field>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<form string="Users" edit="1">
<field name="avatar_128" invisible="1"/>
<field name="image_1920" readonly="0" widget='image' class="oe_right oe_avatar" options='{"preview_image": "avatar_128"}'/>
<h1>
<field name="name" readonly="1" class="oe_inline"/>
</h1>
<notebook>
<page string="Preferences" name="preferences_page">
<group name="preferences">
<group>
<field name="email" widget="email" readonly="0"/>
</group>
<group>
<label for="lang"/>
<div class="o_row">
<field name="lang" required="1" readonly="0"/>
<button
type="action"
name="%(base.action_view_base_language_install)d"
class="oe_edit_only btn-sm btn-link mb4 fa fa-globe"
aria-label="Add a language"
groups="base.group_system"
title="Add a language"
/>
</div>
<field name="tz" widget="timezone_mismatch" options="{'tz_offset_field': 'tz_offset'}" readonly="0"/>
<field name="tz_offset" invisible="1"/>
</group>
<field name="share" invisible="1"/>
</group>
<group name="signature">
<field name="signature" readonly="0" options="{'style-inline': true, 'codeview': true}"/>
</group>
<group name="status" string="Status" invisible="1">
<field name="company_id" options="{'no_create': True}" readonly="0"
groups="base.group_multi_company"/>
</group>
<group name="preference_contact"></group>
</page>
<page string="Account Security">
<group name="auth" string="Password Management">
<div colspan="2">
<button name="preference_change_password" type="object" string="Change password" class="btn btn-secondary"/>
</div>
</group>
<group string="API Keys">
<div class="text-muted" colspan="2">
API Keys are used to connect to Odoo from external tools without the need for a password or Two-factor Authentication.
<a href="https://www.odoo.com/documentation/16.0/developer/misc/api/external_api.html#api-keys" target="_blank">
<i title="Documentation" class="fa fa-fw o_button_icon fa-info-circle"></i>
Learn more
</a>
</div>
<div colspan="2" attrs="{'invisible': [('api_key_ids', '=', [])]}">
<field name="api_key_ids" nolabel="1" colspan="4" readonly="0">
<tree editable="bottom" create="false" delete="false">
<field name="name"/>
<field name="scope"/>
<field name="create_date"/>
<button type="object" name="remove"
string="Delete API key." icon="fa-trash"/>
</tree>
</field>
</div>
<div colspan="2">
<button name="api_key_wizard" string="New API Key" type="object" class="btn btn-secondary"/>
</div>
</group>
</page>
</notebook>
<footer>
<button name="preference_save" type="object" string="Save" class="btn-primary" data-hotkey="q"/>
<button name="preference_cancel" string="Cancel" special="cancel" data-hotkey="z" class="btn-secondary"/>
</footer>
</form>
</field>
</record>
<record id="action_res_users_my" model="ir.actions.act_window">
<field name="name">Change My Preferences</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.users</field>
<field name="target">new</field>
<field name="view_mode">form</field>
</record>
<record id="action_res_users_my_view2" model="ir.actions.act_window.view">
<field eval="10" name="sequence"/>
<field name="view_mode">form</field>
<field name="view_id" ref="view_users_form_simple_modif"/>
<field name="act_window_id" ref="action_res_users_my"/>
</record>
<record model="ir.ui.view" id="view_apikeys">
<field name="name">API Keys Listing</field>
<field name="model">res.users.apikeys</field>
<field name="groups_id" eval="[Command.link(ref('base.group_system'))]"/>
<field name="arch" type="xml">
<tree create="false" edit="false" delete="false" editable="bottom">
<field name="user_id"/>
<field name="name"/>
<field name="scope"/>
<field name="create_date"/>
<button type="object" name="remove" title="Delete API key." icon="fa-trash"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_apikeys_admin">
<field name="name">API Keys Listing</field>
<field name="res_model">res.users.apikeys</field>
<field name="view_mode">tree</field>
<field name="groups_id" eval="[Command.link(ref('base.group_system'))]"/>
<field name="view_id" ref="base.view_apikeys"/>
</record>
</data>
</odoo>