[IMP] website_sale: improve performance, use less db request to have pricelist data

Use pricelist in the context instead of pricelist id.
This commit is contained in:
Christophe Matthieu
2016-08-29 15:32:44 +02:00
parent 50890347c1
commit 688db44c42
5 changed files with 18 additions and 10 deletions
@@ -10,10 +10,10 @@ class WebsiteEventSaleController(WebsiteEventController):
@http.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", website=True)
def event_register(self, event, **post):
pricelist_id = int(request.website.get_current_pricelist())
event = event.with_context(pricelist=request.website.get_current_pricelist().id)
values = {
'event': event.with_context(pricelist=pricelist_id),
'main_object': event.with_context(pricelist=pricelist_id),
'event': event,
'main_object': event,
'range': range,
}
return request.render("website_event.event_description_full", values)
@@ -20,6 +20,10 @@ class SaleOrder(models.Model):
@api.multi
def _website_product_id_change(self, order_id, product_id, qty=0):
order = self.env['sale.order'].sudo().browse(order_id)
if self._context.get('pricelist') != order.pricelist_id.id:
self = self.with_context(pricelist=order.pricelist_id.id)
values = super(SaleOrder, self)._website_product_id_change(order_id, product_id, qty=qty)
event_ticket_id = None
if self.env.context.get("event_ticket_id"):
@@ -30,8 +34,7 @@ class SaleOrder(models.Model):
event_ticket_id = product.event_ticket_ids[0].id
if event_ticket_id:
order = self.env['sale.order'].sudo().browse(order_id)
ticket = self.env['event.event.ticket'].with_context(pricelist=order.pricelist_id.id).browse(event_ticket_id)
ticket = self.env['event.event.ticket'].browse(event_ticket_id)
if product_id != ticket.product_id.id:
raise UserError(_("The ticket doesn't match with this product."))
@@ -54,7 +57,8 @@ class SaleOrder(models.Model):
line = OrderLine.browse(line_id)
ticket = line.event_ticket_id
old_qty = int(line.product_uom_qty)
self = self.with_context(event_ticket_id=ticket.id)
if ticket.id:
self = self.with_context(event_ticket_id=ticket.id)
else:
line = None
ticket = self.env['event.event.ticket'].search([('product_id', '=', product_id)], limit=1)
+1 -1
View File
@@ -390,7 +390,7 @@ class WebsiteSale(http.Controller):
value['website_sale.cart_lines'] = request.env['ir.ui.view'].render_template("website_sale.cart_lines", {
'website_sale_order': order,
'compute_currency': lambda price: from_currency.compute(price, to_currency),
'suggested_products': order.with_context(pricelist=order.pricelist_id.id)._cart_accessories()
'suggested_products': order._cart_accessories()
})
return value
+6 -2
View File
@@ -301,8 +301,6 @@ class Website(models.Model):
# Do not reload the cart of this user last visit if the cart is no longer draft or uses a pricelist no longer available.
sale_order_id = last_order.state == 'draft' and last_order.pricelist_id in available_pricelists and last_order.id
# Test validity of the sale_order_id
sale_order = self.env['sale.order'].sudo().browse(sale_order_id).exists() if sale_order_id else None
pricelist_id = request.session.get('website_sale_current_pl') or self.get_current_pricelist().id
if self.env['product.pricelist'].browse(force_pricelist).exists():
@@ -310,6 +308,12 @@ class Website(models.Model):
request.session['website_sale_current_pl'] = pricelist_id
update_pricelist = True
if not self._context.get('pricelist'):
self = self.with_context(pricelist=pricelist_id)
# Test validity of the sale_order_id
sale_order = self.env['sale.order'].sudo().browse(sale_order_id).exists() if sale_order_id else None
# create so if needed
if not sale_order and (force_create or code):
# TODO cache partner_id session
@@ -55,7 +55,7 @@ class WebsiteSaleOptions(WebsiteSale):
pricelist = request.website.get_current_pricelist()
product_context = dict(request.context)
if not product_context.get('pricelist'):
product_context['pricelist'] = int(pricelist)
product_context['pricelist'] = pricelist.id
# fetch quantity from custom context
product_context.update(kw.get('kwargs', {}).get('context', {}))