diff --git a/l10n_br_fiscal/models/document_mixin_methods.py b/l10n_br_fiscal/models/document_mixin_methods.py index eec037c42543..e4ddbf2b8b88 100644 --- a/l10n_br_fiscal/models/document_mixin_methods.py +++ b/l10n_br_fiscal/models/document_mixin_methods.py @@ -159,14 +159,23 @@ def _inverse_amount_freight(self): for line in record._get_product_amount_lines(): line._onchange_fiscal_taxes() record._fields["amount_total"].compute_value(record) - record.write( - { - name: value - for name, value in record._cache.items() - if record._fields[name].compute == "_amount_all" + + # Case Sale, Purchase or POS + vals = {} + for name, value in record._cache.items(): + if ( + record._fields[name].compute == "_amount_all" and not record._fields[name].inverse - } - ) + ): + vals[name] = value + if vals: + record.write(vals) + elif hasattr(record, "move_ids"): + # Case invoice (account.move has not compute named '_amount_all') + record = record.with_context(check_move_validity=False) + record.move_ids.invoice_line_ids._onchange_price_subtotal() + record.move_ids.invoice_line_ids._onchange_mark_recompute_taxes() + record.move_ids._onchange_invoice_line_ids() def _inverse_amount_insurance(self): for record in self.filtered(lambda doc: doc._get_product_amount_lines()): @@ -209,14 +218,23 @@ def _inverse_amount_insurance(self): for line in record._get_product_amount_lines(): line._onchange_fiscal_taxes() record._fields["amount_total"].compute_value(record) - record.write( - { - name: value - for name, value in record._cache.items() - if record._fields[name].compute == "_amount_all" + + # Case Sale, Purchase or POS + vals = {} + for name, value in record._cache.items(): + if ( + record._fields[name].compute == "_amount_all" and not record._fields[name].inverse - } - ) + ): + vals[name] = value + if vals: + record.write(vals) + elif hasattr(record, "move_ids"): + # Case invoice (account.move has not compute named '_amount_all') + record = record.with_context(check_move_validity=False) + record.move_ids.invoice_line_ids._onchange_price_subtotal() + record.move_ids.invoice_line_ids._onchange_mark_recompute_taxes() + record.move_ids._onchange_invoice_line_ids() def _inverse_amount_other(self): for record in self.filtered(lambda doc: doc._get_product_amount_lines()): @@ -259,11 +277,20 @@ def _inverse_amount_other(self): for line in record._get_product_amount_lines(): line._onchange_fiscal_taxes() record._fields["amount_total"].compute_value(record) - record.write( - { - name: value - for name, value in record._cache.items() - if record._fields[name].compute == "_amount_all" + + # Case Sale, Purchase or POS + vals = {} + for name, value in record._cache.items(): + if ( + record._fields[name].compute == "_amount_all" and not record._fields[name].inverse - } - ) + ): + vals[name] = value + if vals: + record.write(vals) + elif hasattr(record, "move_ids"): + # Case invoice (account.move has not compute named '_amount_all') + record = record.with_context(check_move_validity=False) + record.move_ids.invoice_line_ids._onchange_price_subtotal() + record.move_ids.invoice_line_ids._onchange_mark_recompute_taxes() + record.move_ids._onchange_invoice_line_ids()