diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index cbaa5306e870a2c6938e9d55a9cb9a8157fc9156..b438bd555ad6f782ec42ecd981255ee02aa9e20e 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -1240,10 +1240,11 @@ class AccountMove(models.Model): for line in tax_lines: res.setdefault(line.tax_line_id.tax_group_id, {'base': 0.0, 'amount': 0.0}) res[line.tax_line_id.tax_group_id]['amount'] += line.price_subtotal - if line.tax_line_id.id not in done_taxes: + tax_key_add_base = tuple(move._get_tax_key_for_group_add_base(line)) + if tax_key_add_base not in done_taxes: # The base should be added ONCE res[line.tax_line_id.tax_group_id]['base'] += line.tax_base_amount - done_taxes.add(line.tax_line_id.id) + done_taxes.add(tax_key_add_base) res = sorted(res.items(), key=lambda l: l[0].sequence) move.amount_by_group = [( group.name, amounts['amount'], @@ -1254,6 +1255,15 @@ class AccountMove(models.Model): group.id ) for group, amounts in res] + @api.model + def _get_tax_key_for_group_add_base(self, line): + """ + Useful for _compute_invoice_taxes_by_group + must be consistent with _get_tax_grouping_key_from_tax_line + @return list + """ + return [line.tax_line_id.id] + @api.depends('date', 'line_ids.debit', 'line_ids.credit', 'line_ids.tax_line_id', 'line_ids.tax_ids', 'line_ids.tag_ids') def _compute_tax_lock_date_message(self): for move in self: diff --git a/addons/l10n_in/models/account_invoice.py b/addons/l10n_in/models/account_invoice.py index 69ff5cb7842121489fa1e673640af4c78444ff31..b960b47c791c65a52b48dc8362188a085369c979 100644 --- a/addons/l10n_in/models/account_invoice.py +++ b/addons/l10n_in/models/account_invoice.py @@ -46,3 +46,12 @@ class AccountMove(models.Model): 'quantity': base_line.quantity, }) return res + + @api.model + def _get_tax_key_for_group_add_base(self, line): + tax_key = super(AccountMove, self)._get_tax_key_for_group_add_base(line) + + tax_key += [ + line.product_id.id, + ] + return tax_key