[MERGE] from website-al
authorChristophe Matthieu <chm@openerp.com>
Tue, 10 Sep 2013 10:01:59 +0000 (12:01 +0200)
committerChristophe Matthieu <chm@openerp.com>
Tue, 10 Sep 2013 10:01:59 +0000 (12:01 +0200)
bzr revid: chm@openerp.com-20130910100159-xs0d8zngz4ybl0y9

16 files changed:
addons/website/controllers/main.py
addons/website/static/src/css/editor.css
addons/website/static/src/css/editor.sass
addons/website/static/src/js/website.editor.js
addons/website/static/src/xml/website.editor.xml
addons/website/view.py
addons/website_contract/controllers/main.py
addons/website_crm/controllers/main.py
addons/website_crm_partner_assign/controllers/main.py
addons/website_event/controllers/main.py
addons/website_google_map/controllers/main.py
addons/website_hr/controllers/main.py
addons/website_mail/controllers/main.py
addons/website_membership/controllers/main.py
addons/website_project/controllers/main.py
addons/website_sale/controllers/main.py

index db1596e..3412d0a 100644 (file)
@@ -56,9 +56,12 @@ class Website(openerp.addons.web.controllers.main.Home):
         request.cr.execute('SAVEPOINT pagenew')
         imd = request.registry['ir.model.data']
         view = request.registry['ir.ui.view']
-        view_model, view_id = imd.get_object_reference(request.cr, request.uid, 'website', 'default_page')
-        newview_id = view.copy(request.cr, request.uid, view_id)
-        newview = view.browse(request.cr, request.uid, newview_id)
+        view_model, view_id = imd.get_object_reference(
+            request.cr, request.uid, 'website', 'default_page')
+        newview_id = view.copy(
+            request.cr, request.uid, view_id, context=request.context)
+        newview = view.browse(
+            request.cr, request.uid, newview_id, context=request.context)
         newview.write({
             'arch': newview.arch.replace("website.default_page", path),
             'name': "page/%s" % path,
@@ -72,7 +75,7 @@ class Website(openerp.addons.web.controllers.main.Home):
                 'model': 'ir.ui.view',
                 'res_id': newview_id,
                 'noupdate': True
-            })
+            }, context=request.context)
         except psycopg2.IntegrityError:
             request.cr.execute('ROLLBACK TO SAVEPOINT pagenew')
         else:
@@ -87,14 +90,20 @@ class Website(openerp.addons.web.controllers.main.Home):
         imd = request.registry['ir.model.data']
         view = request.registry['ir.ui.view']
 
-        view_model, view_option_id = imd.get_object_reference(request.cr, request.uid, 'website', 'theme')
-        views = view.search(request.cr, request.uid, [('inherit_id','=',view_option_id)])
-        view.write(request.cr, request.uid, views, {'inherit_id': False})
+        view_model, view_option_id = imd.get_object_reference(
+            request.cr, request.uid, 'website', 'theme')
+        views = view.search(
+            request.cr, request.uid, [('inherit_id', '=', view_option_id)],
+            context=request.context)
+        view.write(request.cr, request.uid, views, {'inherit_id': False},
+                   context=request.context)
 
         if theme_id:
             module, xml_id = theme_id.split('.')
-            view_model, view_id = imd.get_object_reference(request.cr, request.uid, module, xml_id)
-            view.write(request.cr, request.uid, [view_id], {'inherit_id':view_option_id})
+            view_model, view_id = imd.get_object_reference(
+                request.cr, request.uid, module, xml_id)
+            view.write(request.cr, request.uid, [view_id],
+                       {'inherit_id': view_option_id}, context=request.context)
 
         return request.webcontext.render('website.themes', {'theme_changed': True})
 
@@ -110,7 +119,8 @@ class Website(openerp.addons.web.controllers.main.Home):
     @website.route('/website/customize_template_toggle', type='json', auth='admin') # FIXME: auth
     def customize_template_set(self, view_id):
         view_obj = request.registry.get("ir.ui.view")
-        view = view_obj.browse(request.cr, request.uid, int(view_id), context=request.context)
+        view = view_obj.browse(request.cr, request.uid, int(view_id),
+                               context=request.context)
         if view.inherit_id:
             value = False
         else:
@@ -123,14 +133,15 @@ class Website(openerp.addons.web.controllers.main.Home):
     @website.route('/website/customize_template_get', type='json', auth='admin') # FIXME: auth
     def customize_template_get(self, xml_id):
         imd = request.registry['ir.model.data']
-        view_model, view_theme_id = imd.get_object_reference(request.cr, request.uid, 'website', 'theme')
+        view_model, view_theme_id = imd.get_object_reference(
+            request.cr, request.uid, 'website', 'theme')
 
         view = request.registry.get("ir.ui.view")
         views = view._views_get(request.cr, request.uid, xml_id, request.context)
         done = {}
         result = []
         for v in views:
