[IMP] * : kanban, unify dropdown definition in archs
This commit separate the templates, one for the card and another one for the menu (the ellipsis dropdown). The new template, called 'kanban-menu', will only contain the dropdown. Note that, this behaviour is the same as the one used for the kanban tooltips. closes odoo/odoo#107589 Task-id: 3096776 Related: odoo/documentation#3284 Related: odoo/enterprise#34962 Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
This commit is contained in:
@@ -87,9 +87,10 @@
|
||||
<AccountDropZone
|
||||
visible="state.dropzoneVisible"
|
||||
hideZone="() => state.dropzoneVisible = false"/>
|
||||
<t t-call="{{ templates['kanban-box'] }}" t-call-context="renderingContext"/>
|
||||
<t t-call="{{ templates[this.constructor.KANBAN_BOX_ATTRIBUTE] }}" t-call-context="renderingContext"/>
|
||||
</t>
|
||||
</AccountFileUploader>
|
||||
<t t-call="{{ this.constructor.menuTemplate }}"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
|
||||
@@ -33,9 +33,6 @@
|
||||
<t t-if="['bank', 'cash', 'sale', 'purchase'].includes(journal_type)" t-call="JournalBodyGraph"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<t t-call="JournalManage"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -52,9 +49,6 @@
|
||||
<field name="alias_id"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" aria-label="Selection" role="img" title="Selection"/></a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -66,158 +60,161 @@
|
||||
</a>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalManage">
|
||||
<t t-name="kanban-menu">
|
||||
<t t-value="JSON.parse(record.kanban_dashboard.raw_value)" t-set="dashboard"/>
|
||||
<t t-value="record.type.raw_value" t-set="journal_type"/>
|
||||
<div class="container">
|
||||
<!-- For bank and cash -->
|
||||
<div t-if="journal_type == 'bank' || journal_type == 'cash'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div id="card_action_view_menus" class="o_kanban_card_manage_title">
|
||||
<span role="separator">View</span>
|
||||
</div>
|
||||
<div id="action_card_statements">
|
||||
<a t-if="journal_type == 'bank'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
<a t-if="journal_type == 'cash'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_view_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_collect_money">Cust. Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_spend_money">Vendor Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_transfer_money">Internal Transfers</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- For bank and cash -->
|
||||
<div t-if="journal_type == 'bank' || journal_type == 'cash'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div id="card_action_view_menus" class="o_kanban_card_manage_title">
|
||||
<span role="separator">View</span>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">New</span>
|
||||
</div>
|
||||
<div name="bank_customer_payment">
|
||||
<a role="menuitem" type="object" name="create_customer_payment">Cust. Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_supplier_payment">Vendor Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_internal_transfer">Internal Transfer</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="action_card_statements">
|
||||
<a t-if="journal_type == 'bank'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
<a t-if="journal_type == 'cash'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_view_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_collect_money">Cust. Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_spend_money">Vendor Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_transfer_money">Internal Transfers</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}">Journal Items</a>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reconciliation">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">Reconciliation</span>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_account_reconcile_model', 'use_domain': ['|', ('match_journal_ids', '=', False), ('match_journal_ids', 'in', active_id)]}" groups="account.group_account_manager">Reconciliation Models</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">New</span>
|
||||
<!-- For purchase and sale -->
|
||||
<div t-if="journal_type == 'purchase' || journal_type == 'sale'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_invoice_type'}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_invoice_type'}">Bills</a>
|
||||
</div>
|
||||
<div id="sale_purchase_refund">
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_refund_type'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_refund_type'}">Refund</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
<div name="bank_customer_payment">
|
||||
<a role="menuitem" type="object" name="create_customer_payment">Cust. Payment</a>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_invoice">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">
|
||||
<span t-if="journal_type == 'sale'">Invoice</span>
|
||||
<span t-if="journal_type == 'purchase'">Bill</span>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new" context="{'refund':True}">
|
||||
<span t-if="journal_type == 'sale'">Credit Note</span>
|
||||
<span t-if="journal_type == 'purchase'">Refund</span>
|
||||
</a>
|
||||
</div>
|
||||
<div t-if="journal_type == 'sale'">
|
||||
<widget name="account_file_uploader" linkText="Upload Invoices" btnClass="file_upload_kanban_action_a"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_supplier_payment">Vendor Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_internal_transfer">Internal Transfer</a>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="action" name="%(action_account_invoice_report_all)d" groups="account.group_account_readonly">Invoices Analysis</a>
|
||||
<a t-if="journal_type == 'purchase'" type="action" name="%(action_account_invoice_report_all_supp)d" groups="account.group_account_readonly">Bills Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reconciliation">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">Reconciliation</span>
|
||||
<!-- For general and situation -->
|
||||
<div t-if="journal_type == 'general' || journal_type == 'situation'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line'}">Journal Entries</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1}">Entries to Review</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_account_reconcile_model', 'use_domain': ['|', ('match_journal_ids', '=', False), ('match_journal_ids', 'in', active_id)]}" groups="account.group_account_manager">Reconciliation Models</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- For purchase and sale -->
|
||||
<div t-if="journal_type == 'purchase' || journal_type == 'sale'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">Journal Entry</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_invoice_type'}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_invoice_type'}">Bills</a>
|
||||
</div>
|
||||
<div id="sale_purchase_refund">
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_refund_type'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_refund_type'}">Refund</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_operations">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Operations</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action_with_context" context="{'action_name': 'action_validate_account_move', 'search_default_journal': True}" groups="account.group_account_user">Post All Entries</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_invoice">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">
|
||||
<span t-if="journal_type == 'sale'">Invoice</span>
|
||||
<span t-if="journal_type == 'purchase'">Bill</span>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new" context="{'refund':True}">
|
||||
<span t-if="journal_type == 'sale'">Credit Note</span>
|
||||
<span t-if="journal_type == 'purchase'">Refund</span>
|
||||
</a>
|
||||
</div>
|
||||
<div t-if="journal_type == 'sale'">
|
||||
<widget name="account_file_uploader" linkText="Upload Invoices" btnClass="file_upload_kanban_action_a"/>
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
<div groups="account.group_account_manager" class="row o_kanban_card_manage_settings">
|
||||
<div class="col-6 position-relative">
|
||||
<field name="show_on_dashboard" widget="boolean_favorite" />
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="action" name="%(action_account_invoice_report_all)d" groups="account.group_account_readonly">Invoices Analysis</a>
|
||||
<a t-if="journal_type == 'purchase'" type="action" name="%(action_account_invoice_report_all_supp)d" groups="account.group_account_readonly">Bills Analysis</a>
|
||||
<div class="col-6 text-end mt-1">
|
||||
<a class="dropdown-item" t-if="widget.editable" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- For general and situation -->
|
||||
<div t-if="journal_type == 'general' || journal_type == 'situation'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line'}">Journal Entries</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1}">Entries to Review</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">Journal Entry</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_operations">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Operations</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action_with_context" context="{'action_name': 'action_validate_account_move', 'search_default_journal': True}" groups="account.group_account_user">Post All Entries</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div groups="account.group_account_manager" class="row o_kanban_card_manage_settings">
|
||||
<div class="col-6 position-relative">
|
||||
<field name="show_on_dashboard" widget="boolean_favorite" />
|
||||
</div>
|
||||
<div class="col-6 text-end mt-1">
|
||||
<a class="dropdown-item" t-if="widget.editable" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalMiscelaneous">
|
||||
|
||||
@@ -554,6 +554,11 @@
|
||||
sum_field="expected_revenue" recurring_revenue_sum_field="recurring_revenue_monthly"
|
||||
help="This bar allows to filter the opportunities based on scheduled activities."/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<t t-set="lost_ribbon" t-value="!record.active.raw_value and record.probability and record.probability.raw_value == 0"/>
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''} #{lost_ribbon ? 'oe_kanban_card_ribbon' : ''} oe_kanban_global_click oe_kanban_card d-flex flex-column">
|
||||
@@ -562,16 +567,6 @@
|
||||
<span class="bg-danger">Lost</span>
|
||||
</div>
|
||||
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content flex-grow-1">
|
||||
<div class="o_kanban_record_title oe_kanban_details">
|
||||
<strong><field name="name"/></strong>
|
||||
|
||||
@@ -204,16 +204,11 @@
|
||||
<field name="id"/>
|
||||
<field name="name" />
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a role="menuitem" type="open" class="dropdown-item">Configuration</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_vignette oe_semantic_html_override oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" type="open" class="dropdown-item">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_image">
|
||||
<img alt="img" t-att-src="kanban_image('fleet.vehicle.model.brand', 'image_128', record.id.raw_value)" class="o_image_64_max" height="52"/>
|
||||
</div>
|
||||
|
||||
@@ -77,6 +77,17 @@
|
||||
<field name="color"/>
|
||||
<field name="total_employee"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode">
|
||||
<div class="o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title ps-4 pb-1">
|
||||
<span class="fw-bolder">Reporting</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a t-if="widget.editable" role="menuitem" class="dropdown-item" type="edit">Configuration</a>
|
||||
<ul t-if="widget.editable" class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
@@ -88,9 +99,6 @@
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" t-if="!selection_mode">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content" t-if="!selection_mode">
|
||||
<div class="row o_kanban_card_upper_content">
|
||||
@@ -107,17 +115,6 @@
|
||||
<!-- placeholder for bottom content -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title ps-4 pb-1">
|
||||
<span class="fw-bolder">Reporting</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a t-if="widget.editable" role="menuitem" class="dropdown-item" type="edit">Configuration</a>
|
||||
<ul t-if="widget.editable" class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
@@ -288,17 +288,12 @@
|
||||
<field name="state"/>
|
||||
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" groups="hr_contract.group_hr_contract_manager">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit Contract</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode" groups="hr_contract.group_hr_contract_manager">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit Contract</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_hr_contract_state">
|
||||
<strong class="o_kanban_record_title">
|
||||
|
||||
@@ -358,6 +358,10 @@
|
||||
<field name="state"/>
|
||||
<field name="holiday_status_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" groups="base.group_user">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit Allocation</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click container">
|
||||
<div class="row g-0">
|
||||
@@ -373,15 +377,6 @@
|
||||
<div class="text-muted o_kanban_record_subtitle">
|
||||
<t t-esc="record.holiday_status_id.value"/>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown" groups="base.group_user">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit Allocation</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="['validate', 'refuse'].includes(record.state.raw_value)">
|
||||
<span t-if="record.state.raw_value === 'validate'" class="fa fa-check text-muted" aria-label="validated"/>
|
||||
<span t-else="" class="fa fa-ban text-muted" aria-label="refused"/>
|
||||
|
||||
@@ -106,6 +106,10 @@
|
||||
<field name="state"/>
|
||||
<field name="supported_attachment_ids_count"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" groups="base.group_user">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit Time Off</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="d-flex flex-column justify-content-between oe_kanban_global_click container">
|
||||
<div class="row g-0">
|
||||
@@ -115,15 +119,6 @@
|
||||
<div class="text-muted o_kanban_record_subtitle">
|
||||
<t t-esc="record.holiday_status_id.value"/>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown" groups="base.group_user">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit Time Off</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="text-muted">from </span>
|
||||
<field name="date_from" widget="date"/>
|
||||
|
||||
@@ -318,6 +318,12 @@
|
||||
<field name="refuse_reason_id" />
|
||||
<progressbar field="activity_state" colors='{"planned": "success", "overdue": "danger", "today": "warning"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<a role="menuitem" name="action_makeMeeting" type="object" class="dropdown-item">Schedule Interview</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker text-center" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click oe_applicant_kanban oe_semantic_html_override">
|
||||
<field name="date_closed" invisible="1"/>
|
||||
@@ -325,17 +331,6 @@
|
||||
<span class="bg-success">Hired</span>
|
||||
</div>
|
||||
<span class="badge rounded-pill text-bg-danger float-end me-4" attrs="{'invisible': ['|', ('active', '=', True), ('refuse_reason_id', '=', False)]}">Refused</span>
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu" data-bs-display="static">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<a role="menuitem" name="action_makeMeeting" type="object" class="dropdown-item">Schedule Interview</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker text-center" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
|
||||
@@ -26,6 +26,52 @@
|
||||
<field name="user_id"/>
|
||||
<field name="application_count"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_view_applications">
|
||||
<a name="%(action_hr_job_applications)d" type="action">Applications</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_open_activities" type="object">Activities</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_hr_job_sources)d" type="action" context="{'default_job_id': active_id}">Trackers</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_new_applications">
|
||||
<a name="%(hr_recruitment.action_hr_applicant_new)d" type="action">Application</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem" name="o_kanban_job_reporting">
|
||||
<a name="%(hr_recruitment.action_hr_recruitment_report_filtered_job)d" type="action">Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div class="col-6" role="menuitem" aria-haspopup="true">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div class="col-6" role="menuitem">
|
||||
<a class="dropdown-item" t-if="widget.editable" name="edit_job" type="edit">Configuration</a>
|
||||
<a class="dropdown-item" t-if="record.active.raw_value" name="toggle_active" type="object">Archive</a>
|
||||
<a class="dropdown-item" t-if="!record.active.raw_value" name="toggle_active" type="object">Unarchive</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div class="o_kanban_card_header">
|
||||
@@ -44,9 +90,6 @@
|
||||
<small><i class="fa fa-envelope-o" role="img" aria-label="Alias" title="Alias"></i> <field name="alias_id"/></small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" groups="hr_recruitment.group_hr_recruitment_user">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_recruitment_job_container o_kanban_card_content mt-0 mt-sm-3">
|
||||
<div class="row">
|
||||
@@ -77,50 +120,6 @@
|
||||
</div>
|
||||
<div name="kanban_boxes" class="row flex-nowrap" groups="hr_recruitment.group_hr_recruitment_user"></div>
|
||||
</div>
|
||||
<div class="container o_recruitment_job_container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_view_applications">
|
||||
<a name="%(action_hr_job_applications)d" type="action">Applications</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_open_activities" type="object">Activities</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_hr_job_sources)d" type="action" context="{'default_job_id': active_id}">Trackers</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem" name="menu_new_applications">
|
||||
<a name="%(hr_recruitment.action_hr_applicant_new)d" type="action">Application</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem" name="o_kanban_job_reporting">
|
||||
<a name="%(hr_recruitment.action_hr_recruitment_report_filtered_job)d" type="action">Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div class="col-6" role="menuitem" aria-haspopup="true">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div class="col-6" role="menuitem">
|
||||
<a class="dropdown-item" t-if="widget.editable" name="edit_job" type="edit">Configuration</a>
|
||||
<a class="dropdown-item" t-if="record.active.raw_value" name="toggle_active" type="object">Archive</a>
|
||||
<a class="dropdown-item" t-if="!record.active.raw_value" name="toggle_active" type="object">Unarchive</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
@@ -195,16 +195,11 @@
|
||||
<kanban>
|
||||
<field name="color"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''} oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div>
|
||||
<strong class="o_kanban_record_title"><span><field name="name"/></span></strong>
|
||||
|
||||
@@ -140,21 +140,12 @@
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a t-attf-href="/web/content/ir.attachment/#{record.id.raw_value}/datas?download=true" download="" class="dropdown-item">Download</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_area oe_kanban_global_click o_kanban_attachment">
|
||||
<div class="row">
|
||||
<div class="offset-10">
|
||||
<div class="o_dropdown_kanban dropdown" groups="base.group_user">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-attf-href="/web/content/ir.attachment/#{record.id.raw_value}/datas?download=true" download="" class="dropdown-item">Download</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_image">
|
||||
<div class="o_kanban_image_wrapper">
|
||||
<t t-set="webimage" t-value="new RegExp('image.*(gif|jpeg|jpg|png)').test(record.mimetype.value)"/>
|
||||
|
||||
@@ -137,19 +137,13 @@
|
||||
<li t-if="record.user_id.raw_value"><b>Request to:</b> <t t-esc="record.user_id.value"/></li>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click oe_semantic_html_override">
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content" tooltip="kanban-tooltip">
|
||||
<div class="o_kanban_record_top">
|
||||
<b class="o_kanban_record_title"><field name="name"/></b>
|
||||
@@ -437,21 +431,15 @@
|
||||
<li t-if="record.model.raw_value"><b>Model Number:</b> <t t-esc="record.model.value"/></li>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<div role="separator" class="dropdown-header">Record Colour</div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
||||
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit...</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<div role="separator" class="dropdown-header">Record Colour</div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content" tooltip="kanban-tooltip">
|
||||
<div class="o_kanban_record_top">
|
||||
<b class="o_kanban_record_title"><field name="name"/><small><span t-if="record.model.raw_value"> (<field name="model"/>)</span></small></b>
|
||||
@@ -825,6 +813,55 @@
|
||||
<field name="todo_request_count_block"/>
|
||||
<field name="todo_request_count_unscheduled"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Requests</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
||||
All
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
|
||||
To Do
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_progress': 1}">
|
||||
In Progress
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_done': 1}">
|
||||
Done
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(maintenance_request_action_reports)d" type="action" context="{'search_default_maintenance_team_id': active_id}">
|
||||
Maintenance Requests
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8" role="menuitem" aria-haspopup="true">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a type="edit" class="dropdown-item">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
@@ -834,9 +871,6 @@
|
||||
<field name="name"/>
|
||||
</a></div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row">
|
||||
@@ -872,52 +906,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Requests</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
|
||||
All
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
|
||||
To Do
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_progress': 1}">
|
||||
In Progress
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_done': 1}">
|
||||
Done
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(maintenance_request_action_reports)d" type="action" context="{'search_default_maintenance_team_id': active_id}">
|
||||
Maintenance Requests
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8" role="menuitem" aria-haspopup="true">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a type="edit" class="dropdown-item">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -490,23 +490,18 @@
|
||||
<field name='next_departure'/>
|
||||
<field name='active'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<a role="menuitem" class="dropdown-item o_kanban_mailing_active" name="toggle_active" type="object">
|
||||
<t t-if="record.active.raw_value">Archive</t>
|
||||
<t t-if="!record.active.raw_value">Restore</t>
|
||||
</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click oe_kanban_mass_mailing">
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" data-bs-display="static" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<a role="menuitem" class="dropdown-item o_kanban_mailing_active" name="toggle_active" type="object">
|
||||
<t t-if="record.active.raw_value">Archive</t>
|
||||
<t t-if="!record.active.raw_value">Restore</t>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
|
||||
@@ -13,6 +13,11 @@
|
||||
<field name="priority"/>
|
||||
<field name="create_uid"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a t-if="widget.editable" type="edit" class="dropdown-item">Edit</a>
|
||||
<a t-if="widget.deletable" type="delete" class="dropdown-item">Delete</a>
|
||||
<a class="dropdown-item o_mrp_download">Download</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_area o_kanban_attachment oe_kanban_global_click">
|
||||
<div class="o_kanban_image">
|
||||
@@ -41,16 +46,6 @@
|
||||
<field name="create_uid" widget="many2one_avatar_user"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown" tabindex="-1">
|
||||
<a class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" role="button" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu" aria-labelledby="dLabel">
|
||||
<a t-if="widget.editable" type="edit" class="dropdown-item">Edit</a>
|
||||
<a t-if="widget.deletable" type="delete" class="dropdown-item">Delete</a>
|
||||
<a class="dropdown-item o_mrp_download">Download</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -161,6 +161,43 @@
|
||||
<field name="working_state"/>
|
||||
<field name="oee_target"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Actions</span>
|
||||
</div>
|
||||
<div role="menuitem" name="plan_order">
|
||||
<a name="action_work_order" type="object">Plan Orders</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_workcenter_productivity_report_oee)d" type="action">OEE</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_workorder_workcenter_report)d" type="action" context="{'search_default_thisyear':True}">
|
||||
Performance
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_work_order" type="object" context="{'search_default_waiting': 1}">Waiting Availability</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div t-attf-class="o_kanban_card_header o_kanban_record_top">
|
||||
@@ -169,9 +206,6 @@
|
||||
<field name="name"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row mb16">
|
||||
@@ -252,42 +286,6 @@
|
||||
attrs="{'invisible': [('working_state','in',('normal','blocked'))]}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Actions</span>
|
||||
</div>
|
||||
<div role="menuitem" name="plan_order">
|
||||
<a name="action_work_order" type="object">Plan Orders</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_workcenter_productivity_report_oee)d" type="action">OEE</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_workorder_workcenter_report)d" type="action" context="{'search_default_thisyear':True}">
|
||||
Performance
|
||||
</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_work_order" type="object" context="{'search_default_waiting': 1}">Waiting Availability</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -11,6 +11,45 @@
|
||||
<field name="count_mo_late"/>
|
||||
</field>
|
||||
|
||||
<xpath expr="//t[@t-name='kanban-box']" position="before">
|
||||
<t t-name="kanban-menu">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view" name="picking_left_manage_pane">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Orders</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action">All</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_inprogress': 1}">In Progress</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_planned': 1}">Planned</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_mrp_production_form)d" context="{'default_picking_type_id': active_id}" type="action">Manufacturing Order</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</xpath>
|
||||
<xpath expr='//div[@name="stock_picking"]' position="after">
|
||||
<div t-if="record.code.raw_value == 'mrp_operation'" t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div>
|
||||
@@ -24,9 +63,6 @@
|
||||
<span class="o_primary" t-if="selection_mode"><field name="name"/></span>
|
||||
<div class="o_secondary"><field class="o_secondary" name="warehouse_id" readonly="1" groups="stock.group_stock_multi_warehouses"/></div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" t-if="!selection_mode">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content" t-if="!selection_mode">
|
||||
<div class="row">
|
||||
@@ -58,40 +94,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view" name="picking_left_manage_pane">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Orders</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action">All</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_inprogress': 1}">In Progress</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_planned': 1}">Planned</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_mrp_production_form)d" context="{'default_picking_type_id': active_id}" type="action">Manufacturing Order</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -90,6 +90,10 @@
|
||||
<field name="activity_state" />
|
||||
<progressbar field="activity_state" colors='{"planned": "success", "today": "warning", "overdue": "danger"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<t t-set="noteHasFollowers" t-value="record.message_partner_ids.raw_value.length > 1"/>
|
||||
|
||||
@@ -97,15 +101,6 @@
|
||||
|
||||
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-attf-class="d-flex #{noteHasFollowers ? 'flex-wrap' : 'flex-nowrap'}">
|
||||
<div class="d-flex flex-grow-1">
|
||||
<span class="me-2">
|
||||
|
||||
@@ -62,6 +62,37 @@
|
||||
<field name="currency_id"/>
|
||||
<field name="number_of_opened_session"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_pos_order_filtered)d" type="action">Orders</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_pos_session_filtered)d" type="action">Sessions</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_report_pos_order_all_filtered)d" type="action">Orders</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="point_of_sale.group_pos_manager">
|
||||
<div role="menuitem" class="col-12">
|
||||
<a name="action_pos_config_modal_edit" type="object">Edit</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<div class="o_kanban_card_header">
|
||||
@@ -85,9 +116,6 @@
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row">
|
||||
@@ -130,34 +158,6 @@
|
||||
<field name="current_user_id" widget="many2one_avatar_user"/>
|
||||
</div>
|
||||
|
||||
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_pos_order_filtered)d" type="action">Orders</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_pos_session_filtered)d" type="action">Sessions</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_report_pos_order_all_filtered)d" type="action">Orders</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="point_of_sale.group_pos_manager">
|
||||
<div role="menuitem" class="col-12">
|
||||
<a name="action_pos_config_modal_edit" type="object">Edit</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -10,7 +10,7 @@ tour.register('burndown_chart_tour', {
|
||||
trigger: '.o_app[data-menu-xmlid="project.menu_main_pm"]',
|
||||
}, {
|
||||
content: 'Open "Burndown Chart Test" project menu',
|
||||
trigger: '.o_kanban_record:contains("Burndown Chart Test") .o_kanban_manage_toggle_button',
|
||||
trigger: '.o_kanban_record:contains("Burndown Chart Test") .o_dropdown_kanban .dropdown-toggle',
|
||||
}, {
|
||||
content: `Open "Burndown Chart Test" project's "Burndown Chart" view`,
|
||||
trigger: '.o_kanban_record:contains("Burndown Chart Test") .o_kanban_manage_reporting div[role="menuitem"] a:contains("Burndown Chart")',
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import tour from 'web_tour.tour';
|
||||
|
||||
const projectSharingSteps = [...tour.stepUtils.goToAppSteps("project.menu_main_pm", 'Go to the Project App.'), {
|
||||
trigger: '.oe_kanban_global_click :contains("Project Sharing") button.o_dropdown_kanban',
|
||||
trigger: '.o_kanban_record:contains("Project Sharing") .o_dropdown_kanban .dropdown-toggle',
|
||||
content: 'Open the project dropdown.'
|
||||
}, {
|
||||
trigger: '.o_kanban_record:contains("Project Sharing") .dropdown-menu a:contains("Share")',
|
||||
|
||||
@@ -48,6 +48,11 @@
|
||||
<field name="has_late_and_unreached_milestone"/>
|
||||
<progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger", "normal": "200"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="oe_kanban_content">
|
||||
@@ -73,16 +78,6 @@
|
||||
</t>
|
||||
<t t-else="record.email_from.raw_value"><span><field name="email_from"/></span></t>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_body">
|
||||
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" context="{'project_id': project_id}"/>
|
||||
|
||||
@@ -829,6 +829,48 @@
|
||||
<progressbar field="last_update_status" colors='{"on_track": "success", "at_risk": "warning", "off_track": "danger", "on_hold": "info", "done": "purple"}'/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" groups="base.group_user">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_view_tasks" type="object">Tasks</a>
|
||||
</div>
|
||||
<div role="menuitem" groups="project.group_project_milestone" t-if="record.allow_milestones.raw_value">
|
||||
<a name="action_get_list_view" type="object">Milestones</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_reporting">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title" groups="project.group_project_user">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem" groups="project.group_project_user">
|
||||
<a name="action_view_tasks_analysis" type="object">Tasks Analysis</a>
|
||||
</div>
|
||||
<div role="menuitem" name="project_burndown_menu" groups="project.group_project_user">
|
||||
<a name="action_project_task_burndown_chart_report" type="object">Burndown Chart</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-6" groups="project.group_project_manager">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-6" groups="project.group_project_manager">
|
||||
<a t-if="record.privacy_visibility.raw_value == 'portal'" class="dropdown-item" role="menuitem" name="%(project.project_share_wizard_action)d" type="action">Share</a>
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Settings</a>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_section o_kanban_manage_view col-12 row ps-0" groups="!project.group_project_manager">
|
||||
<div role="menuitem" class="w-100">
|
||||
<a class="dropdown-item mx-0" role="menuitem" type="open">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click o_has_icon oe_kanban_content oe_kanban_card">
|
||||
<div class="o_project_kanban_main ">
|
||||
@@ -859,49 +901,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane dropdown-menu" role="menu" groups="base.group_user">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="action_view_tasks" type="object">Tasks</a>
|
||||
</div>
|
||||
<div role="menuitem" groups="project.group_project_milestone" t-if="record.allow_milestones.raw_value">
|
||||
<a name="action_get_list_view" type="object">Milestones</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_reporting">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title" groups="project.group_project_user">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div role="menuitem" groups="project.group_project_user">
|
||||
<a name="action_view_tasks_analysis" type="object">Tasks Analysis</a>
|
||||
</div>
|
||||
<div role="menuitem" name="project_burndown_menu" groups="project.group_project_user">
|
||||
<a name="action_project_task_burndown_chart_report" type="object">Burndown Chart</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_settings row">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-6" groups="project.group_project_manager">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-6" groups="project.group_project_manager">
|
||||
<a t-if="record.privacy_visibility.raw_value == 'portal'" class="dropdown-item" role="menuitem" name="%(project.project_share_wizard_action)d" type="action">Share</a>
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Settings</a>
|
||||
</div>
|
||||
<div class="o_kanban_card_manage_section o_kanban_manage_view col-12 row ps-0" groups="!project.group_project_manager">
|
||||
<div role="menuitem" class="w-100">
|
||||
<a class="dropdown-item mx-0" role="menuitem" type="open">View</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a class="o_kanban_manage_toggle_button o_dropdown_kanban" href="#" groups="base.group_user">
|
||||
<i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/>
|
||||
</a>
|
||||
<span>
|
||||
<field name="is_favorite" widget="boolean_favorite" nolabel="1" force_save="1" />
|
||||
</span>
|
||||
@@ -1428,6 +1427,13 @@
|
||||
<field name="allow_milestones" />
|
||||
<progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger", "normal": "200"}'/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode" groups="base.group_user">
|
||||
<a t-if="widget.editable" role="menuitem" type="set_cover" class="dropdown-item" data-field="displayed_image_id">Set Cover Image</a>
|
||||
<a name="%(portal.portal_share_action)d" role="menuitem" type="action" class="dropdown-item">Share</a>
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="oe_kanban_content">
|
||||
@@ -1453,18 +1459,6 @@
|
||||
</t>
|
||||
<t t-else="record.email_from.raw_value"><span><field name="email_from"/></span></t>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode" groups="base.group_user">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a t-if="widget.editable" role="menuitem" type="set_cover" class="dropdown-item" data-field="displayed_image_id">Set Cover Image</a>
|
||||
<a name="%(portal.portal_share_action)d" role="menuitem" type="action" class="dropdown-item">Share</a>
|
||||
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<div role="separator" class="dropdown-divider"></div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_body">
|
||||
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
|
||||
|
||||
@@ -181,7 +181,7 @@ tour.register('sale_timesheet_tour', {
|
||||
trigger: '.dropdown-item[data-menu-xmlid="project.menu_main_pm"]',
|
||||
content: 'Select Project main menu',
|
||||
}, {
|
||||
trigger: '.oe_kanban_global_click :contains("Project for Freeman") button.o_dropdown_kanban',
|
||||
trigger: '.o_kanban_record:contains("Project for Freeman") .o_dropdown_kanban .dropdown-toggle',
|
||||
content: 'Open the project dropdown',
|
||||
}, {
|
||||
trigger: '.o_kanban_record:contains("Project for Freeman") .dropdown-menu a:contains("Settings")',
|
||||
|
||||
@@ -151,15 +151,43 @@
|
||||
<field name="currency_id"/>
|
||||
<field name="is_favorite"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div name="o_team_kanban_report_separator"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="sales_team.group_sale_manager">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a class="dropdown-item" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<div class="o_primary o_text_overflow"><field name="name"/></div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row o_kanban_card_upper_content">
|
||||
@@ -177,34 +205,6 @@
|
||||
<t t-call="SalesTeamDashboardGraph"/>
|
||||
</div>
|
||||
</div>
|
||||
</div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div name="o_team_kanban_report_separator"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="sales_team.group_sale_manager">
|
||||
<div role="menuitem" aria-haspopup="true" class="col-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a class="dropdown-item" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
@@ -138,6 +138,50 @@
|
||||
<field name="count_picking_late"/>
|
||||
<field name="count_picking_backorders"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu" t-if="!selection_mode">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span t-if="record.code.raw_value == 'internal'">Transfers</span>
|
||||
<span t-else="">View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_stock_picking_action_picking_type" type="object">All</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_tree_ready" type="object">Ready</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_tree_waiting" type="object">Waiting</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_type_operations" type="object">Operations</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_picking_form)d" type="action" context="{'default_immediate_transfer': True}">Immediate Transfer</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_picking_form)d" type="action">Planned Transfer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8" role="menuitem" aria-haspopup="true">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-if="['incoming', 'outgoing', 'internal'].indexOf(record.code.raw_value) > -1" t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''}" name="stock_picking">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
@@ -152,9 +196,6 @@
|
||||
</div>
|
||||
<div class="o_secondary"><field class="o_secondary" name="warehouse_id" readonly="1" groups="stock.group_stock_multi_warehouses"/></div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section" t-if="!selection_mode">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content" t-if="!selection_mode">
|
||||
<div class="row">
|
||||
@@ -198,48 +239,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div class="row">
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span t-if="record.code.raw_value == 'internal'">Transfers</span>
|
||||
<span t-else="">View</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_stock_picking_action_picking_type" type="object">All</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_tree_ready" type="object">Ready</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_tree_waiting" type="object">Waiting</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="get_action_picking_type_operations" type="object">Operations</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 o_kanban_card_manage_section o_kanban_manage_new">
|
||||
<div role="menuitem" class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_picking_form)d" type="action" context="{'default_immediate_transfer': True}">Immediate Transfer</a>
|
||||
</div>
|
||||
<div role="menuitem">
|
||||
<a name="%(action_picking_form)d" type="action">Planned Transfer</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8" role="menuitem" aria-haspopup="true">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
|
||||
</div>
|
||||
<div role="menuitem" class="col-4">
|
||||
<a class="dropdown-item" role="menuitem" type="edit">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
@@ -213,6 +213,14 @@
|
||||
<field name="session_state"/>
|
||||
<field name="success_ratio"/>
|
||||
<templates>
|
||||
<div t-name="kanban-menu" t-if="widget.editable">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit Survey</a>
|
||||
<a t-if="record.active.raw_value" role="menuitem" type="object" class="dropdown-item" name="action_send_survey">Share</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
<div role="separator" class="dropdown-divider"/>
|
||||
<div role="separator" class="dropdown-item-text">Color</div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
<div t-name="kanban-box"
|
||||
t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)}
|
||||
oe_kanban_card oe_kanban_global_click
|
||||
@@ -311,22 +319,6 @@
|
||||
<widget name="web_ribbon" title="Archived"
|
||||
bg_color="bg-danger"
|
||||
attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<div class="o_dropdown_kanban dropdown" t-if="widget.editable">
|
||||
<a href="#" role="button"
|
||||
class="dropdown-toggle o-no-caret btn"
|
||||
data-bs-toggle="dropdown" data-bs-display="static"
|
||||
aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit Survey</a>
|
||||
<a t-if="record.active.raw_value" role="menuitem" type="object" class="dropdown-item" name="action_send_survey">Share</a>
|
||||
<a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
<div role="separator" class="dropdown-divider"/>
|
||||
<div role="separator" class="dropdown-item-text">Color</div>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_top">
|
||||
<h4 class="o_kanban_record_title p-0 mb4"><field name="title" /></h4>
|
||||
</div>
|
||||
|
||||
@@ -82,23 +82,18 @@
|
||||
<field name='user_id'/>
|
||||
<field name="stage_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<t t-if="widget.editable">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
</t>
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<div role="separator" class="dropdown-divider"/>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<t t-if="widget.editable">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
</t>
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<div role="separator" class="dropdown-divider"/>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
|
||||
@@ -25,6 +25,7 @@ import { Widget } from "@web/views/widgets/widget";
|
||||
*/
|
||||
|
||||
export const KANBAN_BOX_ATTRIBUTE = "kanban-box";
|
||||
export const KANBAN_MENU_ATTRIBUTE = "kanban-menu";
|
||||
export const KANBAN_TOOLTIP_ATTRIBUTE = "kanban-tooltip";
|
||||
|
||||
export class KanbanArchParser extends XMLParser {
|
||||
|
||||
@@ -21,78 +21,13 @@ import { toInterpolatedStringExpression, ViewCompiler } from "@web/views/view_co
|
||||
const ACTION_TYPES = ["action", "object"];
|
||||
const SPECIAL_TYPES = [...ACTION_TYPES, "edit", "open", "delete", "url", "set_cover"];
|
||||
|
||||
let currentDropdownId = 1;
|
||||
export class KanbanCompiler extends ViewCompiler {
|
||||
setup() {
|
||||
this.ctx.readonly = "read_only_mode";
|
||||
this.compilers.push(
|
||||
{ selector: ".oe_kanban_colorpicker", fn: this.compileColorPicker },
|
||||
{
|
||||
selector: ".dropdown:not(.kanban_ignore_dropdown),.o_kanban_manage_button_section",
|
||||
fn: this.compileDropdown,
|
||||
doNotCopyAttributes: true,
|
||||
},
|
||||
{
|
||||
selector: ".dropdown-menu:not(.kanban_ignore_dropdown)",
|
||||
fn: this.compileDropdownMenu,
|
||||
doNotCopyAttributes: true,
|
||||
},
|
||||
{
|
||||
selector:
|
||||
".dropdown-toggle:not(.kanban_ignore_dropdown),.o_kanban_manage_toggle_button",
|
||||
fn: this.compileDropdownToggler,
|
||||
doNotCopyAttributes: true,
|
||||
},
|
||||
{ selector: "t[t-call]", fn: this.compileTCall }
|
||||
);
|
||||
/** @type {Record<number, DropdownDef>} */
|
||||
this.dropdowns = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a Dropdown component node definition object. It works as follows:
|
||||
*
|
||||
* The first time a node defining a dropdown component or component slot (dropdown
|
||||
* root, toggler or default=menu), a new dropdown object will be generated,
|
||||
* taking note of what parts have already been defined.
|
||||
*
|
||||
* It also creates the Dropdown component node that will be inserted in the
|
||||
* template, at the position of the first node defining either the root dropdown
|
||||
* or the dropdown toggler.
|
||||
*
|
||||
* Each next component or slot still not defined on the current dropdown object
|
||||
* will be added to it.
|
||||
*
|
||||
* If a duplicate part or component is found, a new dropdown object is created
|
||||
* and set as the new current dropdown.
|
||||
*
|
||||
* @param {"dropdown" | "toggler" | "menu"} part
|
||||
* @returns {DropdownDef}
|
||||
*/
|
||||
renderDropdown(part) {
|
||||
if (!this.dropdowns[currentDropdownId]) {
|
||||
this.dropdowns[currentDropdownId] = {
|
||||
parts: [],
|
||||
inserted: false,
|
||||
shouldInsert: false,
|
||||
el: createElement("Dropdown", {
|
||||
class: toStringExpression("o_dropdown_kanban"),
|
||||
position: toStringExpression("bottom-end"),
|
||||
}),
|
||||
};
|
||||
}
|
||||
const dropdown = this.dropdowns[currentDropdownId];
|
||||
if (dropdown.parts.includes(part)) {
|
||||
// Duplicate part: generate new dropdown
|
||||
currentDropdownId++;
|
||||
return this.renderDropdown(part);
|
||||
}
|
||||
dropdown.parts.push(part);
|
||||
if (part !== "menu" || dropdown.parts.includes("dropdown")) {
|
||||
dropdown.shouldInsert = !dropdown.inserted;
|
||||
dropdown.inserted = true;
|
||||
}
|
||||
return dropdown;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -168,65 +103,6 @@ export class KanbanCompiler extends ViewCompiler {
|
||||
return createElement("t", { "t-call": "web.KanbanColorPicker" });
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Element} el
|
||||
* @param {Object} params
|
||||
* @returns {Element | null}
|
||||
*/
|
||||
compileDropdown(el, params) {
|
||||
const { shouldInsert, el: dropdownEl } = this.renderDropdown("dropdown");
|
||||
const classes = [...el.classList].filter((cls) => cls && cls !== "dropdown").join(" ");
|
||||
|
||||
combineAttributes(dropdownEl, "class", toStringExpression(classes), "+' '+");
|
||||
|
||||
for (const child of el.childNodes) {
|
||||
append(dropdownEl, this.compileNode(child, params));
|
||||
}
|
||||
|
||||
return shouldInsert && dropdownEl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Element} el
|
||||
* @param {Object} params
|
||||
* @returns {Element | null}
|
||||
*/
|
||||
compileDropdownMenu(el, params) {
|
||||
const { shouldInsert, el: dropdownEl } = this.renderDropdown("menu");
|
||||
const cls = el.getAttribute("class") || "";
|
||||
|
||||
combineAttributes(dropdownEl, "menuClass", toStringExpression(cls), "+' '+");
|
||||
const wrapper = createElement("KanbanDropdownMenuWrapper");
|
||||
|
||||
for (const child of el.childNodes) {
|
||||
append(wrapper, this.compileNode(child, params));
|
||||
}
|
||||
|
||||
append(dropdownEl, wrapper);
|
||||
|
||||
return shouldInsert && dropdownEl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Element} el
|
||||
* @param {Object} params
|
||||
* @returns {Element | null}
|
||||
*/
|
||||
compileDropdownToggler(el, params) {
|
||||
const { shouldInsert, el: dropdownEl } = this.renderDropdown("toggler");
|
||||
const classes = ["btn", ...el.classList].filter(Boolean).join(" ");
|
||||
const togglerSlot = createElement("t", { "t-set-slot": "toggler" });
|
||||
|
||||
combineAttributes(dropdownEl, "togglerClass", toStringExpression(classes), "+' '+");
|
||||
|
||||
for (const child of el.childNodes) {
|
||||
append(togglerSlot, this.compileNode(child, params));
|
||||
}
|
||||
append(dropdownEl, togglerSlot);
|
||||
|
||||
return shouldInsert && dropdownEl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @override
|
||||
*/
|
||||
|
||||
@@ -26,17 +26,12 @@
|
||||
--o-view-nocontent-zindex: 1;
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
.dropdown,
|
||||
.o_kanban_manage_button_section {
|
||||
position: inherit;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
--KanbanRecord-padding-h: #{$o-kanban-inside-hgutter * 2};
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
.o_kanban_record > div,
|
||||
.o_kanban_record > div:not(.o_dropdown_kanban),
|
||||
.o_kanban_quick_create {
|
||||
border: 1px solid $border-color;
|
||||
background-color: $o-view-background-color;
|
||||
@@ -57,7 +52,7 @@
|
||||
min-width: 150px;
|
||||
margin: 0 0 -1px;
|
||||
|
||||
> div {
|
||||
> div:not(.o_dropdown_kanban) {
|
||||
padding: var(--KanbanRecord-padding-v) var(--KanbanRecord-padding-h);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -258,13 +253,7 @@
|
||||
// ------- v11 Layout + generic layouts (~v10) -------
|
||||
// Kanban Record - Dropdown
|
||||
.o_dropdown_kanban {
|
||||
@include o-position-absolute(
|
||||
calc(var(--KanbanRecord-padding-v) + var(--KanbanRecord__dropdown-gap)),
|
||||
calc(var(--KanbanRecord-padding-h) + var(--KanbanRecord__dropdown-gap))
|
||||
);
|
||||
visibility: hidden;
|
||||
margin: calc(var(--KanbanRecord-padding-v) * -1)
|
||||
calc(var(--KanbanRecord-padding-h) * -1) 0 0;
|
||||
@include media-breakpoint-down(md) {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
--KanbanRecord__dropdown-gap: 0px;
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
.o_kanban_record > div {
|
||||
.o_kanban_record > div:not(.o_dropdown_kanban) {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-flow: column nowrap;
|
||||
@@ -24,108 +24,6 @@
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
// ------- Dropdown toggle & menu -------
|
||||
$o-kanban-manage-toggle-height: 35px;
|
||||
|
||||
.o_dropdown_kanban {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.o_kanban_manage_toggle_button {
|
||||
@include o-kanban-dropdown($o-kanban-dashboard-hpadding);
|
||||
@include o-position-absolute(0, 0);
|
||||
height: $o-kanban-manage-toggle-height;
|
||||
}
|
||||
|
||||
.o_kanban_card_manage_pane {
|
||||
// Arbitrary value to place the dropdown-menu exactly below the
|
||||
// dropdown-toggle (height is forced so that it works on Firefox)
|
||||
top: $o-kanban-manage-toggle-height;
|
||||
|
||||
> div:not(.o_no_padding_kanban_colorpicker) {
|
||||
padding: 3px 0 3px 20px;
|
||||
visibility: visible;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
> .o_kanban_card_manage_section {
|
||||
margin-bottom: 10px;
|
||||
|
||||
+ .o_kanban_card_manage_section {
|
||||
border-top: 1px solid map-get($grays, '200');
|
||||
}
|
||||
|
||||
> div {
|
||||
@include o-kanban-dashboard-dropdown-link;
|
||||
}
|
||||
}
|
||||
|
||||
// Dropdown menu with complex layout
|
||||
&.container {
|
||||
width: 95%;
|
||||
max-width: 400px;
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
justify-content: space-between;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
padding-left: $o-kanban-dashboard-dropdown-complex-gap*2;
|
||||
padding-right: $o-kanban-dashboard-dropdown-complex-gap*2;
|
||||
}
|
||||
|
||||
div[class*="col-"] {
|
||||
flex: 1 1 percentage(1/3);
|
||||
padding-left: $o-kanban-dashboard-dropdown-complex-gap;
|
||||
padding-right: $o-kanban-dashboard-dropdown-complex-gap;
|
||||
max-width: none;
|
||||
|
||||
> .o_kanban_card_manage_title {
|
||||
@extend .h5;
|
||||
margin: (($font-size-base * $line-height-base) / 2) 0;
|
||||
}
|
||||
> div:not(.o_kanban_card_manage_title) {
|
||||
@include o-kanban-dashboard-dropdown-link($link-padding-gap: $o-kanban-dashboard-dropdown-complex-gap);
|
||||
}
|
||||
}
|
||||
|
||||
.row.o_kanban_card_manage_settings {
|
||||
padding-top: $o-kanban-dashboard-dropdown-complex-gap*3;
|
||||
|
||||
&:not(:first-child) {
|
||||
border-top: 1px solid map-get($grays, '300');
|
||||
}
|
||||
|
||||
.oe_kanban_colorpicker {
|
||||
max-width: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div[class*="col-"] + div[class*="col-"] {
|
||||
border-left: 1px solid map-get($grays, '300');
|
||||
}
|
||||
> div:last-child {
|
||||
@include o-kanban-dashboard-dropdown-link($link-padding-gap: $o-kanban-dashboard-dropdown-complex-gap);
|
||||
padding-left: $dropdown-item-padding-x;
|
||||
padding-right: $dropdown-item-padding-x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&.o_dropdown_open,
|
||||
.o-dropdown.show {
|
||||
.o_kanban_card_manage_pane {
|
||||
display: block;
|
||||
}
|
||||
.o_kanban_manage_toggle_button {
|
||||
@include o-kanban-dropdown-open;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
// ------- Kanban Record Titles -------
|
||||
// Uniform design across different HTML layouts
|
||||
|
||||
@@ -204,6 +102,90 @@
|
||||
}
|
||||
}
|
||||
|
||||
// ------- Dropdown toggle & menu -------
|
||||
$o-kanban-manage-toggle-height: 35px;
|
||||
|
||||
.o_kanban_record .o_dropdown_kanban {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.o_kanban_record .dropdown-menu {
|
||||
// Arbitrary value to place the dropdown-menu exactly below the
|
||||
// dropdown-toggle (height is forced so that it works on Firefox)
|
||||
top: $o-kanban-manage-toggle-height;
|
||||
|
||||
> div:not(.o_no_padding_kanban_colorpicker) {
|
||||
padding: 3px 0 3px 20px;
|
||||
visibility: visible;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
> .o_kanban_card_manage_section {
|
||||
margin-bottom: 10px;
|
||||
|
||||
+ .o_kanban_card_manage_section {
|
||||
border-top: 1px solid map-get($grays, '200');
|
||||
}
|
||||
|
||||
> div {
|
||||
@include o-kanban-dashboard-dropdown-link;
|
||||
}
|
||||
}
|
||||
|
||||
// Dropdown menu with complex layout
|
||||
.container {
|
||||
max-width: 400px;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
justify-content: space-between;
|
||||
padding-left: $o-kanban-dashboard-dropdown-complex-gap*2;
|
||||
padding-right: $o-kanban-dashboard-dropdown-complex-gap*2;
|
||||
}
|
||||
|
||||
div[class*="col-"] {
|
||||
flex: 1 1 percentage(1/3);
|
||||
padding-left: $o-kanban-dashboard-dropdown-complex-gap;
|
||||
padding-right: $o-kanban-dashboard-dropdown-complex-gap;
|
||||
max-width: none;
|
||||
|
||||
> .o_kanban_card_manage_title {
|
||||
@extend .h5;
|
||||
margin: (($font-size-base * $line-height-base) / 2) 0;
|
||||
}
|
||||
> div:not(.o_kanban_card_manage_title) {
|
||||
@include o-kanban-dashboard-dropdown-link($link-padding-gap: $o-kanban-dashboard-dropdown-complex-gap);
|
||||
}
|
||||
}
|
||||
|
||||
.row.o_kanban_card_manage_settings {
|
||||
padding-top: $o-kanban-dashboard-dropdown-complex-gap*3;
|
||||
|
||||
&:not(:first-child) {
|
||||
border-top: 1px solid map-get($grays, '300');
|
||||
}
|
||||
|
||||
.oe_kanban_colorpicker {
|
||||
max-width: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div[class*="col-"] + div[class*="col-"] {
|
||||
border-left: 1px solid map-get($grays, '300');
|
||||
}
|
||||
> div:last-child {
|
||||
@include o-kanban-dashboard-dropdown-link($link-padding-gap: $o-kanban-dashboard-dropdown-complex-gap);
|
||||
padding-left: $dropdown-item-padding-x;
|
||||
padding-right: $dropdown-item-padding-x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.o_favorite {
|
||||
@include o-position-absolute(
|
||||
$top: 3px,
|
||||
|
||||
@@ -14,7 +14,11 @@ import { ViewButton } from "@web/views/view_button/view_button";
|
||||
import { useViewCompiler } from "@web/views/view_compiler";
|
||||
import { Widget } from "@web/views/widgets/widget";
|
||||
import { evalDomain } from "../utils";
|
||||
import { KANBAN_BOX_ATTRIBUTE, KANBAN_TOOLTIP_ATTRIBUTE } from "./kanban_arch_parser";
|
||||
import {
|
||||
KANBAN_BOX_ATTRIBUTE,
|
||||
KANBAN_MENU_ATTRIBUTE,
|
||||
KANBAN_TOOLTIP_ATTRIBUTE,
|
||||
} from "./kanban_arch_parser";
|
||||
import { KanbanCompiler } from "./kanban_compiler";
|
||||
import { KanbanCoverImageDialog } from "./kanban_cover_image_dialog";
|
||||
import { KanbanDropdownMenuWrapper } from "./kanban_dropdown_menu_wrapper";
|
||||
@@ -122,6 +126,10 @@ export class KanbanRecord extends Component {
|
||||
|
||||
this.templates = useViewCompiler(ViewCompiler, arch, templates);
|
||||
|
||||
if (this.constructor.KANBAN_MENU_ATTRIBUTE in templates) {
|
||||
this.showMenu = true;
|
||||
}
|
||||
|
||||
if (KANBAN_TOOLTIP_ATTRIBUTE in templates) {
|
||||
useTooltip("root", {
|
||||
info: { ...this, record: this.props.record.formattedRecord },
|
||||
@@ -327,4 +335,6 @@ KanbanRecord.props = [
|
||||
];
|
||||
KanbanRecord.Compiler = KanbanCompiler;
|
||||
KanbanRecord.KANBAN_BOX_ATTRIBUTE = KANBAN_BOX_ATTRIBUTE;
|
||||
KanbanRecord.KANBAN_MENU_ATTRIBUTE = KANBAN_MENU_ATTRIBUTE;
|
||||
KanbanRecord.menuTemplate = "web.KanbanRecordMenu";
|
||||
KanbanRecord.template = "web.KanbanRecord";
|
||||
|
||||
@@ -10,6 +10,23 @@
|
||||
t-on-click="onGlobalClick"
|
||||
t-ref="root">
|
||||
<t t-call="{{ templates[this.constructor.KANBAN_BOX_ATTRIBUTE] }}" t-call-context="renderingContext"/>
|
||||
<t t-call="{{ this.constructor.menuTemplate }}"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="web.KanbanRecordMenu" owl="1">
|
||||
<t t-if="showMenu">
|
||||
<Dropdown class="'o_dropdown_kanban bg-transparent position-absolute end-0'"
|
||||
menuClass="'dropdown-menu'"
|
||||
togglerClass="'btn o-no-caret mt-0'"
|
||||
position="'bottom-end'"
|
||||
title="'Dropdown menu'">
|
||||
<t t-set-slot="toggler">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</t>
|
||||
<KanbanDropdownMenuWrapper>
|
||||
<t t-call="{{ templates[this.constructor.KANBAN_MENU_ATTRIBUTE] }}" t-call-context="renderingContext"/>
|
||||
</KanbanDropdownMenuWrapper>
|
||||
</Dropdown>
|
||||
</t>
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
@@ -155,7 +155,12 @@
|
||||
|
||||
<t t-name="web.KanbanColorPicker" owl="1">
|
||||
<ul class="oe_kanban_colorpicker">
|
||||
<t t-foreach="props.colors" t-as="color" t-key="color">
|
||||
<!--
|
||||
Used in KanbanRecord
|
||||
Note: `props` is only accessible through `this` as we call the compiled template with
|
||||
`t-call-context` directive.
|
||||
-->
|
||||
<t t-foreach="this.props.colors" t-as="color" t-key="color">
|
||||
<li role="menuitem" t-on-click="() => this.selectColor(color_index)" t-att-title="color" t-att-aria-label="color">
|
||||
<a href="#" t-attf-class="oe_kanban_color_{{ color_index }}" />
|
||||
</li>
|
||||
|
||||
@@ -397,34 +397,6 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelector("span.o_text_block").textContent, "yop");
|
||||
});
|
||||
|
||||
QUnit.test("dropdown without toggler are correctly rendered", async (assert) => {
|
||||
serverData.models.partner.records = [serverData.models.partner.records[0]];
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: `
|
||||
<kanban class="o_kanban_test">
|
||||
<templates><t t-name="kanban-box">
|
||||
<div>
|
||||
<div class="dropdown">
|
||||
<div class="dropdown-menu">
|
||||
<a class="someItem" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t></templates>
|
||||
</kanban>`,
|
||||
});
|
||||
|
||||
assert.containsOnce(target, ".o-dropdown.dropdown.o_dropdown_kanban");
|
||||
await click(target, ".o_kanban_record .o-dropdown button.dropdown-toggle");
|
||||
assert.containsOnce(
|
||||
target,
|
||||
".o_kanban_record .o-dropdown .o-dropdown--menu > div > a.someItem"
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test("basic grouped rendering", async (assert) => {
|
||||
assert.expect(14);
|
||||
|
||||
@@ -8084,20 +8056,20 @@ QUnit.module("Views", (hooks) => {
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch:
|
||||
"<kanban>" +
|
||||
'<field name="foo"/>' +
|
||||
'<field name="bar"/>' +
|
||||
'<field name="category_ids"/>' +
|
||||
"<templates>" +
|
||||
'<t t-name="kanban-box">' +
|
||||
"<div>" +
|
||||
'<field name="foo"/>' +
|
||||
"<button type=\"object\" attrs=\"{'invisible':['|', ('bar','=',True), ('category_ids', '!=', [])]}\" class=\"btn btn-primary float-end\" name=\"arbitrary\">Join</button>" +
|
||||
"</div>" +
|
||||
"</t>" +
|
||||
"</templates>" +
|
||||
"</kanban>",
|
||||
arch: `
|
||||
<kanban>
|
||||
<field name="foo"/>
|
||||
<field name="bar"/>
|
||||
<field name="category_ids"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<field name="foo"/>
|
||||
<button type="object" attrs="{'invisible':['|', ('bar','=',True), ('category_ids', '!=', [])]}" class="btn btn-primary float-end" name="arbitrary">Join</button>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
});
|
||||
|
||||
assert.containsOnce(
|
||||
@@ -8114,27 +8086,20 @@ QUnit.module("Views", (hooks) => {
|
||||
type: "kanban",
|
||||
resModel: "category",
|
||||
serverData,
|
||||
arch:
|
||||
"<kanban>" +
|
||||
'<field name="color"/>' +
|
||||
"<templates>" +
|
||||
'<t t-name="kanban-box">' +
|
||||
'<div color="color">' +
|
||||
'<div class="o_dropdown_kanban dropdown">' +
|
||||
'<a class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#">' +
|
||||
'<span class="fa fa-bars fa-lg"/>' +
|
||||
"</a>" +
|
||||
'<ul class="dropdown-menu" role="menu">' +
|
||||
"<li>" +
|
||||
'<ul class="oe_kanban_colorpicker"/>' +
|
||||
"</li>" +
|
||||
"</ul>" +
|
||||
"</div>" +
|
||||
'<field name="name"/>' +
|
||||
"</div>" +
|
||||
"</t>" +
|
||||
"</templates>" +
|
||||
"</kanban>",
|
||||
arch: `
|
||||
<kanban>
|
||||
<field name="color"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div class="oe_kanban_colorpicker"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div color="color">
|
||||
<field name="name"/>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
async mockRPC(route, { method, args }) {
|
||||
if (method === "write") {
|
||||
assert.step(`write-color-${args[1].color}`);
|
||||
@@ -9840,27 +9805,22 @@ QUnit.module("Views", (hooks) => {
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch:
|
||||
"<kanban>" +
|
||||
"<templates>" +
|
||||
'<t t-name="kanban-box">' +
|
||||
'<div class="oe_kanban_global_click">' +
|
||||
'<field name="name"/>' +
|
||||
'<div class="o_dropdown_kanban dropdown">' +
|
||||
'<a class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#">' +
|
||||
'<span class="fa fa-bars fa-lg"/>' +
|
||||
"</a>" +
|
||||
'<div class="dropdown-menu" role="menu">' +
|
||||
'<a type="set_cover" data-field="displayed_image_id" class="dropdown-item">Set Cover Image</a>' +
|
||||
"</div>" +
|
||||
"</div>" +
|
||||
"<div>" +
|
||||
'<field name="displayed_image_id" widget="attachment_image"/>' +
|
||||
"</div>" +
|
||||
"</div>" +
|
||||
"</t>" +
|
||||
"</templates>" +
|
||||
"</kanban>",
|
||||
arch: `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a type="set_cover" data-field="displayed_image_id" class="dropdown-item">Set Cover Image</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click">
|
||||
<field name="name"/>
|
||||
<div>
|
||||
<field name="displayed_image_id" widget="attachment_image"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
async mockRPC(_route, { model, method, args }) {
|
||||
if (model === "partner" && method === "write") {
|
||||
assert.step(String(args[0][0]));
|
||||
@@ -9912,7 +9872,7 @@ QUnit.module("Views", (hooks) => {
|
||||
|
||||
assert.containsOnce(target, 'img[data-src*="/web/image/2"]');
|
||||
|
||||
await click(target, ".o_kanban_record:first-child .o_attachment_image");
|
||||
// await click(target, ".o_kanban_record:first-child .o_attachment_image"); //Not sure, to discuss
|
||||
|
||||
assert.verifySteps(["1", "2"], "should writes on both kanban records");
|
||||
});
|
||||
@@ -10999,68 +10959,6 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsN(target, ".o_kanban_group:nth-child(2) .o_kanban_record", 3);
|
||||
});
|
||||
|
||||
QUnit.test("classes on dropdown menu do not end on dropdown main div", async (assert) => {
|
||||
serverData.models.partner.records.splice(1, 3); // keep one record only
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<field name="foo"/>
|
||||
<div class="dropdown" />
|
||||
<ul class="o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<li>Hello</li>
|
||||
</ul>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
`,
|
||||
});
|
||||
|
||||
const dropdown = target.querySelector(".o_kanban_record .o-dropdown");
|
||||
assert.isVisible(dropdown);
|
||||
assert.hasClass(dropdown, "o_dropdown_kanban");
|
||||
assert.doesNotHaveClass(dropdown, "dropdown-menu");
|
||||
assert.doesNotHaveClass(dropdown, "o_kanban_card_manage_pane");
|
||||
await click(dropdown, "button.dropdown-toggle");
|
||||
assert.containsOnce(dropdown, ".o_kanban_card_manage_pane.dropdown-menu");
|
||||
});
|
||||
|
||||
QUnit.test("classes on toggler do not end on dropdown main div", async (assert) => {
|
||||
serverData.models.partner.records.splice(1, 3); // keep one record only
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<field name="foo"/>
|
||||
<a class="o_kanban_manage_toggle_button o_left" href="#">
|
||||
<i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/>
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
`,
|
||||
});
|
||||
|
||||
const dropdown = target.querySelector(".o_kanban_record .o-dropdown");
|
||||
assert.isVisible(dropdown);
|
||||
assert.hasClass(dropdown, "o_dropdown_kanban");
|
||||
assert.doesNotHaveClass(dropdown, "o_kanban_manage_toggle_button");
|
||||
assert.doesNotHaveClass(dropdown, "o_left");
|
||||
assert.containsOnce(dropdown, ".o_kanban_manage_toggle_button.o_left");
|
||||
});
|
||||
|
||||
QUnit.test("dropdown is closed on item click", async (assert) => {
|
||||
serverData.models.partner.records.splice(1, 3); // keep one record only
|
||||
await makeView({
|
||||
@@ -11070,17 +10968,11 @@ QUnit.module("Views", (hooks) => {
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<a role="menuitem" class="dropdown-item">Item</a>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" class="dropdown-item">Item</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
@@ -11094,111 +10986,6 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsNone(target, ".dropdown-menu");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
"classes on dropdown are on dropdown main div but not the other attributes",
|
||||
async (assert) => {
|
||||
serverData.models.partner.records.splice(1, 3); // keep one record only
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<field name="foo"/>
|
||||
<div class="o_kanban_manage_button_section my_class" placeholder="Bouh"/>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
`,
|
||||
});
|
||||
|
||||
const dropdown = target.querySelector(".o_kanban_record .o-dropdown");
|
||||
assert.isVisible(dropdown);
|
||||
assert.strictEqual(
|
||||
dropdown.className,
|
||||
"o-dropdown dropdown o_dropdown_kanban o_kanban_manage_button_section my_class o-dropdown--no-caret"
|
||||
);
|
||||
assert.notOk(dropdown.hasAttribute("placeholder"));
|
||||
}
|
||||
);
|
||||
|
||||
QUnit.test("declaring only the menu does not insert a dropdown", async (assert) => {
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div>
|
||||
<field name="foo"/>
|
||||
<ul class="o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<li>Hello</li>
|
||||
</ul>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
`,
|
||||
});
|
||||
|
||||
assert.containsNone(target, ".o_kanban_record .o-dropdown");
|
||||
});
|
||||
|
||||
QUnit.test("support multiple dropdowns", async (assert) => {
|
||||
assert.expect(4);
|
||||
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<field name="bar" />
|
||||
<templates>
|
||||
<div t-name="kanban-box">
|
||||
<field name="foo" />
|
||||
<t t-if="record.bar.raw_value">
|
||||
<div class="dropdown dropdown-true">
|
||||
<div class="dropdown-toggle">
|
||||
<span class="toggler-true">TOGGLER TRUE</span>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
<span class="menu-true">MENU TRUE</span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div class="dropdown-toggle">
|
||||
<span class="toggler-false">TOGGLER FALSE</span>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
<span class="menu-false">MENU FALSE</span>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</templates>
|
||||
</kanban>
|
||||
`,
|
||||
});
|
||||
|
||||
assert.containsN(target, ".o_kanban_renderer .dropdown-true", 3);
|
||||
assert.containsN(target, ".o_kanban_renderer .dropdown", 4);
|
||||
|
||||
await toggleRecordDropdown(2);
|
||||
|
||||
assert.strictEqual(getCardTexts()[2], "gnap\nTOGGLER TRUE\nMENU TRUE");
|
||||
|
||||
await toggleRecordDropdown(3);
|
||||
|
||||
assert.strictEqual(getCardTexts()[3], "blip\nTOGGLER FALSE\nMENU FALSE");
|
||||
});
|
||||
|
||||
QUnit.test("can use JSON in kanban template", async (assert) => {
|
||||
serverData.models.partner.records = [{ id: 1, foo: '["g", "e", "d"]' }];
|
||||
await makeView({
|
||||
@@ -11223,37 +11010,6 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.strictEqual(target.querySelector(".o_kanban_record").innerText, "ged");
|
||||
});
|
||||
|
||||
QUnit.test("Dropdowns in subtemplates", async (assert) => {
|
||||
await makeView({
|
||||
type: "kanban",
|
||||
resModel: "partner",
|
||||
serverData,
|
||||
arch: /* xml */ `
|
||||
<kanban>
|
||||
<templates>
|
||||
<div t-name="kanban-box">
|
||||
<div class="dropdown-menu">
|
||||
MENU
|
||||
</div>
|
||||
<field name="foo" />
|
||||
<t t-call="another-template"/>
|
||||
</div>
|
||||
<span t-name="another-template">
|
||||
<div class="dropdown-toggle">
|
||||
TOGGLER
|
||||
</div>
|
||||
</span>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
});
|
||||
|
||||
assert.containsN(target, ".o_kanban_record .dropdown", 4);
|
||||
|
||||
await toggleRecordDropdown(0);
|
||||
|
||||
assert.strictEqual(getCardTexts()[0], "yop\nTOGGLER\nMENU");
|
||||
});
|
||||
|
||||
QUnit.test(
|
||||
"Color '200' (gray) can be used twice (for false value and another value) in progress bar",
|
||||
async (assert) => {
|
||||
|
||||
@@ -43,20 +43,14 @@
|
||||
<field name="legend_done"/>
|
||||
<templates>
|
||||
<progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger"}'/>
|
||||
<t t-name="kanban-menu" groups="base.group_user">
|
||||
<a role="menuitem" t-att-href="record.website_url.value" class="dropdown-item">View Track</a>
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit Track</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown" groups="base.group_user">
|
||||
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" t-att-href="record.website_url.value" class="dropdown-item">View Track</a>
|
||||
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit Track</a></t>
|
||||
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<h4 class="o_kanban_record_title"><field name="name"/></h4>
|
||||
|
||||
@@ -243,28 +243,23 @@
|
||||
<field name="enroll"/>
|
||||
<field name="website_published"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<div role="menuitem" aria-haspopup="true" class="o_no_padding_kanban_colorpicker">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div class="o_kanban_slides_card_manage_pane">
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<a role="menuitem" name="action_channel_invite" class="dropdown-item"
|
||||
type="object" attrs="{'invisible': [('enroll', '!=', 'invite')]}">
|
||||
Invite
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
||||
<span class="fa fa-ellipsis-v" aria-hidden="false"/>
|
||||
</a>
|
||||
<div class="o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<div role="menuitem" aria-haspopup="true" class="o_no_padding_kanban_colorpicker">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
|
||||
</div>
|
||||
<div class="o_kanban_slides_card_manage_pane">
|
||||
<t t-if="widget.deletable">
|
||||
<a role="menuitem" type="delete" class="dropdown-item">Delete</a>
|
||||
</t>
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
||||
<a role="menuitem" name="action_channel_invite" class="dropdown-item"
|
||||
type="object" attrs="{'invisible': [('enroll', '!=', 'invite')]}">
|
||||
Invite
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title mb16">
|
||||
<div class="o_primary">
|
||||
|
||||
@@ -174,20 +174,15 @@
|
||||
<field name="website"/>
|
||||
<field name="application"/>
|
||||
<templates>
|
||||
<t t-name="kanban-menu">
|
||||
<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>
|
||||
<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">
|
||||
|
||||
Reference in New Issue
Block a user