[IMP] website_sale: Add google analytics on checkout process

This commit is contained in:
Jeremy Kersten 2014-07-09 17:45:40 +02:00
parent fa44bdb486
commit 8eb97cc082
4 changed files with 108 additions and 11 deletions

View File

@ -93,6 +93,17 @@
<t t-call-assets="website.assets_frontend"/>
<t t-raw="head or ''" name='layout_head'/>
<t t-if="website.google_analytics_key">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','_gaw');
_gaw('create',_.str.trim('<t t-esc="website.google_analytics_key"/>'));
_gaw('send','pageview');
</script>
</t>
</head>
<body>
<div id="wrapwrap">
@ -207,17 +218,6 @@
</div>
</footer>
</div>
<t t-if="website.google_analytics_key">
<script>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
ga('create',_.str.trim('<t t-esc="website.google_analytics_key"/>'));
ga('send','pageview');
</script>
</t>
</body>
</html>
</template>

View File

@ -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:

View File

@ -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);
}
});

View File

@ -335,6 +335,7 @@
<template id="product" name="Product">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_tracking.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<link rel='stylesheet' href='/website_sale/static/src/css/website_mail.css'/>
@ -606,6 +607,7 @@
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_tracking.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<t t-raw="head or ''"/>
</t>
@ -793,6 +795,7 @@
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_tracking.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<t t-raw="head or ''"/>
</t>
@ -959,6 +962,7 @@
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_tracking.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_payment.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<t t-raw="head or ''"/>
@ -1084,6 +1088,7 @@
<t t-set="head">
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_validate.js"></script>
<script type="text/javascript" src="/website_sale/static/src/js/website_sale_tracking.js"></script>
<t t-raw="head or ''"/>
</t>
<t t-set="additional_title">Shop - Confirmed</t>