-            if v.inherit_option_id and v.inherit_option_id.id<>view_theme_id:
+            if v.inherit_option_id and v.inherit_option_id.id != view_theme_id:
                 if v.inherit_option_id.id not in done:
                     result.append({
                         'name': v.inherit_option_id.name,
@@ -221,8 +232,10 @@ class Website(openerp.addons.web.controllers.main.Home):
                     width = int(resize[0])
                     height = int(resize[1])
                     # resize maximum 500*500
-                    if width > 500: width = 500
-                    if height > 500: height = 500
+                    if width > 500:
+                        width = 500
+                    if height > 500:
+                        height = 500
                     image_base64 = openerp.tools.image_resize_image(base64_source=image_base64, size=(width, height), encoding='base64', filetype='PNG')
 
             image_data = base64.b64decode(image_base64)
@@ -244,7 +257,9 @@ class Website(openerp.addons.web.controllers.main.Home):
         _object = request.registry[post['object']]
 
         obj = _object.browse(request.cr, request.uid, _id)
-        _object.write(request.cr, request.uid, [_id], {'website_published': not obj.website_published})
+        _object.write(request.cr, request.uid, [_id],
+                      {'website_published': not obj.website_published},
+                      context=request.context)
         obj = _object.browse(request.cr, request.uid, _id)
 
         return obj.website_published and "1" or "0"
index 7a3dc36..d527297 100644 (file)
@@ -1,4 +1,3 @@
-@charset "utf-8";
 /* ---- CKEditor Minimal Reset ---- */
 .navbar.navbar-inverse .cke_chrome {
   border: none;
   position: fixed;
   top: 0;
   right: 0;
-  z-index: 10;
   display: block;
   width: 100%;
   padding: 2px;
-  margin: 0px;
+  margin: 0;
   z-index: 10000;
   background-color: #414141;
   background: -webkit-linear-gradient(#646060, #262626);
   top: 2px;
 }
 
+/* ---- EDITOR BAR ---- */
+table.editorbar-panel {
+  cursor: pointer;
+  width: 100%;
+}
+table.editorbar-panel td.selected {
+  background-color: #b1c9d9;
+}
+
+/* ---- RTE ---- */
+.oe_editable .btn {
+  -webkit-user-select: auto;
+  -moz-user-select: auto;
+  -ms-user-select: auto;
+  -o-user-select: auto;
+  user-select: auto;
+}
+
 /* ---- SNIPPET EDITOR ---- */
 .oe_snippets {
   position: fixed;
index ea6bfee..289ab1e 100644 (file)
     position: fixed
     top: 0
     right: 0
-    z-index: 10
     display: block
     width: 100%
     padding: 2px
-    margin: 0px
+    margin: 0
     z-index: 10000
     background-color: #414141
     background: -webkit-linear-gradient(#646060, #262626)
         position: relative !important
         top: +2px
 
+/* ---- EDITOR BAR ---- */
+
+table.editorbar-panel
+    cursor: pointer
+    width: 100%
+    td.selected
+        background-color: #b1c9d9
+
+/* ---- RTE ---- */
+
+// bootstrap makes .btn elements unselectable -> RTE double-click can't know
+// about them either
+.oe_editable .btn
+    -webkit-user-select: auto
+    -moz-user-select: auto
+    -ms-user-select: auto
+    -o-user-select: auto
+    user-select: auto
+
 /* ---- SNIPPET EDITOR ---- */
 
 .oe_snippets
@@ -308,4 +326,4 @@ $remove_color: $icon_close
     .oe_remove
         color: $remove_color
     .oe_seo_suggestion
-        cursor: pointer
\ No newline at end of file
+        cursor: pointer
index 8274be4..8056998 100644 (file)
                     canUndo: false,
                     editorFocus: true,
                 });
+            }
+        });
+        CKEDITOR.plugins.add( 'tablebutton', {
+            requires: 'panelbutton,floatpanel',
+            init: function( editor ) {
+                var label = "Table";
+
+                editor.ui.add('TableButton', CKEDITOR.UI_PANELBUTTON, {
+                    label: label,
+                    title: label,
+                    // use existing 'table' icon
+                    icon: 'table',
+                    modes: { wysiwyg: true },
+                    editorFocus: true,
+                    // panel opens in iframe, @css is CSS file <link>-ed within
+                    // frame document, @attributes are set on iframe itself.
+                    panel: {
+                        css: '/website/static/src/css/editor.css',
+                        attributes: { 'role': 'listbox', 'aria-label': label, },
+                    },
 
+                    onBlock: function (panel, block) {
+                        block.autoSize = true;
+                        block.element.setHtml(openerp.qweb.render('website.editor.table.panel', {
+                            rows: 5,
+                            cols: 5,
+                        }));
+
+                        var $table = $(block.element.$).on('mouseenter', 'td', function (e) {
+                            var $e = $(e.target);
+                            var y = $e.index() + 1;
+                            var x = $e.closest('tr').index() + 1;
+
+                            $table
+                                .find('td').removeClass('selected').end()
+                                .find('tr:lt(' + String(x) + ')')
+                                .children().filter(function () { return $(this).index() < y; })
+                                .addClass('selected');
+                        }).on('click', 'td', function (e) {
+                            var $e = $(e.target);
+
+                            var table = new CKEDITOR.dom.element(
+                                $(openerp.qweb.render('website.editor.table', {
+                                    rows: $e.closest('tr').index() + 1,
+                                    cols: $e.index() + 1,
+                                }))[0]);
+
+                            editor.insertElement(table);
+                            setTimeout(function () {
+                                var firstCell = new CKEDITOR.dom.element(table.$.rows[0].cells[0]);
+                                var range = editor.createRange();
+                                range.moveToPosition(firstCell, CKEDITOR.POSITION_AFTER_START);
+                                range.select();
+                            }, 0);
+                        });
+
+                        block.element.getDocument().getBody().setStyle('overflow', 'hidden');
+                        CKEDITOR.ui.fire('ready', this);
+                    },
+                });
             }
         });
+
         var editor = new website.EditorBar();
         var $body = $(document.body);
         editor.prependTo($body);
             this.$('#website-top-edit').show();
             $('.css_non_editable_mode_hidden').removeClass("css_non_editable_mode_hidden");
 
-            // this.$buttons.cancel.add(this.$buttons.snippet).prop('disabled', false)
-            //     .add(this.$buttons.save)
-            //     .parent().show();
-            //
-            // TODO: span edition changing edition state (save button)
             var $editables = $('[data-oe-model]')
                     .not('link, script')
                     // FIXME: propagation should make "meta" blocks non-editable in the first place...
                 autoParagraph: false,
                 filebrowserImageUploadUrl: "/website/attach",
                 // Support for sharedSpaces in 4.x
