From 36fc910e4852a21f87595df5c70b99dc3c6a8056 Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 28 Apr 2014 12:28:57 +0200 Subject: [PATCH] [FIX] website_sale: apply new pricelist and fiscal position after signup. bzr revid: chm@openerp.com-20140428102857-41lfs08v1crudnco --- addons/website_sale/models/sale_order.py | 56 ++++++++++++++++-------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 5fe8564a0bf..ca107eda3e3 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -66,6 +66,7 @@ class sale_order(osv.Model): values['tax_id'] = [(6, 0, values['tax_id'])] return values + quantity = 0 for so in self.browse(cr, uid, ids, context=context): product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) line_id = so._cart_find_product_line(product_id) @@ -76,7 +77,6 @@ class sale_order(osv.Model): line_id = sol.create(cr, SUPERUSER_ID, values, context=context) # compute new quantity - quantity = 0 if set_qty: quantity = set_qty elif add_qty != None: @@ -91,7 +91,7 @@ class sale_order(osv.Model): values['product_uom_qty'] = quantity sol.write(cr, SUPERUSER_ID, [line_id], values, context=context) - return quantity + return quantity def _cart_accessories(self, cr, uid, ids, context=None): for order in self.browse(cr, uid, ids, context=context): @@ -111,45 +111,64 @@ class website(orm.Model): return [("sale_ok", "=", True)] def sale_get_order(self, cr, uid, ids, force_create=False, code=None, context=None): + sale_order_obj = self.pool['sale.order'] sale_order_id = request.session.get('sale_order_id') sale_order = None # create so if needed if not sale_order_id and (force_create or code): + # TODO cache partner_id session + partner = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id + for w in self.browse(cr, uid, ids): - # TODO cache partner_id session - partner = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id values = { 'user_id': w.user_id.id, 'partner_id': partner.id, 'pricelist_id': partner.property_product_pricelist.id, } - sale_order_id = self.pool['sale.order'].create(cr, SUPERUSER_ID, values, context=context) - values = self.pool['sale.order'].onchange_partner_id(cr, SUPERUSER_ID, [], partner.id, context=context)['value'] - self.pool['sale.order'].write(cr, SUPERUSER_ID, [sale_order_id], values, context=context) + sale_order_id = sale_order_obj.create(cr, SUPERUSER_ID, values, context=context) + values = sale_order_obj.onchange_partner_id(cr, SUPERUSER_ID, [], partner.id, context=context)['value'] + sale_order_obj.write(cr, SUPERUSER_ID, [sale_order_id], values, context=context) request.session['sale_order_id'] = sale_order_id if sale_order_id: - sale_order = self.pool['sale.order'].browse(cr, SUPERUSER_ID, sale_order_id, context=context) + # TODO cache partner_id session + partner = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id + + sale_order = sale_order_obj.browse(cr, SUPERUSER_ID, sale_order_id, context=context) if not sale_order.exists(): request.session['sale_order_id'] = None return None - # TODO cache partner_id session - partner = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).partner_id + + def update_pricelist(pricelist_id): + values = {'pricelist_id': pricelist_id} + values.update(sale_order.onchange_pricelist_id(pricelist_id, None)['value']) + sale_order.write(values) + for line in sale_order.order_line: + sale_order._cart_update(product_id=line.product_id.id, add_qty=0) + # check for change of pricelist with a coupon - # TODO cache sale_order.pricelist_id.code in session if code and code != sale_order.pricelist_id.code: pricelist_ids = self.pool['product.pricelist'].search(cr, SUPERUSER_ID, [('code', '=', code)], context=context) if pricelist_ids: pricelist_id = pricelist_ids[0] - values = {'pricelist_id': pricelist_id} - values.update(sale_order.onchange_pricelist_id(pricelist_id, None)['value']) - sale_order.write(values) - for line in sale_order.order_line: - sale_order._cart_update(cr, uid, sale_order.product_id, add_qty=0) + request.session['sale_order_code_pricelist_id'] = pricelist_id + update_pricelist(pricelist_id) + request.session['sale_order_code_pricelist_id'] = False # check for change of partner_id ie after signup if sale_order.partner_id.id != partner.id: - values = self.pool['sale.order'].onchange_partner_id(cr, SUPERUSER_ID, [], partner.id, context=context)['value'] - self.pool['sale.order'].write(cr, SUPERUSER_ID, [sale_order_id], values, context=context) + flag_pricelist = False + pricelist_id = request.session.get('sale_order_code_pricelist_id') or partner.property_product_pricelist.id + if pricelist_id != sale_order.pricelist_id.id: + flag_pricelist = True + fiscal_position = sale_order.fiscal_position and sale_order.fiscal_position.id or False + + values = sale_order_obj.onchange_partner_id(cr, SUPERUSER_ID, [sale_order_id], partner.id, context=context)['value'] + values['partner_id'] = partner.id + sale_order_obj.write(cr, SUPERUSER_ID, [sale_order_id], values, context=context) + + if flag_pricelist or values.get('fiscal_position') != fiscal_position: + update_pricelist(pricelist_id) + return sale_order def sale_get_transaction(self, cr, uid, ids, context=None): @@ -167,6 +186,7 @@ class website(orm.Model): request.session.update({ 'sale_order_id': False, 'sale_transaction_id': False, + 'sale_order_code_pricelist_id': False, }) # vim:et: