From 8eb97cc0829290d7a1f3c2b1b007e257a5615b4c Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Wed, 9 Jul 2014 17:45:40 +0200 Subject: [PATCH] [IMP] website_sale: Add google analytics on checkout process --- addons/website/views/website_templates.xml | 22 +++--- addons/website_sale/controllers/main.py | 25 +++++++ .../static/src/js/website_sale_tracking.js | 67 +++++++++++++++++++ addons/website_sale/views/templates.xml | 5 ++ 4 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 addons/website_sale/static/src/js/website_sale_tracking.js diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index d0c4231eac6..2e3bc4ee3e2 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -93,6 +93,17 @@ + + +
@@ -207,17 +218,6 @@
- - - diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index a6bcd15f9e5..525530fca79 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -759,5 +759,30 @@ class website_sale(http.Controller): product = product_obj.browse(request.cr, request.uid, id, context=request.context) return product.write({'website_size_x': x, 'website_size_y': y}) + @http.route(['/shop/tracking_last_order'], type='json', auth="public") + def tracking_cart(self, **post): + """ return JS code for google analytics""" + cr, uid, context = request.cr, request.uid, request.context + ret = {} + sale_order_id = request.session.get('sale_last_order_id') + if sale_order_id: + order = request.registry['sale.order'].browse(cr, SUPERUSER_ID, sale_order_id, context=context) + ret['transaction'] = { + 'id': sale_order_id, + 'affiliation': order.company_id.name, + 'revenue': order.amount_total, + 'currency': order.currency_id.name + } + ret['lines'] = [] + for line in order.order_line: + if not line.is_delivery: + ret['lines'].append({ + 'id': line.order_id and line.order_id.id, + 'name': line.product_id.categ_id and line.product_id.categ_id.name or '-', + 'sku': line.product_id.id, + 'quantity': line.product_uom_qty, + 'price': line.price_unit, + }) + return ret # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/website_sale/static/src/js/website_sale_tracking.js b/addons/website_sale/static/src/js/website_sale_tracking.js new file mode 100644 index 00000000000..8ff5a5ac789 --- /dev/null +++ b/addons/website_sale/static/src/js/website_sale_tracking.js @@ -0,0 +1,67 @@ +$(document).ready(function () { + + // Watching a product + if ($("#product_detail.oe_website_sale").length) { + prod_id = $("input[name='product_id']").attr('value'); + vpv("/stats/ecom/product_view/" + prod_id); + } + + // Add a product into the cart + $(".oe_website_sale form[action='/shop/cart/update'] a.a-submit").on('click', function(o) { + prod_id = $("input[name='product_id']").attr('value'); + vpv("/stats/ecom/product_add_to_cart/" + prod_id); + }); + + // Start checkout + $(".oe_website_sale a[href='/shop/checkout']").on('click', function(o) { + vpv("/stats/ecom/customer_checkout"); + }); + + $(".oe_website_sale div.oe_cart a[href^='/web?redirect'][href$='/shop/checkout']").on('click', function(o) { + vpv("/stats/ecom/customer_signin"); + }); + + $(".oe_website_sale form[action='/shop/confirm_order'] a.a-submit").on('click', function(o) { + if ($("#top_menu > li > a[href='/web/login']").length){ + vpv("/stats/ecom/customer_signup"); + } + vpv("/stats/ecom/order_checkout"); + }); + + $(".oe_website_sale form[target='_self'] button[type=submit]").on('click', function(o) { + var method = $("#payment_method input[name=acquirer]:checked").nextAll("span:first").text(); + vpv("/stats/ecom/order_payment/" + method); + }); + + if ($(".oe_website_sale div.oe_cart div.oe_website_sale_tx_status").length) { + track_ga('require', 'ecommerce'); + + order_id = $(".oe_website_sale div.oe_cart div.oe_website_sale_tx_status").data("order-id"); + vpv("/stats/ecom/order_confirmed/" + order_id); + + openerp.jsonRpc("/shop/tracking_last_order/").then(function(o) { + track_ga('ecommerce:clear'); + + if (o.transaction && o.lines) { + track_ga('ecommerce:addTransaction', o.transaction); + _.forEach(o.lines, function(line) { + track_ga('ecommerce:addItem', line); + }); + } + track_ga('ecommerce:send'); + }); + } + + function vpv(page){ //virtual page view + track_ga('send', 'pageview', { + 'page': page, + 'title': document.title, + }); + } + + function track_ga() { + website_ga = this._gaw || function(){}; + website_ga.apply(this, arguments); + } + +}); diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 28f4d3e2418..d36951ec8e6 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -335,6 +335,7 @@