-                extraPlugins: 'sharedspace,customdialogs',
+                extraPlugins: 'sharedspace,customdialogs,tablebutton',
                 // Place toolbar in controlled location
                 sharedSpaces: { top: 'oe_rte_toolbar' },
                 toolbar: [
                         "JustifyLeft", "JustifyCenter", "JustifyRight", "JustifyBlock"
                     ]},{
                     name: 'special', items: [
-                        "Image", "Table"
+                        "Image", "TableButton"
                     ]},{
                     name: 'styles', items: [
                         "Styles"
index 927ad3d..5b2673f 100644 (file)
             </div>
         </div>
     </t>
+    <t t-name="website.editor.table.panel">
+        <table class="editorbar-panel">
+            <tr t-foreach="rows"><td t-foreach="cols">&#8203;</td></tr>
+        </table>
+    </t>
+    <t t-name="website.editor.table">
+        <table class="table table-bordered table-responsive">
+            <tbody>
+                <tr t-foreach="rows"><td t-foreach="cols">&#8203;</td></tr>
+            </tbody>
+        </table>
+    </t>
 </templates>
index 9d990bd..d6671b5 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from lxml import etree
+from lxml import etree, html
 from openerp.osv import osv, fields
 
 
@@ -9,6 +9,10 @@ class view(osv.osv):
     _columns = {
         'inherit_option_id': fields.many2one('ir.ui.view','Optional Inheritancy'),
         'inherited_option_ids': fields.one2many('ir.ui.view','inherit_option_id','Optional Inheritancies'),
+        'page': fields.boolean("Whether this view is a web page template (complete)"),
+    }
+    _defaults = {
+        'page': False,
     }
 
     # Returns all views (called and inherited) related to a view
@@ -45,3 +49,20 @@ class view(osv.osv):
             if call_view not in stack_result:
                 result += self._views_get(cr, uid, call_view, options=options, context=context, stack_result=result)
         return result
+
+    def save(self, cr, uid, model, res_id, field, value, xpath=None, context=None):
+        """ Update the content of a field
+
+        :param str model:
+        :param int res_id:
+        :param str xpath: valid xpath to the tag to replace
+        """
+        model_obj = self.pool.get(model)
+        if xpath:
+            origin = model_obj.read(cr, uid, [res_id], [field], context=context)[0][field]
+            origin_tree = etree.fromstring(origin.encode('utf-8'))
+            zone = origin_tree.xpath(xpath)[0]
+            zone.getparent().replace(zone, html.fromstring(value))
+            value = etree.tostring(origin_tree, encoding='utf-8')
+
+        model_obj.write(cr, uid, res_id, {field: value}, context=context)
index c911881..da22ad3 100644 (file)
@@ -17,42 +17,58 @@ class website_contract(http.Controller):
 
         # check contracts
         contract_ids = account_obj.search(request.cr, openerp.SUPERUSER_ID, [(1, "=", 1)])
-        contract_project_ids = [contract.partner_id.id 
-            for contract in account_obj.browse(request.cr, openerp.SUPERUSER_ID, contract_ids) if contract.partner_id]
+        contracts = account_obj.browse(request.cr, openerp.SUPERUSER_ID,
+                                       contract_ids, request.context)
+        contract_project_ids = [contract.partner_id.id for contract in contracts
+                                if contract.partner_id]
         domain = ['|', ('id', "in", contract_project_ids), ('id', "child_of", contract_project_ids)]
 
         if post.get('search'):
             domain += ['|',
-                ('name', 'ilike', "%%%s%%" % post.get("search")), 
+                ('name', 'ilike', "%%%s%%" % post.get("search")),
                 ('website_description', 'ilike', "%%%s%%" % post.get("search"))]
 
-
         # public partner profile
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, domain + [('website_published', '=', True)])
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID,
+            domain + [('website_published', '=', True)], request.context)
         google_map_partner_ids = ",".join([str(p) for p in partner_ids])
 
         if not request.webcontext.is_public_user:
             # search without website_published
-            partner_ids += partner_obj.search(request.cr, request.uid, domain)
+            partner_ids += partner_obj.search(request.cr, request.uid,
+                                              domain, context=request.context)
             partner_ids = list(set(partner_ids))
 
-
         # group by country
-        countries = partner_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
-        countries.insert(0, {'country_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))})
-
+        countries = partner_obj.read_group(
+            request.cr, request.uid, domain, ["id", "country_id"],
+            groupby="country_id", orderby="country_id", context=request.context)
+        country_count = partner_obj.search(
+            request.cr, request.uid, domain, count=True, context=request.context)
+        countries.insert(0, {
+            'country_id_count': country_count,
+            'country_id': ("all", _("All Countries"))
+        }, context=request.context)
 
         if post.get("country", "all") != 'all':
-            partner_ids = partner_obj.search(request.cr, request.uid, [('id', 'in', partner_ids), ('country_id', '=', int(post.get('country')))])
-
+            partner_ids = partner_obj.search(
+                request.cr, request.uid,
+                [
+                    ('id', 'in', partner_ids),
+                    ('country_id', '=', int(post.get('country')))
+                ], context=request.context)
 
         step = 20
         pager = website.pager(url="/references/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)], limit=step, offset=pager['offset'])
-
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)],
+            limit=step, offset=pager['offset'], context=request.context)
+        partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID,
+                                      partner_ids, request.context)
         values = {
             'countries': countries,
-            'partner_ids': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids),
+            'partner_ids': partners,
             'google_map_partner_ids': google_map_partner_ids,
             'pager': pager,
             'searches': post,
@@ -63,11 +79,17 @@ class website_contract(http.Controller):
     @website.route(['/references/<int:ref_id>/'], type='http', auth="public")
     def references_ref(self, ref_id=0, **post):
         partner_obj = request.registry['res.partner']
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)])
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID, [
+                ('website_published', '=', True),
+                ('id', '=', ref_id)
+            ], context=request.context)
         if not request.webcontext.is_public_user:
-            partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)])
-
-        values = {
-            'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids[0], context={'show_address': True}),
-        }
-        return request.webcontext.render("website_contract.details", values)
+            partner_ids += partner_obj.search(
+                request.cr, request.uid, [('id', '=', ref_id)],
+                context=request.context)
+
+        request.webcontext['partner_id'] = partner_obj.browse(
+            request.cr, openerp.SUPERUSER_ID, partner_ids[0],
+            dict(request.context + {'show_address': True}))
+        return request.webcontext.render("website_contract.details")
index 046899f..3e80f02 100644 (file)
@@ -11,7 +11,8 @@ class contactus(http.Controller):
     @website.route(['/crm/contactus'], type='http', auth="admin")
     def contactus(self, *arg, **post):
         post['user_id'] = False
-        request.registry['crm.lead'].create(request.cr, request.uid, post)
+        request.registry['crm.lead'].create(request.cr, request.uid,
+                                            post, request.context)
         company = request.webcontext['res_company']
         values = {
             'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=8&size=298x298" % quote_plus('%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''))
index 9612b9a..4cad9fc 100644 (file)
@@ -26,39 +26,58 @@ class website_crm_partner_assign(http.Controller):
         domain_search = {}
         if post.get('search'):
             domain_search["search"] += ['|',
-                ('name', 'ilike', "%%%s%%" % post.get("search")), 
+                ('name', 'ilike', "%%%s%%" % post.get("search")),
                 ('website_description', 'ilike', "%%%s%%" % post.get("search"))]
         if post.get("grade", "all") != 'all':
             domain_search["grade"] = [("grade_id", "=", int(post.get("grade")))]
         if post.get("country", "all") != 'all':
             domain_search["country"] = [("country_id", "=", int(post.get("country")))]
 
-
         # public partner profile
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, dom_without(False) )
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID, dom_without(False),
+            context=request.context)
         google_map_partner_ids = ",".join([str(p) for p in partner_ids])
 
-
         # group by country
         domain = dom_without("country")
