Date Range

date_range
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/19.0/date_range
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Rocío Vega
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module lets you define global date ranges that can be used to
filter your values in tree views.

It also provides a mixin model for developers that extends the model's
search view so that date ranges can be search as any relational field.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_list date.range.list date.range list New
view_date_range_search date.range search New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_list date.range.type.list date.range.type list New
view_date_range_type_search date.range.type search New
Models touched (4)

New fields (6)
  • active Boolean
    compute='_compute_active' help='The active field allows you to hide the date range without removing it.' readonly=False store=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=True string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    check_company=True comodel_name='date.range.type' index=True ondelete='restrict' required=True string='Type'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False store=True args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Inject the dummy Many2one field in the search view
  • get_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If set, date ranges of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/18.0/date_range
VERSION
VERSION 5.0.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSEnric Tobella, Weblate, OCA-git-bot, oca-ci, Carlos Roca, Bert Van Groenendael, Andrii Kompaniiets
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module lets you define global date ranges that can be used to
filter your values in tree views.

It also provides a mixin model for developers that extends the model's
search view so that date ranges can be search as any relational field.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_list date.range.list date.range list New
view_date_range_search date.range search New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_list date.range.type.list date.range.type list New
view_date_range_type_search date.range.type search New
Models touched (4)

New fields (6)
  • active Boolean
    compute='_compute_active' help='The active field allows you to hide the date range without removing it.' readonly=False store=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=True string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    check_company=True comodel_name='date.range.type' index=True ondelete='restrict' required=True string='Type'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False store=True args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Inject the dummy Many2one field in the search view
  • get_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If set, date ranges of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/17.0/date_range
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSGitHub, Weblate, OCA-git-bot, oca-ci, David Ramia, DavidJForgeFlow, Henry Backman, sonhd91
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module lets you define global date ranges that can be used to
filter your values in tree views.

It also provides a mixin model for developers that extends the model's
search view so that date ranges can be search as any relational field.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_search date.range search New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_search date.range.type search New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (4)

New fields (6)
  • active Boolean
    compute='_compute_active' help='The active field allows you to hide the date range without removing it.' readonly=False store=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    check_company=True comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' required=True string='Type'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Inject the dummy Many2one field in the search view
  • get_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If set, date ranges of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/16.0/date_range
VERSION
VERSION 1.0.9
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSAlexis de Lattre, GitHub, Laurent Mignon (ACSONE), Enric Tobella, Hugo Santos, Weblate, OCA-git-bot, antonio, oca-ci, Benoit Aimont, Carlos Roca, bosd
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_search date.range search New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_search date.range.type search New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (4)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    check_company=True comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' required=True string='Type'
  • type_name Char
    related='type_id.name' store=True string='Type Name'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Inject the dummy Many2one field in the search view
  • get_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If set, date ranges of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/15.0/date_range
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, Adam Heinz, Carlos Roca, Vincent Hatakeyama, Joan Mateu Jordi
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:39
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (4)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' readonly=False required=True store=True string='Type'
  • type_name Char
    related='type_id.name' store=True string='Type Name'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable, and also babel.dates.format_date method.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Inject the dummy Many2one field in the search view
  • load_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable, and also babel.dates.format_date method.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/14.0/date_range
VERSION
VERSION 2.2.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSAlexis de Lattre, Stefan Rijnhart, GitHub, Andrea, Enric Tobella, nans, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Pablo Fuentes, hparfr, Mihai Fekete, oca-ci, oca-git-bot, Dũng (Trần Đình), Abdellatif Benzbiria
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:07
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (4)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' readonly=False required=True store=True string='Type'
  • type_name Char
    related='type_id.name' store=True string='Type Name'
Public methods (1)
  • get_domain(self, field_name)

