Data Recycle

data_recycle
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/data_recycle
VERSION
VERSION 1.3
CATEGORY
CATEGORYProductivity/Data Cleaning
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Julien Castiaux, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, luvi, Louis Wicket (wil), Victor Piryns (pivi), Dylan Kiss (dyki), kmod-odoo, Krzysztof Magusiak (krma), Quentin Colla (qucol), chpa-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Find old records and archive/delete them

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
notification notification ir.ui.view qweb New
view_data_merge_model_form Field Recyle Model Form data_recycle.model form New
view_data_recycle_model_list Field Recyle Model List data_recycle.model list New
view_data_recycle_record_list Field Recycle Record List data_recycle.record list New
view_data_recycle_record_search Field Recycle Record Search data_recycle.record search New
Models touched (2)

New fields (17)
  • active Boolean
    default=True
  • domain Char
    compute='_compute_domain' readonly=False store=True string='Filter'
  • include_archived Boolean
  • last_notification Datetime
    readonly=True
  • name Char
    compute='_compute_name' copy=True readonly=False required=True store=True string='Name'
  • notify_frequency Integer
    default=1 string='Notify'
  • notify_frequency_period Selection
    default='weeks' string='Notify Frequency Period' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notify_user_ids Many2many → res.users
    default=<expr> domain=<expr> help='List of users to notify when there are new records to recycle' string='Notify Users' args: 'res.users'
  • records_to_recycle_count Integer
    compute='_compute_records_to_recycle_count' args: 'Records To Recycle'
  • recycle_action Selection
    default='unlink' required=True string='Recycle Action' args: [('archive', 'Archive'), ('unlink', 'Delete')]
  • recycle_mode Selection
    default='manual' required=True string='Recycle Mode' args: [('manual', 'Manual'), ('automatic', 'Automatic')]
  • recycle_record_ids One2many → data_recycle.record
    args: 'data_recycle.record', 'recycle_model_id'
  • res_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Model' args: 'ir.model'
  • res_model_name Char
    readonly=True related='res_model_id.model' store=True string='Model Name'
  • time_field_delta Integer
    default=1 string='Delta'
  • time_field_delta_unit Selection
    default='months' string='Delta Unit' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
  • time_field_id Many2one → ir.model.fields
    domain="[('model_id', '=', res_model_id), ('ttype', 'in', ('date', 'datetime')), ('store', '=', True)]" ondelete='cascade' string='Time Field' args: 'ir.model.fields'
