Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Extra Tools
  3. Recycle Bin v 18.0
  4. Sales Conditions FAQ

Recycle Bin

by BexFord Systems https://www.bexfordsystems.com/
Odoo

$ 48.92

v 18.0 Third Party
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies Discuss (mail)
Lines of code 1334
Technical Name bfs_recycle_bin
LicenseOPL-1
Websitehttps://www.bexfordsystems.com/
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies Discuss (mail)
Lines of code 1334
Technical Name bfs_recycle_bin
LicenseOPL-1
Websitehttps://www.bexfordsystems.com/
  • Description
  • License
BexFord Systems BexFord Systems
Odoo 18 Community Enterprise Self Hosted

Recycle Bin

Protect data from accidental deletion. Intercepts deletes, preserves all relational data, and lets you restore in seconds for any Odoo model.

Any Model Zero Data Loss

How It Works

Four simple steps from deletion to restoration

1

User Deletes Record

Standard Odoo delete triggers the Recycle Bin interception layer.

2

Record Serialised

All fields - simple, Many2one, Many2many, One2many children - captured to JSON.

3

Bin Entry Created

A recycle.bin.item is created. The original record is removed from the DB.

4

Restore Anytime

Manager opens Recycle Bin, inspects the record, and restores with one click.

Core Features

Everything you need for enterprise-grade record recovery

Generic - Any Model

Hooks into Odoo's abstract base model. Works on contacts, products, invoices, custom models - without per-model code.

Full Relational Integrity

Captures Many2one, Many2many link tables, and One2many child rows including invoice lines. Warns about missing targets before restore.

One-Click Restore

A guided restore wizard re-establishes all relationships. If a related record is missing, the user can restore without it after confirming.

Odoo Restrictions Respected

Standard @api.ondelete guards are honoured. If a confirmed sale order cannot be deleted, the bin entry is rolled back automatically.

Settings UI

Configure enabled models, retention period (days), and deletion confirmation via the standard Odoo Settings interface. No developer needed.

Auto-Purge Cron

A daily scheduled action permanently purges bin items past their retention date. Set retention to 0 for indefinite storage.

Role-Based Security

Recycle Bin User: read & restore. Recycle Bin Manager: full access including permanent delete.

Delete Confirmation Popup

A JavaScript patch shows a custom confirmation dialog before deletion: "This record will go to the Recycle Bin. You can restore it later."

Accounting Support

Works with account.move with full invoice line capture, account.tax, account.payment.term, account.journal, and more.

Attachment Awareness

Attachments linked to deleted records are detected and re-linked on restore. Duplicate attachment creation is prevented automatically.

Bypass Context

Pass recycle_bin_bypass=True in context to permanently delete without the bin - useful for migrations and cleanup scripts.

Search, Filter & Group By

Full-featured list view with search bar, filters by model and state, grouping, bulk restore and bulk permanent-delete.

Screenshots

See the Recycle Bin in action inside Odoo 18

Recycle Bin - List View (Contacts, Products, Sales Orders, Invoices)
Recycle Bin list view
Restore Wizard - Relational Integrity Check
Restore wizard
Delete Permanently - Confirmation Dialog
Delete permanently confirmation
Moving a Record to Recycle Bin - Delete Action Intercepted
Move to recycle bin
Settings - Recycle Bin Configuration (Enable Models & Retention Policy)
Settings configuration

What's Covered

Full transparency - every scenario documented and tested

Covered Scenarios
Basic record recycling
Any configured model goes to bin instead of permanent delete.
One-click restore with relation rebuild
Many2one, Many2many, and One2many data re-established where targets exist.
Invoice lines fully captured & restored
Cursor-level stash captures lines before Odoo's MRO deletes them.
Partial restore with missing relations
Wizard warns about missing targets. User confirms and restores with fields left empty.
Standard deletion restrictions
Confirmed sale orders, posted invoices - bin entry rolled back cleanly if blocked.
Bulk delete - all records stored
Selecting N records creates N individual bin entries in one operation.
Accounting models (tax, term, move, journal)
Draft journal entries, taxes, payment terms, journals recycled and restored correctly.
Duplicate O2M alias deduplication
Aliased O2M fields (line_ids / invoice_line_ids) captured once - no duplicate restore.
Bypass context for admin/dev use
recycle_bin_bypass=True skips the bin for data migrations and scripts.
Known Limitations
Database-level cascade deletes
Children with ondelete='cascade' at DB level bypass the ORM and are not captured.
Binary field data not serialised
Binary fields (images, PDFs in fields) excluded to keep bin items lightweight.
Original record ID not preserved
Restored records receive a new ID. Original stored in res_id; new in restored_res_id.
Chatter history lost
mail.message, log notes, and tracking values excluded. Clean chatter on restore.
Computed fields not set during restore
Odoo 18 aborts if you set computed fields in create(). Odoo recomputes them automatically.
account.bank.statement.line excluded
Uses _inherits = {'account.move': 'move_id'}. Recycle the parent statement instead.
Transient & abstract models bypassed
Wizards (TransientModel) and abstract models are never intercepted.

