diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index ca4ea6f3c0e..5f92f8b2b6d 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -24,6 +24,8 @@ import time
import uuid
import sets
+from functools import partial
+
from openerp import tools, models
from openerp.osv import fields, osv
from openerp.tools import float_is_zero
@@ -574,11 +576,12 @@ class pos_order(osv.osv):
_order = "id desc"
def _order_fields(self, cr, uid, ui_order, context=None):
+ process_line = partial(self.pool['pos.order.line']._order_line_fields, cr, uid, context=context)
return {
'name': ui_order['name'],
'user_id': ui_order['user_id'] or False,
'session_id': ui_order['pos_session_id'],
- 'lines': ui_order['lines'],
+ 'lines': [process_line(l) for l in ui_order['lines']] if ui_order['lines'] else False,
'pos_reference':ui_order['name'],
'partner_id': ui_order['partner_id'] or False,
}
@@ -1005,7 +1008,8 @@ class pos_order(osv.osv):
inv_line['price_unit'] = line.price_unit
inv_line['discount'] = line.discount
inv_line['name'] = inv_name
- inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.product_id.taxes_id] )]
+ if line.tax_ids:
+ inv_line['invoice_line_tax_id'] = [(6, 0, [x.id for x in line.tax_ids])]
inv_line_ref.create(cr, uid, inv_line, context=context)
inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
self.signal_workflow(cr, uid, [order.id], 'invoice')
@@ -1142,11 +1146,7 @@ class pos_order(osv.osv):
cur = order.pricelist_id.currency_id
for line in order.lines:
tax_amount = 0
- taxes = []
- for t in line.product_id.taxes_id:
- if t.company_id.id == current_company.id:
- taxes.append(t)
- computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit * (100.0-line.discount) / 100.0, line.qty)['taxes']
+ computed_taxes = account_tax_obj.compute_all(cr, uid, line.tax_ids, line.price_unit * (100.0-line.discount) / 100.0, line.qty)['taxes']
for tax in computed_taxes:
tax_amount += cur_obj.round(cr, uid, cur, tax['amount'])
@@ -1289,6 +1289,12 @@ class pos_order_line(osv.osv):
_description = "Lines of Point of Sale"
_rec_name = "product_id"
+ def _order_line_fields(self, cr, uid, line, context=None):
+ if 'tax_ids' not in line:
+ product = self.pool['product.product'].browse(cr, uid, line['product_id'], context=context)
+ line['tax_ids'] = [(6, 0, [x.id for x in product.taxes_id])]
+ return line
+
def _amount_line_all(self, cr, uid, ids, field_names, arg, context=None):
res = dict([(i, {}) for i in ids])
account_tax_obj = self.pool.get('account.tax')
@@ -1347,6 +1353,7 @@ class pos_order_line(osv.osv):
'discount': fields.float('Discount (%)', digits_compute=dp.get_precision('Account')),
'order_id': fields.many2one('pos.order', 'Order Ref', ondelete='cascade'),
'create_date': fields.datetime('Creation Date', readonly=True),
+ 'tax_ids': fields.many2many('account.tax', string='Taxes', readonly=True),
}
_defaults = {
diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml
index 3bf95d8c785..cdb29343713 100644
--- a/addons/point_of_sale/point_of_sale_view.xml
+++ b/addons/point_of_sale/point_of_sale_view.xml
@@ -36,6 +36,7 @@
+
@@ -1016,4 +1017,3 @@
sequence="30"/>
-
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index e409145f2f0..e0b1088ebd6 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -1001,6 +1001,7 @@ openerp.point_of_sale.load_models = function load_models(instance, module){ //mo
price_unit: this.get_unit_price(),
discount: this.get_discount(),
product_id: this.get_product().id,
+ tax_ids: [[6, false, _.map(this.get_applicable_taxes(), function(tax){ return tax.id; })]],
id: this.id,
};
},