Confirm before you delete any inline row

Rule-driven confirmation and hard-block dialogs for every embedded One2many and Many2many list in Odoo — with dependent-record counts and a full audit trail.

The problem

In Odoo, deleting a row from an inline One2many or Many2many table — sales order lines, purchase lines, invoice lines, task checklists — happens the instant you click the trash icon. There is no confirmation step, so a single misclick silently removes a line, and because nothing is saved yet, the loss often goes unnoticed until it is too late.

The solution

This app puts a rule-driven confirmation or hard-block dialog in front of every inline delete. Rules match by model, field, and record state, show how many dependent records will be affected, and every confirmed deletion is written to a searchable audit log — so nothing disappears without a trace.

Capabilities

Built for teams that cannot afford a silent delete

Every capability below is implemented in the module.

01

Confirmation Dialog On Every Inline Delete

Any embedded One2many or Many2many list gets an "Are you sure?" prompt before the row is removed, replacing Odoo's default instant delete.

02

Context-Aware Rule Engine

Rules match on model, x2many field name, and a safe Python condition against the row's own field values, so the prompt only fires where you need it.

03

Hard-Block Rules

Some deletions should never happen. Mark a rule Block (e.g. confirmed lines) and the delete is refused outright with an explanation, no override.

04

Dependent-Record Count

Rules can point at a related model and field; the dialog shows exactly how many linked records will be affected before you confirm.

05

Custom Messages Per Rule

Write your own confirmation or block message per rule, with placeholders for the record name and dependent count, or let the app generate one.

06

Severity Levels

Mark each rule Info, Warning, or Danger to color the confirm button and signal how serious the deletion is.

07

Full Audit Trail

Every confirmed deletion is logged with the user, timestamp, model, field, and a JSON snapshot of the deleted row's data.

08

Global On/Off And Default-Confirm Toggle

Turn the whole feature on or off, and choose whether unmatched deletions are confirmed by default or pass through untouched, from General Settings.

09

Fail-Open Safety

Any unexpected error in the rule engine falls through to Odoo's native deletion, so this app can never block or break normal record removal.

Workflow

How it works

1

Configure Rules

Define rules by model, field, and condition in the Delete Confirmation app, choosing Confirm or Block per case.

2

Toggle Global Behavior

Set the global on/off, default-confirm, and audit switches once in General Settings.

3

Users Delete As Normal

When someone clicks the trash icon on an inline row, the matching rule's dialog appears automatically.

4

Review The Audit Log

Every confirmed deletion is recorded, so admins can trace who removed what and when.

Questions

Frequently asked

No sales fog. If your question isn't here, email us and we'll answer it the same way.

Yes. It patches the standard embedded list renderer, so it applies to any One2many or Many2many field shown as an inline editable list — sales lines, purchase lines, invoice lines, task checklists, and any custom module's embedded lists.

Get the app

Buy it on the Odoo App Store

Purchase, download and install directly from the official Odoo Apps Store — you'll always get the latest supported build.

Delete Confirmation Dialog for Inline x2many Rows

A confirmation dialog on every inline One2many and Many2many row delete, driven by context-aware rules with hard blocks, dependent-record counts and a full audit trail — and fail-open safety.

Buy on Odoo App Store