Accounting Model Support

Which models to enable, and which to leave excluded

Enable These in Settings

Model Name Technical Name Notes Can Delete?
Journal Entry / Invoiceaccount.moveDraft only. Invoice lines fully captured via cursor stash.Draft only
Taxaccount.taxFully recyclable and restorableYes
Payment Termaccount.payment.termFully recyclable and restorableYes
Reconcile Modelaccount.reconcile.modelFully recyclableYes
Journalaccount.journalRecycles journal config; related entries not movedYes
Paymentaccount.paymentDraft payments onlyDraft only

Never Configure These (Already Excluded)

Model Name Technical Name Reason
Journal Lineaccount.move.lineCascade child - captured via cursor stash into parent bin entry. Configuring separately causes duplicates.
Bank Statement Lineaccount.bank.statement.lineUses _inherits = {'account.move': 'move_id'}. Independent recycling causes cascade conflicts.
Partial Reconcileaccount.partial.reconcileTechnical link record - no standalone business meaning.
Full Reconcileaccount.full.reconcileTechnical link record - no standalone business meaning.

Test Results

Comprehensive automated test suite - all passing on Odoo 18

30
Tests
66
Assertions
30
Passed
0
Failed
Base Tests16 / 16
TC-01 Record moved to bin, not permanently deletedPASS
TC-02 Unconfigured model - standard permanent deletePASS
TC-03 Excluded system models bypass binPASS
TC-04 Many2one reference preservedPASS
TC-05 Many2many references preservedPASS
TC-06 One2many children preserved (generic model)PASS
TC-07 Missing Many2one raises UserError on restorePASS
TC-08 Missing Many2many - partial restorePASS
TC-09 Confirmed sale.order blocked - bin rolled backPASS
TC-10 Cron purges expired bin itemsPASS
TC-11 Permanent delete marks item statePASS
TC-12 Restore twice raises UserErrorPASS
TC-13 Bulk delete stores all recordsPASS
TC-14 Settings configure enabled modelsPASS
TC-15 Bypass context permanently deletesPASS
TC-16 Integrity check detects missing relationsPASS
Accounting Tests14 / 14
TC-A01 account.tax recycled and restoredPASS
TC-A02 account.payment.term recycled and restoredPASS
TC-A03 account.reconcile.model recycledPASS
TC-A04 Draft account.move recycled with invoice linesPASS
TC-A05 Posted account.move blocked - bin rolled backPASS
TC-A06 account.move.line NOT double-storedPASS
TC-A07 account.move restored with journal_id + linesPASS
TC-A08 account.journal recycledPASS
TC-A09 account.bank.statement recycledPASS
TC-A10 Bulk delete of 3 draft moves storedPASS
TC-A11 account.move.line in EXCLUDED_MODELSPASS
TC-A12 account.bank.statement.line excludedPASS
TC-A13 Restored account.move has state draftPASS
TC-A14 Missing journal detected by integrity checkPASS

Installation

Up and running in under 5 minutes

1

Copy module to addons path

Extract the zip and place bfs_recycle_bin/ inside your Odoo addons directory.

2

Update app list & install

Developer mode Apps Update Apps List search Recycle Bin Install.

3

Configure models in Settings

Settings Technical Recycle Bin - select models, set retention days, save.

4

Access the Recycle Bin

Open the top-level Recycle Bin menu. Click Restore to recover any record.

BexFord Systems

BexFord Systems

contact@bexfordsystems.com

Website Contact Support

60 Days Support | © 2026 BexFord Systems

Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with