[FIX] website_sale: apply tax position on checkout signup
[odoo/odoo.git] / addons / sale / sale.py
index b3c68bc..71366c5 100644 (file)
@@ -626,6 +626,41 @@ class sale_order(osv.osv):
     def action_done(self, cr, uid, ids, context=None):
         return self.write(cr, uid, ids, {'state': 'done'}, context=context)
 
+    def onchange_fiscal_position(self, cr, uid, ids, fiscal_position, order_lines, context=None):
+        order_line = []
+        fiscal_obj = self.pool.get('account.fiscal.position')
+        product_obj = self.pool.get('product.product')
+        line_obj = self.pool.get('sale.order.line')
+
+        fpos = False
+        if fiscal_position:
+            fpos = fiscal_obj.browse(cr, uid, fiscal_position, context=context)
+        
+        for line in order_lines:
+            # create    (0, 0,  { fields })
+            # update    (1, ID, { fields })
+            if line[0] in [0, 1]:
+                taxes_id = None
+                if line[2].get('product_id'):
+                    taxes_id = product_obj.browse(cr, uid, line[2]['product_id'], context=context).taxes_id
+                elif line[1]:
+                    # don't change taxes if they are no product defined
+                    taxes_id = line_obj.browse(cr, uid, line[1], context=context).product_id.taxes_id
+                if taxes_id:
+                    line[2]['tax_id'] = [[6, 0, fiscal_obj.map_tax(cr, uid, fpos, taxes_id)]]
+                order_line.append(line)
+
+            # link      (4, ID)
+            # link all  (6, 0, IDS)
+            elif line[0] in [4, 6]:
+                line_ids = line[0] == 4 and [line[1]] or line[2]
+                for line_id in line_ids:
+                    taxes_id = line_obj.browse(cr, uid, line_id, context=context).product_id.taxes_id
+                    order_line.append([1, line_id, {'tax_id': [[6, 0, fiscal_obj.map_tax(cr, uid, fpos, taxes_id)]]}])
+
+            else:
+                order_line.append(line)
+        return {'value': {'order_line': order_line}}
 
 
 # TODO add a field price_unit_uos