mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-20 08:52:08 +02:00
17.0 vanilla
This commit is contained in:
parent
2e65bf056a
commit
df627a6bba
328 changed files with 578149 additions and 759311 deletions
|
|
@ -1,34 +1,34 @@
|
|||
<?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"/>
|
||||
groups="base.group_erp_manager">
|
||||
<menuitem id="menu_administration_shortcut" 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 & 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_users" name="Users & Companies" sequence="1"/>
|
||||
<menuitem id="menu_translation" name="Translations" sequence="2" groups="base.group_no_one">
|
||||
<menuitem id="menu_translation_app" name="Application Terms" sequence="4" groups="base.group_no_one"/>
|
||||
<menuitem id="menu_translation_export" name="Import / Export" sequence="3" groups="base.group_no_one"/>
|
||||
</menuitem>
|
||||
|
||||
<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="menu_config" name="General Settings" sequence='3'/>
|
||||
|
||||
<menuitem id="base.menu_tests" name="Tests" sequence="1000" web_icon="test_exceptions,static/description/icon.svg"/>
|
||||
<menuitem id="menu_custom" name="Technical" sequence="110" groups="base.group_no_one">
|
||||
<menuitem id="next_id_2" name="User Interface"/>
|
||||
<menuitem id="menu_email" name="Email" sequence="1"/>
|
||||
<menuitem id="next_id_9" name="Database Structure"/>
|
||||
<menuitem id="menu_automation" name="Automation"/>
|
||||
<menuitem id="menu_security" name="Security" sequence="25"/>
|
||||
<menuitem id="menu_ir_property" name="Parameters" sequence="24"/>
|
||||
</menuitem>
|
||||
</menuitem>
|
||||
|
||||
<menuitem id="menu_management" name="Apps" sequence="500" web_icon="base,static/description/modules.png" groups="base.group_system"/>
|
||||
<menuitem id="base.menu_tests" name="Tests" sequence="1000" web_icon="test_exceptions,static/description/icon.png"/>
|
||||
|
||||
<record model="ir.ui.menu" id="base.menu_administration">
|
||||
<field name="groups_id" eval="[Command.set([ref('group_system'), ref('group_erp_manager')])]"/>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<form string="Decimal Precision">
|
||||
<sheet>
|
||||
<group col="4">
|
||||
<field name="name" attrs="{'readonly': [('id', '!=', False)]}"/>
|
||||
<field name="name" readonly="id"/>
|
||||
<field name="digits"/>
|
||||
</group>
|
||||
</sheet>
|
||||
|
|
|
|||
|
|
@ -33,12 +33,16 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Action">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('type','ilike',self)]" string="Action"/>
|
||||
<group>
|
||||
<filter string="Action Type" name="type" context="{'group_by':'type'}"/>
|
||||
<filter string="Binding Type" name="binding_type" context="{'group_by':'binding_type'}"/>
|
||||
<filter string="Binding Model" name="binding_model_id" context="{'group_by':'binding_model_id'}"/>
|
||||
</group>
|
||||
</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"/>
|
||||
|
|
@ -56,22 +60,34 @@
|
|||
<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"/>
|
||||
<button name="create_action" type="object"
|
||||
invisible="binding_model_id" icon="fa-plus-square"
|
||||
help="Display an option on related documents to print this report" class="oe_stat_button">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text">Add to the 'Print' menu</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="unlink_action" type="object"
|
||||
invisible="not binding_model_id" icon="fa-minus-square"
|
||||
help="Remove the contextual action related to this report" class="oe_stat_button">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text">Remove from the 'Print' menu</span>
|
||||
</div>
|
||||
</button>
|
||||
<button name="associated_view" type="object"
|
||||
invisible="report_type not in ['qweb-pdf', 'qweb-html', 'qweb-text']" icon='fa-code'
|
||||
class="oe_stat_button">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text">Qweb Views</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="report_type"/>
|
||||
<field name="paperformat_id"
|
||||
attrs="{'invisible':[('report_type','not in',['qweb-pdf'])]}"/>
|
||||
invisible="report_type != 'qweb-pdf'"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="model"/>
|
||||
|
|
@ -80,7 +96,7 @@
|
|||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="security" string="Security">
|
||||
<page name="security" string="Visibility">
|
||||
<field name="groups_id"/>
|
||||
</page>
|
||||
<page name='advanced' string="Advanced Properties">
|
||||
|
|
@ -126,13 +142,41 @@
|
|||
</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.client -->
|
||||
|
||||
<record id="view_client_action_form" model="ir.ui.view">
|
||||
<field name="name">ir.actions.client.form</field>
|
||||
<field name="model">ir.actions.client</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Client Action">
|
||||
<sheet>
|
||||
<group>
|
||||
<group name="main_details">
|
||||
<field name="name"/>
|
||||
<field name="xml_id" string="External ID"/>
|
||||
<field name="binding_type"/>
|
||||
<field name="tag"/>
|
||||
</group>
|
||||
<group name="action_details">
|
||||
<field name="type" readonly="1"/>
|
||||
<field name="target"/>
|
||||
<field name="context"/>
|
||||
</group>
|
||||
</group>
|
||||
<group name="help" string="Help">
|
||||
<field name="help" colspan="2" nolabel="1" class="oe-bordered-editor"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ir.actions.act_window -->
|
||||
|
||||
<record id="view_window_action_tree" model="ir.ui.view">
|
||||
|
|
@ -171,6 +215,7 @@
|
|||
<group>
|
||||
<group name="views" string="Views">
|
||||
<field name="view_mode"/>
|
||||
<field name="mobile_view_mode"/>
|
||||
<field name="view_id"/>
|
||||
<field name="search_view_id"/>
|
||||
</group>
|
||||
|
|
@ -182,7 +227,7 @@
|
|||
</group>
|
||||
</group>
|
||||
<group name="help" string="Help">
|
||||
<field colspan="2" name="help" nolabel="1" class="oe-bordered-editor"/>
|
||||
<field colspan="2" name="help" options="{'codeview': true}" nolabel="1" class="oe-bordered-editor"/>
|
||||
</group>
|
||||
<group name="views_tree" string="Views">
|
||||
<field colspan="2" name="view_ids" nolabel="1">
|
||||
|
|
@ -201,7 +246,7 @@
|
|||
</field>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Security" name="security">
|
||||
<page string="Visibility" name="security">
|
||||
<field name="groups_id"/>
|
||||
</page>
|
||||
</notebook>
|
||||
|
|
@ -215,12 +260,15 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Open a Window">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('res_model','ilike',self)]" string="Action"/>
|
||||
<group>
|
||||
<filter string="Binding Model" name="binding_model_id" context="{'group_by':'binding_model_id'}"/>
|
||||
<filter string="Target Window" name="target" context="{'group_by':'target'}"/>
|
||||
</group>
|
||||
</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>
|
||||
|
|
@ -238,6 +286,24 @@
|
|||
</record>
|
||||
<menuitem action="ir_action_window" id="menu_ir_action_window" parent="base.next_id_6"/>
|
||||
|
||||
<record id="view_client_action_tree" model="ir.ui.view">
|
||||
<field name="name">Client Actions</field>
|
||||
<field name="model">ir.actions.client</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Client Actions">
|
||||
<field name="name"/>
|
||||
<field name="tag"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="ir_client_actions_report" model="ir.actions.act_window">
|
||||
<field name="name">Client Actions</field>
|
||||
<field name="res_model">ir.actions.client</field>
|
||||
<field name="view_id" ref="view_client_action_tree"/>
|
||||
</record>
|
||||
<menuitem action="ir_client_actions_report" id="menu_ir_client_actions_report" parent="base.next_id_6"/>
|
||||
|
||||
<!-- ir.actions.server -->
|
||||
|
||||
<record id="view_server_action_form" model="ir.ui.view">
|
||||
|
|
@ -249,105 +315,123 @@
|
|||
<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)]}"
|
||||
invisible="binding_model_id"
|
||||
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)]}"
|
||||
invisible="not binding_model_id"
|
||||
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')]}"
|
||||
invisible="model_name != 'ir.actions.server' or 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>
|
||||
<h1 class="oe_title">
|
||||
<field name="name" placeholder="e.g. Mass archive contacts"/>
|
||||
</h1>
|
||||
<div class="d-flex flex-column">
|
||||
<label for="state"/>
|
||||
<field name="state" widget="selection_badge" options="{'size': 'sm'}"/>
|
||||
</div>
|
||||
<group string="Technical Settings" groups="base.group_no_one">
|
||||
<group>
|
||||
<field name="model_id" options="{'no_create': True, 'no_open': True}" />
|
||||
<field name="groups_id" widget="many2many_tags" />
|
||||
</group>
|
||||
</group>
|
||||
<separator string="Action Details" groups="base.group_no_one" />
|
||||
<div class="d-flex flex-row flex-wrap gap-2" invisible="state != 'object_write'">
|
||||
<field name="evaluation_type" class="oe_inline"/>
|
||||
<field name="update_path" widget="DynamicModelFieldSelectorChar" class="oe_inline" options="{'model': 'model_name'}"/>
|
||||
<field name="update_field_id" invisible="1"/>
|
||||
<field name="value_field_to_show" invisible="1"/>
|
||||
<field name="update_related_model_id" invisible="1"/>
|
||||
<field name="update_field_type" invisible="1"/>
|
||||
<span invisible="evaluation_type != 'value' or update_field_type not in ['one2many', 'many2many']">by</span>
|
||||
<field name="update_m2m_operation" class="oe_inline" invisible="evaluation_type != 'value' or update_field_type not in ['one2many', 'many2many']" required="update_field_type in ['one2many', 'many2many']"/>
|
||||
<span invisible="evaluation_type != 'value' or update_field_type in ['one2many', 'many2many']">to</span>
|
||||
<field name="value" class="oe_inline" placeholder="Set a value..." invisible="update_field_id == False or value_field_to_show != 'value' or evaluation_type != 'value'" string="Custom Value"/>
|
||||
<field name="resource_ref" class="oe_inline" placeholder="Choose a value..." string="Custom Value" options="{'model_field': 'update_related_model_id', 'no_create': True, 'no_open': True}" invisible=" update_field_id == False or value_field_to_show != 'resource_ref' or evaluation_type == 'equation' or update_m2m_operation == 'clear'"/>
|
||||
<field name="selection_value" class="oe_inline" placeholder="Choose a value..." options="{'no_create': True, 'no_open': True}" invisible=" update_field_id == False or value_field_to_show != 'selection_value' or evaluation_type == 'equation'"/>
|
||||
<field name="update_boolean_value" class="oe_inline" invisible="evaluation_type != 'value' or value_field_to_show != 'update_boolean_value'" required="value_field_to_show == 'update_boolean_value'"/>
|
||||
<span invisible="update_field_id != False or evaluation_type == 'equation'" class="text-muted">Set a value...</span>
|
||||
<span invisible="evaluation_type != 'equation'">
|
||||
to this Python expression:
|
||||
</span>
|
||||
<div class="w-100 d-flex flex-row gap-3" invisible="evaluation_type != 'equation'">
|
||||
<field name="value" class="w-50" widget="code" options="{'mode': 'python'}" string="Expression"/>
|
||||
<div class="w-50 opacity-75">
|
||||
<span colspan="2" class="text-muted"> Available variables: </span>
|
||||
<ul colspan="2" class="text-muted">
|
||||
<li><code>env</code>: environment on which the action is triggered</li>
|
||||
<li><code>model</code>: 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</li>
|
||||
<li><code>records</code>: recordset of all records on which the action is triggered in multi mode</li>
|
||||
<li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li>
|
||||
<li><code>float_compare()</code>: utility function to compare floats based on a specific precision</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</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="available_model_ids" invisible="1"/>
|
||||
<field name="model_id" options="{'no_create': True, 'no_open': True}" groups="!base.group_no_one" invisible="context.get('default_model_id')"
|
||||
domain="[('id', 'in', available_model_ids)]"/>
|
||||
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="crud_model_id"
|
||||
options="{'no_create': True}"
|
||||
attrs="{'invisible': [('state', '!=', 'object_create')], 'required': [('state', '=', 'object_create')]}"/>
|
||||
options="{'no_create': True, 'no_open': True}"
|
||||
invisible="state != 'object_create'"
|
||||
required="state == 'object_create'"/>
|
||||
<field name="crud_model_name" invisible="1"/>
|
||||
<field name="value" widget="char" string="Name" invisible="state != 'object_create'"
|
||||
help="The name of the record to create" placeholder="e.g. Follow-up"/>
|
||||
<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')]}"
|
||||
placeholder="Select a field to link the record to"
|
||||
options="{'no_create': True, 'no_open': True}"
|
||||
invisible="state != 'object_create'"
|
||||
context="{'default_model_id': model_id, 'default_relation': crud_model_name}"/>
|
||||
</group>
|
||||
<field name="webhook_url" string="URL" invisible="state != 'webhook'" placeholder="e.g. https://maker.ifttt.com/use/..."/>
|
||||
<field name="webhook_field_ids" string="Fields" invisible="state != 'webhook'" widget="many2many_tags" context="{'hide_model': 1}" domain="[('model_id', '=', model_id)]" placeholder="Select fields to include in the request..."/>
|
||||
</group>
|
||||
<group invisible="state != 'webhook'">
|
||||
<label for="webhook_sample_payload" />
|
||||
<field name="webhook_sample_payload" string="Sample Payload" nolabel="1" colspan="2" readonly="1" widget="code" options="{'mode': 'js'}" />
|
||||
</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."/>
|
||||
<field name="child_ids" domain="[('model_id', '=', model_id)]" invisible="state != 'multi'"/>
|
||||
<p class="oe_grey" invisible="state != 'multi'">
|
||||
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>
|
||||
<notebook invisible="state != 'code'">
|
||||
<page string="Code">
|
||||
<field name="code" invisible="state != 'code'" widget="code" 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
|
||||
<page string="Help">
|
||||
<p>The following variables can be used:</p>
|
||||
<ul>
|
||||
<li><code>env</code>: environment on which the action is triggered</li>
|
||||
<li><code>model</code>: 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>float_compare()</code>: utility function to compare floats based on a specific precision</li>
|
||||
<li><code>log(message, level='info')</code>: logging function to record debug information in <code>ir.logging</code> table</li>
|
||||
<li><code>_logger.info(message)</code>: logger to emit messages in server logs</li>
|
||||
<li><code>UserError</code>: exception class for raising user-facing warning messages</li>
|
||||
<li><code>Command</code>: x2many commands namespace</li>
|
||||
<li>To return an action, assign: <code>action = {...}</code></li>
|
||||
</ul>
|
||||
<div >
|
||||
<p>Example of Python code:</p>
|
||||
<pre style='white-space: pre-wrap'>partner_name = record.name + '_code'
|
||||
env['res.partner'].create({'name': partner_name})
|
||||
</code>
|
||||
</div>
|
||||
</pre>
|
||||
</div>
|
||||
</page>
|
||||
</notebook>
|
||||
|
|
@ -360,7 +444,6 @@ env['res.partner'].create({'name': partner_name})
|
|||
<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"/>
|
||||
|
|
@ -386,7 +469,6 @@ env['res.partner'].create({'name': partner_name})
|
|||
</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"/>
|
||||
|
|
@ -405,8 +487,8 @@ env['res.partner'].create({'name': partner_name})
|
|||
<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"
|
||||
<button name="action_launch" invisible="state != 'open'" string="Launch" type="object" icon="fa-cogs" help="Launch Configuration Wizard"/>
|
||||
<button name="action_open" invisible="state != 'done'"
|
||||
string="Todo" type="object" help="Set as Todo"
|
||||
icon="fa-exchange"/>
|
||||
</tree>
|
||||
|
|
@ -419,10 +501,10 @@ env['res.partner'].create({'name': partner_name})
|
|||
<form string="Config Wizard Steps">
|
||||
<header>
|
||||
<button name="action_launch"
|
||||
states="open" string="Launch"
|
||||
type="object" icon="fa-cogs" class="oe_highlight"
|
||||
invisible="state != 'open'" string="Launch"
|
||||
type="object" icon="fa-cogs" class="oe_highlight"
|
||||
help="Launch Configuration Wizard"/>
|
||||
<button name="action_open" states="done"
|
||||
<button name="action_open" invisible="state != '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" />
|
||||
|
|
@ -441,7 +523,7 @@ env['res.partner'].create({'name': partner_name})
|
|||
<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"/>
|
||||
<filter string="To Do" name="todo" domain="[('state','=','open')]" help="Wizards to be Launched"/>
|
||||
<field name="action_id"/>
|
||||
<field name="state"/>
|
||||
</search>
|
||||
|
|
@ -456,7 +538,6 @@ env['res.partner'].create({'name': partner_name})
|
|||
<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">
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="target" attrs="{'invisible': [('directive', 'not in', ['after', 'before', 'replace'])]}"/>
|
||||
<field name="target" invisible="directive not in ('after', 'before', 'replace')"/>
|
||||
<field name="path"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
@ -51,7 +51,6 @@
|
|||
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -11,10 +11,11 @@
|
|||
<field name="name"/>
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<group class="w-100">
|
||||
<field name="type"/>
|
||||
<field name="datas" filename="name" attrs="{'invisible':[('type','=','url')]}"/>
|
||||
<field name="url" widget="url" attrs="{'invisible':[('type','=','binary')]}"/>
|
||||
<label for="datas" class="mt-1" invisible="type == 'url'"/>
|
||||
<field name="datas" nolabel="1" class="w-100" filename="name" invisible="type == 'url'"/>
|
||||
<field name="url" widget="url" invisible="type == 'binary'"/>
|
||||
<field name="mimetype" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group string="Attached To" groups="base.group_no_one">
|
||||
|
|
@ -25,7 +26,7 @@
|
|||
<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)]}">
|
||||
<group string="History" groups="base.group_no_one" invisible="not create_date">
|
||||
<label for="create_uid" string="Creation"/>
|
||||
<div name="creation_div">
|
||||
<field name="create_uid" readonly="1" class="oe_inline"/> on
|
||||
|
|
@ -85,7 +86,6 @@
|
|||
</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"/>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<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')]}"/>
|
||||
<button name="method_direct_trigger" type="object" string="Run Manually" class="oe_highlight" invisible="state != 'code'"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='unlink_action']" position="replace">
|
||||
</xpath>
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
<field name="interval_number"/>
|
||||
<field name="interval_type"/>
|
||||
<field name="numbercall"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="user_id" column_invisible="True"/>
|
||||
<field name="active"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@
|
|||
|
||||
<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"/>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@
|
|||
</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"
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@
|
|||
name="test_smtp_connection" class="btn-primary"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger"
|
||||
attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger"
|
||||
invisible="active"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name" placeholder="e.g. My Outgoing Server"/>
|
||||
<field name="from_filter"/>
|
||||
<field name="from_filter" placeholder="e.g. email@domain.com, domain.com"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sequence"/>
|
||||
|
|
@ -28,25 +28,28 @@
|
|||
</group>
|
||||
<group>
|
||||
<div class="text-muted fst-italic" role="alert" colspan="2"
|
||||
attrs="{'invisible': [('smtp_authentication_info', '=', False)]}">
|
||||
invisible="not smtp_authentication_info">
|
||||
<field name="smtp_authentication_info"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<notebook colspan="4"
|
||||
invisible="smtp_authentication == 'cli'">
|
||||
<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"/>
|
||||
<field name="smtp_host"
|
||||
required="smtp_authentication != 'cli'"/>
|
||||
<field name="smtp_port" options="{'format': false}"
|
||||
required="smtp_authentication != 'cli'"/>
|
||||
</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"/>
|
||||
<field name="smtp_user" invisible="smtp_authentication == 'certificate'" force_save="1"/>
|
||||
<field name="smtp_pass" invisible="smtp_authentication != 'login'" password="True" force_save="1"/>
|
||||
<field name="smtp_ssl_certificate" invisible="smtp_authentication != 'certificate'" force_save="1"/>
|
||||
<field name="smtp_ssl_private_key" invisible="smtp_authentication != 'certificate'" force_save="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
|
@ -60,7 +63,7 @@
|
|||
<field name="model">ir.mail_server</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Outgoing Mail Servers">
|
||||
<field name="sequence"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="smtp_host"/>
|
||||
<field name="smtp_user"/>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
</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" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -37,9 +37,9 @@
|
|||
<group>
|
||||
<field name="id" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="model" attrs="{'readonly': [('id', '!=', False)]}"/>
|
||||
<field name="model" readonly="id"/>
|
||||
<field name="order"/>
|
||||
<field name="transient" attrs="{'readonly': [('id', '!=', False)]}" groups="base.group_no_one"/>
|
||||
<field name="transient" readonly="id" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="state" readonly="1" groups="base.group_no_one"/>
|
||||
|
|
@ -81,38 +81,37 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="translate"
|
||||
attrs="{'readonly': [('ttype','not in',['char','text','html'])],
|
||||
'invisible': [('ttype','not in',['char','text','html'])]}"/>
|
||||
invisible="ttype not in ['char', 'text', 'html']"
|
||||
readonly="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'])]}"/>
|
||||
invisible="ttype not in ['char', 'reference']"
|
||||
readonly="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'])]}"/>
|
||||
invisible="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
readonly="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
required="ttype in ['many2one', 'one2many', 'many2many']"/>
|
||||
<field name="on_delete" groups="base.group_no_one"
|
||||
attrs="{'readonly': [('ttype','!=','many2one')],
|
||||
'invisible': [('ttype','!=','many2one')]}"/>
|
||||
invisible="ttype != 'many2one'"
|
||||
readonly="ttype != 'many2one'"/>
|
||||
<field name="relation_field"
|
||||
attrs="{'required': [('ttype','=','one2many')],
|
||||
'readonly': [('ttype','!=','one2many')],
|
||||
'invisible': [('ttype','!=','one2many')]}"/>
|
||||
invisible="ttype != 'one2many'"
|
||||
readonly="ttype != 'one2many'"
|
||||
required="ttype == 'one2many'"/>
|
||||
<field name="relation_table" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or state != 'manual'"/>
|
||||
<field name="column1" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or state != 'manual'"/>
|
||||
<field name="column2" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or 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'])]}"/>
|
||||
invisible="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
readonly="ttype not in ['many2one', 'one2many', 'many2many']"/>
|
||||
</group>
|
||||
</group>
|
||||
<group attrs="{'readonly': [('ttype','not in',['selection','reference'])],
|
||||
'invisible': [('ttype','not in',['selection','reference'])]}">
|
||||
<group invisible="ttype not in ['selection', 'reference']" readonly="ttype not in ['selection', 'reference']">
|
||||
<field name="selection_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
|
|
@ -123,8 +122,8 @@
|
|||
</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'}"/>
|
||||
<field name="depends" required="compute not in [False, '']"/>
|
||||
<field name="compute" widget="code" options="{'mode': 'python'}"/>
|
||||
</group>
|
||||
<div groups="base.group_no_one">
|
||||
<h3>How to define a computed field</h3>
|
||||
|
|
@ -254,7 +253,7 @@
|
|||
<group>
|
||||
<field name="name"/>
|
||||
<field name="field_description"/>
|
||||
<field name="model_id" attrs="{'readonly': [('state','!=', 'manual')]}"/>
|
||||
<field name="model_id" readonly="state != 'manual'"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="ttype"/>
|
||||
|
|
@ -273,41 +272,73 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="translate"
|
||||
attrs="{'readonly': [('ttype','not in',['char','text','html'])],
|
||||
'invisible': [('ttype','not in',['char','text','html'])]}"/>
|
||||
invisible="ttype not in ['char', 'text', 'html']"
|
||||
readonly="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'])]}"/>
|
||||
invisible="ttype not in ['char', 'reference']"
|
||||
readonly="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'])]}"/>
|
||||
invisible="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
readonly="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
required="ttype 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'])]}"/>
|
||||
invisible="ttype not in ['many2one', 'selection']"
|
||||
readonly="ttype not in ['many2one', 'selection']"/>
|
||||
<field name="on_delete" groups="base.group_no_one"
|
||||
attrs="{'readonly': [('ttype','!=','many2one')],
|
||||
'invisible': [('ttype','!=','many2one')]}"/>
|
||||
invisible="ttype != 'many2one'"
|
||||
readonly="ttype != 'many2one'"/>
|
||||
<field name="relation_field"
|
||||
attrs="{'required': [('ttype','=','one2many')],
|
||||
'readonly': [('ttype','!=','one2many')],
|
||||
'invisible': [('ttype','!=','one2many')]}"/>
|
||||
invisible="ttype != 'one2many'"
|
||||
readonly="ttype != 'one2many'"
|
||||
required="ttype == 'one2many'"/>
|
||||
<field name="relation_table" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or state != 'manual'"/>
|
||||
<field name="column1" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or state != 'manual'"/>
|
||||
<field name="column2" groups="base.group_no_one"
|
||||
attrs="{'readonly': ['|', ('ttype','!=','many2many'), ('state','!=','manual')],
|
||||
'invisible': ['|', ('ttype','!=','many2many'), ('state','!=','manual')]}"/>
|
||||
invisible="ttype != 'many2many' or state != 'manual'"
|
||||
readonly="ttype != 'many2many' or 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'])]}"/>
|
||||
invisible="ttype not in ['many2one', 'one2many', 'many2many']"
|
||||
readonly="ttype not in ['many2one', 'one2many', 'many2many']"/>
|
||||
<field name="currency_field"
|
||||
invisible="ttype != 'monetary'"
|
||||
readonly="ttype != 'monetary'"/>
|
||||
</group>
|
||||
</group>
|
||||
<group attrs="{'readonly': [('ttype','not in',['selection','reference'])],
|
||||
'invisible': [('ttype','not in',['selection','reference'])]}">
|
||||
<group string="HTML/Sanitization Properties">
|
||||
<group>
|
||||
<field name="sanitize"
|
||||
invisible="ttype != 'html'"
|
||||
readonly="ttype != 'html'" />
|
||||
<field name="sanitize_overridable"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
<field name="sanitize_tags"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
<field name="sanitize_attributes"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="sanitize_style"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
<field name="sanitize_form"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
<field name="strip_style"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
<field name="strip_classes"
|
||||
invisible="ttype != 'html' or sanitize == False"
|
||||
readonly="ttype != 'html' or sanitize == False" />
|
||||
</group>
|
||||
</group>
|
||||
<group invisible="ttype not in ['selection', 'reference']" readonly="ttype not in ['selection', 'reference']">
|
||||
<field name="selection_ids">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
|
|
@ -318,8 +349,8 @@
|
|||
</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'}"/>
|
||||
<field name="depends" required="compute not in [False, '']"/>
|
||||
<field name="compute" widget="code" options="{'mode': 'python'}"/>
|
||||
</group>
|
||||
<div groups="base.group_no_one">
|
||||
<h3>How to define a computed field</h3>
|
||||
|
|
@ -495,7 +526,7 @@
|
|||
<field name="complete_name"/>
|
||||
<field name="display_name"/>
|
||||
<field name="model" groups="base.group_no_one"/>
|
||||
<field name="module" invisible="1"/>
|
||||
<field name="module" column_invisible="True"/>
|
||||
<field name="res_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
@ -672,7 +703,7 @@
|
|||
<field name="perm_create"/>
|
||||
<field name="perm_unlink"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
|||
|
|
@ -17,18 +17,6 @@
|
|||
</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>
|
||||
|
|
@ -64,37 +52,38 @@
|
|||
<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 class="mb32">
|
||||
<h1 class="d-flex flex-column">
|
||||
<field name="shortdesc" placeholder="Module Name"/>
|
||||
<field class="fs-2 text-muted" name="summary" invisible="not summary"/>
|
||||
</h1>
|
||||
<h4 class="text-muted d-flex flex-column">
|
||||
<div>By <field name="author" class="oe_inline" placeholder="Author Name"/> </div>
|
||||
<small><field name="website" widget="url" invisible="not website"/></small>
|
||||
</h4>
|
||||
|
||||
<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"/>
|
||||
<button name="button_immediate_install" string="Activate" invisible="to_buy or state != 'uninstalled'" type="object" class="btn btn-primary me-1" groups="base.group_system"/>
|
||||
<a href="https://odoo.com/pricing?utm_source=db&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"/>
|
||||
invisible="not to_buy or state not in ('uninstalled', 'uninstallable')" role="button">Upgrade</a>
|
||||
<button name="button_immediate_upgrade" invisible="state != 'installed'" string="Upgrade" type="object" class="btn btn-primary me-1" groups="base.group_system"/>
|
||||
<button name="button_uninstall_wizard" invisible="state != 'installed'" string="Uninstall" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
|
||||
<button name="button_uninstall_cancel" invisible="state != 'to remove'" string="Cancel Uninstall" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
|
||||
<button name="button_upgrade_cancel" invisible="state != 'to upgrade'" string="Cancel Upgrade" type="object" class="btn btn-secondary me-1" groups="base.group_system"/>
|
||||
<button name="button_install_cancel" invisible="state != '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>
|
||||
<h6 class="text-muted mt-2" invisible="not has_iap">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="name" />
|
||||
<field name="license"/>
|
||||
<field name="installed_version"/>
|
||||
</group>
|
||||
|
|
@ -106,36 +95,35 @@
|
|||
<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>
|
||||
<group>
|
||||
<group string="Dependencies">
|
||||
<field name="dependencies_id" colspan="2" nolabel="1">
|
||||
<tree string="Dependencies">
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
<group string="Exclusions">
|
||||
<field name="exclusion_ids" colspan="2" nolabel="1">
|
||||
<tree string="Exclusions">
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Installed Features" name="installed_features" attrs="{'invisible':[('state','!=','installed')]}">
|
||||
<page string="Installed Features" name="installed_features" 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="Created Views"/>
|
||||
<field name="views_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'/>
|
||||
<field name="description_html" class='oe_styling_v8' invisible="not description_html"/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -146,7 +134,8 @@
|
|||
<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"/>
|
||||
<button name="button_immediate_install" type="object" string="Activate" groups="base.group_system"/>
|
||||
<button name="button_immediate_upgrade" type="object" string="Upgrade" groups="base.group_system"/>
|
||||
</header>
|
||||
<field name="shortdesc"/>
|
||||
<field name="name" groups="base.group_no_one"/>
|
||||
|
|
@ -157,7 +146,7 @@
|
|||
decoration-muted="state == 'uninstallable'"
|
||||
decoration-info="state == 'uninstalled'"
|
||||
decoration-success="state == 'installed'"/>
|
||||
<field name="category_id" invisible="1"/>
|
||||
<field name="category_id" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -167,6 +156,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<kanban create="false" class="o_modules_kanban">
|
||||
<field name="icon"/>
|
||||
<field name="icon_flag"/>
|
||||
<field name="to_buy"/>
|
||||
<field name="name"/>
|
||||
<field name="state"/>
|
||||
|
|
@ -174,21 +164,19 @@
|
|||
<field name="website"/>
|
||||
<field name="application"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-set="installed" t-value="record.state.raw_value == 'installed'"/>
|
||||
<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>
|
||||
</t>
|
||||
<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 class="oe_module_icon">
|
||||
<img t-attf-src="#{record.icon.value}" class="w-100" alt="Icon"/>
|
||||
<span t-if="record.icon_flag" class="oe_module_flag"><t t-out="record.icon_flag.raw_value"/></span>
|
||||
</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"/>&nbsp;
|
||||
|
|
@ -198,13 +186,13 @@
|
|||
<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>
|
||||
<button type="object" class="btn btn-primary btn-sm" name="button_immediate_install" invisible="state != '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', '<>', '')]}">Module Info</a>
|
||||
<a href="https://odoo.com/pricing?utm_source=db&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>
|
||||
<a t-att-href="record.website.raw_value" target="_blank" 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" invisible="website != ''">Module Info</a>
|
||||
<a href="https://odoo.com/pricing?utm_source=db&utm_medium=module#hosting=on_premise" target="_blank" class="btn btn-info btn-sm" invisible="state not in ('uninstalled', 'uninstallable')" t-if="record.to_buy.raw_value" role="button" groups="base.group_system">Upgrade</a>
|
||||
<button invisible="state != 'to remove'" type="object" class="btn btn-sm btn-primary" name="button_uninstall_cancel" groups="base.group_system">Cancel Uninstall</button>
|
||||
<button invisible="state != 'to install'" type="object" class="btn btn-sm btn-primary" name="button_install_cancel" groups="base.group_system">Cancel Install</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -249,20 +237,5 @@
|
|||
</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>
|
||||
|
|
|
|||
|
|
@ -39,10 +39,10 @@
|
|||
<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="sql_count" invisible="sql_count == 0"/>
|
||||
<field name="speedscope_url" widget="url"/>
|
||||
</group>
|
||||
<group attrs="{'invisible': [('qweb','=', False)]}">
|
||||
<group invisible="not qweb">
|
||||
<field name="qweb" widget="profiling_qweb_view" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</form>
|
||||
|
|
@ -66,8 +66,8 @@
|
|||
<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"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x"/>
|
||||
<button string="Enable profiling" type="object" name="submit" class="btn btn-primary" data-hotkey="q"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -75,7 +75,6 @@
|
|||
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@
|
|||
<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')]}"/>
|
||||
<field name="value_integer" string="Value" invisible="type not in ('integer', 'boolean')"/>
|
||||
<field name="value_float" string="Value" invisible="type != 'float'"/>
|
||||
<field name="value_datetime" string="Value" invisible="type not in ('date', 'datetime')"/>
|
||||
<field name="value_text" string="Value" invisible="type not in ('char', 'text', 'selection')"/>
|
||||
<field name="value_reference" string="Value" invisible="type != 'many2one'"/>
|
||||
<field name="value_binary" string="Value" invisible="type != 'binary'"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -57,7 +57,6 @@
|
|||
</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>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<odoo>
|
||||
|
||||
<template id="contact_name">
|
||||
<div t-if="'name' in fields">
|
||||
<t t-if="object.name">
|
||||
|
|
@ -12,20 +13,21 @@
|
|||
</t>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="contact">
|
||||
<address t-ignore="true" class="mb-0" itemscope="itemscope" itemtype="http://schema.org/Organization">
|
||||
<address t-ignore="true" class="o_portal_address 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">
|
||||
<div class="gap-2" itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
|
||||
<div t-if="address and 'address' in fields" t-attf-class="d-flex align-items-baseline gap-1">
|
||||
<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"/>
|
||||
<span class="d-block w-100 lh-sm" itemprop="streetAddress" t-esc="address"/>
|
||||
</div>
|
||||
<div t-if="city and 'city' in fields" class="d-flex align-items-baseline">
|
||||
<div t-if="city and 'city' in fields" t-attf-class="d-flex align-items-baseline gap-1">
|
||||
<i t-if="not options.get('no_marker')" class="fa fa-map-marker fa-fw" role="img" aria-label="Address" title="Address"/>
|
||||
<span>
|
||||
<div>
|
||||
|
|
@ -34,15 +36,19 @@
|
|||
</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>
|
||||
<div class="d-flex align-items-center gap-1" 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 class="d-flex align-items-center gap-1" 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"/>
|
||||
<div class="d-flex align-items-center gap-1" t-if="website and 'website' in fields">
|
||||
<i t-if="not options.get('no_marker')" class='fa fa-globe fa-fw' 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 class="d-flex align-items-center gap-1" 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 class="text-break" 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'">
|
||||
|
|
@ -50,4 +56,16 @@
|
|||
</t>
|
||||
</address>
|
||||
</template>
|
||||
|
||||
<template id="no_contact">
|
||||
<address t-ignore="true" class="mb-0" itemscope="itemscope" itemtype="http://schema.org/Organization">
|
||||
<div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
|
||||
<div 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 o_force_ltr d-block" t-out="options.get('null_text')"/>
|
||||
</div>
|
||||
</div>
|
||||
</address>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -60,10 +60,10 @@
|
|||
<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"/>
|
||||
<field name="perm_read" width="85px"/>
|
||||
<field name="perm_write" width="85px"/>
|
||||
<field name="perm_create" width="85px"/>
|
||||
<field name="perm_unlink" width="85px"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -73,19 +73,23 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Record Rules">
|
||||
<field name="name" string="Record Rule"/>
|
||||
<field name="domain_force"/>
|
||||
<field name="model_id"/>
|
||||
<field name="groups"/>
|
||||
<filter string="Global" name="global" domain="[('global', '=', True)]"/>
|
||||
<filter string="Group-based" name="group_based" domain="[('global', '=', False)]"/>
|
||||
<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)]"/>
|
||||
<filter string="Full Access" name="full_access_right" domain="[('perm_read', '=', True), ('perm_write', '=', True), ('perm_create', '=', True), ('perm_unlink', '=', True)]"/>
|
||||
<filter string="Read" name="read_access_right" domain="[('perm_read', '=', True)]"/>
|
||||
<filter string="Write" name="write_access_right" domain="[('perm_write', '=', True)]"/>
|
||||
<filter string="Create" name="create_access_right" domain="[('perm_create', '=' ,True)]"/>
|
||||
<filter string="Delete" 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'}"/>
|
||||
<separator/>
|
||||
<filter string="Group" name="group_by_group" domain="[]" context="{'group_by': 'groups'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
|||
|
|
@ -28,10 +28,10 @@
|
|||
<group>
|
||||
<field name="padding"/>
|
||||
<field name="number_increment"/>
|
||||
<field name="number_next_actual" string="Next Number" attrs="{'invisible': [('use_date_range', '=', True)]}"/>
|
||||
<field name="number_next_actual" string="Next Number" invisible="use_date_range"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="date_range_ids" attrs="{'invisible': [('use_date_range', '=', False)]}">
|
||||
<field name="date_range_ids" invisible="not use_date_range">
|
||||
<tree string="Sequences" editable="top">
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
<span colspan="2">Second: %%(sec)s</span>
|
||||
</group>
|
||||
</group>
|
||||
<group attrs="{'invisible': [('use_date_range', '=', False)]}">
|
||||
<group invisible="not use_date_range">
|
||||
<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.
|
||||
|
|
@ -101,7 +101,6 @@
|
|||
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@
|
|||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Access Rights" name="access_rights">
|
||||
<page string="Visibility" 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}">
|
||||
<field name="child_id" context="{'default_parent_id': id}">
|
||||
<tree string="Menu">
|
||||
<field name="sequence"/>
|
||||
<field icon="icon" name="name" string="Menu"/>
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@
|
|||
<group>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="model"/>
|
||||
<field name="model" invisible="True"/>
|
||||
<field name="model_id"/>
|
||||
<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"/>
|
||||
|
|
@ -29,15 +29,15 @@
|
|||
<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"/>
|
||||
<field name="arch_base" string="View Architecture" widget="code" 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}">
|
||||
<field name="inherit_children_ids" context="{'default_model':model,'default_type':type,'default_inherit_id':id,'default_mode':'extension', 'active_test': False}">
|
||||
<tree default_order="priority,id" decoration-muted="not active">
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
<field name="id"/>
|
||||
<field name="priority"/>
|
||||
<field name="name"/>
|
||||
|
|
@ -96,7 +96,6 @@
|
|||
|
||||
<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>
|
||||
|
|
@ -116,21 +115,21 @@
|
|||
<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}"/>
|
||||
<field name="compare_view_id" 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>
|
||||
<field name="arch_diff" invisible="not arch_diff"/>
|
||||
<div class="alert alert-warning my-2" role="alert" invisible="arch_diff">
|
||||
<span invisible="reset_mode != 'soft'">This view has no previous version.</span>
|
||||
<span invisible="reset_mode != 'hard'">This view is not coming from a file.</span>
|
||||
<span 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" />
|
||||
<button string="Reset View" name="reset_view_button" type="object" class="btn-primary" invisible="not has_diff" data-hotkey="q"/>
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -184,7 +183,6 @@
|
|||
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,123 +0,0 @@
|
|||
<?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>
|
||||
|
|
@ -20,8 +20,8 @@
|
|||
<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="page_height" invisible="format != 'custom'" />
|
||||
<field name="page_width" invisible="format != 'custom'" />
|
||||
<field name="orientation" />
|
||||
<field name="margin_top" />
|
||||
<field name="margin_bottom" />
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Bank">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<group name="bank_details" col="4">
|
||||
<field name="name"/>
|
||||
<field name="bic"/>
|
||||
|
|
@ -81,18 +81,18 @@
|
|||
<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)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<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="bank_id"/>
|
||||
<field name="acc_holder_name"/>
|
||||
<field name="partner_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="bank_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
<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"/>
|
||||
|
|
@ -107,13 +107,13 @@
|
|||
<field name="name">res.partner.bank.tree</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Bank Accounts">
|
||||
<tree string="Bank Accounts" multi_edit="1">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="acc_number"/>
|
||||
<field name="bank_name"/>
|
||||
<field name="bank_name" string="Bank"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="acc_holder_name" invisible="1"/>
|
||||
<field name="acc_holder_name" column_invisible="True"/>
|
||||
<field name="allow_out_payment" widget="boolean_toggle"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,17 @@
|
|||
<field name="name">res.company.form</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Company">
|
||||
<form string="Company" duplicate="0">
|
||||
<field name="all_child_ids" invisible="1"/>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button"
|
||||
name="action_all_company_branches"
|
||||
type="object"
|
||||
invisible="not all_child_ids"
|
||||
icon="fa-sitemap"
|
||||
string="Branches"/>
|
||||
</div>
|
||||
<field name="logo" widget="image" class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
|
|
@ -37,13 +46,17 @@
|
|||
<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="parent_id" groups="base.group_no_one"/>
|
||||
<field name="parent_id" invisible="1"/>
|
||||
<field name="sequence" invisible="1"/>
|
||||
<field name="favicon" widget="image" class="float-start oe_avatar" groups="base.group_no_one"/>
|
||||
<field name="color" widget="color_picker"/>
|
||||
</group>
|
||||
<group name="social_media"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Branches" name="branches">
|
||||
<field name="child_ids" nolabel="1" context="{'default_parent_id': id}"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -53,10 +66,12 @@
|
|||
<field name="name">res.company.tree</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Companies">
|
||||
<tree string="Companies" decoration-muted="not active">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_id" required="0"/>
|
||||
<field name="child_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -107,9 +122,9 @@
|
|||
</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="domain">[('parent_id', '=', False)]</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new company
|
||||
|
|
|
|||
|
|
@ -5,16 +5,12 @@
|
|||
<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 string="Settings" class="oe_form_configuration" js_class="base_settings">
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<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"/>
|
||||
<button name="action_skip" type="object" special="cancel" data-hotkey="x" string="Cancel" class="btn-secondary"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
<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"/>
|
||||
<button string="Skip" class="btn-secondary" special="cancel" data-hotkey="x"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<group name="country_details">
|
||||
<field name="name"/>
|
||||
<field name="currency_id"/>
|
||||
<field name="code" required="1"/>
|
||||
<field name="code"/>
|
||||
</group>
|
||||
<group name="phone_vat_settings">
|
||||
<field name="phone_code" options="{'format': false}"/>
|
||||
|
|
@ -62,9 +62,19 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_country_search" model="ir.ui.view">
|
||||
<field name="name">res.country.search</field>
|
||||
<field name="model">res.country</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Countries">
|
||||
<field name="name" filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"/>
|
||||
<field name="phone_code"/>
|
||||
</search>
|
||||
</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">
|
||||
|
|
@ -105,7 +115,6 @@
|
|||
|
||||
<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">
|
||||
|
|
@ -161,7 +170,6 @@
|
|||
|
||||
<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">
|
||||
|
|
|
|||
|
|
@ -137,11 +137,10 @@
|
|||
<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">
|
||||
<div class="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)]}">
|
||||
<div class="alert alert-info text-center" role="alert" invisible="not is_current_company_currency">
|
||||
This is your company's currency.
|
||||
</div>
|
||||
<sheet>
|
||||
|
|
@ -152,6 +151,7 @@
|
|||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="symbol"/>
|
||||
<field name="currency_unit_label"/>
|
||||
<field name="currency_subunit_label"/>
|
||||
</group>
|
||||
|
|
@ -164,11 +164,10 @@
|
|||
</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)]}">
|
||||
<notebook class="o_currency_rate_list" invisible="is_current_company_currency">
|
||||
<page string="Rates" name="rates">
|
||||
<field name="rate_ids" widget="one2many">
|
||||
<tree string="Rates" editable="top" limit="25">
|
||||
|
|
|
|||
|
|
@ -12,24 +12,24 @@
|
|||
<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="url_code" groups="base.group_no_one" column_invisible="True"/>
|
||||
<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)]}"/>
|
||||
invisible="active"/>
|
||||
<button name="%(base.action_view_base_language_install)d"
|
||||
string="Update"
|
||||
type="action"
|
||||
icon="fa-refresh"
|
||||
attrs="{'invisible': [('active', '!=', True)]}"/>
|
||||
invisible="not active"/>
|
||||
<button name="action_archive"
|
||||
string="Disable"
|
||||
type="object"
|
||||
icon="fa-times"
|
||||
attrs="{'invisible': [('active', '!=', True)]}"/>
|
||||
invisible="not active"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -41,11 +41,14 @@
|
|||
<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"
|
||||
<button name="%(base.action_view_base_language_install)d"
|
||||
type="action"
|
||||
class="oe_stat_button"
|
||||
icon="fa-refresh" />
|
||||
icon="fa-refresh">
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_text">Activate and Translate</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<field name="flag_image" widget="image" class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
|
||||
<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>
|
||||
|
|
@ -58,10 +57,11 @@
|
|||
<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="display_name" string="Name" column_invisible="1"/>
|
||||
<field name="complete_name" string="Name"/>
|
||||
<field name="function" column_invisible="True"/>
|
||||
<field name="phone" class="o_force_ltr" optional="show"/>
|
||||
<field name="mobile" optional="hide"/>
|
||||
<field name="email" optional="show"/>
|
||||
<field name="user_id" optional="show" widget="many2one_avatar_user" domain="[('share', '=', False)]"/>
|
||||
<field name="city" optional="show"/>
|
||||
|
|
@ -70,9 +70,9 @@
|
|||
<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"/>
|
||||
<field name="is_company" column_invisible="True"/>
|
||||
<field name="parent_id" readonly="1" column_invisible="True"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -82,27 +82,39 @@
|
|||
<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"/>
|
||||
<!-- Invisible fields allows other modules to populate partner (ex.: creation from a lead) -->
|
||||
<field name="avatar_128" invisible="1"/>
|
||||
<field name="city" invisible="1"/>
|
||||
<field name="comment" invisible="1"/>
|
||||
<field name="country_id" invisible="1"/>
|
||||
<field name="is_company" invisible="1"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="state_id" invisible="1"/>
|
||||
<field name="street" invisible="1"/>
|
||||
<field name="street2" invisible="1"/>
|
||||
<field name="title" invisible="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="website" invisible="1"/>
|
||||
<field name="zip" 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)]}"/>
|
||||
<field id="company" name="name" default_focus="1" placeholder="e.g. Lumber Inc" invisible="not is_company" required="type == 'contact' and is_company"/>
|
||||
<field id="individual" name="name" default_focus="1" placeholder="e.g. Brandom Freeman" invisible="is_company" required="type == 'contact' and not is_company"/>
|
||||
</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)]}"/>
|
||||
invisible="is_company"/>
|
||||
</div>
|
||||
<group>
|
||||
<field name="function" placeholder="e.g. Sales Director" attrs="{'invisible': [('is_company','=', True)]}"/>
|
||||
<field name="function" placeholder="e.g. Sales Director" invisible="is_company"/>
|
||||
<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="email" widget="email" context="{'gravatar_image': True}" required="True"/>
|
||||
<field name="phone" widget="phone" options="{'enable_sms': false}"/>
|
||||
<field name="mobile" widget="phone" options="{'enable_sms': false}"/>
|
||||
</group>
|
||||
|
|
@ -127,8 +139,8 @@
|
|||
<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">
|
||||
<label for="type" invisible="not parent_id" groups="base.group_no_one"/>
|
||||
<div invisible="not parent_id" name="div_type" groups="base.group_no_one">
|
||||
<field name="type" class="oe_inline"/>
|
||||
</div>
|
||||
<label for="street" string="Address"/>
|
||||
|
|
@ -155,15 +167,15 @@
|
|||
<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 class="alert alert-warning oe_edit_only" role="alert" name="warning_tax" invisible="not same_vat_partner_id">
|
||||
A partner with the same <span><span class="o_vat_label">Tax ID</span></span> already exists (<field name="same_vat_partner_id" context="{'show_address': False, 'show_vat': False}"/>), 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 class="alert alert-warning oe_edit_only" role="alert" name="warning_company" invisible="not same_company_registry_partner_id">
|
||||
A partner with the same <span><span class="o_vat_label">Company Registry</span></span> already exists (<field name="same_company_registry_partner_id" context="{'show_address': False, 'show_vat': False}"/>), 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)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<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">
|
||||
|
|
@ -174,58 +186,58 @@
|
|||
<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)]}"/>
|
||||
<field id="company" options="{'line_breaks': False}" widget="text" class="text-break" name="name" default_focus="1" placeholder="e.g. Lumber Inc" invisible="not is_company" required="type == 'contact'"/>
|
||||
<field id="individual" options="{'line_breaks': False}" widget="text" class="text-break" name="name" default_focus="1" placeholder="e.g. Brandom Freeman" invisible="is_company" required="type == 'contact'"/>
|
||||
</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': ['|', '&', ('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)]}"/>
|
||||
invisible="((is_company and not parent_id) or company_name) and company_name != ''"/>
|
||||
<field name="company_name" invisible="not company_name or company_name == '' or is_company"/>
|
||||
<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)]}"/>
|
||||
invisible="is_company or company_name == '' or not company_name"/>
|
||||
</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>
|
||||
<field name="type" invisible="is_company" readonly="user_ids" required="not is_company" class="fw-bold"/>
|
||||
<b invisible="not is_company">Address</b>
|
||||
</span>
|
||||
<div class="o_address_format">
|
||||
<field name="street" placeholder="Street..." class="o_address_street"
|
||||
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
|
||||
readonly="type == 'contact' and parent_id"/>
|
||||
<field name="street2" placeholder="Street 2..." class="o_address_street"
|
||||
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
|
||||
readonly="type == 'contact' and parent_id"/>
|
||||
<field name="city" placeholder="City" class="o_address_city"
|
||||
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
|
||||
readonly="type == 'contact' and parent_id"/>
|
||||
<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}"/>
|
||||
readonly="type == 'contact' and parent_id" 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)]}"/>
|
||||
readonly="type == 'contact' and parent_id"/>
|
||||
<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)]}"/>
|
||||
readonly="type == 'contact' and parent_id"/>
|
||||
</div>
|
||||
</div>
|
||||
<field name="vat" placeholder="e.g. BE0477472701" attrs="{'readonly': [('parent_id','!=',False)]}"/>
|
||||
<field name="vat" placeholder="e.g. BE0477472701" readonly="parent_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="function" placeholder="e.g. Sales Director"
|
||||
attrs="{'invisible': [('is_company','=', True)]}"/>
|
||||
invisible="is_company"/>
|
||||
<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="email" widget="email" context="{'gravatar_image': True}" 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)]}"/>
|
||||
invisible="is_company"/>
|
||||
<field name="active_lang_count" invisible="1"/>
|
||||
<field name="lang" attrs="{'invisible': [('active_lang_count', '<=', 1)]}"/>
|
||||
<field name="lang" invisible="active_lang_count <= 1"/>
|
||||
<field name="category_id" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"
|
||||
placeholder='e.g. "B2B", "VIP", "Consulting", ...'/>
|
||||
</group>
|
||||
|
|
@ -233,7 +245,7 @@
|
|||
|
||||
<notebook colspan="4">
|
||||
<page string="Contacts & 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'}">
|
||||
<field name="child_ids" mode="kanban" context="{'default_parent_id': 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"/>
|
||||
|
|
@ -289,32 +301,29 @@
|
|||
<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')]}">
|
||||
<p class="mb-0" 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')]}">
|
||||
<p class="mb-0" 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')]}">
|
||||
<p class="mb-0" 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')]}">
|
||||
<p class="mb-0" 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="name" string="Contact Name" required="type == 'contact'"/>
|
||||
<field name="title" options="{'no_open': True}" placeholder="e.g. Mr."
|
||||
attrs="{'invisible': [('type','!=', 'contact')]}"/>
|
||||
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')]}">
|
||||
invisible="type != 'contact'"/>
|
||||
<label for="street" string="Address" invisible="type == 'contact'"/>
|
||||
<div 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"/>
|
||||
|
|
@ -349,10 +358,10 @@
|
|||
<group string="Purchase" name="purchase" priority="2">
|
||||
</group>
|
||||
<group name="misc" string="Misc">
|
||||
<field name="company_registry" attrs="{'invisible': [('parent_id','!=',False)]}"/>
|
||||
<field name="company_registry" invisible="parent_id"/>
|
||||
<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}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}" readonly="parent_id" force_save="1"/>
|
||||
<field name="industry_id" invisible="not is_company" options="{'no_create': True}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
|
|
@ -404,7 +413,7 @@
|
|||
<tree editable="bottom">
|
||||
<field name="bank_id"/>
|
||||
<field name="acc_number"/>
|
||||
<field name="acc_holder_name" invisible="1"/>
|
||||
<field name="acc_holder_name" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
|
|
@ -419,7 +428,7 @@
|
|||
<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)]"/>
|
||||
filter_domain="['|', '|', '|', '|', ('complete_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)]"/>
|
||||
|
|
@ -445,7 +454,7 @@
|
|||
<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">
|
||||
<kanban sample="1">
|
||||
<field name="id"/>
|
||||
<field name="color"/>
|
||||
<field name="display_name"/>
|
||||
|
|
@ -470,24 +479,30 @@
|
|||
<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}')">
|
||||
<t t-set="avatar_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">
|
||||
<img t-attf-src="#{avatar_image}" t-att-alt="record.id.value"/>
|
||||
<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})">
|
||||
<div class="o_kanban_image d-md-none d-block">
|
||||
<img t-attf-src="#{avatar_image}" t-att-alt="record.id.value"/>
|
||||
<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"/>
|
||||
<div class="o_kanban_image_fill_left d-none d-md-block o_kanban_image_full">
|
||||
<img t-attf-src="#{kanban_image('res.partner', 'avatar_128', record.id.raw_value)}" role="img" t-att-alt="record.id.value"/>
|
||||
</div>
|
||||
<div class="o_kanban_image d-md-none d-block o_kanban_image_full">
|
||||
<img t-attf-src="#{kanban_image('res.partner', 'avatar_128', record.id.raw_value)}" role="img" t-att-alt="record.id.value"/>
|
||||
</div>
|
||||
</t>
|
||||
<div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">
|
||||
<span class="bg-danger">Archived</span>
|
||||
<div class="ribbon ribbon-top-right" invisible="active">
|
||||
<span class="text-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>
|
||||
<strong class="o_kanban_record_title oe_partner_heading"><field name="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>
|
||||
|
|
@ -514,7 +529,6 @@
|
|||
|
||||
<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>
|
||||
|
|
@ -548,7 +562,6 @@
|
|||
|
||||
<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>
|
||||
|
|
@ -583,7 +596,6 @@
|
|||
|
||||
<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>
|
||||
|
|
@ -661,7 +673,6 @@
|
|||
|
||||
<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">
|
||||
|
|
@ -698,7 +709,7 @@
|
|||
<tree string="Industry" editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="full_name"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="active" column_invisible="True"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -718,7 +729,6 @@
|
|||
|
||||
<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"/>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
</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" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
<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" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -39,8 +39,8 @@
|
|||
<!-- 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"/>
|
||||
<field name="user_login" force_save="1"/>
|
||||
<field name="new_passwd" password="True" width="20px"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -52,27 +52,6 @@
|
|||
<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>
|
||||
|
|
@ -145,9 +124,8 @@
|
|||
</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="context">{'search_default_filter_no_share': 1, 'ir.ui.menu.full_list': 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"/>
|
||||
|
|
@ -161,7 +139,7 @@
|
|||
<form string="Users">
|
||||
<sheet>
|
||||
<field name="id" invisible="1"/>
|
||||
<div class="alert alert-info text-center mb-3" attrs="{'invisible': [('id', '>', 0)]}" role="alert">
|
||||
<div class="alert alert-info text-center mb-3" invisible="id > 0" role="alert">
|
||||
You are inviting a new user.
|
||||
</div>
|
||||
<field name="avatar_128" invisible="1"/>
|
||||
|
|
@ -175,13 +153,12 @@
|
|||
<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">
|
||||
<field name="company_id" context="{'user_preference': 0}" groups="base.group_multi_company"/>
|
||||
<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">
|
||||
invisible="id > 0" groups="base.group_no_one"/>
|
||||
<div 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"/>
|
||||
|
|
@ -211,15 +188,10 @@
|
|||
<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)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<field name="active_partner" required="0" readonly="1" invisible="1"/>
|
||||
<div class="alert alert-info text-center o_form_header"
|
||||
attrs="{'invisible': [
|
||||
'|', '|',
|
||||
'&', ('active', '=', True), ('active_partner', '=', True),
|
||||
'&', ('active', '=', False), ('active_partner', '=', False),
|
||||
'&', ('active', '=', True), ('active_partner', '=', False),
|
||||
]}"
|
||||
invisible="active and active_partner or not active and not active_partner or active and not active_partner"
|
||||
role="alert">
|
||||
<a class="close" data-bs-dismiss="alert" href="#">x</a>
|
||||
<div>
|
||||
|
|
@ -238,15 +210,17 @@
|
|||
<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="partner_id" groups="base.group_no_one"
|
||||
readonly="1"
|
||||
required="0"
|
||||
invisible="not id"/>
|
||||
<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', '<=', 1)]}">
|
||||
<field string="Allowed Companies" name="company_ids" widget="many2many_tags" options="{'no_create': True}"/>
|
||||
<group string="Multi Companies" invisible="companies_count <= 1">
|
||||
<field string="Allowed Companies" name="company_ids" widget="many2many_tags" options="{'no_create': True, 'color_field': 'color'}"/>
|
||||
<field string="Default Company" name="company_id" context="{'user_preference': 0}"/>
|
||||
<field string="Companies count" name="companies_count" invisible="1"/>
|
||||
</group>
|
||||
|
|
@ -270,7 +244,7 @@
|
|||
<field name="tz_offset" invisible="1"/>
|
||||
</group>
|
||||
<group string="Menus Customization" groups="base.group_no_one"
|
||||
attrs="{'invisible': [('share', '=', True)]}">
|
||||
invisible="share">
|
||||
<field name="action_id"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
@ -288,11 +262,11 @@
|
|||
<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"/>
|
||||
<tree string="Users" multi_edit="1">
|
||||
<field name="name" readonly="1"/>
|
||||
<field name="login" readonly="1"/>
|
||||
<field name="lang"/>
|
||||
<field name="login_date"/>
|
||||
<field name="login_date" readonly="1"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
|
@ -321,8 +295,13 @@
|
|||
<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>
|
||||
<li class="d-flex flex-wrap">
|
||||
<span class="mb4 text-truncate" title="Login">
|
||||
<i class="fa fa-envelope me-1" role="img" aria-label="Login"/>
|
||||
<field name="login"/>
|
||||
</span>
|
||||
<field class="badge rounded-pill mb4 ms-auto" name="lang"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -359,7 +338,6 @@
|
|||
<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"/>
|
||||
|
|
@ -406,7 +384,7 @@
|
|||
</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"/>
|
||||
<button special="cancel" data-hotkey="x" string="Cancel" class="btn-secondary"/>
|
||||
</footer>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -433,7 +411,7 @@
|
|||
to your user account, it is very important to store it securely.
|
||||
</p>
|
||||
<footer>
|
||||
<button special="cancel" data-hotkey="z" string="Done!"/>
|
||||
<button special="cancel" data-hotkey="x" string="Done!"/>
|
||||
</footer>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -446,8 +424,9 @@
|
|||
<field eval="18" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Users" edit="1">
|
||||
<widget name="notification_alert"/>
|
||||
<field name="avatar_128" invisible="1"/>
|
||||
<field name="image_1920" readonly="0" widget='image' class="oe_right oe_avatar" options='{"preview_image": "avatar_128"}'/>
|
||||
<field name="image_1920" readonly="0" widget='image' class="oe_avatar" options='{"preview_image": "avatar_128"}'/>
|
||||
<h1>
|
||||
<field name="name" readonly="1" class="oe_inline"/>
|
||||
</h1>
|
||||
|
|
@ -484,21 +463,26 @@
|
|||
</group>
|
||||
<group name="preference_contact"></group>
|
||||
</page>
|
||||
<page string="Account Security">
|
||||
<page string="Account Security" name="page_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 name="access" string="Other Devices">
|
||||
<div colspan="2">
|
||||
<button name="action_revoke_all_devices" type="object" string="Log out from all devices" 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">
|
||||
<a href="https://www.odoo.com/documentation/17.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', '=', [])]}">
|
||||
<div colspan="2" invisible="not api_key_ids">
|
||||
<field name="api_key_ids" nolabel="1" colspan="4" readonly="0">
|
||||
<tree editable="bottom" create="false" delete="false">
|
||||
<field name="name"/>
|
||||
|
|
@ -517,14 +501,13 @@
|
|||
</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"/>
|
||||
<button name="preference_cancel" string="Cancel" special="cancel" data-hotkey="x" 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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue