summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-08-10 16:17:28 +0200
committerChristophe Simonis <chs@odoo.com>2017-08-10 16:17:28 +0200
commitdde62073baf5a0cc45678e4504fe2f54ccffcf18 (patch)
treea9db807928a2ae01488df77582efae3785658bf1
parent3e54d9b56d1cb9b61c72b6990a6a313ef566101e (diff)
parenta2361e23ea95c308ac7576c614c0a1938707def0 (diff)
[MERGE] forward port branch saas-14 up to a2361e23ea9
-rw-r--r--addons/stock/models/stock_location.py2
-rw-r--r--addons/website_event/controllers/main.py2
-rw-r--r--addons/website_sale/controllers/main.py3
-rw-r--r--odoo/fields.py3
-rw-r--r--odoo/models.py17
5 files changed, 14 insertions, 13 deletions
diff --git a/addons/stock/models/stock_location.py b/addons/stock/models/stock_location.py
index 540bd6f1a06..6482c1733f7 100644
--- a/addons/stock/models/stock_location.py
+++ b/addons/stock/models/stock_location.py
@@ -69,7 +69,7 @@ class Location(models.Model):
_sql_constraints = [('barcode_company_uniq', 'unique (barcode,company_id)', 'The barcode for a location must be unique per company !')]
@api.one
- @api.depends('name', 'location_id')
+ @api.depends('name', 'location_id.name')
def _compute_complete_name(self):
""" Forms complete name of location from parent location to child location. """
name = self.name
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 045402055cc..ab9ad2376b4 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -226,7 +226,7 @@ class WebsiteEventController(http.Controller):
def registration_new(self, event, **post):
tickets = self._process_tickets_details(post)
if not tickets:
- return request.redirect("/event/%s" % slug(event))
+ return False
return request.env['ir.ui.view'].render_template("website_event.registration_attendee_details", {'tickets': tickets, 'event': event})
def _process_registration_details(self, details):
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index e6d7017e6ef..771ed8f2bd6 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -364,7 +364,8 @@ class WebsiteSale(http.Controller):
values['suggested_products'] = _order._cart_accessories()
if post.get('type') == 'popover':
- return request.render("website_sale.cart_popover", values)
+ # force no-cache so IE11 doesn't cache this XHR
+ return request.render("website_sale.cart_popover", values, headers={'Cache-Control': 'no-cache'})
return request.render("website_sale.cart", values)
diff --git a/odoo/fields.py b/odoo/fields.py
index 2b289227f9f..cc88137deb4 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -555,7 +555,7 @@ class Field(object):
""" Traverse the fields of the related field `self` except for the last
one, and return it as a pair `(last_record, last_field)`. """
for name in self.related[:-1]:
- record = record[name][:1]
+ record = record[name][:1].with_prefetch(record._prefetch)
return record, self.related_field
def _compute_related(self, records):
@@ -1020,6 +1020,7 @@ class Field(object):
self.compute_value(record)
else:
recs = record._in_cache_without(self)
+ recs = recs.with_prefetch(record._prefetch)
self.compute_value(recs)
else:
diff --git a/odoo/models.py b/odoo/models.py
index 4e76728ed8f..d6417b0b7cd 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -2555,10 +2555,6 @@ class BaseModel(object):
else:
records &= self._in_cache_without(f)
- # prefetch at most PREFETCH_MAX records
- if len(records) > PREFETCH_MAX:
- records = records[:PREFETCH_MAX] | self
-
# fetch records with read()
assert self in records and field in fs
records = records.with_prefetch(self._prefetch)
@@ -4683,13 +4679,16 @@ class BaseModel(object):
return RecordCache(self)
@api.model
- def _in_cache_without(self, field):
- """ Make sure ``self`` is present in cache (for prefetching), and return
- the records of model ``self`` in cache that have no value for ``field``
- (:class:`Field` instance).
+ def _in_cache_without(self, field, limit=PREFETCH_MAX):
+ """ Return records to prefetch that have no value in cache for ``field``
+ (:class:`Field` instance), including ``self``.
+ Return at most ``limit`` records.
"""
ids = filter(None, self._prefetch[self._name] - set(self.env.cache[field]))
- return self.browse(ids)
+ recs = self.browse(ids)
+ if limit and len(recs) > limit:
+ recs = self + (recs - self)[:(limit - len(self))]
+ return recs
@api.model
def refresh(self):