Module
base_exception
Describe the bug
The Ignore Exceptions wizard, which is shared across all downstream *_exception modules (such as Purchase, Purchase Request, Sale, Account Move, and HR Expense), contains a validation bypass.
Although exceptions marked with is_blocking = True are intended to be non-ignorable, the wizard sets ignore_exception = True directly on the record instead of calling base.exception.action_ignore_exceptions(), which is the method responsible for enforcing the blocking check.
As a result, users can ignore blocking exceptions. Once ignore_exception is set to True, the record is excluded from all future exception checks, making the bypass persistent until the document is reset (for example, by reverting it to the Draft state).
To Reproduce
Affected versions:
Steps to reproduce the behavior:
- Create an Exception with is_blocking = True on
- Create a Record that triggers the rule, click Confirm — the exception wizard opens as expected.
- Check "Ignore Exceptions", click Close on the wizard.
- Record Skip Exception
Expected behavior
A blocking exception (is_blocking = True) should never be ignorable from any entry point, including this wizard — it should raise the same error that action_ignore_exceptions() raises, and Confirm should stay blocked.
Additional context
Affects every module built on this wizard: purchase_exception, purchase_request_exception (OCA/purchase-workflow), sale_exception (OCA/sale-workflow), account_move_exception (OCA/account-invoicing), hr_expense_exception (OCA/hr-expense), and any custom *_exception module following the same pattern.
Module
base_exception
Describe the bug
The Ignore Exceptions wizard, which is shared across all downstream *_exception modules (such as Purchase, Purchase Request, Sale, Account Move, and HR Expense), contains a validation bypass.
Although exceptions marked with is_blocking = True are intended to be non-ignorable, the wizard sets ignore_exception = True directly on the record instead of calling base.exception.action_ignore_exceptions(), which is the method responsible for enforcing the blocking check.
As a result, users can ignore blocking exceptions. Once ignore_exception is set to True, the record is excluded from all future exception checks, making the bypass persistent until the document is reset (for example, by reverting it to the Draft state).
To Reproduce
Affected versions:
Steps to reproduce the behavior:
Expected behavior
A blocking exception (
is_blocking = True) should never be ignorable from any entry point, including this wizard — it should raise the same error thataction_ignore_exceptions()raises, and Confirm should stay blocked.Additional context
Affects every module built on this wizard:
purchase_exception,purchase_request_exception(OCA/purchase-workflow),sale_exception(OCA/sale-workflow),account_move_exception(OCA/account-invoicing),hr_expense_exception(OCA/hr-expense), and any custom*_exceptionmodule following the same pattern.