Merge pull request #1067 from odoo-dev/saas-5-forum-answer-order-fix-htr
authorThibault Delavallée <tde@openerp.com>
Thu, 10 Jul 2014 14:54:43 +0000 (16:54 +0200)
committerThibault Delavallée <tde@openerp.com>
Thu, 10 Jul 2014 14:54:43 +0000 (16:54 +0200)
[FIX] website_forum: fix answers display order (correct, then votes, then write_date)

addons/mass_mailing/models/mail_mail.py
addons/product/product_report.xml
addons/product/product_view.xml
addons/website/controllers/main.py
addons/website/views/website_templates.xml
addons/website_crm/controllers/main.py
addons/website_sale/controllers/main.py
addons/website_sale/static/src/js/website_sale_tracking.js [new file with mode: 0644]
addons/website_sale/views/templates.xml

index 0e44399..41be9c2 100644 (file)
@@ -74,6 +74,11 @@ class MailMail(osv.Model):
         """ Override to add the tracking URL to the body. """
         body = super(MailMail, self).send_get_mail_body(cr, uid, mail, partner=partner, context=context)
 
+        # prepend <base> tag for images using absolute urls
+        domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "web.base.url", context=context)
+        base = "<base href='%s'>" % domain
+        body = tools.append_content_to_html(base, body, plaintext=False, container_tag='div')
+
         # generate tracking URL
         if mail.statistics_ids:
             tracking_url = self._get_tracking_url(cr, uid, mail, partner, context=context)
index 5d2c3b9..9c7ca7e 100644 (file)
@@ -10,6 +10,6 @@
             report_type="qweb-pdf" 
             name="product.report_pricelist" 
             file="product.report_pricelist"
-        />
+           menu="False"/>
     </data>
 </openerp>
index ddecdea..b7d746c 100644 (file)
@@ -69,7 +69,7 @@
                                     <group>
                                         <field name="type"/>
                                         <field name="uom_id" on_change="onchange_uom(uom_id,uom_po_id)" groups="product.group_uom"/>
-                                        <field name="lst_price"/>
+                                        <field name="list_price"/>
                                     </group>
                                     <group>
                                         <field name="active"/>
                 <form position="attributes">
                     <attribute name="string">Product Variant</attribute>
                 </form>
+                <field name="list_price" position="attributes">
+                   <attribute name="name">lst_price</attribute>
+                </field>
                 <field name="name" position="replace">
                     <field name="name" attrs="{'invisible': [('id', '!=', False)]}"/>
                     <field name="product_tmpl_id" class="oe_inline" readonly="1" attrs="{'invisible': [('id', '=', False)], 'required': [('id', '!=', False)]}"/>
index a1006af..9c6749a 100644 (file)
@@ -40,8 +40,7 @@ class Website(openerp.addons.web.controllers.main.Home):
                 if not (first_menu.url.startswith(('/page/', '/?', '/#')) or (first_menu.url=='/')):
                     return request.redirect(first_menu.url)
                 if first_menu.url.startswith('/page/'):
-                    page = first_menu.url[6:]
-
+                    return request.registry['ir.http'].reroute(first_menu.url)
         return self.page(page)
 
     @http.route(website=True, auth="public")
index d0c4231..2e3bc4e 100644 (file)
             <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">
                     </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>
index 37d661e..935e100 100644 (file)
@@ -40,7 +40,7 @@ class contactus(http.Controller):
 
         post_file = []  # List of file to add to ir_attachment once we have the ID
         post_description = []  # Info to add after the message
-        values = {'user_id': False}
+        values = {}
 
         lead_model = request.registry['crm.lead']
 
@@ -81,7 +81,7 @@ class contactus(http.Controller):
             post_description.append("%s: %s" % ("REFERER", environ.get("HTTP_REFERER")))
             values['description'] += dict_to_str(_("Environ Fields: "), post_description)
 
-        lead_id = lead_model.create(request.cr, SUPERUSER_ID, values, request.context)
+        lead_id = lead_model.create(request.cr, SUPERUSER_ID, dict(values, user_id=False), request.context)
         if lead_id:
             for field_value in post_file:
                 attachment_value = {
index a6bcd15..525530f 100644 (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:
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 (file)
index 0000000..8ff5a5a
--- /dev/null
@@ -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);
+    }
+
+});
index 28f4d3e..d36951e 100644 (file)
 <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'/>
   <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>
   <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>
   <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 ''"/>
       <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>