summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2020-07-20 07:22:33 +0000
committerXavier Morel <xmo@odoo.com>2020-07-28 13:03:13 +0000
commitc8063af7a085eda61e470fa5c861e94388429644 (patch)
tree4138a64b383e2ee9cc50d5275d85e4fb03c2c568
parent6835aeb0de6895f7f4d6b23e0b4654465ef21d6a (diff)
[IMP] core, account, lunch: make <menuitem> recursive
For clarity, some data files are formatted as pseudo-tree structure. This is somewhat confusing and dangerous when the structure has no meaning... so add meaning: * allow nesting menuitems, nested items are set as children to the parent they're nested in * update schema to allow an icon *or* a parent on regular menu items, and neither on nested (they have an implicit parent meaning can't have an icon) * remove attributes which don't actually exist from the menuitem schema * also type sequence as an integer while at it Convert two large-ish menuitem data files to recursive form. closes odoo/odoo#54564 Related: odoo/enterprise#11887 Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
-rw-r--r--addons/account/views/account_menuitem.xml158
-rw-r--r--addons/lunch/views/lunch_views.xml44
-rw-r--r--addons/mrp/views/mrp_views_menus.xml20
-rw-r--r--odoo/addons/base/wizard/base_module_update_views.xml3
-rw-r--r--odoo/import_xml.rng49
-rw-r--r--odoo/tools/convert.py15
6 files changed, 155 insertions, 134 deletions
diff --git a/addons/account/views/account_menuitem.xml b/addons/account/views/account_menuitem.xml
index 35f1c5ee5ef..2f6020b454f 100644
--- a/addons/account/views/account_menuitem.xml
+++ b/addons/account/views/account_menuitem.xml
@@ -1,79 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <data>
+ <!-- Top menu item -->
+ <menuitem name="Invoicing"
+ id="menu_finance"
+ groups="account.group_account_readonly,account.group_account_invoice"
+ web_icon="account,static/description/icon.png"
+ sequence="40">
- <!-- Top menu item -->
- <menuitem name="Invoicing"
- id="menu_finance"
- groups="account.group_account_readonly,account.group_account_invoice"
- web_icon="account,static/description/icon.png"
- sequence="40"/>
-
- <menuitem id="menu_board_journal_1" name="Overview" parent="menu_finance" action="open_account_journal_dashboard_kanban" groups="account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_finance_receivables" name="Customers" parent="menu_finance" sequence="2"/>
- <menuitem id="menu_action_move_out_invoice_type" parent="account.menu_finance_receivables" action="action_move_out_invoice_type" sequence="1"/>
- <menuitem id="menu_action_move_out_refund_type" parent="account.menu_finance_receivables" action="action_move_out_refund_type" sequence="2"/>
- <menuitem id="menu_action_move_out_receipt_type" parent="account.menu_finance_receivables" action="action_move_out_receipt_type" groups="account.group_sale_receipts" sequence="3"/>
- <menuitem id="menu_action_account_payments_receivable" parent="account.menu_finance_receivables" action="action_account_payments" sequence="15"/>
- <menuitem id="product_product_menu_sellable" name="Products" parent="account.menu_finance_receivables" action="product_product_action_sellable" sequence="100"/>
- <menuitem id="menu_account_customer" name="Customers" parent="account.menu_finance_receivables" action="res_partner_action_customer" sequence="110"/>
- <menuitem id="menu_finance_payables" name="Vendors" parent="menu_finance" sequence="3"/>
- <menuitem id="menu_action_move_in_invoice_type" parent="account.menu_finance_payables" action="action_move_in_invoice_type" sequence="1"/>
- <menuitem id="menu_action_move_in_refund_type" parent="account.menu_finance_payables" action="action_move_in_refund_type" sequence="2"/>
- <menuitem id="menu_action_move_in_receipt_type" parent="account.menu_finance_payables" action="action_move_in_receipt_type" groups="account.group_purchase_receipts" sequence="3"/>
- <menuitem id="menu_action_account_payments_payable" parent="account.menu_finance_payables" action="action_account_payments_payable" sequence="20"/>
- <menuitem id="product_product_menu_purchasable" name="Products" parent="account.menu_finance_payables" action="product_product_action_purchasable" sequence="100"/>
- <menuitem id="menu_account_supplier" name="Vendors" parent="account.menu_finance_payables" action="account.res_partner_action_supplier" sequence="200"/>
- <menuitem id="menu_finance_entries" name="Accounting" parent="menu_finance" sequence="4" groups="account.group_account_readonly"/>
- <!-- Adviser sub-menus -->
- <menuitem id="menu_finance_entries_accounting_miscellaneous" name="Miscellaneous" parent="account.menu_finance_entries" sequence="1"/>
- <menuitem id="menu_action_account_moves_all" parent="account.menu_finance_entries_accounting_miscellaneous" action="action_account_moves_all" groups="base.group_no_one" sequence="10"/>
- <menuitem id="menu_action_move_journal_line_form" parent="account.menu_finance_entries_accounting_miscellaneous" action="action_move_journal_line" groups="account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_finance_entries_accounting_journals" name="Journals" parent="account.menu_finance_entries" sequence="2"/>
- <menuitem id="menu_action_account_moves_journal_sales" parent="account.menu_finance_entries_accounting_journals" action="action_account_moves_journal_sales" groups="account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_action_account_moves_journal_purchase" parent="account.menu_finance_entries_accounting_journals" action="action_account_moves_journal_purchase" groups="account.group_account_readonly" sequence="2"/>
- <menuitem id="menu_action_account_moves_journal_bank_cash" parent="account.menu_finance_entries_accounting_journals" action="action_account_moves_journal_bank_cash" groups="account.group_account_readonly" sequence="3"/>
- <menuitem id="menu_action_account_moves_journal_misc" parent="account.menu_finance_entries_accounting_journals" action="action_account_moves_journal_misc" groups="account.group_account_readonly" sequence="4"/>
- <menuitem id="menu_finance_entries_accounting_ledgers" name="Ledgers" parent="account.menu_finance_entries" sequence="3"/>
- <menuitem id="menu_action_account_moves_ledger_general" parent="account.menu_finance_entries_accounting_ledgers" action="action_account_moves_ledger_general" groups="account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_action_account_moves_ledger_partner" parent="account.menu_finance_entries_accounting_ledgers" action="action_account_moves_ledger_partner" groups="account.group_account_readonly" sequence="2"/>
- <menuitem id="menu_finance_entries_management" name="Management" parent="menu_finance_entries" sequence="10" groups="account.group_account_invoice,account.group_account_readonly"/>
- <menuitem id="menu_finance_entries_actions" name="Actions" parent="account.menu_finance_entries" sequence="11" groups="account.group_account_user"/>
- <menuitem id="menu_action_tax_adjustment" parent="account.menu_finance_entries_actions" action="tax_adjustments_form" groups="base.group_no_one" sequence="45"/>
- <menuitem id="menu_finance_entries_generate_entries" name="Generate Entries" parent="account.menu_finance_entries"/>
-
- <menuitem id="menu_finance_reports" name="Reporting" parent="menu_finance" sequence="20" groups="account.group_account_readonly,account.group_account_invoice"/>
- <!-- Reporting sub-menus -->
- <menuitem id="account_reports_management_menu" name="Management" parent="account.menu_finance_reports" sequence="4"/>
- <menuitem id="menu_action_account_invoice_report_all" name="Invoice Analysis" parent="account.account_reports_management_menu" action="action_account_invoice_report_all" sequence="1"/>
- <menuitem id="account_reports_legal_statements_menu" name="Generic Statements" parent="account.menu_finance_reports" sequence="1" groups="account.group_account_readonly"/>
-
- <menuitem id="menu_finance_configuration" name="Configuration" parent="menu_finance" sequence="35" groups="account.group_account_manager"/>
- <!-- Configuration Sub-Menu -->
- <menuitem id="menu_account_config" name="Settings" parent="menu_finance_configuration" action="action_account_config" groups="base.group_system" sequence="0"/>
- <menuitem id="account_invoicing_menu" name="Invoicing" parent="account.menu_finance_configuration" groups="account.group_account_invoice,account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_action_payment_term_form" parent="account_invoicing_menu" action="action_payment_term_form" sequence="1"/>
- <menuitem id="menu_action_incoterm_open" parent="account.account_invoicing_menu" action="action_incoterms_tree" groups="account.group_account_manager" sequence="3"/>
- <menuitem id="account_banks_menu" name="Banks" parent="account.menu_finance_configuration" groups="account.group_account_manager" sequence="2"/>
- <menuitem id="menu_action_account_bank_journal_form" parent="account_banks_menu" action="action_new_bank_setting" groups="account.group_account_manager" sequence="1"/>
- <menuitem id="action_account_reconcile_model_menu" parent="account.account_banks_menu" action="account.action_account_reconcile_model" sequence="3" />
- <menuitem id="account_account_menu" name="Accounting" parent="account.menu_finance_configuration" groups="account.group_account_manager" sequence="3"/>
- <menuitem id="menu_action_account_form" parent="account.account_account_menu" action="action_account_form" groups="account.group_account_readonly" sequence="1"/>
- <menuitem id="menu_action_tax_form" parent="account_account_menu" action="action_tax_form" sequence="2"/>
- <menuitem id="menu_action_account_journal_form" parent="account_account_menu" action="action_account_journal_form" groups="account.group_account_manager" sequence="3"/>
- <menuitem id="menu_product_product_categories" action="product.product_category_action_form" parent="account.account_account_menu" sequence="3"/>
- <menuitem id="account_report_folder" name="Reporting" parent="account_account_menu" groups="account.group_account_readonly" sequence="4"/>
- <menuitem id="menu_action_currency_form" action="base.action_currency_form" name="Currencies" parent="account_account_menu" groups="base.group_multi_currency" sequence="4"/>
- <menuitem id="menu_action_account_fiscal_position_form" parent="account_account_menu" action="action_account_fiscal_position_form" sequence="5"/>
- <menuitem id="menu_action_account_journal_group_list" parent="account_account_menu" action="action_account_journal_group_list" groups="account.group_account_manager" sequence="7"/>
- <menuitem id="root_payment_menu" name="Payments" parent="account.menu_finance_configuration" groups="account.group_account_manager" sequence="4"/>
- <menuitem id="account_management_menu" name="Management" parent="account.menu_finance_configuration" groups="account.group_account_manager" sequence="5"/>
- <menuitem id="menu_action_rounding_form_view" parent="account_management_menu" action="rounding_list_action" groups="account.group_cash_rounding" sequence="4"/>
- <menuitem id="menu_configure_tax_report" name="Tax Report" parent="account.account_management_menu" action="account.action_configure_tax_report" groups="base.group_no_one" sequence="5"/>
- <menuitem id="menu_action_analytic_lines_tree" name="Analytic Items" parent="account.menu_finance_entries_management" action="analytic.account_analytic_line_action_entries" groups="analytic.group_analytic_accounting" sequence="35"/>
- <menuitem id="menu_analytic_accounting" name="Analytic Accounting" parent="menu_finance_configuration" groups="analytic.group_analytic_accounting,analytic.group_analytic_tags" sequence="6"/>
- <menuitem id="account_analytic_def_account" parent="menu_analytic_accounting" action="analytic.action_account_analytic_account_form" groups="analytic.group_analytic_accounting" sequence="1"/>
- <menuitem id="account_analytic_tag_menu" name="Analytic Tags" parent="menu_analytic_accounting" action="analytic.account_analytic_tag_action" groups="analytic.group_analytic_tags"/>
- <menuitem id="account_analytic_group_menu" name="Analytic Account Groups" parent="menu_analytic_accounting" action="analytic.account_analytic_group_action" groups="analytic.group_analytic_accounting" sequence="2"/>
- </data>
+ <menuitem id="menu_board_journal_1" name="Overview" action="open_account_journal_dashboard_kanban" groups="account.group_account_readonly" sequence="1"/>
+ <menuitem id="menu_finance_receivables" name="Customers" sequence="2">
+ <menuitem id="menu_action_move_out_invoice_type" action="action_move_out_invoice_type" sequence="1"/>
+ <menuitem id="menu_action_move_out_refund_type" action="action_move_out_refund_type" sequence="2"/>
+ <menuitem id="menu_action_move_out_receipt_type" action="action_move_out_receipt_type" groups="account.group_sale_receipts" sequence="3"/>
+ <menuitem id="menu_action_account_payments_receivable" action="action_account_payments" sequence="15"/>
+ <menuitem id="product_product_menu_sellable" name="Products" action="product_product_action_sellable" sequence="100"/>
+ <menuitem id="menu_account_customer" name="Customers" action="res_partner_action_customer" sequence="110"/>
+ </menuitem>
+ <menuitem id="menu_finance_payables" name="Vendors" sequence="3">
+ <menuitem id="menu_action_move_in_invoice_type" action="action_move_in_invoice_type" sequence="1"/>
+ <menuitem id="menu_action_move_in_refund_type" action="action_move_in_refund_type" sequence="2"/>
+ <menuitem id="menu_action_move_in_receipt_type" action="action_move_in_receipt_type" groups="account.group_purchase_receipts" sequence="3"/>
+ <menuitem id="menu_action_account_payments_payable" action="action_account_payments_payable" sequence="20"/>
+ <menuitem id="product_product_menu_purchasable" name="Products" action="product_product_action_purchasable" sequence="100"/>
+ <menuitem id="menu_account_supplier" name="Vendors" action="account.res_partner_action_supplier" sequence="200"/>
+ </menuitem>
+ <menuitem id="menu_finance_entries" name="Accounting" sequence="4" groups="account.group_account_readonly">
+ <menuitem id="menu_finance_entries_accounting_miscellaneous" name="Miscellaneous" sequence="1">
+ <menuitem id="menu_action_move_journal_line_form" action="action_move_journal_line" groups="account.group_account_readonly" sequence="1"/>
+ <menuitem id="menu_action_account_moves_all" action="action_account_moves_all" groups="base.group_no_one" sequence="10"/>
+ </menuitem>
+ <menuitem id="menu_finance_entries_accounting_journals" name="Journals" sequence="2">
+ <menuitem id="menu_action_account_moves_journal_sales" action="action_account_moves_journal_sales" groups="account.group_account_readonly" sequence="1"/>
+ <menuitem id="menu_action_account_moves_journal_purchase" action="action_account_moves_journal_purchase" groups="account.group_account_readonly" sequence="2"/>
+ <menuitem id="menu_action_account_moves_journal_bank_cash" action="action_account_moves_journal_bank_cash" groups="account.group_account_readonly" sequence="3"/>
+ <menuitem id="menu_action_account_moves_journal_misc" action="action_account_moves_journal_misc" groups="account.group_account_readonly" sequence="4"/>
+ </menuitem>
+ <menuitem id="menu_finance_entries_accounting_ledgers" name="Ledgers" sequence="3">
+ <menuitem id="menu_action_account_moves_ledger_general" action="action_account_moves_ledger_general" groups="account.group_account_readonly" sequence="1"/>
+ <menuitem id="menu_action_account_moves_ledger_partner" action="action_account_moves_ledger_partner" groups="account.group_account_readonly" sequence="2"/>
+ </menuitem>
+ <menuitem id="menu_finance_entries_management" name="Management" sequence="10" groups="account.group_account_invoice,account.group_account_readonly"/>
+ <menuitem id="menu_finance_entries_generate_entries" name="Generate Entries"/>
+ <menuitem id="menu_finance_entries_actions" name="Actions" sequence="11" groups="account.group_account_user">
+ <menuitem id="menu_action_tax_adjustment" action="tax_adjustments_form" groups="base.group_no_one" sequence="45"/>
+ </menuitem>
+ </menuitem>
+ <menuitem id="menu_finance_reports" name="Reporting" sequence="20" groups="account.group_account_readonly,account.group_account_invoice">
+ <menuitem id="account_reports_management_menu" name="Management" sequence="4">
+ <menuitem id="menu_action_account_invoice_report_all" name="Invoice Analysis" action="action_account_invoice_report_all" sequence="1"/>
+ </menuitem>
+ <menuitem id="account_reports_legal_statements_menu" name="Generic Statements" sequence="1" groups="account.group_account_readonly"/>
+ </menuitem>
+ <menuitem id="menu_finance_configuration" name="Configuration" sequence="35" groups="account.group_account_manager">
+ <menuitem id="menu_account_config" name="Settings" action="action_account_config" groups="base.group_system" sequence="0"/>
+ <menuitem id="account_invoicing_menu" name="Invoicing" groups="account.group_account_invoice,account.group_account_readonly" sequence="1">
+ <menuitem id="menu_action_payment_term_form" action="action_payment_term_form" sequence="1"/>
+ <menuitem id="menu_action_incoterm_open" action="action_incoterms_tree" groups="account.group_account_manager" sequence="3"/>
+ </menuitem>
+ <menuitem id="account_banks_menu" name="Banks" groups="account.group_account_manager" sequence="2">
+ <menuitem id="menu_action_account_bank_journal_form" action="action_new_bank_setting" groups="account.group_account_manager" sequence="1"/>
+ <menuitem id="action_account_reconcile_model_menu" action="account.action_account_reconcile_model" sequence="3" />
+ </menuitem>
+ <menuitem id="account_account_menu" name="Accounting" groups="account.group_account_manager" sequence="3">
+ <menuitem id="menu_action_account_form" action="action_account_form" groups="account.group_account_readonly" sequence="1"/>
+ <menuitem id="menu_action_tax_form" action="action_tax_form" sequence="2"/>
+ <menuitem id="menu_action_account_journal_form" action="action_account_journal_form" groups="account.group_account_manager" sequence="3"/>
+ <menuitem id="menu_product_product_categories" action="product.product_category_action_form" sequence="3"/>
+ <menuitem id="account_report_folder" name="Reporting" groups="account.group_account_readonly" sequence="4"/>
+ <menuitem id="menu_action_currency_form" action="base.action_currency_form" name="Currencies" groups="base.group_multi_currency" sequence="4"/>
+ <menuitem id="menu_action_account_fiscal_position_form" action="action_account_fiscal_position_form" sequence="5"/>
+ <menuitem id="menu_action_account_journal_group_list" action="action_account_journal_group_list" groups="account.group_account_manager" sequence="7"/>
+ </menuitem>
+ <menuitem id="root_payment_menu" name="Payments" groups="account.group_account_manager" sequence="4"/>
+ <menuitem id="account_management_menu" name="Management" groups="account.group_account_manager" sequence="5">
+ <menuitem id="menu_action_rounding_form_view" action="rounding_list_action" groups="account.group_cash_rounding" sequence="4"/>
+ <menuitem id="menu_configure_tax_report" name="Tax Report" action="account.action_configure_tax_report" groups="base.group_no_one" sequence="5"/>
+ <menuitem id="menu_action_analytic_lines_tree" name="Analytic Items" action="analytic.account_analytic_line_action_entries" groups="analytic.group_analytic_accounting" sequence="35"/>
+ </menuitem>
+ <menuitem id="menu_analytic_accounting" name="Analytic Accounting" groups="analytic.group_analytic_accounting,analytic.group_analytic_tags" sequence="6">
+ <menuitem id="account_analytic_def_account" action="analytic.action_account_analytic_account_form" groups="analytic.group_analytic_accounting" sequence="1"/>
+ <menuitem id="account_analytic_group_menu" name="Analytic Account Groups" action="analytic.account_analytic_group_action" groups="analytic.group_analytic_accounting" sequence="2"/>
+ <menuitem id="account_analytic_tag_menu" name="Analytic Tags" action="analytic.account_analytic_tag_action" groups="analytic.group_analytic_tags"/>
+ </menuitem>
+ </menuitem>
+ </menuitem>
</odoo>
diff --git a/addons/lunch/views/lunch_views.xml b/addons/lunch/views/lunch_views.xml
index c0254e906cc..4a720e8feea 100644
--- a/addons/lunch/views/lunch_views.xml
+++ b/addons/lunch/views/lunch_views.xml
@@ -1,25 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <!-- Top menu item -->
- <menuitem id='menu_lunch' name='Lunch' sequence="105" groups="group_lunch_user" web_icon="lunch,static/description/icon.png"/>
- <menuitem name="My Lunch" parent="menu_lunch" id="menu_lunch_title" sequence="50" />
- <menuitem name="Manager" parent="menu_lunch" id="menu_lunch_admin" sequence="51" groups="group_lunch_manager"/>
- <menuitem name="Configuration" parent="menu_lunch" id="menu_lunch_config" sequence="53" groups="group_lunch_manager"/>
-
- <menuitem name="New Order" parent="menu_lunch_title" id="lunch_order_menu_form" action="lunch.lunch_product_action_order" sequence="1"/>
- <menuitem name="My Order History" parent="menu_lunch_title" id="lunch_order_menu_tree" action="lunch_order_action" sequence="2"/>
- <menuitem name="My Account History" parent="menu_lunch_title" id="lunch_cashmove_report_menu_form" action="lunch_cashmove_report_action_account" sequence="3"/>
-
- <menuitem name="Today's Orders" parent="menu_lunch_admin" id="lunch_order_menu_by_supplier" action="lunch_order_action_by_supplier" />
- <menuitem name="Control Vendors" parent="menu_lunch_admin" id="lunch_order_menu_control_suppliers" action="lunch_order_action_control_suppliers" />
- <menuitem name="Control Accounts" parent="menu_lunch_admin" id="lunch_cashmove_report_menu_control_accounts" action="lunch_cashmove_report_action_control_accounts"/>
- <menuitem name="Cash Moves" parent="menu_lunch_admin" id="lunch_cashmove_report_menu_payment" action="lunch_cashmove_action_payment"/>
-
- <menuitem name="Settings" parent="menu_lunch_config" id="lunch_settings_menu" action="lunch_config_settings_action" sequence="1"/>
- <menuitem name="Vendors" parent="menu_lunch_config" id="lunch_vendors_menu" action="lunch_vendors_action" sequence="2"/>
- <menuitem name="Locations" parent="menu_lunch_config" id="lunch_location_menu" action="lunch_location_action" sequence="3"/>
- <menuitem name="Products" parent="menu_lunch_config" id="lunch_product_menu" action="lunch_product_action" sequence="4"/>
- <menuitem name="Product Categories" parent="menu_lunch_config" id="lunch_product_category_menu" action="lunch_product_category_action" sequence="5"/>
- <menuitem name="Alerts" parent="menu_lunch_config" id="lunch_alert_menu" action="lunch_alert_action" sequence="6"/>
-
+ <!-- Top menu item -->
+ <menuitem id='menu_lunch' name='Lunch' sequence="105" groups="group_lunch_user" web_icon="lunch,static/description/icon.png">
+ <menuitem name="My Lunch" id="menu_lunch_title" sequence="50">
+ <menuitem name="New Order" id="lunch_order_menu_form" action="lunch.lunch_product_action_order" sequence="1"/>
+ <menuitem name="My Order History" id="lunch_order_menu_tree" action="lunch_order_action" sequence="2"/>
+ <menuitem name="My Account History" id="lunch_cashmove_report_menu_form" action="lunch_cashmove_report_action_account" sequence="3"/>
+ </menuitem>
+ <menuitem name="Manager" id="menu_lunch_admin" sequence="51" groups="group_lunch_manager">
+ <menuitem name="Today's Orders" id="lunch_order_menu_by_supplier" action="lunch_order_action_by_supplier" />
+ <menuitem name="Control Vendors" id="lunch_order_menu_control_suppliers" action="lunch_order_action_control_suppliers" />
+ <menuitem name="Control Accounts" id="lunch_cashmove_report_menu_control_accounts" action="lunch_cashmove_report_action_control_accounts"/>
+ <menuitem name="Cash Moves" id="lunch_cashmove_report_menu_payment" action="lunch_cashmove_action_payment"/>
+ </menuitem>
+ <menuitem name="Configuration" id="menu_lunch_config" sequence="53" groups="group_lunch_manager">
+ <menuitem name="Settings" id="lunch_settings_menu" action="lunch_config_settings_action" sequence="1"/>
+ <menuitem name="Vendors" id="lunch_vendors_menu" action="lunch_vendors_action" sequence="2"/>
+ <menuitem name="Locations" id="lunch_location_menu" action="lunch_location_action" sequence="3"/>
+ <menuitem name="Products" id="lunch_product_menu" action="lunch_product_action" sequence="4"/>
+ <menuitem name="Product Categories" id="lunch_product_category_menu" action="lunch_product_category_action" sequence="5"/>
+ <menuitem name="Alerts" id="lunch_alert_menu" action="lunch_alert_action" sequence="6"/>
+ </menuitem>
+ </menuitem>
</odoo>
diff --git a/addons/mrp/views/mrp_views_menus.xml b/addons/mrp/views/mrp_views_menus.xml
index bde51d95633..747f252100b 100644
--- a/addons/mrp/views/mrp_views_menus.xml
+++ b/addons/mrp/views/mrp_views_menus.xml
@@ -1,39 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <data>
- <!-- Top menu item -->
- <menuitem id="menu_mrp_root"
- name="Manufacturing"
- groups="group_mrp_user,group_mrp_manager"
- icon="fa-wrench"
- web_icon="mrp,static/description/icon.png"
- sequence="35"/>
+ <menuitem id="menu_mrp_root"
+ name="Manufacturing"
+ groups="group_mrp_user,group_mrp_manager"
+ web_icon="mrp,static/description/icon.png"
+ sequence="35">
<menuitem id="menu_mrp_manufacturing"
name="Operations"
- parent="menu_mrp_root"
sequence="10"/>
<menuitem id="mrp_planning_menu_root"
name="Planning"
- parent="menu_mrp_root"
sequence="15"/>
<menuitem id="menu_mrp_bom"
name="Products"
- parent="menu_mrp_root"
sequence="20"/>
<menuitem id="menu_mrp_reporting"
name="Reporting"
- parent="menu_mrp_root"
sequence="25"/>
<menuitem id="menu_mrp_configuration"
name="Configuration"
- parent="menu_mrp_root"
groups="group_mrp_manager"
sequence="100"/>
- </data>
+ </menuitem>
</odoo>
diff --git a/odoo/addons/base/wizard/base_module_update_views.xml b/odoo/addons/base/wizard/base_module_update_views.xml
index 2b1b8a00ffb..18382ce8f10 100644
--- a/odoo/addons/base/wizard/base_module_update_views.xml
+++ b/odoo/addons/base/wizard/base_module_update_views.xml
@@ -44,8 +44,7 @@
id="menu_view_base_module_update"
groups="base.group_no_one"
parent="menu_management"
- sequence="40"
- icon="fa-exchange"/>
+ sequence="40"/>
</data>
</odoo>
diff --git a/odoo/import_xml.rng b/odoo/import_xml.rng
index 1a182ce6ffc..016f21dca8b 100644
--- a/odoo/import_xml.rng
+++ b/odoo/import_xml.rng
@@ -224,23 +224,42 @@
</rng:element>
</rng:define>
+ <rng:define name="menuitem_attrs">
+ <rng:attribute name="id" />
+ <rng:optional><rng:attribute name="name"/></rng:optional>
+ <rng:optional>
+ <rng:attribute name="sequence">
+ <rng:data type="int"/>
+ </rng:attribute>
+ </rng:optional>
+ <rng:optional><rng:attribute name="groups"/></rng:optional>
+ <rng:optional><rng:attribute name="active"/></rng:optional>
+ <rng:optional>
+ <!-- menu can't have both children and action -->
+ <rng:choice>
+ <rng:attribute name="action"/>
+ <rng:oneOrMore>
+ <rng:ref name="submenuitem"/>
+ </rng:oneOrMore>
+ </rng:choice>
+ </rng:optional>
+ </rng:define>
<rng:define name="menuitem">
<rng:element name="menuitem">
- <!-- TODO: id should probably be mandatory -->
- <rng:optional> <rng:attribute name="id" /></rng:optional>
- <rng:optional> <rng:attribute name="name"/></rng:optional>
- <rng:optional> <rng:attribute name="parent"/> </rng:optional>
- <rng:optional> <rng:attribute name="action"/> </rng:optional>
- <rng:optional> <rng:attribute name="sequence"/> </rng:optional>
- <rng:optional> <rng:attribute name="groups"/> </rng:optional>
- <rng:optional> <rng:attribute name="active"/> </rng:optional>
- <!-- TODO: remove icon stuff -->
- <rng:optional> <rng:attribute name="icon"/> </rng:optional>
- <rng:optional> <rng:attribute name="web_icon"/> </rng:optional>
- <rng:optional> <rng:attribute name="web_icon_hover"/> </rng:optional>
- <!-- string doesn't seem used anywhere -->
- <rng:optional> <rng:attribute name="string"/> </rng:optional>
- <rng:empty />
+ <rng:ref name="menuitem_attrs"/>
+ <rng:optional>
+ <rng:choice>
+ <!-- can't have submenus with icons -->
+ <rng:attribute name="parent"/>
+ <rng:attribute name="web_icon"/>
+ </rng:choice>
+ </rng:optional>
+ </rng:element>
+ </rng:define>
+ <!-- menuitem except no parent (is implicit) or web_icon attributes -->
+ <rng:define name="submenuitem">
+ <rng:element name="menuitem">
+ <rng:ref name="menuitem_attrs"/>
</rng:element>
</rng:define>
diff --git a/odoo/tools/convert.py b/odoo/tools/convert.py
index 0a6a0c23da8..54b9b0d9ef4 100644
--- a/odoo/tools/convert.py
+++ b/odoo/tools/convert.py
@@ -419,7 +419,7 @@ form: module.record_id""" % (xml_id,)
data = dict(xml_id=xid, values=res, noupdate=self.noupdate)
self.env['ir.actions.act_window']._load_records([data], self.mode == 'update')
- def _tag_menuitem(self, rec):
+ def _tag_menuitem(self, rec, parent=None):
rec_id = rec.attrib["id"]
self._test_xml_id(rec_id)
@@ -433,11 +433,12 @@ form: module.record_id""" % (xml_id,)
if rec.get('sequence'):
values['sequence'] = int(rec.get('sequence'))
- if rec.get('parent'):
+ if parent is not None:
+ values['parent_id'] = parent
+ elif rec.get('parent'):
values['parent_id'] = self.id_get(rec.attrib['parent'])
- else:
- if rec.get('web_icon'):
- values['web_icon'] = rec.attrib['web_icon']
+ elif rec.get('web_icon'):
+ values['web_icon'] = rec.attrib['web_icon']
if rec.get('name'):
@@ -475,7 +476,9 @@ form: module.record_id""" % (xml_id,)
'values': values,
'noupdate': self.noupdate,
}
- self.env['ir.ui.menu']._load_records([data], self.mode == 'update')
+ menu = self.env['ir.ui.menu']._load_records([data], self.mode == 'update')
+ for child in rec.iterchildren('menuitem'):
+ self._tag_menuitem(child, parent=menu.id)
def _tag_record(self, rec):
rec_model = rec.get("model")