-        countries = partner_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
-        countries.insert(0, {'country_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))})
-        
+        countries = partner_obj.read_group(
+            request.cr, request.uid, domain, ["id", "country_id"],
+            groupby="country_id", orderby="country_id", context=request.context)
+
+        partners = partner_obj.search(request.cr, request.uid, domain,
+                                      context=request.context, count=True)
+        countries.insert(0, {
+            'country_id_count': partners,
+            'country_id': ("all", _("All Countries"))
+        })
+
         # group by grade
         domain = dom_without("grade")
-        grades = partner_obj.read_group(request.cr, request.uid, domain, ["id", "grade_id"], groupby="grade_id", orderby="grade_id")
-        grades.insert(0, {'grade_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'grade_id': ("all", _("All Grade"))})
-        
+        grades = partner_obj.read_group(
+            request.cr, request.uid, domain, ["id", "grade_id"],
+            groupby="grade_id", orderby="grade_id", context=request.context)
+
+        grade_id_count = partner_obj.search(request.cr, request.uid, domain,
+                                            count=True, context=request.context)
+        grades.insert(0, {
+            'grade_id_count': grade_id_count,
+            'grade_id': ("all", _("All Grade"))
+        })
 
         step = 20
         pager = website.pager(url="/partners/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)], 
-            limit=step, offset=pager['offset'], order="grade_id ASC,partner_weight DESC")
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)],
+            context=request.context, limit=step, offset=pager['offset'],
+            order="grade_id ASC,partner_weight DESC")
+        partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID,
+                                      partner_ids, request.context)
 
         values = {
             'countries': countries,
             'grades': grades,
-            'partner_ids': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids),
+            'partner_ids': partners,
             'google_map_partner_ids': google_map_partner_ids,
             'pager': pager,
             'searches': post,
@@ -69,11 +88,18 @@ class website_crm_partner_assign(http.Controller):
     @website.route(['/partners/<int:ref_id>/'], type='http', auth="public")
     def partners_ref(self, ref_id=0, **post):
         partner_obj = request.registry['res.partner']
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)])
+        partner_ids = partner_obj.search(
+            request.cr, openerp.SUPERUSER_ID,
+            [('website_published', '=', True), ('id', '=', ref_id)],
+            context=request.context)
+
         if not request.webcontext.is_public_user:
-            partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)])
+            partner_ids += partner_obj.search(
+                request.cr, request.uid, [('id', '=', ref_id)],
+                context=request.context)
 
-        values = {
-            'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids[0], context={'show_address': True}),
-        }
-        return request.webcontext.render("website_crm_partner_assign.details", values)
+        request.webcontext['partner_id'] = partner_obj.browse(
+            request.cr, openerp.SUPERUSER_ID, partner_ids[0],
+            context=dict(request.context + {'show_address': True}))
+
+        return request.webcontext.render("website_crm_partner_assign.details")
index 984b4d1..db38995 100644 (file)
@@ -72,23 +72,45 @@ class website_event(http.Controller):
 
         # count by domains without self search
         for date in dates:
-            date[3] = event_obj.search(request.cr, request.uid, dom_without('date') + date[2], count=True)
+            date[3] = event_obj.search(
+                request.cr, request.uid, dom_without('date') + date[2],
+                count=True, context=request.context)
 
         domain = dom_without('type')
-        types = event_obj.read_group(request.cr, request.uid, domain, ["id", "type"], groupby="type", orderby="type")
-        types.insert(0, {'type_count': event_obj.search(request.cr, request.uid, domain, count=True), 'type': ("all", _("All Categories"))})
+        types = event_obj.read_group(
+            request.cr, request.uid, domain, ["id", "type"], groupby="type",
+            orderby="type", context=request.context)
+        type_count = event_obj.search(request.cr, request.uid, domain,
+                                      count=True, context=request.context)
+        types.insert(0, {
+            'type_count': type_count,
+            'type': ("all", _("All Categories"))
+        })
 
         domain = dom_without('country')
-        countries = event_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
-        countries.insert(0, {'country_id_count': event_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))})
+        countries = event_obj.read_group(
+            request.cr, request.uid, domain, ["id", "country_id"],
+            groupby="country_id", orderby="country_id", context=request.context)
+        country_id_count = event_obj.search(request.cr, request.uid, domain,
+                                            count=True, context=request.context)
+        countries.insert(0, {
+            'country_id_count': country_id_count,
+            'country_id': ("all", _("All Countries"))
+        })
 
         step = 5
-        event_count = event_obj.search(request.cr, request.uid, dom_without("none"), count=True)
+        event_count = event_obj.search(
+            request.cr, request.uid, dom_without("none"), count=True,
+            context=request.context)
         pager = website.pager(url="/event/", total=event_count, page=page, step=step, scope=5)
-        obj_ids = event_obj.search(request.cr, request.uid, dom_without("none"), limit=step, offset=pager['offset'], order="date_begin DESC")
+        obj_ids = event_obj.search(
+            request.cr, request.uid, dom_without("none"), limit=step,
+            offset=pager['offset'], order="date_begin DESC", context=request.context)
+        events_ids = event_obj.browse(request.cr, request.uid, obj_ids,
+                                      context=request.context)
 
         values = {
-            'event_ids': event_obj.browse(request.cr, request.uid, obj_ids),
+            'event_ids': events_ids,
             'dates': dates,
             'types': types,
             'countries': countries,
@@ -101,9 +123,12 @@ class website_event(http.Controller):
 
     @website.route(['/event/<int:event_id>'], type='http', auth="public")
     def event(self, event_id=None, **post):
+        event_obj = request.registry['event.event']
         values = {
-            'event_id': request.registry['event.event'].browse(request.cr, request.uid, event_id, {'show_address': 1}),
-            'message_ids': request.registry['event.event'].browse(request.cr, request.uid, event_id).message_ids,
+            'event_id': event_obj.browse(
+                            request.cr, request.uid, event_id,
+                            dict(request.context, show_address=1)),
+            'message_ids': event_obj.browse(request.cr, request.uid, event_id, request.context).message_ids,
             'subscribe': post.get('subscribe'),
             'range': range
         }
@@ -119,12 +144,12 @@ class website_event(http.Controller):
         if not order:
             order = website_sale.controllers.main.get_order()
 
-        partner_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id
-
-        context = {}
+        partner_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid,
+                                     context=request.context).partner_id.id
 
         fields = [k for k, v in order_line_obj._columns.items()]
-        values = order_line_obj.default_get(request.cr, SUPERUSER_ID, fields, context=context)
+        values = order_line_obj.default_get(request.cr, SUPERUSER_ID, fields,
+                                            context=request.context)
 
         _values = None
         for key, value in post.items():
@@ -132,7 +157,8 @@ class website_event(http.Controller):
             ticket_id = key.split("-")[0] == 'ticket' and int(key.split("-")[1]) or None
             if not ticket_id or not quantity:
                 continue
-            ticket = ticket_obj.browse(request.cr, request.uid, ticket_id)
+            ticket = ticket_obj.browse(request.cr, request.uid, ticket_id,
+                                       context=request.context)
 
             values['product_id'] = ticket.product_id.id
             values['event_id'] = ticket.event_id.id
@@ -146,11 +172,14 @@ class website_event(http.Controller):
 
             # change and record value
             pricelist_id = order.pricelist_id and order.pricelist_id.id or False