Public methods (3)
  • action_recycle_records(self)
  • open_records(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one → res.company
    compute='_compute_company_id' store=True args: 'res.company'
  • name Char
    compute='_compute_name' compute_sudo=True args: 'Record Name'
  • recycle_model_id Many2one → data_recycle.model
    index='btree_not_null' ondelete='cascade' string='Recycle Model' args: 'data_recycle.model'
  • res_id Integer
    aggregator=None index=True args: 'Record ID'
  • res_model_id Many2one
    readonly=True related='recycle_model_id.res_model_id' store=True
  • res_model_name Char
    readonly=True related='recycle_model_id.res_model_name' store=True
Public methods (2)
  • action_discard(self)
  • action_validate(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/data_recycle
VERSION
VERSION 1.3
CATEGORY
CATEGORYProductivity/Data Cleaning
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Odoo Online, Jorge Pinna Puissant, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Louis Wicket (wil), Dylan Kiss (dyki), kmod-odoo, sami odoo, Louis (wil)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Find old records and archive/delete them

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
notification notification ir.ui.view qweb New
view_data_merge_model_form Field Recyle Model Form data_recycle.model form New
view_data_recycle_model_list Field Recyle Model List data_recycle.model list New
view_data_recycle_record_list Field Recycle Record List data_recycle.record list New
view_data_recycle_record_search Field Recycle Record Search data_recycle.record search New
Models touched (2)

New fields (17)
  • active Boolean
    default=True
  • domain Char
    compute='_compute_domain' readonly=False store=True string='Filter'
  • include_archived Boolean
  • last_notification Datetime
    readonly=True
  • name Char
    compute='_compute_name' copy=True readonly=False required=True store=True string='Name'
  • notify_frequency Integer
    default=1 string='Notify'
  • notify_frequency_period Selection
    default='weeks' string='Notify Frequency Period' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notify_user_ids Many2many → res.users
    default=<expr> domain=<expr> help='List of users to notify when there are new records to recycle' string='Notify Users' args: 'res.users'
  • records_to_recycle_count Integer
    compute='_compute_records_to_recycle_count' args: 'Records To Recycle'
  • recycle_action Selection
    default='unlink' required=True string='Recycle Action' args: [('archive', 'Archive'), ('unlink', 'Delete')]
  • recycle_mode Selection
    default='manual' required=True string='Recycle Mode' args: [('manual', 'Manual'), ('automatic', 'Automatic')]
  • recycle_record_ids One2many → data_recycle.record
    args: 'data_recycle.record', 'recycle_model_id'
  • res_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Model' args: 'ir.model'
  • res_model_name Char
    readonly=True related='res_model_id.model' store=True string='Model Name'
  • time_field_delta Integer
    default=1 string='Delta'
  • time_field_delta_unit Selection
    default='months' string='Delta Unit' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
  • time_field_id Many2one → ir.model.fields
    domain="[('model_id', '=', res_model_id), ('ttype', 'in', ('date', 'datetime')), ('store', '=', True)]" ondelete='cascade' string='Time Field' args: 'ir.model.fields'
Public methods (3)
  • action_recycle_records(self)
  • open_records(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one → res.company
    compute='_compute_company_id' store=True args: 'res.company'
  • name Char
    compute='_compute_name' compute_sudo=True args: 'Record Name'
  • recycle_model_id Many2one → data_recycle.model
    ondelete='cascade' string='Recycle Model' args: 'data_recycle.model'
  • res_id Integer
    index=True args: 'Record ID'
  • res_model_id Many2one
    readonly=True related='recycle_model_id.res_model_id' store=True
  • res_model_name Char
    readonly=True related='recycle_model_id.res_model_name' store=True
Public methods (2)
  • action_discard(self)
  • action_validate(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/data_recycle
VERSION
VERSION 1.3
CATEGORY
CATEGORYProductivity/Data Cleaning
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Aaron Bohy, Lucas Perais, Victor Feyens, Samuel Degueldre, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, Kevin Baptiste, Vincent Larcin, niyasraphy, Dylan Kiss (dyki), Brieuc-brd, kmod-odoo, Louis (wil)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Find old records and archive/delete them

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
notification notification ir.ui.view qweb New
view_data_merge_model_form Field Recyle Model Form data_recycle.model form New
view_data_recycle_model_list Field Recyle Model List data_recycle.model tree New
view_data_recycle_record_list Field Recycle Record List data_recycle.record tree New
view_data_recycle_record_search Field Recycle Record Search data_recycle.record search New
Models touched (2)

New fields (17)
  • active Boolean
    default=True
  • domain Char
    compute='_compute_domain' readonly=False store=True string='Filter'
  • include_archived Boolean
  • last_notification Datetime
    readonly=True
  • name Char
    compute='_compute_name' copy=True readonly=False required=True store=True string='Name'
  • notify_frequency Integer
    default=1 string='Notify'
  • notify_frequency_period Selection
    default='weeks' string='Notify Frequency Period' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notify_user_ids Many2many → res.users
    default=<expr> domain=<expr> help='List of users to notify when there are new records to recycle' string='Notify Users' args: 'res.users'
  • records_to_recycle_count Integer
    compute='_compute_records_to_recycle_count' args: 'Records To Recycle'
  • recycle_action Selection
    default='unlink' required=True string='Recycle Action' args: [('archive', 'Archive'), ('unlink', 'Delete')]
  • recycle_mode Selection
    default='manual' required=True string='Recycle Mode' args: [('manual', 'Manual'), ('automatic', 'Automatic')]
  • recycle_record_ids One2many → data_recycle.record
    args: 'data_recycle.record', 'recycle_model_id'
  • res_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Model' args: 'ir.model'
  • res_model_name Char
    readonly=True related='res_model_id.model' store=True string='Model Name'
  • time_field_delta Integer
    default=1 string='Delta'
  • time_field_delta_unit Selection
    default='months' string='Delta Unit' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
  • time_field_id Many2one → ir.model.fields
    domain="[('model_id', '=', res_model_id), ('ttype', 'in', ('date', 'datetime')), ('store', '=', True)]" ondelete='cascade' string='Time Field' args: 'ir.model.fields'
Public methods (3)
  • action_recycle_records(self)
  • open_records(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one → res.company
    compute='_compute_company_id' store=True args: 'res.company'
  • name Char
    compute='_compute_name' compute_sudo=True args: 'Record Name'
  • recycle_model_id Many2one → data_recycle.model
    ondelete='cascade' string='Recycle Model' args: 'data_recycle.model'
  • res_id Integer
    index=True args: 'Record ID'
  • res_model_id Many2one
    readonly=True related='recycle_model_id.res_model_id' store=True
  • res_model_name Char
    readonly=True related='recycle_model_id.res_model_name' store=True
Public methods (2)
  • action_discard(self)
  • action_validate(self)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/data_recycle
VERSION
VERSION 1.3
CATEGORY
CATEGORYProductivity/Data Cleaning
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Yannick Tivisse, Lucas Perais, Romeo Fragomeli, Gorash, niyasraphy, kmod-odoo, Martin Trigaux (mat)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:52
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Find old records and archive/delete them

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
notification notification ir.ui.view qweb New
view_data_merge_model_form Field Recyle Model Form data_recycle.model form New
view_data_recycle_model_list Field Recyle Model List data_recycle.model tree New
view_data_recycle_record_list Field Recycle Record List data_recycle.record tree New
view_data_recycle_record_search Field Recycle Record Search data_recycle.record search New
Models touched (2)

New fields (17)
  • active Boolean
    default=True
  • domain Char
    compute='_compute_domain' readonly=False store=True string='Filter'
  • include_archived Boolean
  • last_notification Datetime
    readonly=True
  • name Char
    compute='_compute_name' copy=True readonly=False required=True store=True string='Name'
  • notify_frequency Integer
    default=1 string='Notify'
  • notify_frequency_period Selection
    default='weeks' string='Notify Frequency Period' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months')]
  • notify_user_ids Many2many → res.users
    default=<expr> domain=<expr> help='List of users to notify when there are new records to recycle' string='Notify Users' args: 'res.users'
  • records_to_recycle_count Integer
    compute='_compute_records_to_recycle_count' args: 'Records To Recycle'
  • recycle_action Selection
    default='unlink' required=True string='Recycle Action' args: [('archive', 'Archive'), ('unlink', 'Delete')]
  • recycle_mode Selection
    default='manual' required=True string='Recycle Mode' args: [('manual', 'Manual'), ('automatic', 'Automatic')]
  • recycle_record_ids One2many → data_recycle.record
    args: 'data_recycle.record', 'recycle_model_id'
  • res_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Model' args: 'ir.model'
  • res_model_name Char
    readonly=True related='res_model_id.model' store=True string='Model Name'
  • time_field_delta Integer
    default=1 string='Delta'
  • time_field_delta_unit Selection
    default='months' string='Delta Unit' args: [('days', 'Days'), ('weeks', 'Weeks'), ('months', 'Months'), ('years', 'Years')]
  • time_field_id Many2one → ir.model.fields
    domain="[('model_id', '=', res_model_id), ('ttype', 'in', ('date', 'datetime')), ('store', '=', True)]" ondelete='cascade' string='Time Field' args: 'ir.model.fields'
Public methods (3)
  • action_recycle_records(self)
  • open_records(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True args: 'Active'
  • company_id Many2one → res.company
    compute='_compute_values' store=True args: 'res.company'
  • name Char
    compute='_compute_values' compute_sudo=True args: 'Record Name'
  • recycle_model_id Many2one → data_recycle.model
    ondelete='cascade' string='Recycle Model' args: 'data_recycle.model'
  • res_id Integer
    index=True args: 'Record ID'
  • res_model_id Many2one
    readonly=True related='recycle_model_id.res_model_id' store=True
  • res_model_name Char
    readonly=True related='recycle_model_id.res_model_name' store=True
Public methods (2)
  • action_discard(self)
  • action_validate(self)