diff options
| -rw-r--r-- | addons/website/static/src/img/website_dashboard_visit_demo.png | bin | 21368 -> 43181 bytes | |||
| -rw-r--r-- | addons/website/static/src/js/website.backendDashboard.js | 11 | ||||
| -rw-r--r-- | addons/website/static/src/less/website.backendDashboard.less | 295 | ||||
| -rw-r--r-- | addons/website/static/src/xml/website.backend.xml | 22 | ||||
| -rw-r--r-- | addons/website_crm/controllers/main.py | 6 | ||||
| -rw-r--r-- | addons/website_crm/static/src/js/website_crm_backend.js | 4 | ||||
| -rw-r--r-- | addons/website_crm/static/src/xml/website_crm_dashboard.xml | 29 | ||||
| -rw-r--r-- | addons/website_sale/static/src/xml/website_sale_dashboard.xml | 14 |
8 files changed, 249 insertions, 132 deletions
diff --git a/addons/website/static/src/img/website_dashboard_visit_demo.png b/addons/website/static/src/img/website_dashboard_visit_demo.png Binary files differindex 27e04ec5e46..7945ac173b0 100644 --- a/addons/website/static/src/img/website_dashboard_visit_demo.png +++ b/addons/website/static/src/img/website_dashboard_visit_demo.png diff --git a/addons/website/static/src/js/website.backendDashboard.js b/addons/website/static/src/js/website.backendDashboard.js index ed241fd2215..ee962e43e86 100644 --- a/addons/website/static/src/js/website.backendDashboard.js +++ b/addons/website/static/src/js/website.backendDashboard.js @@ -105,7 +105,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { render_dashboards: function() { var self = this; _.each(this.dashboards_templates, function(template) { - self.$el.append(QWeb.render(template, {widget: self})); + self.$('.o_website_dashboard').append(QWeb.render(template, {widget: self})); }); }, @@ -129,7 +129,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { chart.xAxis .tickFormat(function(d) { return d3.time.format("%m/%d/%y")(new Date(d)); }) .tickValues(_.map(tick_values, function(d) { return self.getDate(d); })) - .rotateLabels(-30); + .rotateLabels(-45); chart.yAxis .tickFormat(d3.format('.02f')); @@ -156,7 +156,6 @@ var Dashboard = Widget.extend(ControlPanelMixin, { }, render_graph_analytics: function(client_id) { - if (!this.dashboards_data.visits || !this.dashboards_data.visits.ga_client_id) { return; } @@ -203,7 +202,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { var self = this; $.when(this.fetch_data()).then(function() { - self.$el.empty(); + self.$('.o_website_dashboard').empty(); self.render_dashboards(); self.render_graphs(); }); @@ -292,7 +291,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { } else if (this.date_range === 'year') { start_date = '365daysAgo'; } - var $analytics_chart_2 = $('<div>').addClass('col-md-6'); + var $analytics_chart_2 = $('<div>').addClass('col-md-6 col-xs-12'); var breakdownChart = new gapi.analytics.googleCharts.DataChart({ query: { 'dimensions': 'ga:date', @@ -312,7 +311,7 @@ var Dashboard = Widget.extend(ControlPanelMixin, { $analytics_chart_2.appendTo($analytics_components); // 5. Chart table - var $analytics_chart_1 = $('<div>').addClass('col-md-6'); + var $analytics_chart_1 = $('<div>').addClass('col-md-6 col-xs-12'); var mainChart = new gapi.analytics.googleCharts.DataChart({ query: { 'dimensions': 'ga:medium', diff --git a/addons/website/static/src/less/website.backendDashboard.less b/addons/website/static/src/less/website.backendDashboard.less index fe4680e2d8e..faef016c415 100644 --- a/addons/website/static/src/less/website.backendDashboard.less +++ b/addons/website/static/src/less/website.backendDashboard.less @@ -1,113 +1,228 @@ -.o_website_dashboard { +.o_dashboards { + background-color: #ececec; - background-color: @odoo-webclient-background-color; + .o_website_dashboard { + background-color: #ececec; + padding: 16px; - svg { - padding-top: 2px; - float: left; - } + > div { + margin-right: 0px; + margin-left: 0px; + } - div.o_box { - .clearfix(); - padding: 10px; - color: @odoo-main-text-color; - background-color: @odoo-view-background-color; - background-size: cover; - margin-top: @odoo-horizontal-padding; - margin-bottom: @odoo-horizontal-padding; - position: relative; - } + div.o_box { + .clearfix(); + color: @odoo-main-color-muted; + background-color: @odoo-view-background-color; + background-size: cover; + margin-bottom: @odoo-horizontal-padding; + position: static; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3); + padding: 25px 16px; + + h2, h4 { + text-transform: uppercase; + margin-top: 0; + } - .o_dashboard_visits { + h4 { margin: 0 0 0 8px; } + + h2 { color: @odoo-brand-primary; } + + .col-md-6 { + padding: 15px; + + .js_field_selection { + width: 30%; + margin: 0 0 20px 0; + float: right; + border-radius: 0; + } + + .table-responsive { + border: none; + } + + table { + + tr:nth-child(even) { + background: #f5f6f7; + } + + th { + text-transform: uppercase; + color: @odoo-brand-optional; + border-top-width: 0px; + } + td, th { + text-align: right; + border-left: none; + + &:first-child { + text-align: left; + } + } + } + + /*------------------------------------------*/ + /* Chart design */ + /*------------------------------------------*/ + + .gapi-analytics-data-chart svg g path, svg [class*="nv-series-"] { + stroke: @odoo-main-color-muted !important; + } + + svg { + padding-top: 2px; + float: left; + + g.nvd3.nv-wrap.nv-lineChart { + .translate(45; 30) !important; + } + + g.nv-y.nv-axis, g.nv-x.nv-axis, g.nv-y.nv-axis .nv-axisMaxMin { + text { + opacity: .3 !important; + } + } + + g.nv-x.nv-axis .tick > line { + 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%); + } + } + + .nvtooltip { + border-radius: 0; + border: 1px solid @gray-lighter; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3); + + .legend-color-guide > div { + border: none; + } + tr:first-child .legend-color-guide > div { + background-color: @odoo-brand-optional !important; + } + tr:last-child .legend-color-guide > div { + background-color: darken(@odoo-brand-optional, 10%) !important; + } + } + } + } - .o_demo_background { + .o_dashboard_visits { + + .o_demo_background { + + margin-top: 16px; + height: 300px; + background-size: 100% !important; + background: url("/website/static/src/img/website_dashboard_visit_demo.png"); + position: relative; + + .o_buttons { + position: relative; + z-index: 10; + + > button { + display: block; + } + } + + .o_layer { + background-color: rgba(255,255,255,.3); + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + } - margin-top: 16px; - height: 300px; - background: url("/website/static/src/img/website_dashboard_visit_demo.png"); - position: relative; + .o_properties_selection { - > button { - position: absolute; - top: 50%; - left: 40%; + @media (min-width: @screen-md-min) { + .o-flex-display(); + } + + margin-top: 10px; + margin-bottom: 10px; } - .o_layer { - background-color: rgba(0,0,0,.4); - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; + .gapi-analytics-auth-styles-signinbutton { + cursor: pointer; } - } - .o_properties_selection { - .o-flex-display(); - margin-top: 10px; - margin-bottom: 10px; - } + .ActiveUsers { + position: relative; + float: right; + top: -60px; + right: 10px; + border: 1px solid @gray-lighter; + font-weight: 300; + white-space: nowrap; + padding: .5em 1.5em; + margin: .5em; + text-transform: uppercase; + } - .gapi-analytics-auth-styles-signinbutton { - cursor: pointer; - } + .ActiveUsers-value { + display: inline-block; + font-weight: 300; + margin-right: -.25em; + } - .ActiveUsers { - position: absolute; - top: 0; - right: 0; - background: hsl(30,10%,95%); - border: 1px solid #d4d2d0; - border-radius: 4px; - font-weight: 300; - white-space: nowrap; - padding: .5em 1.5em; - margin: .5em; - } + .ActiveUsers.is-increasing { + animation: increase 3s; + } - .ActiveUsers-value { - display: inline-block; - font-weight: 600; - margin-right: -.25em; - } + .ActiveUsers.is-decreasing { + animation: decrease 3s; + } - .ActiveUsers.is-increasing { - animation: increase 3s; - } + @keyframes increase { + 10% { + background-color: lighten(@odoo-brand-optional, 30%); + border-color: @odoo-brand-optional; + color: @odoo-brand-optional; + } + } - .ActiveUsers.is-decreasing { - animation: decrease 3s; + @keyframes decrease { + 10% { + background-color: lighten(@odoo-brand-optional, 30%); + border-color: @odoo-brand-optional; + color: @odoo-brand-optional; + } + } } - @keyframes increase { - 0% {} - 10% { - background-color: hsl(120, 100%, 96%); - border-color: hsla(120, 100%, 25%, .5); - color: hsla(120, 100%, 25%, 1); - } - 100% {} + tr.o_product_template { + cursor: pointer; } - @keyframes decrease { - 0% {} - 10% { - background-color: hsl(0, 100%, 96%); - border-color: hsla(0, 100%, 50%, .5); - color: hsl(0, 100%, 50%); - } - 100% {} + .o_loader { + text-align: center; + width: 100%; + height: 20em; } } - - tr.o_product_template { - cursor: pointer; - } - - .o_loader { - text-align: center; - width: 100%; - height: 20em; - } } diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml index 39e181865c2..55c9c7803ad 100644 --- a/addons/website/static/src/xml/website.backend.xml +++ b/addons/website/static/src/xml/website.backend.xml @@ -6,7 +6,9 @@ </div> <t t-name="website.WebsiteDashboardMain"> - <div class="container o_website_dashboard"> + <div class="o_dashboards"> + <div class="container-fluid o_website_dashboard"> + </div> </div> </t> @@ -14,25 +16,25 @@ <div class="row o_dashboard_visits"> <div class="col-xs-12 o_box"> <h2>Visits</h2> - - <div t-if="widget.dashboards_data.visits && widget.dashboards_data.visits.ga_client_id" class="row js_analytics_components"> + <div t-if="widget.dashboards_data.visits && widget.dashboards_data.visits.ga_client_id"> + <div class="row js_analytics_components"/> + <a href="#" class="js_link_analytics_settings">Edit my Analytics Client ID</a> </div> - - <div t-if="!(widget.dashboards_data.visits && widget.dashboards_data.visits.ga_client_id)"> + <div t-if="!(widget.dashboards_data.visits && widget.dashboards_data.visits.ga_client_id)" class="col-md-12"> <div class="o_demo_background"> <div class="o_layer"> </div> - <button class="btn btn-sm btn-primary js_link_analytics_settings">Link my Analytics Account</button> + <div class="o_buttons text-center"> + <h3>Currently there is no data available.</h3> + <button class="btn btn-sm btn-primary js_link_analytics_settings center-block mb8">Link my Analytics Account</button> + </div> </div> </div> - - <a href="#" class="js_link_analytics_settings">Edit my Analytics Client ID</a> - </div> </div> </t> - <div t-name="website.unauthorized_analytics" class="col-xs-12 js_unauthorized_message"> + <div t-name="website.unauthorized_analytics" class="col-xs-12 js_unauthorized_message mb16"> <span t-if="reason === 'not_connected'">You need to log in to your Google Account before: </span> <span t-if="reason === 'no_right'">You do not seem to have access to this Analytics Account.</span> </div> diff --git a/addons/website_crm/controllers/main.py b/addons/website_crm/controllers/main.py index fd13143975a..eae0e506406 100644 --- a/addons/website_crm/controllers/main.py +++ b/addons/website_crm/controllers/main.py @@ -55,6 +55,12 @@ class WebsiteCrmBackend(WebsiteBackend): }, ], 'leads': leads, + 'lead_fields': { + 'create_date': 'Create Date', + 'campaign_id': 'Campaign', + 'medium_id': 'Medium', + 'source_id': 'Source', + }, } return results diff --git a/addons/website_crm/static/src/js/website_crm_backend.js b/addons/website_crm/static/src/js/website_crm_backend.js index 88546a395db..cc860c5c673 100644 --- a/addons/website_crm/static/src/js/website_crm_backend.js +++ b/addons/website_crm/static/src/js/website_crm_backend.js @@ -45,8 +45,8 @@ WebsiteBackend.include({ return this._super().then(function() { var leads = self.dashboards_data.leads.leads; if (leads && leads.length) { - self.lead_fields = Object.keys(self.dashboards_data.leads.leads[0]); - self.lead_field = self.lead_fields[0]; + self.lead_fields = self.dashboards_data.leads.lead_fields; + self.lead_field = Object.keys(self.lead_fields)[0]; self.compute_percentages(); } }); diff --git a/addons/website_crm/static/src/xml/website_crm_dashboard.xml b/addons/website_crm/static/src/xml/website_crm_dashboard.xml index a47c74172e0..ff3814affd6 100644 --- a/addons/website_crm/static/src/xml/website_crm_dashboard.xml +++ b/addons/website_crm/static/src/xml/website_crm_dashboard.xml @@ -4,26 +4,23 @@ <t t-name="website_crm.dashboard_leads"> <div class="row o_dashboard_leads"> <div class="col-xs-12 o_box"> - <h2>Lead Acquisition</h2> + <div class="col-md-6 col-xs-12"> + <h2>Leads Acquisition / <t t-esc="widget.date_range"></t></h2> + <div id="o_graph_leads" class="o_graph" data-type="leads"/> + </div> - <div class="row"> - <div class="col-md-6"> - <div id="o_graph_leads" class="o_graph" data-type="leads"/> + <div class="col-md-6 col-xs-12"> + <h4>Leads Analysis</h4> + <div t-if="!widget.leads_table || !widget.leads_table.length"> + <i>There is no recent lead.</i> </div> - <div class="col-md-6"> - <h4>Leads Analysis</h4> - <div t-if="!widget.leads_table || !widget.leads_table.length"> - <i>There is no recent lead.</i> - </div> - - <div t-if="widget.leads_table && widget.leads_table.length" class="table-responsive"> - <select class="js_field_selection"> - <option t-foreach="widget.lead_fields" t-as="field" t-att-value="field"><t t-esc="field.split('_id')[0]"/></option> - </select> + <div t-if="widget.leads_table && widget.leads_table.length" class="table-responsive"> + <select class="js_field_selection"> + <option t-foreach="widget.lead_fields" t-as="field" t-att-value="field"><t t-esc="widget.lead_fields[field]"/></option> + </select> - <t t-call="website_crm.LeadsTable"/> - </div> + <t t-call="website_crm.LeadsTable"/> </div> </div> </div> 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 1e71feddd1e..189534dac85 100644 --- a/addons/website_sale/static/src/xml/website_sale_dashboard.xml +++ b/addons/website_sale/static/src/xml/website_sale_dashboard.xml @@ -5,16 +5,14 @@ <t t-name="website_sale.dashboard_sales"> <div class="row o_dashboard_sales"> <div class="col-xs-12 o_box"> - <h2>Sales</h2> - <div class="row"> - <div class="col-md-6"> - <div id="o_graph_sales" class="o_graph" data-type="sales"/> - </div> + <div class="col-md-6 col-xs-12"> + <h2>Sales / <t t-esc="widget.date_range"></t></h2> + <div id="o_graph_sales" class="o_graph" data-type="sales"/> + </div> - <div class="col-md-6"> - <t t-call="website_sale.products_table"/> - </div> + <div class="col-md-6 col-xs-12"> + <t t-call="website_sale.products_table"/> </div> </div> </div> |