-            _values = order_line_obj.product_id_change(request.cr, SUPERUSER_ID, [], pricelist_id, ticket.product_id.id, partner_id=partner_id, context=context)['value']
+            _values = order_line_obj.product_id_change(
+                request.cr, SUPERUSER_ID, [], pricelist_id, ticket.product_id.id,
+                partner_id=partner_id, context=request.context)['value']
             _values.update(values)
 
-            order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID, _values, context=context)
-            order.write({'order_line': [(4, order_line_id)]}, context=context)
+            order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID,
+                                                  _values, context=request.context)
+            order.write({'order_line': [(4, order_line_id)]}, context=request.context)
 
         if not _values:
             return werkzeug.utils.redirect("/event/%s/" % event_id)
@@ -164,13 +193,24 @@ class website_event(http.Controller):
 
         if event_id and 'subscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
             if request.webcontext.is_public_user:
-                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+                partner_ids = partner_obj.search(
+                    request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
+                    context=request.context)
                 if not partner_ids:
-                    partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})]
+                    partner_data = {
+                        "email": post.get('email'),
+                        "name": "Subscribe: %s" % post.get('email')
+                    }
+                    partner_ids = [partner_obj.create(
+                        request.cr, SUPERUSER_ID, partner_data, context=request.context)]
             else:
-                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
-            event_obj.check_access_rule(request.cr, request.uid, [event_id], 'read')
-            event_obj.message_subscribe(request.cr, SUPERUSER_ID, [event_id], partner_ids)
+                partner_ids = [user_obj.browse(
+                    request.cr, request.uid, request.uid,
+                    context=request.context).partner_id.id]
+            event_obj.check_access_rule(request.cr, request.uid, [event_id],
+                                        'read', request.context)
+            event_obj.message_subscribe(request.cr, SUPERUSER_ID, [event_id],
+                                        partner_ids, request.context)
 
         return self.event(event_id=event_id, subscribe=post.get('email'))
 
@@ -182,10 +222,12 @@ class website_event(http.Controller):
 
         if event_id and 'unsubscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
             if request.webcontext.is_public_user:
-                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+                partner_ids = partner_obj.search(
+                    request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
+                    context=request.context)
             else:
-                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
-            event_obj.check_access_rule(request.cr, request.uid, [event_id], 'read')
-            event_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [event_id], partner_ids)
+                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
+            event_obj.check_access_rule(request.cr, request.uid, [event_id], 'read', request.context)
+            event_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [event_id], partner_ids, request.context)
 
         return self.event(event_id=event_id, subscribe=None)
index 3867a3f..2b6a8ec 100644 (file)
@@ -23,12 +23,16 @@ class google_map(http.Controller):
         partner_obj = request.registry['res.partner']
 
         domain = [("id", "in", [int(p) for p in post.get('partner_ids', "").split(",") if p])]
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, domain + [('website_published', '=', True)])
+        domain_public = domain + [('website_published', '=', True)]
+        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID,
+                                         domain_public, context=request.context)
         if not request.webcontext.is_public_user:
-            partner_ids += partner_obj.search(request.cr, request.uid, domain)
+            partner_ids += partner_obj.search(request.cr, request.uid, domain,
+                                              context=request.context)
             partner_ids = list(set(partner_ids))
 
-        return partner_obj.google_map_json(request.cr, openerp.SUPERUSER_ID, partner_ids)
+        return partner_obj.google_map_json(request.cr, openerp.SUPERUSER_ID,
+                                           partner_ids, request.context)
 
     @website.route(['/google_map/set_partner_position/'], type='http', auth="admin")
     def google_map_set_partner_position(self, *arg, **post):
@@ -43,8 +47,9 @@ class google_map(http.Controller):
                 'partner_latitude': latitude,
                 'partner_longitude': longitude,
                 'date_localization': datetime.now().strftime('%Y-%m-%d'),
-                }
-            partner_obj.write(request.cr, request.uid, [partner_id], values)
+            }
+            partner_obj.write(request.cr, request.uid, [partner_id], values,
+                              request.context)
 
 
 # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
index 1ce4889..e2b495d 100644 (file)
@@ -9,8 +9,10 @@ class website_hr(http.Controller):
     @website.route(['/page/website.aboutus'], type='http', auth="public")
     def blog(self, **post):
         hr_obj = request.registry['hr.employee']
-        employee_ids = hr_obj.search(request.cr, request.uid, [(1, "=", 1)])
+        employee_ids = hr_obj.search(request.cr, request.uid, [(1, "=", 1)],
+                                     context=request.context)
         values = {
-            'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids)
+            'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids,
+                                          request.context)
         }
         return request.webcontext.render("website.aboutus", values)
index 194281f..3331be0 100644 (file)
@@ -32,13 +32,13 @@ class website_mail(http.Controller):
         }
 
         if not request.webcontext.is_public_user and mail_group_id:
-            message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'])[0]['message_follower_ids']
-            parent_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id
+            message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'], request.context)[0]['message_follower_ids']
+            parent_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid, request.context).partner_id.id
             values['subscribe'] = parent_id in message_follower_ids
 
         domain = mail_group_id and [("res_id", "=", mail_group_id)] or []
 
-        for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_domain_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"):
+        for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_domain_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc", context=request.context):
             year = group['date'].split(" ")[1]
             if not values['nav_list'].get(year):
                 values['nav_list'][year] = {'name': year, 'date_count': 0, 'months': []}
@@ -46,21 +46,21 @@ class website_mail(http.Controller):
             values['nav_list'][year]['months'].append(group)
 
         if blog_id:
-            values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id)
+            values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id, request.context)
         else:
             step = 20
-            message_count = len(group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc"))
+            message_count = len(group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", context=request.context))
             pager = website.pager(url="/blog/%s/" % mail_group_id, total=message_count, page=page, step=step, scope=7)
-            message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=step, offset=pager['offset'])
+            message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=step, offset=pager['offset'], context=request.context)
             values['pager'] = pager
-            values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids)
+            values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids, request.context)
 
         return request.webcontext.render("website_mail.index", values)
 
     @website.route(['/blog/nav'], type='http', auth="public")
     def nav(self, **post):
-        comment_ids = request.registry['mail.group'].get_public_message_ids(request.cr, request.uid, domain=safe_eval(post.get('domain')), order="create_date asc", limit=None)
-        return simplejson.dumps(request.registry['mail.message'].read(request.cr, request.uid, comment_ids, ['website_published', 'subject', 'res_id']))
+        comment_ids = request.registry['mail.group'].get_public_message_ids(request.cr, request.uid, domain=safe_eval(post.get('domain')), order="create_date asc", limit=None, context=request.context)
+        return simplejson.dumps(request.registry['mail.message'].read(request.cr, request.uid, comment_ids, ['website_published', 'subject', 'res_id'], request.context))
 
     @website.route(['/blog/<int:mail_group_id>/<int:blog_id>/post'], type='http', auth="public")
     def blog_post(self, mail_group_id=None, blog_id=None, **post):
