From bb2ebf7cb92671e58b3cac68fc5964a034953b7a Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Mon, 28 Apr 2014 11:36:09 +0200 Subject: [PATCH] [FIX] website_sale: apply fiscal position on change product id and update cart. [IMP] sale: apply fiscal position of the partner if they are not fiscal position defined bzr revid: chm@openerp.com-20140428093609-8z8my9vj322shcll --- addons/sale/sale.py | 13 ++++--- addons/website_sale/controllers/main.py | 4 +-- addons/website_sale/models/sale_order.py | 43 +++++++++++------------- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 782030a9494..b3c68bc4517 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -862,15 +862,15 @@ class sale_order_line(osv.osv): lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, context=None): context = context or {} lang = lang or context.get('lang',False) - if not partner_id: + if not partner_id: raise osv.except_osv(_('No Customer Defined!'), _('Before choosing a product,\n select a customer in the sales form.')) warning = {} product_uom_obj = self.pool.get('product.uom') partner_obj = self.pool.get('res.partner') product_obj = self.pool.get('product.product') context = {'lang': lang, 'partner_id': partner_id} - if partner_id: - lang = partner_obj.browse(cr, uid, partner_id).lang + partner = partner_obj.browse(cr, uid, partner_id) + lang = partner.lang context_partner = {'lang': lang, 'partner_id': partner_id} if not product: @@ -896,7 +896,12 @@ class sale_order_line(osv.osv): uos = False else: uos = False - fpos = fiscal_position and self.pool.get('account.fiscal.position').browse(cr, uid, fiscal_position) or False + + fpos = False + if not fiscal_position: + fpos = partner.property_account_position or False + else: + fpos = self.pool.get('account.fiscal.position').browse(cr, uid, fiscal_position) if update_tax: #The quantity only have changed result['tax_id'] = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, product_obj.taxes_id) diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index c8f0020bbe4..21124f9f136 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -377,8 +377,8 @@ class website_sale(http.Controller): if request.uid != request.website.user_id.id: partner_id = orm_user.browse(cr, SUPERUSER_ID, uid, context=context).partner_id.id elif order.partner_id: - domain = [("active", "=", False), ("partner_id", "=", order.partner_id.id)] - user_ids = request.registry['res.users'].search(cr, SUPERUSER_ID, domain, context=context) + user_ids = request.registry['res.users'].search(cr, SUPERUSER_ID, + [("partner_id", "=", order.partner_id.id)], context=dict(context or {}, active_test=False)) if not user_ids or request.website.user_id.id not in user_ids: partner_id = order.partner_id.id diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index c9c18e7442b..5fe8564a0bf 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -52,46 +52,43 @@ class sale_order(osv.Model): """ Add or set product quantity, add_qty can be negative """ sol = self.pool.get('sale.order.line') + def product_id_change(so, product_id): + values = sol.product_id_change(cr, SUPERUSER_ID, [], + pricelist=so.pricelist_id.id, + product=product_id, + partner_id=so.partner_id.id, + context=context + )['value'] + values['name'] = "%s: %s" % (product.name, product.variants) if product.variants else product.name + values['product_id'] = product_id + values['order_id'] = so.id + if values.get('tax_id') != None: + values['tax_id'] = [(6, 0, values['tax_id'])] + return values + 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) # Create line if no line with product_id can be located if not line_id: - values = sol.product_id_change(cr, SUPERUSER_ID, [], - pricelist=so.pricelist_id.id, - product=product_id, - partner_id=so.partner_id.id, - context=context - )['value'] - values['name'] = "%s: %s" % (product.name, product.variants) if product.variants else product.name - values['product_id'] = product_id - values['order_id'] = so.id - if values.get('tax_id'): - values['tax_id'] = [(6, 0, values['tax_id'])] + values = product_id_change(so, product_id) line_id = sol.create(cr, SUPERUSER_ID, values, context=context) # compute new quantity + quantity = 0 if set_qty: quantity = set_qty - else: - quantity = sol.browse(cr, SUPERUSER_ID, line_id, context=context).product_uom_qty + add_qty + elif add_qty != None: + quantity = sol.browse(cr, SUPERUSER_ID, line_id, context=context).product_uom_qty + (add_qty or 0) # Remove zero of negative lines if quantity <= 0: - sol.unlink(cr, SUPERUSER_ID, line_id, context=context) + sol.unlink(cr, SUPERUSER_ID, [line_id], context=context) else: # update line - values = sol.product_id_change(cr, SUPERUSER_ID, [], - pricelist=so.pricelist_id.id, - product=product_id, - partner_id=so.partner_id.id, - context=context - )['value'] - values['name'] = "%s: %s" % (product.name, product.variants) if product.variants else product.name + values = product_id_change(so, product_id) values['product_uom_qty'] = quantity - if values.get('tax_id'): - values['tax_id'] = [(6, 0, values['tax_id'])] sol.write(cr, SUPERUSER_ID, [line_id], values, context=context) return quantity