New fields (10)
  • company_id Many2one → res.company
    comodel_name='res.company' compute='_compute_company_id' readonly=False store=True string='Company'
  • count Integer
    string='Number of ranges to generate'
  • date_end Date
    compute='_compute_date_end' readonly=False store=True args: 'End date'
  • date_start Date
    compute='_compute_date_start' readonly=False required=True store=True args: 'Start date'
  • duration_count Integer
    compute='_compute_duration_count' readonly=False required=True store=True args: 'Duration'
  • name_expr Text
    compute='_compute_name_expr' help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' readonly=False store=True args: 'Range name expression'
  • name_prefix Char
    compute='_compute_name_prefix' readonly=False store=True args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    compute='_compute_unit_of_time' readonly=False required=True store=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (5)
  • action_apply(self, batch=False)
  • generate_names(self, vals)
    Generate the names for the given intervals
  • onchange_count(self)
    @api.onchange('count')
  • onchange_date_end(self)
    @api.onchange('date_end')
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Inject the dummy Many2one field in the search view
  • load_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (14)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • autogeneration_count Integer
  • autogeneration_date_start Date
    help='Only applies when there are no date ranges of this type yet' string='Autogeneration Start Date'
  • autogeneration_unit Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • date_ranges_exist Boolean
    compute='_compute_date_ranges_exist'
  • duration_count Integer
    args: 'Duration'
  • name Char
    required=True translate=True
  • name_expr Text
    help='Evaluated expression. E.g. "\'FY%s\' % date_start.strftime(\'%Y%m%d\')"\nYou can use the Date types \'date_end\' and \'date_start\', as well as the \'index\' variable.' args: 'Range name expression'
  • name_prefix Char
    args: 'Range name prefix'
  • range_name_preview Char
    compute='_compute_range_name_preview' store=True
  • unit_of_time Selection
    args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (2)
  • autogenerate_ranges(self)
    @api.model
    Generate ranges for types with autogeneration settings
  • onchange_name_expr(self)
    @api.onchange('name_expr')
    Wipe the prefix if an expression is entered. The reverse is not implemented because we don't want to wipe the users' painstakingly crafted expressions by accident.
REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/13.0/date_range
VERSION
VERSION 1.0.2
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSStefan Rijnhart, Pedro M. Baeza, Laurent Mignon (ACSONE), mreficent, nans, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (3)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' readonly=False required=True store=True string='Type'
  • type_name Char
    related='type_id.name' store=True string='Type Name'
Public methods (1)
  • get_domain(self, field_name)

New fields (7)
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company string='Company'
  • count Integer
    required=True string='Number of ranges to generate'
  • date_start Date
    required=True
  • duration_count Integer
    required=True args: 'Duration'
  • name_prefix Char
    required=True args: 'Range name prefix'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' compute='_compute_type_id' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' readonly=False required=True store=True string='Type'
  • unit_of_time Selection
    required=True args: [(str(YEARLY), 'years'), (str(MONTHLY), 'months'), (str(WEEKLY), 'weeks'), (str(DAILY), 'days')]
Public methods (1)
  • action_apply(self)

New fields (5)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/12.0/date_range
VERSION
VERSION 2.1.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSStefan Rijnhart, eLBati, Pedro M. Baeza, Sylvain LE GAL, Jairo Llopis, Andrea, nans, OCA Transbot, João Marques, oca-travis, Weblate, OCA-git-bot, OCA Git Bot, Héctor Villarreal Ortega
WEBSITE
WEBSITEhttps://github.com/OCA/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (4)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' required=True string='Type'
  • type_name Char
    readonly=True related='type_id.name' store=True string='Type Name'
Public methods (1)
  • get_domain(self, field_name)
    @api.multi

New fields (7)
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company string='Company'
  • count Integer
    required=True string='Number of ranges to generate'
  • date_start Date
    required=True
  • duration_count Integer
    required=True args: 'Duration'
  • name_prefix Char
    required=True args: 'Range name prefix'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' required=True string='Type'
  • unit_of_time Selection
    required=True args: [(YEARLY, 'years'), (MONTHLY, 'months'), (WEEKLY, 'weeks'), (DAILY, 'days')]
Public methods (1)
  • action_apply(self)
    @api.multi

New fields (1)
  • date_range_search_id Many2one → date.range
    comodel_name='date.range' compute='_compute_date_range_search_id' search='_search_date_range_search_id' string='Filter by period (technical field)'
Public methods (2)
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Inject the dummy Many2one field in the search view
  • load_views(self, views, options=None)
    @api.model
    Adapt the label of the dummy search field Ensure the technical name does not show up in the Custom Filter fields list (while still showing up in the Export widget)

New fields (5)
  • active Boolean
    default=True help='The active field allows you to hide the date range type without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/server-ux
GIT
GIThttps://github.com/OCA/server-ux.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-ux/tree/11.0/date_range
VERSION
VERSION 2.0.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSRonald Portier, Pedro M. Baeza, Fekete Mihai, GitHub, Laurent Mignon (ACSONE), mreficent, Andrea, OCA Transbot, oca-travis, Weblate, OCA-git-bot, OCA Git Bot, Nikos Tsirintanis
WEBSITE
WEBSITEhttps://github.com/oca/server-ux
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (3)

New fields (9)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • parent_id Many2one → date.range
    comodel_name='date.range' index=1 string='Parent'
  • parent_type_id Many2one
    readonly=True related='type_id.parent_type_id' store=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' required=True string='Type'
  • type_name Char
    readonly=True related='type_id.name' store=True string='Type'
Public methods (2)
  • get_domain(self, field_name)
    @api.multi
  • onchange_type_id(self)
    @api.multi@api.onchange('company_id', 'type_id', 'date_start', 'date_end')
    The type_id and the dates determine the choices for parent.