@@ -77,8 +77,7 @@ class website_mail(http.Controller):
                     website_published=blog_id and True or False,
                     type='comment',
                     subtype='mt_comment',
-                    context={'mail_create_nosubsrequest.cribe': True},
-                )
+                    context=dict(request.context, mail_create_nosubcribe=True))
             request.session.body = False
 
         if post.get('body'):
@@ -94,8 +93,7 @@ class website_mail(http.Controller):
                 website_published=False,
                 type='comment',
                 subtype='mt_comment',
-                context={'mail_create_nosubsrequest.cribe': True},
-            )
+                context=dict(request.context, mail_create_nosubscribe=True))
         return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id))
 
     @website.route(['/blog/<int:mail_group_id>/subscribe', '/blog/<int:mail_group_id>/<int:blog_id>/subscribe'], type='http', auth="public")
@@ -106,13 +104,13 @@ class website_mail(http.Controller):
 
         if mail_group_id and 'subscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
             if request.webcontext.is_public_user:
-                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))], context=request.context)
                 if not partner_ids:
-                    partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})]
+                    partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')}, request.context)]
             else:
-                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
-            group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read')
-            group_obj.message_subscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids)
+                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
+            group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read', request.context)
+            group_obj.message_subscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids, request.context)
 
         return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=post.get('email'))
 
@@ -124,10 +122,10 @@ class website_mail(http.Controller):
 
         if mail_group_id and 'unsubscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
             if request.webcontext.is_public_user:
-                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))], context=request.context)
             else:
-                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
-            group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read')
-            group_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids)
+                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
+            group_obj.check_access_rule(request.cr, request.uid, [mail_group_id], 'read', request.context)
+            group_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [mail_group_id], partner_ids, request.context)
 
         return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=None)
index 7ea78e9..a7ebef5 100644 (file)
@@ -25,33 +25,31 @@ class website_crm_partner_assign(http.Controller):
         domain_search = {}
         if post.get('search'):
             domain_search["search"] += ['|',
-                ('name', 'ilike', "%%%s%%" % post.get("search")), 
+                ('name', 'ilike', "%%%s%%" % post.get("search")),
                 ('website_description', 'ilike', "%%%s%%" % post.get("search"))]
         if post.get("membership_id", "all") != 'all':
             domain_search["membership"] = [("membership", "=", int(post.get("membership")))]
 
-
         # public membership
-        membership_ids = membership_obj.search(request.cr, openerp.SUPERUSER_ID, dom_without(False) )
-        memberships = membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids )
+        membership_ids = membership_obj.search(request.cr, openerp.SUPERUSER_ID, dom_without(False), context=request.context)
+        memberships = membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids, request.context)
         google_map_partner_ids = ",".join([str(m.partner.id) for m in memberships])
 
-
         # group by membership_id
         domain = dom_without("membership")
-        memberships = membership_obj.read_group(request.cr, request.uid, domain, ["id", "membership_id"], groupby="membership_id", orderby="membership_id")
-        memberships.insert(0, {'membership_id_count': membership_obj.search(request.cr, request.uid, domain, count=True), 'membership_id': ("all", _("All Groups"))})
-        
+        memberships = membership_obj.read_group(request.cr, request.uid, domain, ["id", "membership_id"], groupby="membership_id", orderby="membership_id", context=request.context)
+        memberships.insert(0, {'membership_id_count': membership_obj.search(request.cr, request.uid, domain, count=True, context=request.context), 'membership_id': ("all", _("All Groups"))})
 
         step = 20
         pager = website.pager(url="/members/", total=len(membership_ids), page=page, step=step, scope=7, url_args=post)
-        membership_ids = membership_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', membership_ids)], 
-            limit=step, offset=pager['offset'], order="membership_id ASC,date DESC")
-
+        membership_ids = membership_obj.search(
+            request.cr, openerp.SUPERUSER_ID, [('id', 'in', membership_ids)],
+            limit=step, offset=pager['offset'], order="membership_id ASC,date DESC",
+            context=request.context)
 
         values = {
             'memberships': memberships,
-            'membership_line_ids': membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids),
+            'membership_line_ids': membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids, request.context),
             'google_map_partner_ids': google_map_partner_ids,
             'pager': pager,
             'searches': post,
@@ -62,11 +60,13 @@ class website_crm_partner_assign(http.Controller):
     @website.route(['/members/<int:ref_id>/'], type='http', auth="public")
     def partners_ref(self, ref_id=0, **post):
         partner_obj = request.registry['res.partner']
-        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)])
+        partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)], context=request.context)
         if not request.webcontext.is_public_user:
-            partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)])
+            partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)], context=request.context)
 
         values = {
-            'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids[0], context={'show_address': True}),
+            'partner_id': partner_obj.browse(
+                request.cr, openerp.SUPERUSER_ID, partner_ids[0],
+                context=dict(request.context, show_address=True)),
         }
         return request.webcontext.render("website_membership.details", values)
index 8132f29..5496ad0 100644 (file)
@@ -10,9 +10,9 @@ class Website(osv.osv):
     _inherit = "website"
     def get_webcontext(self, values={}, **kw):
         project_obj = request.registry['project.project']
-        project_ids = project_obj.search(request.cr, request.uid, [('privacy_visibility', "=", "public")])
+        project_ids = project_obj.search(request.cr, request.uid, [('privacy_visibility', "=", "public")], context=request.context)
         values.update({
-            'project_ids': project_obj.browse(request.cr, request.uid, project_ids),
+            'project_ids': project_obj.browse(request.cr, request.uid, project_ids, request.context),
         })
         return super(Website, self).get_webcontext(values, **kw)
 
@@ -22,5 +22,5 @@ class website_project(http.Controller):
     @website.route(['/project/<int:project_id>/'], type='http', auth="public")
     def blog(self, project_id=None, **post):
         project_obj = request.registry['project.project']
-        project = project_obj.browse(request.cr, request.uid, project_id)
+        project = project_obj.browse(request.cr, request.uid, project_id, request.context)
         return request.webcontext.render("website_project.index", {'project_id': project})
index 54ccb48..e50bdb7 100644 (file)
@@ -15,25 +15,23 @@ def get_order(order_id=None):
     context = {}
     if order_id:
         try:
