summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
Diffstat (limited to 'addons')
-rw-r--r--addons/point_of_sale/models/pos_session.py18
1 files changed, 9 insertions, 9 deletions
diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
index 752fd51c896..5cf25bdefe8 100644
--- a/addons/point_of_sale/models/pos_session.py
+++ b/addons/point_of_sale/models/pos_session.py
@@ -441,6 +441,7 @@ class PosSession(models.Model):
-1 if line['amount'] < 0 else 1,
# for taxes
tuple((tax['id'], tax['account_id'], tax['tax_repartition_line_id']) for tax in line['taxes']),
+ line['base_tags'],
)
sales[sale_key] = self._update_amounts(sales[sale_key], {'amount': line['amount']}, line['date_order'])
# Combine tax lines
@@ -715,11 +716,13 @@ class PosSession(models.Model):
# The 'is_refund' parameter is used to compute the tax tags. Ultimately, the tags are part
# of the key used for summing taxes. Since the POS UI doesn't support the tags, inconsistencies
# may arise in 'Round Globally'.
+ check_refund = lambda x: x.qty * x.price_unit < 0
if self.company_id.tax_calculation_rounding_method == 'round_globally':
- is_refund = all(line.qty < 0 for line in order_line.order_id.lines)
+ is_refund = all(check_refund(line) for line in order_line.order_id.lines)
else:
- is_refund = order_line.qty < 0
- taxes = tax_ids.compute_all(price_unit=price, quantity=abs(order_line.qty), currency=self.currency_id, is_refund=is_refund).get('taxes', [])
+ is_refund = check_refund(order_line)
+ tax_data = tax_ids.compute_all(price_unit=price, quantity=abs(order_line.qty), currency=self.currency_id, is_refund=is_refund)
+ taxes = tax_data['taxes']
date_order = order_line.order_id.date_order
taxes = [{'date_order': date_order, **tax} for tax in taxes]
return {
@@ -727,6 +730,7 @@ class PosSession(models.Model):
'income_account_id': get_income_account(order_line).id,
'amount': order_line.price_subtotal,
'taxes': taxes,
+ 'base_tags': tuple(tax_data['base_tags']),
}
def _get_rounding_difference_vals(self, amount, amount_converted):
@@ -769,23 +773,19 @@ class PosSession(models.Model):
return self._credit_amounts(partial_vals, amount, amount_converted)
def _get_sale_vals(self, key, amount, amount_converted):
- account_id, sign, tax_keys = key
+ account_id, sign, tax_keys, base_tag_ids = key
tax_ids = set(tax[0] for tax in tax_keys)
applied_taxes = self.env['account.tax'].browse(tax_ids)
title = 'Sales' if sign == 1 else 'Refund'
name = '%s untaxed' % title
if applied_taxes:
name = '%s with %s' % (title, ', '.join([tax.name for tax in applied_taxes]))
- base_tags = applied_taxes\
- .mapped('invoice_repartition_line_ids' if sign == 1 else 'refund_repartition_line_ids')\
- .filtered(lambda line: line.repartition_type == 'base')\
- .tag_ids
partial_vals = {
'name': name,
'account_id': account_id,
'move_id': self.move_id.id,
'tax_ids': [(6, 0, tax_ids)],
- 'tax_tag_ids': [(6, 0, base_tags.ids)],
+ 'tax_tag_ids': [(6, 0, base_tag_ids)],
}
return self._credit_amounts(partial_vals, amount, amount_converted)