From 132738da5f25beeeadc1cb962c4610a88eadd76a Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Mon, 4 Dec 2017 16:19:52 +0100 Subject: [PATCH 1/8] [IMP] sale: Don't copy confirmation date on duplication --- addons/sale/models/sale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 3946466ab10..fa1089592c0 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -130,7 +130,7 @@ class SaleOrder(models.Model): help="Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed.") is_expired = fields.Boolean(compute='_compute_is_expired', string="Is expired") create_date = fields.Datetime(string='Creation Date', readonly=True, index=True, help="Date on which sales order is created.") - confirmation_date = fields.Datetime(string='Confirmation Date', readonly=True, index=True, help="Date on which the sales order is confirmed.", oldname="date_confirm") + confirmation_date = fields.Datetime(string='Confirmation Date', readonly=True, index=True, help="Date on which the sales order is confirmed.", oldname="date_confirm", copy=False) user_id = fields.Many2one('res.users', string='Salesperson', index=True, track_visibility='onchange', default=lambda self: self.env.user) partner_id = fields.Many2one('res.partner', string='Customer', readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, required=True, change_default=True, index=True, track_visibility='always') partner_invoice_id = fields.Many2one('res.partner', string='Invoice Address', readonly=True, required=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}, help="Invoice address for current sales order.") From 0b19e1737ee237b564a49d25be8ff682025fd8c3 Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Mon, 4 Dec 2017 16:25:03 +0100 Subject: [PATCH 2/8] [IMP] sale: Rename 'Order Date' into 'Confirmation Date' in SO tree view --- addons/sale/views/sale_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml index eab32993c49..b4454f6ba82 100644 --- a/addons/sale/views/sale_views.xml +++ b/addons/sale/views/sale_views.xml @@ -148,7 +148,7 @@ - + From 109857949da7d2d83252d5eca2f09890a1809765 Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Mon, 4 Dec 2017 16:26:06 +0100 Subject: [PATCH 3/8] [IMP] website: Remove the suggested app on the website dashboard --- addons/website/controllers/backend.py | 8 --- .../static/src/js/backend/dashboard.js | 16 ------ .../src/less/website.backendDashboard.less | 24 --------- .../static/src/xml/website.backend.xml | 49 +------------------ 4 files changed, 2 insertions(+), 95 deletions(-) diff --git a/addons/website/controllers/backend.py b/addons/website/controllers/backend.py index ab9800f656b..e5a2ecfa87e 100644 --- a/addons/website/controllers/backend.py +++ b/addons/website/controllers/backend.py @@ -11,13 +11,6 @@ class WebsiteBackend(http.Controller): def fetch_dashboard_data(self, date_from, date_to): has_group_system = request.env.user.has_group('base.group_system') has_group_designer = request.env.user.has_group('website.group_website_designer') - if has_group_system: - apps_data = dict((app['name'], app) for app in request.env['ir.module.module'].sudo().search_read( - ['|', ('name', 'ilike', 'website'), ('application', '=', True)], - ['id', 'sequence', 'name', 'shortdesc', 'state'], - order='sequence ASC')) - else: - apps_data = {} dashboard_data = { 'groups': { 'system': has_group_system, @@ -25,7 +18,6 @@ class WebsiteBackend(http.Controller): }, 'currency': request.env.user.company_id.currency_id.id, 'dashboards': { - 'apps_data': apps_data, 'visits': {}, } } diff --git a/addons/website/static/src/js/backend/dashboard.js b/addons/website/static/src/js/backend/dashboard.js index c140e61c3e5..3fd7a79161d 100644 --- a/addons/website/static/src/js/backend/dashboard.js +++ b/addons/website/static/src/js/backend/dashboard.js @@ -10,8 +10,6 @@ var session = require('web.session'); var web_client = require('web.web_client'); var Widget = require('web.Widget'); -var local_storage = require('web.local_storage'); - var _t = core._t; var QWeb = core.qweb; @@ -29,7 +27,6 @@ var Dashboard = Widget.extend(ControlPanelMixin, { 'click .js_link_analytics_settings': 'on_link_analytics_settings', 'click .o_dashboard_action': 'on_dashboard_action', 'click .o_dashboard_action_form': 'on_dashboard_action_form', - 'click .o_dashboard_hide_panel': 'on_dashboard_hide_panel', }, init: function(parent, context) { @@ -38,7 +35,6 @@ var Dashboard = Widget.extend(ControlPanelMixin, { this.date_range = 'week'; // possible values : 'week', 'month', year' this.date_from = moment().subtract(1, 'week'); this.date_to = moment(); - this.hidden_apps = JSON.parse(local_storage.getItem('website_dashboard_hidden_app_ids') || '[]'); this.dashboards_templates = ['website.dashboard_visits']; this.graphs = []; @@ -277,18 +273,6 @@ var Dashboard = Widget.extend(ControlPanelMixin, { }); }, - on_dashboard_hide_panel: function (ev) { - ev.preventDefault(); - ev.stopPropagation(); - var $action = $(ev.currentTarget); - // update hidden module list - this.hidden_apps = JSON.parse(local_storage.getItem('website_dashboard_hidden_app_ids') || '[]'); - this.hidden_apps.push(JSON.parse($action.data('module_id'))); - local_storage.setItem('website_dashboard_hidden_app_ids', JSON.stringify(this.hidden_apps)); - // remove box - $action.closest(".o_box_item").remove(); - }, - update_cp: function() { var self = this; if (!this.$searchview) { diff --git a/addons/website/static/src/less/website.backendDashboard.less b/addons/website/static/src/less/website.backendDashboard.less index 2fa66f00d16..c818704e175 100644 --- a/addons/website/static/src/less/website.backendDashboard.less +++ b/addons/website/static/src/less/website.backendDashboard.less @@ -152,30 +152,6 @@ background-color: darken(@odoo-brand-primary, 10%); } } - &.o_apps { - position: relative; - background-color: @odoo-brand-optional; - color: white; - .o_apps_hidden { - display: none; - &.o_dashboard_hide_panel { - position: absolute; - top: 0px; - right: 0px; - background: @brand-danger; - padding: 6px; - } - } - &:hover { - background-color: #45818E; - .o_apps_show { - display: none; - } - .o_apps_hidden { - display: block; - } - } - } .o_highlight { font-size: 27px; } diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml index e0d467489e6..bc7248bbcf4 100644 --- a/addons/website/static/src/xml/website.backend.xml +++ b/addons/website/static/src/xml/website.backend.xml @@ -15,53 +15,7 @@ - +
@@ -111,4 +65,5 @@
+ From 350fd6aa8a36c0fc274f7ad4e74039cf0505bff3 Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Mon, 4 Dec 2017 16:57:45 +0100 Subject: [PATCH 4/8] [IMP] website_sale: Display correct records on dashboard buttons Purpose ======= Display the wanted sales orders when clicking on 'Abandoned Carts' or 'Unpaid Orders' --- .../website_sale/views/sale_order_views.xml | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/addons/website_sale/views/sale_order_views.xml b/addons/website_sale/views/sale_order_views.xml index 1d051ed2a2d..21062be5fd2 100644 --- a/addons/website_sale/views/sale_order_views.xml +++ b/addons/website_sale/views/sale_order_views.xml @@ -93,6 +93,24 @@ + + Unpaid Orders + sale.order + form + [('state', '=', 'sent'), ('team_id.team_type', '=', 'website')] + + + + + + Abandoned Carts + sale.order + form + [('state', '=', 'draft'), ('order_line', '!=', False), ('partner_id', '!=', context.get('public_partner_id')), ('team_id.team_type', '=', 'website'), ('date_order', '<=', (datetime.datetime.utcnow() - datetime.timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S'))] + + + + Date: Tue, 5 Dec 2017 09:41:06 +0100 Subject: [PATCH 5/8] [IMP] website: Reload website dashboard when coming back from breadcrumb Purpose ======= When clicking on a dashboard element (eg: an invoice) and modifying it doesn't reload the dashboard, which could be confusing. --- addons/website/static/src/js/backend/dashboard.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/website/static/src/js/backend/dashboard.js b/addons/website/static/src/js/backend/dashboard.js index 3fd7a79161d..a4c69885d62 100644 --- a/addons/website/static/src/js/backend/dashboard.js +++ b/addons/website/static/src/js/backend/dashboard.js @@ -238,8 +238,14 @@ var Dashboard = Widget.extend(ControlPanelMixin, { }, on_reverse_breadcrumb: function() { + var self = this; web_client.do_push_state({}); this.update_cp(); + this.fetch_data().then(function() { + self.$('.o_website_dashboard').empty(); + self.render_dashboards(); + self.render_graphs(); + }); }, on_dashboard_action: function (ev) { From 930b682b1dfb7cd0b31c6a6a4dd137a8f660c0a7 Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Tue, 5 Dec 2017 09:56:47 +0100 Subject: [PATCH 6/8] [IMP] website_sale: Fetch confirmed orders grouped by product templates Purpose ======= Sales graph should be based on confirmation_date of sales orders, not the date_order. Date should be aggregated by product templates, not variants --- addons/website_sale/controllers/backend.py | 25 +++++++++---------- .../static/src/js/website_sale_backend.js | 6 ++--- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/addons/website_sale/controllers/backend.py b/addons/website_sale/controllers/backend.py index 303d5d3e3e8..646a1575c9b 100644 --- a/addons/website_sale/controllers/backend.py +++ b/addons/website_sale/controllers/backend.py @@ -40,18 +40,17 @@ class WebsiteSaleBackend(WebsiteBackend): # Product-based computation report_product_lines = request.env['sale.report'].read_group( domain=[ - ('product_id.website_published', '=', True), ('team_id.team_type', '=', 'website'), ('state', 'in', ['sale', 'done']), - ('date', '>=', date_from), - ('date', '<=', date_to)], - fields=['product_id', 'product_uom_qty', 'price_subtotal'], - groupby='product_id', orderby='product_uom_qty desc', limit=5) + ('confirmation_date', '>=', date_from), + ('confirmation_date', '<=', fields.Datetime.now())], + fields=['product_tmpl_id', 'product_uom_qty', 'price_subtotal'], + groupby='product_tmpl_id', orderby='product_uom_qty desc', limit=5) for product_line in report_product_lines: - product_id = request.env['product.product'].browse(product_line['product_id'][0]) + product_tmpl_id = request.env['product.template'].browse(product_line['product_tmpl_id'][0]) sales_values['best_sellers'].append({ - 'id': product_id.id, - 'name': product_id.name, + 'id': product_tmpl_id.id, + 'name': product_tmpl_id.name, 'qty': product_line['product_uom_qty'], 'sales': product_line['price_subtotal'], }) @@ -113,8 +112,8 @@ class WebsiteSaleBackend(WebsiteBackend): sales_domain = [ ('team_id.team_type', '=', 'website'), ('state', 'in', ['sale', 'done']), - ('date', '>=', date_from), - ('date', '<=', date_to) + ('confirmation_date', '>=', date_from), + ('confirmation_date', '<=', fields.Datetime.now()) ] sales_values['graph'] += [{ 'values': self._compute_sale_graph(date_date_from, date_date_to, sales_domain), @@ -133,10 +132,10 @@ class WebsiteSaleBackend(WebsiteBackend): daily_sales = request.env['sale.report'].read_group( domain=sales_domain, - fields=['date', 'price_subtotal'], - groupby='date:day') + fields=['confirmation_date', 'price_subtotal'], + groupby='confirmation_date:day') - daily_sales_dict = {p['date:day']: p['price_subtotal'] for p in daily_sales} + daily_sales_dict = {p['confirmation_date:day']: p['price_subtotal'] for p in daily_sales} sales_graph = [{ '0': fields.Date.to_string(d) if not previous else fields.Date.to_string(d + timedelta(days=days_between)), diff --git a/addons/website_sale/static/src/js/website_sale_backend.js b/addons/website_sale/static/src/js/website_sale_backend.js index 677219c5ef5..2fa7e06dbfa 100644 --- a/addons/website_sale/static/src/js/website_sale_backend.js +++ b/addons/website_sale/static/src/js/website_sale_backend.js @@ -18,11 +18,11 @@ WebsiteBackend.include({ on_product_template: function (ev) { ev.preventDefault(); - var product_id = $(ev.currentTarget).data('productId'); + var product_tmpl_id = $(ev.currentTarget).data('productId'); this.do_action({ type: 'ir.actions.act_window', - res_model: 'product.product', - res_id: product_id, + res_model: 'product.template', + res_id: product_tmpl_id, views: [[false, 'form']], target: 'current', }, { From 595a7b9c1b3ca55ab6f2f277f853252ff6f4414a Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Mon, 4 Dec 2017 16:17:18 +0100 Subject: [PATCH 7/8] [IMP] website_sale: Modify demo data to be displayed on dashboard --- addons/website_sale/data/demo.xml | 50 ++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/addons/website_sale/data/demo.xml b/addons/website_sale/data/demo.xml index e47d1064811..e7a9dfafb94 100644 --- a/addons/website_sale/data/demo.xml +++ b/addons/website_sale/data/demo.xml @@ -785,6 +785,8 @@ Weight: 31 grams + + sale @@ -804,6 +806,8 @@ Weight: 31 grams + + sale @@ -823,6 +827,8 @@ Weight: 31 grams + + sale @@ -842,6 +848,8 @@ Weight: 31 grams + + sale @@ -861,6 +869,8 @@ Weight: 31 grams + + sale @@ -880,6 +890,8 @@ Weight: 31 grams + + sale @@ -899,6 +911,8 @@ Weight: 31 grams + + sale @@ -918,6 +932,8 @@ Weight: 31 grams + + sale @@ -957,17 +973,6 @@ Weight: 31 grams 12.50 - - - - - - - - - - - @@ -1046,4 +1051,27 @@ Weight: 31 grams + + + + + + + + + + + + + + Computer Case + + 1 + + 25.0 + + + + + From 4764cae315af2c0886d7dbacca79071cacd16ebe Mon Sep 17 00:00:00 2001 From: Dhawal Limbuwala Date: Tue, 5 Dec 2017 10:15:18 +0100 Subject: [PATCH 8/8] [IMP] website(_sale): Improve UX for the website dashboard Purpose ======= There are some usability issues in the website dashboard Specification ============= 1/ Move button 'Go to Website' in the header 2/ Hide the action button bar if there's nothing in it 3/ Align the labels in the graph's legend 4/ Make the legend labels and display more obvious 5/ Modify the graph colors to be more readable 6/ Remove margins around todo buttons --- .../static/src/js/backend/dashboard.js | 18 +++-- .../src/less/website.backendDashboard.less | 70 ++++++++++++------- .../static/src/xml/website.backend.xml | 60 +++++++++++----- .../static/src/js/website_sale_backend.js | 1 - .../src/less/website_sale_dashboard.less | 4 ++ .../static/src/xml/website_sale_dashboard.xml | 69 +++++++++--------- .../static/src/xml/website_sale_dashboard.xml | 9 +-- 7 files changed, 141 insertions(+), 90 deletions(-) diff --git a/addons/website/static/src/js/backend/dashboard.js b/addons/website/static/src/js/backend/dashboard.js index a4c69885d62..9aae072e155 100644 --- a/addons/website/static/src/js/backend/dashboard.js +++ b/addons/website/static/src/js/backend/dashboard.js @@ -36,7 +36,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { this.date_from = moment().subtract(1, 'week'); this.date_to = moment(); - this.dashboards_templates = ['website.dashboard_visits']; + this.dashboards_templates = ['website.dashboard_header', 'website.dashboard_content']; this.graphs = []; }, @@ -51,7 +51,6 @@ var Dashboard = Widget.extend(ControlPanelMixin, { var self = this; return this._super().then(function() { self.update_cp(); - self.render_dashboards(); self.render_graphs(); self.$el.parent().addClass('oe_background_grey'); }); @@ -126,7 +125,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { render_dashboards: function() { var self = this; _.each(this.dashboards_templates, function(template) { - self.$('.o_website_dashboard_content').append(QWeb.render(template, {widget: self})); + self.$('.o_website_dashboard').append(QWeb.render(template, {widget: self})); }); }, @@ -152,6 +151,14 @@ var Dashboard = Widget.extend(ControlPanelMixin, { .tickValues(_.map(tick_values, function(d) { return self.getDate(d); })) .rotateLabels(-45); + chart.interactiveLayer.tooltip.contentGenerator(function(data) { + return QWeb.render('website.SalesChartTooltip', { + format: field_utils.format, + chartData: data, + dateRange: self.date_range + }); + }); + chart.yAxis .tickFormat(d3.format('.02f')); @@ -172,7 +179,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { var self = this; _.each(this.graphs, function(e) { if (self.groups[e.group]) { - self.render_graph('#o_graph_' + e.name, self.dashboards_data[e.name].graph); + self.render_graph('.o_graph_' + e.name, self.dashboards_data[e.name].graph); } }); this.render_graph_analytics(this.dashboards_data.visits.ga_client_id); @@ -230,7 +237,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { var self = this; $.when(this.fetch_data()).then(function() { - self.$('.o_website_dashboard_content').empty(); + self.$('.o_website_dashboard').empty(); self.render_dashboards(); self.render_graphs(); }); @@ -294,6 +301,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { this.update_control_panel({ cp_content: { $searchview: this.$searchview, + $buttons: QWeb.render("website.GoToButtons"), }, breadcrumbs: this.getParent().get_breadcrumbs(), }); diff --git a/addons/website/static/src/less/website.backendDashboard.less b/addons/website/static/src/less/website.backendDashboard.less index c818704e175..2021761aa1c 100644 --- a/addons/website/static/src/less/website.backendDashboard.less +++ b/addons/website/static/src/less/website.backendDashboard.less @@ -8,7 +8,7 @@ color: @odoo-main-color-muted; background-color: @odoo-view-background-color; background-size: cover; - margin-bottom: @odoo-horizontal-padding; + margin-top: @odoo-horizontal-padding; position: static; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3); @@ -20,7 +20,7 @@ h4 { margin: 0 0 0 8px; } - .col-md-6, .col-md-12 { + .col-md-7, .col-xs-12 { padding: 15px; .js_field_selection { @@ -36,7 +36,11 @@ table { - tr:nth-child(even) { + tr:first-child { + background: white; + } + + tr:nth-child(even):not(:hover) { background: #f5f6f7; } @@ -53,6 +57,9 @@ text-align: left; } } + .o_tooltip_key { + text-align: left; + } } /*------------------------------------------*/ @@ -75,23 +82,26 @@ opacity: 0 !important; } - [class*="nv-series-"] { - stroke-width: 3 !important; - fill: @odoo-main-color-muted !important; - } - - .nv-groups .nv-point, g circle { - fill: @odoo-brand-optional; - } - - .nv-groups .nv-point { - fill-opacity: 1 !important; - stroke-opacity: 1 !important; - stroke: @odoo-brand-optional; - } - - .nv-groups .nv-point.hover, .nv-group.nv-noninteractive .nv-point.hover { - stroke: darken(@odoo-brand-optional, 10%); + .nv-groups { + .nv-series-0 { + stroke-width: 3 !important; + .nv-point { + stroke: @odoo-brand-optional; + stroke-opacity: 1 !important; + &.hover { + stroke: darken(@odoo-brand-optional, 10%); + } + } + } + .nv-series-1 { + .nv-point { + stroke: @odoo-main-color-muted !important; + stroke-opacity: 1 !important; + &.hover { + stroke: darken(@odoo-main-color-muted, 10%); + } + } + } } } @@ -118,7 +128,7 @@ display: flex; flex-flow: row wrap; justify-content: flex-start; - > .o_box_item { + > .o_inner_box { @media (max-width: @screen-sm-min) { flex: 1 1 200px; display: block !important; @@ -136,15 +146,12 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - &.o_main { - background-color: @odoo-brand-optional; + cursor: pointer; + color: white; + background-color: @odoo-brand-optional; &:hover { background-color: darken(@odoo-brand-optional, 10%); } - a { - color: white; - } - } &.o_primary { background-color: @odoo-brand-primary; color: white; @@ -158,6 +165,15 @@ } } + .o_graph_sales { + .o_legend0 { + background-color: @odoo-brand-optional; + } + .o_legend1 { + background-color: @odoo-main-color-muted; + } + } + .o_dashboard_visits { h2 { diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml index bc7248bbcf4..cbddc2840b9 100644 --- a/addons/website/static/src/xml/website.backend.xml +++ b/addons/website/static/src/xml/website.backend.xml @@ -9,7 +9,7 @@
-
+
@@ -18,21 +18,23 @@
- -
-
-

Visits

-
- -
-
-
-
-
-

There is no data currently available.

- + +
+
+
+

Visits

+
+ +
+
+
+
+
+

There is no data currently available.

+ +
@@ -66,4 +68,30 @@
+ + + + + + + + + + + + + + + + + +
+
+ + + + Go to Website + + + diff --git a/addons/website_sale/static/src/js/website_sale_backend.js b/addons/website_sale/static/src/js/website_sale_backend.js index 2fa7e06dbfa..839b269f8b8 100644 --- a/addons/website_sale/static/src/js/website_sale_backend.js +++ b/addons/website_sale/static/src/js/website_sale_backend.js @@ -11,7 +11,6 @@ WebsiteBackend.include({ init: function (parent, context) { this._super(parent, context); - this.dashboards_templates.unshift('website_sale.dashboard_sales'); this.graphs.push({'name': 'sales', 'group': 'sale_salesman'}); }, diff --git a/addons/website_sale/static/src/less/website_sale_dashboard.less b/addons/website_sale/static/src/less/website_sale_dashboard.less index 4b93126c19b..b8ade85cba6 100644 --- a/addons/website_sale/static/src/less/website_sale_dashboard.less +++ b/addons/website_sale/static/src/less/website_sale_dashboard.less @@ -1,4 +1,8 @@ .o_dashboard_sales { + + h2 { + padding: 15px; + } h4 { margin: 3px 0 4px 0 !important; } .o_demo_background { margin-top: 16px; diff --git a/addons/website_sale/static/src/xml/website_sale_dashboard.xml b/addons/website_sale/static/src/xml/website_sale_dashboard.xml index 8aac2b4d65d..0ae647c45d4 100644 --- a/addons/website_sale/static/src/xml/website_sale_dashboard.xml +++ b/addons/website_sale/static/src/xml/website_sale_dashboard.xml @@ -1,61 +1,60 @@ - -
- + + - -
-
-
-
+ + +
+
+

Sales Since Last

Sales

-
-
-
- -
-
-
-
+
+
+
+
+ +
+ +

Sales Since Last

Sales

-
+
+
+
+
+

There is no recent confirmed order.

+
-
-

There is no recent confirmed order.

-
-
+
-
+ diff --git a/addons/website_sale_management/static/src/xml/website_sale_dashboard.xml b/addons/website_sale_management/static/src/xml/website_sale_dashboard.xml index d9d0f17d3cb..d3bc10f7237 100644 --- a/addons/website_sale_management/static/src/xml/website_sale_dashboard.xml +++ b/addons/website_sale_management/static/src/xml/website_sale_dashboard.xml @@ -2,12 +2,9 @@ -
- -
- Orders to Invoice -
- +
+
+ Orders to Invoice