-            order = order_obj.browse(request.cr, SUPERUSER_ID, order_id)
+            order = order_obj.browse(request.cr, SUPERUSER_ID, order_id, request.context)
             order.pricelist_id
         except:
             order_id = None
     if not order_id:
         fields = [k for k, v in order_obj._columns.items()]
-        order_value = order_obj.default_get(request.cr, SUPERUSER_ID, fields)
+        order_value = order_obj.default_get(request.cr, SUPERUSER_ID, fields, request.context)
         if request.httprequest.session.get('ecommerce_pricelist'):
             order_value['pricelist_id'] = request.httprequest.session['ecommerce_pricelist']
-        order_value['partner_id'] = request.registry.get('res.users').browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id
-        order_value.update(order_obj.onchange_partner_id(request.cr, SUPERUSER_ID, [], order_value['partner_id'], context={})['value'])
-        order_id = order_obj.create(request.cr, SUPERUSER_ID, order_value)
-        order = order_obj.browse(request.cr, SUPERUSER_ID, order_id)
+        order_value['partner_id'] = request.registry.get('res.users').browse(request.cr, SUPERUSER_ID, request.uid, request.context).partner_id.id
+        order_value.update(order_obj.onchange_partner_id(request.cr, SUPERUSER_ID, [], order_value['partner_id'], context=request.context)['value'])
+        order_id = order_obj.create(request.cr, SUPERUSER_ID, order_value, request.context)
+        order = order_obj.browse(request.cr, SUPERUSER_ID, order_id, request.context)
         request.httprequest.session['ecommerce_order_id'] = order.id
 
-    context = {
-        'pricelist': order.pricelist_id.id,
-    }
-    return order_obj.browse(request.cr, SUPERUSER_ID, order_id, context=context)
+    return order_obj.browse(request.cr, SUPERUSER_ID, order_id,
+                            context=dict(request.context, pricelist=order.pricelist_id.id))
 
 def get_current_order():
     if request.httprequest.session.get('ecommerce_order_id'):
@@ -82,17 +80,17 @@ class Ecommerce(http.Controller):
             domain += [('product_variant_ids.public_categ_id.id', 'child_of', cat_id)] + domain
 
         step = 20
-        product_count = len(product_obj.search(request.cr, request.uid, domain))
+        product_count = len(product_obj.search(request.cr, request.uid, domain, context=request.context))
         pager = website.pager(url="/shop/category/%s/" % cat_id, total=product_count, page=page, step=step, scope=7, url_args=post)
 
-        product_ids = product_obj.search(request.cr, request.uid, domain, limit=step, offset=pager['offset'])
+        product_ids = product_obj.search(request.cr, request.uid, domain, limit=step, offset=pager['offset'], context=request.context)
 
-        context = {'pricelist': self.get_pricelist()}
+        request.context['pricelist'] = self.get_pricelist()
 
         values = {
             'categories': self.get_categories(),
             'category_id': cat_id,
-            'products': product_obj.browse(request.cr, SUPERUSER_ID, product_ids, context=context),
+            'products': product_obj.browse(request.cr, SUPERUSER_ID, product_ids, context=request.context),
             'search': post.get("search"),
             'pager': pager,
         }
@@ -108,12 +106,13 @@ class Ecommerce(http.Controller):
         product_obj = request.registry.get('product.template')
         category_obj = request.registry.get('product.public.category')
 
-        context = {'pricelist': self.get_pricelist()}
-
-        category_list = category_obj.name_get(request.cr, request.uid, category_obj.search(request.cr, request.uid, [(1,'=',1)]))
+        category_ids = category_obj.search(request.cr, request.uid, [(1, '=', 1)], context=request.context)
+        category_list = category_obj.name_get(request.cr, request.uid, category_ids, request.context)
         category_list = sorted(category_list, key=lambda category: category[1])
 