New fields (8)
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company string='Company'
  • count Integer
    required=True string='Number of ranges to generate'
  • date_start Date
    required=True strint='Start date'
  • duration_count Integer
    required=True args: 'Duration'
  • name_prefix Char
    required=True args: 'Range name prefix'
  • parent_id Many2one → date.range
    comodel_name='date.range' index=1 string='Parent'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' required=True string='Type'
  • unit_of_time Selection
    required=True args: [(YEARLY, 'years'), (MONTHLY, 'months'), (WEEKLY, 'weeks'), (DAILY, 'days')]
Public methods (2)
  • action_apply(self)
    @api.multi
  • onchange_type_id(self)
    @api.multi@api.onchange('type_id', 'date_start')

New fields (6)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • name Char
    required=True translate=True
  • parent_type_id Many2one → date.range.type
    comodel_name='date.range.type' index=1
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/10.0/date_range
VERSION
VERSION 3.0.0
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSAlexis de Lattre, Pedro M. Baeza, GitHub, Laurent Mignon (ACSONE), Moisés López, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Antonio Esposito, OCA Git Bot
WEBSITE
WEBSITEhttps://odoo-community.org/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (3)

New fields (9)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • parent_id Many2one → date.range
    comodel_name='date.range' index=1 string='Parent'
  • parent_type_id Many2one
    readonly=True related='type_id.parent_type_id' store=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" index=1 ondelete='restrict' required=True string='Type'
  • type_name Char
    readonly=True related='type_id.name' store=True string='Type'
Public methods (2)
  • get_domain(self, field_name)
    @api.multi
  • onchange_type_id(self)
    @api.multi@api.onchange('company_id', 'type_id', 'date_start', 'date_end')
    The type_id and the dates determine the choices for parent.

New fields (8)
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company string='Company'
  • count Integer
    required=True string='Number of ranges to generate'
  • date_start Date
    required=True strint='Start date'
  • duration_count Integer
    required=True args: 'Duration'
  • name_prefix Char
    required=True args: 'Range name prefix'
  • parent_id Many2one → date.range
    comodel_name='date.range' index=1 string='Parent'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]" ondelete='cascade' required=True string='Type'
  • unit_of_time Selection
    required=True args: [(YEARLY, 'years'), (MONTHLY, 'months'), (WEEKLY, 'weeks'), (DAILY, 'days')]
Public methods (2)
  • action_apply(self)
    @api.multi
  • onchange_type_id(self)
    @api.multi@api.onchange('type_id', 'date_start')

New fields (6)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company index=1 string='Company'
  • date_range_ids One2many → date.range
    string='Ranges' args: 'date.range', 'type_id'
  • name Char
    required=True translate=True
  • parent_type_id Many2one → date.range.type
    comodel_name='date.range.type' index=1
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/9.0/date_range
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), ACSONE SA/NV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), ACSONE SA/NV
COMMITTERS
COMMITTERSJoël Grand-Guillaume, Pedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://odoo-community.org/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
assets_backend Module name backend assets ir.ui.view qweb Inherits web.assets_backend
date_range_generator_view_form date.range.generator.form date.range.generator form New
view_date_range_form_view date.range.form date.range form New
view_date_range_tree date.range.tree date.range tree New
view_date_range_type_form_view date.range.type.form date.range.type form New
view_date_range_type_tree date.range.type.tree date.range.type tree New
Models touched (3)

New fields (7)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company select=1 string='Company'
  • date_end Date
    required=True string='End date'
  • date_start Date
    required=True string='Start date'
  • name Char
    required=True translate=True
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' required=True select=1 string='Type'
  • type_name Char
    readonly=True related='type_id.name' store=True string='Type'
Public methods (1)
  • get_domain(self, field_name)
    @api.multi

New fields (7)
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company string='Company'
  • count Integer
    required=True string='Number of ranges to generate'
  • date_start Date
    required=True strint='Start date'
  • duration_count Integer
    required=True args: 'Duration'
  • name_prefix Char
    required=True args: 'Range name prefix'
  • type_id Many2one → date.range.type
    comodel_name='date.range.type' ondelete='cascade' required=True string='Type'
  • unit_of_time Selection
    required=True args: [(YEARLY, 'years'), (MONTHLY, 'months'), (WEEKLY, 'weeks'), (DAILY, 'days')]
Public methods (1)
  • action_apply(self)
    @api.multi

New fields (4)
  • active Boolean
    default=True help='The active field allows you to hide the date range without removing it.'
  • allow_overlap Boolean
    default=False help='If sets date range of same type must not overlap.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=_default_company select=1 string='Company'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.