-        product = product_obj.browse(request.cr, request.uid, product_id, context=context)
+        request.context['pricelist'] = self.get_pricelist()
+
+        product = product_obj.browse(request.cr, request.uid, product_id, context=request.context)
         values = {
             'category_id': post.get('category_id') and int(post.get('category_id')) or None,
             'search': post.get("search"),
@@ -125,12 +124,14 @@ class Ecommerce(http.Controller):
 
     @website.route(['/shop/add_product/'], type='http', auth="public")
     def add_product(self, **post):
-        product_id = request.registry.get('product.product').create(request.cr, request.uid, {'name': 'New Product'})
+        product_id = request.registry.get('product.product').create(request.cr, request.uid, {'name': 'New Product'}, request.context)
         return werkzeug.utils.redirect("/shop/product/%s/" % product_id)
 
     @website.route(['/shop/change_category/<product_id>/'], type='http', auth="public")
     def edit_product(self, product_id=0, **post):
-        request.registry.get('product.template').write(request.cr, request.uid, [int(product_id)], {'public_categ_id': int(post.get('public_categ_id', 0))})
+        request.registry.get('product.template').write(
+            request.cr, request.uid, [int(product_id)],
+            {'public_categ_id': int(post.get('public_categ_id', 0))}, request.context)
         return "1"
 
     def get_pricelist(self):
@@ -144,13 +145,13 @@ class Ecommerce(http.Controller):
         pricelist_id = False
         if code:
             pricelist_obj = request.registry.get('product.pricelist')
-            pricelist_ids = pricelist_obj.search(request.cr, SUPERUSER_ID, [('code', '=', code)])
+            pricelist_ids = pricelist_obj.search(request.cr, SUPERUSER_ID, [('code', '=', code)], context=request.context)
             if pricelist_ids:
                 pricelist_id = pricelist_ids[0]
 
         if not pricelist_id:
-            partner_id = request.registry.get('res.users').browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id
-            pricelist_id = request.registry['sale.order'].onchange_partner_id(request.cr, SUPERUSER_ID, [], partner_id, context={})['value']['pricelist_id']
+            partner_id = request.registry.get('res.users').browse(request.cr, SUPERUSER_ID, request.uid, request.context).partner_id.id
+            pricelist_id = request.registry['sale.order'].onchange_partner_id(request.cr, SUPERUSER_ID, [], partner_id, context=request.context)['value']['pricelist_id']
         
         request.httprequest.session['ecommerce_pricelist'] = pricelist_id
 
@@ -171,7 +172,7 @@ class Ecommerce(http.Controller):
         if not order:
             order = get_order()
 
-        context = {'pricelist': self.get_pricelist()}
+        context = dict(request.context, pricelist=self.get_pricelist())
 
         quantity = 0
 
@@ -230,7 +231,7 @@ class Ecommerce(http.Controller):
         if order:
             for line in order.order_line:
                 suggested_ids += [p.id for p in line.product_id and line.product_id.suggested_product_ids or [] for line in order.order_line]
-        suggested_ids = prod_obj.search(request.cr, request.uid, [('id', 'in', suggested_ids)])
+        suggested_ids = prod_obj.search(request.cr, request.uid, [('id', 'in', suggested_ids)], context=request.context)
         # select 3 random products
         suggested_products = []
         while len(suggested_products) < 3 and suggested_ids:
@@ -239,7 +240,7 @@ class Ecommerce(http.Controller):
 
         values = {
             'categories': self.get_categories(),
-            'suggested_products': prod_obj.browse(request.cr, request.uid, suggested_products),
+            'suggested_products': prod_obj.browse(request.cr, request.uid, suggested_products, request.context),
         }
         return request.webcontext.render("website_sale.mycart", values)
 
@@ -286,15 +287,15 @@ class Ecommerce(http.Controller):
 
         checkout = {}
         if not request.webcontext.is_public_user:
-            partner = user_obj.browse(request.cr, request.uid, request.uid).partner_id
+            partner = user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id
             partner_id = partner.id
             fields = ["name", "phone", "fax", "company", "email", "street", "city", "state_id", "zip", "country_id"]
-            checkout = user_obj.read(request.cr, SUPERUSER_ID, [partner_id], fields)[0]
+            checkout = user_obj.read(request.cr, SUPERUSER_ID, [partner_id], fields, request.context)[0]
             checkout['company'] = partner.parent_id and partner.parent_id.name or ''
 
-            shipping_ids = partner_obj.search(request.cr, request.uid, [("parent_id", "=", partner_id), ('type', "=", 'delivery')])
+            shipping_ids = partner_obj.search(request.cr, request.uid, [("parent_id", "=", partner_id), ('type', "=", 'delivery')], context=request.context)
             if shipping_ids:
-                for k,v in partner_obj.read(request.cr, request.uid, shipping_ids[0]).items():
+                for k,v in partner_obj.read(request.cr, request.uid, shipping_ids[0], request.context).items():
                     checkout['shipping_'+k] = v or ''
 
         checkout.update(request.session.setdefault('checkout', {}))
@@ -302,8 +303,10 @@ class Ecommerce(http.Controller):
             checkout[k] = v or ''
         values['checkout'] = checkout
 
-        values['countries'] = country_obj.browse(request.cr, SUPERUSER_ID, country_obj.search(request.cr, SUPERUSER_ID, [(1, "=", 1)]))
-        values['states'] = country_state_obj.browse(request.cr, SUPERUSER_ID, country_state_obj.search(request.cr, SUPERUSER_ID, [(1, "=", 1)]))
+        countries_ids = country_obj.search(request.cr, SUPERUSER_ID, [(1, "=", 1)], context=request.context)
+        values['countries'] = country_obj.browse(request.cr, SUPERUSER_ID, countries_ids, request.context)
+        states_ids = country_state_obj.search(request.cr, SUPERUSER_ID, [(1, "=", 1)], context=request.context)
+        values['states'] = country_state_obj.browse(request.cr, SUPERUSER_ID, states_ids, request.context)
 
         return request.webcontext.render("website_sale.checkout", values)
 
@@ -335,10 +338,10 @@ class Ecommerce(http.Controller):
         # search or create company
         company_id = None
         if post['company']:
-            company_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("name", "ilike", post['company']), ('is_company', '=', True)])
+            company_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("name", "ilike", post['company']), ('is_company', '=', True)], context=request.context)
             company_id = company_ids and company_ids[0] or None
             if not company_id:
-                company_id = partner_obj.create(request.cr, SUPERUSER_ID, {'name': post['company'], 'is_company': True})
+                company_id = partner_obj.create(request.cr, SUPERUSER_ID, {'name': post['company'], 'is_company': True}, request.context)
 
         partner_value = {
             'fax': post['fax'],
@@ -353,10 +356,10 @@ class Ecommerce(http.Controller):
             'state_id': post['state_id'],
         }
         if not request.webcontext.is_public_user:
-            partner_id = user_obj.browse(request.cr, request.uid, request.uid).partner_id.id
-            partner_obj.write(request.cr, request.uid, [partner_id], partner_value)
+            partner_id = user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id
+            partner_obj.write(request.cr, request.uid, [partner_id], partner_value, request.context)
         else:
-            partner_id = partner_obj.create(request.cr, SUPERUSER_ID, partner_value)
+            partner_id = partner_obj.create(request.cr, SUPERUSER_ID, partner_value, request.context)
 
         shipping_id = None
         if post.get('shipping_different'):
@@ -375,19 +378,19 @@ class Ecommerce(http.Controller):
             domain = [(key, '_id' in key and '=' or 'ilike', '_id' in key and value and int(value) or False)
                 for key, value in shipping_value.items() if key in required_field + ["type", "parent_id"]]
 
-            shipping_ids = partner_obj.search(request.cr, SUPERUSER_ID, domain)
+            shipping_ids = partner_obj.search(request.cr, SUPERUSER_ID, domain, context=request.context)
             if shipping_ids:
                 shipping_id = shipping_ids[0]
-                partner_obj.write(request.cr, SUPERUSER_ID, [shipping_id], shipping_value)
+                partner_obj.write(request.cr, SUPERUSER_ID, [shipping_id], shipping_value, request.context)
             else:
-                shipping_id = partner_obj.create(request.cr, SUPERUSER_ID, shipping_value)
+                shipping_id = partner_obj.create(request.cr, SUPERUSER_ID, shipping_value, request.context)
 
         order_value = {
             'partner_id': partner_id,
             'partner_invoice_id': partner_id,
             'partner_shipping_id': shipping_id or partner_id
         }
-        order_value.update(request.registry.get('sale.order').onchange_partner_id(request.cr, SUPERUSER_ID, [], order.partner_id.id, context={})['value'])
+        order_value.update(request.registry.get('sale.order').onchange_partner_id(request.cr, SUPERUSER_ID, [], order.partner_id.id, context=request.context)['value'])
         order.write(order_value)
 
         return werkzeug.utils.redirect("/shop/payment/")
@@ -405,8 +408,8 @@ class Ecommerce(http.Controller):
         }
 
         payment_obj = request.registry.get('portal.payment.acquirer')
-        payment_ids = payment_obj.search(request.cr, SUPERUSER_ID, [('visible', '=', True)])
-        values['payments'] = payment_obj.browse(request.cr, SUPERUSER_ID, payment_ids)
+        payment_ids = payment_obj.search(request.cr, SUPERUSER_ID, [('visible', '=', True)], context=request.context)
+        values['payments'] = payment_obj.browse(request.cr, SUPERUSER_ID, payment_ids, request.context)
         for payment in values['payments']:
             content = payment_obj.render(request.cr, SUPERUSER_ID, payment.id, order, order.name, order.pricelist_id.currency_id, order.amount_total)
             payment._content = content