Resource

resource
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, Aaron Bohy, Yannick Tivisse, Jorge Pinna Puissant, Julien Castiaux, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Ahmad Khanalizadeh, Loan (LSE), Victor Piryns (pivi), Dylan Kiss (dyki), Mayurrajsinh Rathod, Simon Goffaux (sigo), Xavier Bol (xbo), Youssef Bashandy, bary, Abderraouf Ghrissi (abgh), Julien Carion (juca), Tanguy Quéguineur, Mathieu Coutant, Abdelrahman Mahmoud (amah), st-yes, Chris Duvivier, Corentin Heinix (cohe), Krzysztof Magusiak (krma), Harrison Hutton, Guillaume V, Maeva De Keyser (MDEK), nsirjacobs, akha, Bertrand Dossogne, romc-odoo, kareem, saurabh, Jurgen Gjini, Farah (ahmfa), Amr Yasser (amry)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.list resource.calendar.leaves list New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.list resource.resource list New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.list resource.calendar.attendance list New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.list resource.calendar list New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (1)
  • write(self, vals)

New fields (21)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • attendance_ids_1st_week One2many → resource.calendar.attendance
    compute='_compute_two_weeks_attendance' inverse='_inverse_two_weeks_calendar' args: 'resource.calendar.attendance', 'calendar_id', 'Working Time 1st Week'
  • attendance_ids_2nd_week One2many → resource.calendar.attendance
    compute='_compute_two_weeks_attendance' inverse='_inverse_two_weeks_calendar' args: 'resource.calendar.attendance', 'calendar_id', 'Working Time 2nd Week'
  • company_id Many2one → res.company
    default=<expr> domain=<expr> index='btree_not_null' args: 'res.company', 'Company'
  • duration_based Boolean
    help='The hours will be centered around 12:00 to cover the duration for the day' args: 'Attendance based on duration'
  • flexible_hours Boolean
    compute='_compute_flexible_hours' help="When enabled, it will allow employees to work flexibly, without relying on the company's working schedule (working hours)." inverse='_inverse_flexible_hours' store=True string='Flexible Hours'
  • full_time_required_hours Float
    compute='_compute_full_time_required_hours' help='Number of hours to work on the company schedule to be considered as fulltime.' readonly=False store=True string='Full Time Equivalent'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    compute='_compute_hours_per_day' digits=(2, 2) help='Average hours per day a resource is supposed to work with this calendar.' readonly=False store=True args: 'Average Hour per Day'
  • hours_per_week Float
    compute='_compute_hours_per_week' copy=False readonly=False store=True string='Hours per Week'
  • is_fulltime Boolean
    compute='_compute_work_time_rate' string='Is Full Time'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • schedule_type Selection
    default='fully_fixed' help='Choose which level of definition you want to define on your Schedule\n- Flexible : Define an amount of hours to work on the week.\n- Fully Fixed : define the days, periods and the start & end time for each period of the day' required=True string='Schedule Type' args: [('flexible', 'Flexible'), ('fully_fixed', 'Fully Fixed')]
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
  • work_resources_count Integer
    compute='_compute_work_resources_count' args: 'Work Resources count'
  • work_time_rate Float
    compute='_compute_work_time_rate' help='Work time rate versus full time working schedule, should be between 0 and 100 %.' search='_search_work_time_rate' string='Work Time Rate'
Public methods (8)
  • copy_data(self, default=None)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_based_on_duration(self)
  • switch_calendar_type(self)

New fields (13)
  • calendar_id Many2one → resource.calendar
    index=True ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('lunch', 'Break'), ('afternoon', 'Afternoon'), ('full_day', 'Full Day')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • duration_based Boolean
    related='calendar_id.duration_based'
  • duration_days Float
    compute='_compute_duration_days' readonly=False store=True string='Duration (days)'
  • duration_hours Float
    compute='_compute_duration_hours' inverse='_inverse_duration_hours' readonly=False store=True string='Duration (hours)'
  • hour_from Float
    default=0 help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    default=0 required=True string='Work to'
  • name Char
    required=True
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Second'), ('0', 'First')], 'Week Number'
Public methods (1)
  • get_week_type(self, date)
    @api.model

New fields (7)
  • calendar_id Many2one → resource.calendar
    check_company=True compute='_compute_calendar_id' domain="[('company_id', 'in', [company_id, False])]" index=True readonly=False store=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=True store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    compute='_compute_date_to' readonly=False required=True store=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • default_get(self, fields)
    @api.model

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True precompute=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    bypass_search_access=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.

New fields (12)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • avatar_128 Image
    compute='_compute_avatar_128'
  • calendar_id Many2one → resource.calendar
    default=<expr> domain="[('company_id', '=', company_id)]" help='Define the working schedule of the resource. If not set, the resource will have fully flexible working hours.' string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • email Char
    related='user_id.email'
  • name Char
    required=True
  • phone Char
    related='user_id.phone'
  • resource_type Selection
    default='user' required=True string='Type' args: [('user', 'Human'), ('material', 'Material')]
  • share Boolean
    related='user_id.share'
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' index='btree_not_null' string='User' args: 'res.users'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, vals)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Christophe Simonis, Yannick Tivisse, Odoo Online, Pierre Masereel, Aurélien Warnon, David Tran, Tiffany Chang (tic), Gorash, Ahmad Khanalizadeh, sofiagvaladze, Florian Damhaut, Dossogne Bertrand, Vincent Larcin, Thomas Lefebvre (thle), Louis Wicket (wil), Victor Piryns (pivi), Mahamadasif Ansari, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Chong Wang (cwg), Hugo Carlier (Huca), Xavier Bol (xbo), Noe Antoine, Mattis Megevand (mmeg), Mattis Megevand, Youssef Bashandy, bary, Maxime de Neuville, reka-odoo, jugj-odoo, Abderraouf Ghrissi (abgh), Tanguy Quéguineur, Louis (wil), aamo-odoo, Mathieu Coutant, st-yes, Chris Duvivier, Pierre Pulinckx (pipu), Corentin Heinix (cohe), lse-odoo, Krzysztof Magusiak (krma), Hazem Ibrahim, Harrison Hutton, Guillaume V, Maeva De Keyser (MDEK), romc-odoo, kareem, kinhosz, sbel-odoo, Killian Frappart, Cooper Spinelli, Jurgen Gjini
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.list resource.calendar.leaves list New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.list resource.resource list New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.list resource.calendar.attendance list New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.list resource.calendar list New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (1)
  • write(self, vals)

New fields (13)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> domain=<expr> args: 'res.company', 'Company'
  • flexible_hours Boolean
    help="When enabled, it will allow employees to work flexibly, without relying on the company's working schedule (working hours)." string='Flexible Hours'
  • full_time_required_hours Float
    help='Number of hours to work on the company schedule to be considered as fulltime.' string='Company Full Time'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    compute='_compute_hours_per_day' digits=(2, 2) help='Average hours per day a resource is supposed to work with this calendar.' readonly=False store=True args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
Public methods (7)
  • copy_data(self, default=None)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (15)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('lunch', 'Break'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • duration_days Float
    compute='_compute_duration_days' readonly=False store=True string='Duration (days)'
  • duration_hours Float
    compute='_compute_duration_hours' string='Duration (hours)'
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Second'), ('0', 'First')], 'Week Number'
Public methods (1)
  • get_week_type(self, date)
    @api.model

New fields (7)
  • calendar_id Many2one → resource.calendar
    check_company=True compute='_compute_calendar_id' domain="[('company_id', 'in', [company_id, False])]" index=True readonly=False store=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=True store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    compute='_compute_date_to' readonly=False required=True store=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • default_get(self, fields_list)

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True precompute=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (3)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.

New fields (12)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • avatar_128 Image
    compute='_compute_avatar_128'
  • calendar_id Many2one → resource.calendar
    default=<expr> domain="[('company_id', '=', company_id)]" help='Define the working schedule of the resource. If not set, the resource will have fully flexible working hours.' string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • email Char
    related='user_id.email'
  • name Char
    required=True
  • phone Char
    related='user_id.phone'
  • resource_type Selection
    default='user' required=True string='Type' args: [('user', 'Human'), ('material', 'Material')]
  • share Boolean
    related='user_id.share'
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Christophe Simonis, Xavier Morel, Aaron Bohy, Barad Mahendra, Yannick Tivisse, Odoo Online, Adrien Dieudonne, Jorge Pinna Puissant, David Tran, Julien Mougenot, Samuel Degueldre, Prakash Prajapati, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, Kevin Baptiste, Philippe Wauthy, Xavier BOL (xbo), sofiagvaladze, Florian Damhaut, MerlinGuillaume, Dossogne Bertrand, niyasraphy, Thomas Lefebvre (thle), Louis Wicket (wil), Mahamadasif Ansari, Levi Siuzdak (sile), Maruan Aguerdouh (magm), Dylan Kiss (dyki), FrancoisGe, Michael (mcm), Chong Wang (cwg), Hugo Carlier (Huca), Xavier Bol (xbo), Mattis Megevand (mmeg), Mattis Megevand, dasz, bary, Maxime de Neuville, reka-odoo, jugj-odoo, Abderraouf Ghrissi (abgh), Louis (wil), aamo-odoo, Rob Coekaerts, luve-odoo, Maeva De Keyser (MDEK), romc-odoo, kinhosz, sbel-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (8)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> domain=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    compute='_compute_hours_per_day' digits=(2, 2) help='Average hours per day a resource is supposed to work with this calendar.' store=True args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' string='Timezone offset'
Public methods (7)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (15)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('lunch', 'Break'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • duration_days Float
    compute='_compute_duration_days' readonly=False store=True string='Duration (days)'
  • duration_hours Float
    compute='_compute_duration_hours' string='Duration (hours)'
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Second'), ('0', 'First')], 'Week Number'
Public methods (1)
  • get_week_type(self, date)
    @api.model

New fields (7)
  • calendar_id Many2one → resource.calendar
    check_company=True compute='_compute_calendar_id' domain="[('company_id', 'in', [company_id, False])]" index=True readonly=False store=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=True store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    compute='_compute_date_to' readonly=False required=True store=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (3)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • default_get(self, fields_list)
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True precompute=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> domain="[('company_id', '=', company_id)]" string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (4)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Denis Ledoux, Christophe Simonis, Barad Mahendra, Yannick Tivisse, David Tran, Victor Feyens, Adrien Dieudonné, Julien Mougenot, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, William Braeckman, Philippe Wauthy, Xavier BOL (xbo), sofiagvaladze, Florian Damhaut, MerlinGuillaume, Audric Onockx (auon), Florian Charlier, Thibault Libioulle, Laurent Stukkens (LTU), Dossogne Bertrand, Vincent Larcin, Thomas Lefebvre (thle), Levi Siuzdak (sile), Maruan Aguerdouh (magm), Michael (mcm), Chong Wang (cwg), bary, Maxime de Neuville, Abderraouf Ghrissi (abgh), Rob Coekaerts
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (8)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (1)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (11)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    default=HOURS_PER_DAY help='Average hours per day a resource is supposed to work with this calendar.' args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (7)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (13)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Second'), ('0', 'First')], 'Week Number'
Public methods (1)
  • get_week_type(self, date)
    @api.model

New fields (7)
  • calendar_id Many2one → resource.calendar
    check_company=True compute='_compute_calendar_id' domain="[('company_id', 'in', [company_id, False])]" index=True readonly=False store=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=True store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (3)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • default_get(self, fields_list)
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> domain="[('company_id', '=', company_id)]" required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (4)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, values)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Christophe Simonis, Yannick Tivisse, Xavier-Do, Victor Feyens, alt-odoo, Julien Mougenot, William Braeckman, Kevin Baptiste, Philippe Wauthy, Xavier BOL (xbo), sofiagvaladze, MerlinGuillaume, Audric Onockx (auon), Vincent Larcin, Thomas Lefebvre (thle), Levi Siuzdak (sile), Maruan Aguerdouh (magm), Chong Wang (cwg), paso-odoo, Dawn Hwang, Noe Antoine, bary, Maxime de Neuville
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, values)
    @api.model

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (1)
  • write(self, vals)

New fields (11)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    default=HOURS_PER_DAY help='Average hours per day a resource is supposed to work with this calendar.' args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • tz_offset Char
    compute='_compute_tz_offset' invisible=True string='Timezone offset'
Public methods (7)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (13)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Second'), ('0', 'First')], 'Week Number'
Public methods (1)
  • get_week_type(self, date)
    @api.model

New fields (7)
  • calendar_id Many2one → resource.calendar
    check_company=True compute='_compute_calendar_id' domain="[('company_id', 'in', [company_id, False])]" index=True readonly=False store=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    compute='_compute_company_id' default=<expr> readonly=True store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (3)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • default_get(self, fields_list)
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, values)
    @api.model
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> domain="[('company_id', '=', company_id)]" help='Define the schedule of resource' required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Christophe Simonis, Xavier Morel, GitHub, Barad Mahendra, Yannick Tivisse, Jorge Pinna Puissant, Xavier-Do, Victor Feyens, alt-odoo, Lucas Lefèvre, Swapnesh Shah, Kevin Baptiste, Philippe Wauthy, MerlinGuillaume, Audric Onockx (auon), Thomas Lefebvre (thle)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
assets_backend resource assets ir.ui.view qweb Inherits web.assets_backend
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, values)
    @api.model

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (0)

No public methods.

New fields (10)
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the Working Time without removing it.' args: 'Active'
  • attendance_ids One2many → resource.calendar.attendance
    compute='_compute_attendance_ids' copy=True readonly=False store=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    compute='_compute_global_leave_ids' copy=True domain=[('resource_id', '=', False)] readonly=False store=True args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    default=HOURS_PER_DAY help='Average hours per day a resource is supposed to work with this calendar.' args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
Public methods (7)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (13)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Odd week'), ('0', 'Even week')], 'Week Even/Odd'
Public methods (0)

No public methods.

New fields (7)
  • calendar_id Many2one → resource.calendar
    index=True args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    readonly=True related='calendar_id.company_id' store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' index=True args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, values)
    @api.model
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> help='Define the schedule of resource' required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Resource Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Mohammed Shekha, GitHub, Yannick Tivisse, Jigar Patel, jem-odoo, Jorge Pinna Puissant, Adrian Torres, Xavier-Do, William Henrotin, Sébastien Theys, alt-odoo, Lucas Lefèvre, Geoffroy Larue
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
assets_backend resource assets ir.ui.view qweb Inherits web.assets_backend
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, values)
    @api.model

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (0)

No public methods.

New fields (9)
  • attendance_ids One2many → resource.calendar.attendance
    copy=True args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    copy=True domain=[('resource_id', '=', False)] args: 'resource.calendar.leaves', 'calendar_id', 'Global Time Off'
  • hours_per_day Float
    default=HOURS_PER_DAY help='Average hours per day a resource is supposed to work with this calendar.' args: 'Average Hour per Day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Time Off'
  • name Char
    required=True
  • two_weeks_calendar Boolean
    string='Calendar in 2 weeks mode'
  • two_weeks_explanation Char
    compute='_compute_two_weeks_explanation' args: 'Explanation'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
Public methods (7)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields)
    @api.model
  • get_work_duration_data(self, from_datetime, to_datetime, compute_leaves=True, domain=None)
    Get the working duration (in days and hours) for a given period, only based on the current calendar. This method does not use resource to compute it. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours
  • switch_calendar_type(self)

New fields (13)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • display_type Selection
    default=False help='Technical field for UX purpose.' args: [('line_section', 'Section')]
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
  • resource_id Many2one → resource.resource
    args: 'resource.resource', 'Resource'
  • sequence Integer
    default=10 help='Gives the sequence of this line when displaying the resource calendar.'
  • two_weeks_calendar Boolean
    related='calendar_id.two_weeks_calendar' args: 'Calendar in 2 weeks mode'
  • week_type Selection
    default=False args: [('1', 'Odd week'), ('0', 'Even week')], 'Week Even/Odd'
Public methods (0)

No public methods.

New fields (7)
  • calendar_id Many2one → resource.calendar
    args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    readonly=True related='calendar_id.company_id' store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic time off for the company. If a resource is set, the time off is only for this resource' args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a time off or as work time (eg: formation)' args: [('leave', 'Time Off'), ('other', 'Other')]
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, values)
    @api.model
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' tracking=True args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> help='Define the schedule of resource' required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Resource Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, qdp-odoo, Géry Debongnie, GitHub, Yannick Tivisse, Alexandre Kühn, Pierre Masereel, jem-odoo, RomainLibert, Nans Lefebvre, Adrian Torres, Xavier-Do, Loan (lse), William Henrotin
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, values)
    @api.model

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    readonly=False related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (0)

No public methods.

New fields (7)
  • attendance_ids One2many → resource.calendar.attendance
    copy=True default=_get_default_attendance_ids args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    domain=[('resource_id', '=', False)] args: 'resource.calendar.leaves', 'calendar_id', 'Global Leaves'
  • hours_per_day Float
    default=HOURS_PER_DAY help='Average hours per day a resource is supposed to work with this calendar.' args: 'Average hour per day'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Leaves'
  • name Char
    required=True
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
Public methods (4)
  • default_get(self, fields)
    @api.model
  • get_work_hours_count(self, start_dt, end_dt, compute_leaves=True, domain=None)
    @api.multi
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Counts the number of work hours between two datetimes.
  • plan_days(self, days, day_dt, compute_leaves=False, domain=None)
    @api.multi
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None)
    @api.multi
    `compute_leaves` controls whether or not this method is taking into account the global leaves. `domain` controls the way leaves are recognized. None means default value ('time_type', '=', 'leave') Return datetime after having planned hours

New fields (8)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • day_period Selection
    default='morning' required=True args: [('morning', 'Morning'), ('afternoon', 'Afternoon')]
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • calendar_id Many2one → resource.calendar
    args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    readonly=True related='calendar_id.company_id' store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic holiday for the company. If a resource is set, the holiday/leave is only for this resource' args: 'resource.resource', 'Resource'
  • time_type Selection
    default='leave' help='Whether this should be computed as a holiday or as work time (eg: formation)' args: [('leave', 'Leave'), ('other', 'Other')]
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (4)
  • company_id Many2one → res.company
    default=<expr> index=True readonly=False related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True readonly=False related='resource_id.calendar_id' store=True args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
  • tz Selection
    help='This field is used in order to define in which timezone the resources will work.' readonly=False related='resource_id.tz' string='Timezone'
Public methods (6)
  • copy_data(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • get_leave_days_data(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the number of leaves expressed as days and as hours.
  • get_work_days_data(self, from_datetime, to_datetime, compute_leaves=True, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a dict {'days': n, 'hours': h} containing the quantity of working time expressed as days and as hours.
  • list_leaves(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours, resource.calendar.leaves) for each leave in the calendar.
  • list_work_time_per_day(self, from_datetime, to_datetime, calendar=None, domain=None)
    By default the resource calendar is used, but it can be changed using the `calendar` argument. `domain` is used in order to recognise the leaves to take, None means default value ('time_type', '=', 'leave') Returns a list of tuples (day, hours) for each day containing at least an attendance.

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' track_visibility='onchange' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> help='Define the schedule of resource' required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Resource Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • tz Selection
    default=<expr> help='This field is used in order to define in which timezone the resources will work.' required=True string='Timezone' args: _tz_get
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Richard Mathot, qdp-odoo, Aaron Bohy, GitHub, Yannick Tivisse, Odoo Online, jem-odoo, RomainLibert
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (7)

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    ondelete='restrict' args: 'resource.calendar', 'Default Working Hours'
  • resource_calendar_ids One2many → resource.calendar
    args: 'resource.calendar', 'company_id', 'Working Hours'
Public methods (1)
  • create(self, values)
    @api.model

New fields (2)
  • resource_calendar_id Many2one → resource.calendar
    related='resource_ids.calendar_id' args: 'resource.calendar', 'Default Working Hours'
  • resource_ids One2many → resource.resource
    args: 'resource.resource', 'user_id', 'Resources'
Public methods (0)

No public methods.

New fields (5)
  • attendance_ids One2many → resource.calendar.attendance
    copy=True default=_get_default_attendance_ids args: 'resource.calendar.attendance', 'calendar_id', 'Working Time'
  • company_id Many2one → res.company
    default=<expr> args: 'res.company', 'Company'
  • global_leave_ids One2many → resource.calendar.leaves
    domain=[('resource_id', '=', False)] args: 'resource.calendar.leaves', 'calendar_id', 'Global Leaves'
  • leave_ids One2many → resource.calendar.leaves
    args: 'resource.calendar.leaves', 'calendar_id', 'Leaves'
  • name Char
    required=True
Public methods (4)
  • default_get(self, fields)
    @api.model
  • get_work_hours_count(self, start_dt, end_dt, resource_id, compute_leaves=True)
    @api.multi
    Count number of work hours between two datetimes. For compute_leaves, resource_id: see _get_day_work_intervals.
  • plan_days(self, days, day_dt, compute_leaves=False, resource_id=None)
    @api.multi
    Returns the datetime of a days scheduling.
  • plan_hours(self, hours, day_dt, compute_leaves=False, resource_id=None)
    @api.multi
    Return datetime after having planned hours

New fields (7)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • hour_from Float
    help='Start and End time of working.\nA specific value of 24:00 is interpreted as 23:59:59.999999.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • calendar_id Many2one → resource.calendar
    args: 'resource.calendar', 'Working Hours'
  • company_id Many2one → res.company
    readonly=True related='calendar_id.company_id' store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True args: 'Start Date'
  • date_to Datetime
    required=True args: 'End Date'
  • name Char
    args: 'Reason'
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic holiday for the company. If a resource is set, the holiday/leave is only for this resource' args: 'resource.resource', 'Resource'
  • tz Selection
    default=<expr> help='Timezone used when encoding the leave. It is used to correctly localize leave hours when computing time intervals.' string='Timezone' args: _tz_get
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (3)
  • company_id Many2one → res.company
    default=<expr> index=True related='resource_id.company_id' store=True args: 'res.company', 'Company'
  • resource_calendar_id Many2one → resource.calendar
    default=<expr> index=True related='resource_id.calendar_id' args: 'resource.calendar', 'Working Hours'
  • resource_id Many2one → resource.resource
    auto_join=True index=True ondelete='restrict' required=True args: 'resource.resource', 'Resource'
Public methods (11)
  • copy_data(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • get_day_work_hours_count(self, day_date, calendar=None)
  • get_end_work_hour(self, day_dt, calendar=None)
  • get_leaves_day_count(self, from_datetime, to_datetime, calendar=None)
    Return the number of leave days for the resource, taking into account attendances. An optional calendar can be given in case multiple calendars can be used on the resource.
  • get_start_work_hour(self, day_dt, calendar=None)
  • get_work_days_count(self, from_datetime, to_datetime, calendar=None)
    Return the number of work days for the resource, taking into account leaves. An optional calendar can be given in case multiple calendars can be used on the resource.
  • get_work_days_data(self, from_datetime, to_datetime, calendar=None)
  • iter_leaves(self, from_datetime, to_datetime, calendar=None)
  • iter_work_hours_count(self, from_datetime, to_datetime, calendar=None)
  • iter_works(self, from_datetime, to_datetime, calendar=None)

New fields (7)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' track_visibility='onchange' args: 'Active'
  • calendar_id Many2one → resource.calendar
    default=<expr> help='Define the schedule of resource' required=True string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Resource Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field is used to calculate the the expected duration of a work order at this work center. For example, if a work order takes one hour and the efficiency factor is 100%, then the expected duration will be one hour. If the efficiency factor is 200%, however the expected duration will be 30 minutes.' required=True args: 'Efficiency Factor'
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (3)
  • copy(self, default=None)
    @api.multi
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Nicolas Martinelli, Julien Legros, qdp-odoo, Yannick Tivisse
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (4)

New fields (5)
  • attendance_ids One2many → resource.calendar.attendance
    copy=True string='Working Time' args: 'resource.calendar.attendance', 'calendar_id'
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • leave_ids One2many → resource.calendar.leaves
    string='Leaves' args: 'resource.calendar.leaves', 'calendar_id'
  • manager Many2one → res.users
    default=<expr> string='Workgroup Manager' args: 'res.users'
  • name Char
    required=True
Public methods (20)
  • get_attendances_for_weekday(self, day_dt)
    @api.multi
    Given a day datetime, return matching attendances
  • get_leave_intervals(self, resource_id=None, start_datetime=None, end_datetime=None)
    @api.multi
    Get the leaves of the calendar. Leaves can be filtered on the resource, the start datetime or the end datetime. :param int resource_id: the id of the resource to take into account when computing the leaves. If not set, only general leaves are computed. If set, generic and specific leaves are computed. :param datetime start_datetime: if provided, do not take into account leaves ending before this date. :param datetime end_datetime: if provided, do not take into account leaves beginning after this date. :return list leaves: list of tuples (start_datetime, end_datetime) of leave intervals
  • get_next_day(self, day_date)
    @api.multi
    Get following date of day_date, based on resource.calendar. If no calendar is provided, just return the next day. :param date day_date: current day as a date :return date: next day of calendar, or just next day
  • get_previous_day(self, day_date)
    @api.multi
    Get previous date of day_date, based on resource.calendar. If no calendar is provided, just return the previous day. :param date day_date: current day as a date :return date: previous day of calendar, or just previous day
  • get_weekdays(self, default_weekdays=None)
    @api.multi
    Return the list of weekdays that contain at least one working interval. If no id is given (no calendar), return default weekdays.
  • get_working_hours(self, start_dt, end_dt, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
  • get_working_hours_of_date(self, start_dt=None, end_dt=None, leaves=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Get the working hours of the day based on calendar. This method uses get_working_intervals_of_day to have the work intervals of the day. It then calculates the number of hours contained in those intervals.
  • get_working_intervals_of_day(self, start_dt=None, end_dt=None, leaves=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Get the working intervals of the day based on calendar. This method handle leaves that come directly from the leaves parameter or can be computed. :param datetime start_dt: datetime object that is the beginning hours for the working intervals computation; any working interval beginning before start_dt will be truncated. If not set, set to end_dt or today() if no end_dt at 00.00.00. :param datetime end_dt: datetime object that is the ending hour for the working intervals computation; any working interval ending after end_dt will be truncated. If not set, set to start_dt() at 23.59.59. :param list leaves: a list of tuples(start_datetime, end_datetime) that represent leaves. :param boolean compute_leaves: if set and if leaves is None, compute the leaves based on calendar and resource. If leaves is None and compute_leaves false no leaves are taken into account. :param int resource_id: the id of the resource to take into account when computing the leaves. If not set, only general leaves are computed. If set, generic and specific leaves are computed. :param tuple default_interval: if no id, try to return a default working day using default_interval[0] as beginning hour, and default_interval[1] as ending hour. Example: default_interval = (8, 16). Otherwise, a void list of working intervals is returned when id is None. :return list intervals: a list of tuples (start_datetime, end_datetime) of work intervals
  • interval_clean(self, intervals)
    Utility method that sorts and removes overlapping inside datetime intervals. The intervals are sorted based on increasing starting datetime. Overlapping intervals are merged into a single one. :param list intervals: list of intervals; each interval is a tuple (datetime_from, datetime_to) :return list cleaned: list of sorted intervals without overlap
  • interval_get(self, dt_from, hours, resource=False, byday=True)
    @api.multi
    Unifier of interval_get_multi. Used in: mrp_operations/mrp_operations.py, crm/crm_lead.py (res given). :deprecated: Odoo saas-3. Use get_working_hours instead.
  • interval_get_multi(self, date_and_hours_by_cal, resource=False, byday=True)
    @api.model
    Used in mrp_operations/mrp_operations.py (default parameters) and in interval_get() :deprecated: Odoo saas-3. Use schedule_hours instead. Note: Byday was not used. Since saas-3, counts Leave hours instead of all-day leaves.
  • interval_hours_get(self, dt_from, dt_to, resource=False)
    @api.multi
    Unused wrapper. :deprecated: Odoo saas-3. Use get_working_hours instead.
  • interval_min_get(self, dt_from, hours, resource=False)
    @api.multi
    Schedule hours backwards. Used in mrp_operations/mrp_operations.py. :deprecated: Odoo saas-3. Use schedule_hours instead. Note: since saas-3, counts leave hours instead of all-day leaves.
  • interval_remove_leaves(self, interval, leave_intervals)
    @api.model
    Utility method that remove leave intervals from a base interval: - clean the leave intervals, to have an ordered list of not-overlapping intervals - initiate the current interval to be the base interval - for each leave interval: - finishing before the current interval: skip, go to next - beginning after the current interval: skip and get out of the loop because we are outside range (leaves are ordered) - beginning within the current interval: close the current interval and begin a new current interval that begins at the end of the leave interval - ending within the current interval: update the current interval begin to match the leave interval ending :param tuple interval: a tuple (beginning datetime, ending datetime) that is the base interval from which the leave intervals will be removed :param list leave_intervals: a list of tuples (beginning datetime, ending datetime) that are intervals to remove from the base interval :return list intervals: a list of tuples (begin datetime, end datetime) that are the remaining valid intervals
  • interval_schedule_hours(self, intervals, hour, remove_at_end=True)
    Schedule hours in intervals. The last matching interval is truncated to match the specified hours. It is possible to truncate the last interval at its beginning or ending. However this does nothing on the given interval order that should be submitted accordingly. :param list intervals: a list of tuples (beginning datetime, ending datetime) :param int/float hours: number of hours to schedule. It will be converted into a timedelta, but should be submitted as an int or float. :param boolean remove_at_end: remove extra hours at the end of the last matching interval. Otherwise, do it at the beginning. :return list results: a list of intervals. If the number of hours to schedule is greater than the possible scheduling in the intervals, no extra-scheduling is done, and results == intervals.
  • schedule_days(self, days, day_date=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Wrapper on _schedule_days: return the working intervals of a days scheduling.
  • schedule_days_get_date(self, days, day_date=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Wrapper on _schedule_days: return the beginning/ending datetime of a days scheduling.
  • schedule_hours(self, hours, day_dt=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Wrapper on _schedule_hours: return the working intervals of an hours scheduling.
  • schedule_hours_get_date(self, hours, day_dt=None, compute_leaves=False, resource_id=None, default_interval=None)
    @api.multi
    Wrapper on _schedule_hours: return the beginning/ending datetime of an hours scheduling.
  • working_hours_on_day(self, day)
    @api.multi
    Used in hr_payroll/hr_payroll.py :deprecated: Odoo saas-3. Use get_working_hours_of_date instead. Note: since saas-3, take hour/minutes into account, not just the whole day.

New fields (7)
  • calendar_id Many2one → resource.calendar
    ondelete='cascade' required=True string="Resource's Calendar" args: 'resource.calendar'
  • date_from Date
    string='Starting Date'
  • date_to Date
    string='End Date'
  • dayofweek Selection
    default='0' index=True required=True args: [('0', 'Monday'), ('1', 'Tuesday'), ('2', 'Wednesday'), ('3', 'Thursday'), ('4', 'Friday'), ('5', 'Saturday'), ('6', 'Sunday')], 'Day of Week'
  • hour_from Float
    help='Start and End time of working.' index=True required=True string='Work from'
  • hour_to Float
    required=True string='Work to'
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (6)
  • calendar_id Many2one → resource.calendar
    string='Working Time' args: 'resource.calendar'
  • company_id Many2one → res.company
    readonly=True related='calendar_id.company_id' store=True string='Company' args: 'res.company'
  • date_from Datetime
    required=True string='Start Date'
  • date_to Datetime
    required=True string='End Date'
  • name Char
  • resource_id Many2one → resource.resource
    help='If empty, this is a generic holiday for the company. If a resource is set, the holiday/leave is only for this resource' string='Resource' args: 'resource.resource'
Public methods (2)
  • check_dates(self)
    @api.constrains('date_from', 'date_to')
  • onchange_resource(self)
    @api.onchange('resource_id')

New fields (8)
  • active Boolean
    default=True help='If the active field is set to False, it will allow you to hide the resource record without removing it.' track_visibility='onchange'
  • calendar_id Many2one → resource.calendar
    help='Define the schedule of resource' string='Working Time' args: 'resource.calendar'
  • code Char
    copy=False
  • company_id Many2one → res.company
    default=<expr> string='Company' args: 'res.company'
  • name Char
    required=True
  • resource_type Selection
    default='user' required=True string='Resource Type' args: [('user', 'Human'), ('material', 'Material')]
  • time_efficiency Float
    default=100 help='This field depict the efficiency of the resource to complete tasks. e.g resource put alone on a phase of 5 days with 5 tasks assigned to him, will show a load of 100% for this phase by default, but if we put a efficiency of 200%, then his load will only be 50%.' required=True string='Efficiency Factor'
  • user_id Many2one → res.users
    help='Related user name for the resource to manage its access.' string='User' args: 'res.users'
Public methods (1)
  • copy(self, default=None)
    @api.multi
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, Richard Mathot, Aaron Bohy, Yannick Tivisse
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden/Dependency
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, Christophe Simonis, Xavier Morel, Goffin Simon, Richard Mathot, Géry Debongnie, Holger Brunn, Aaron Bohy, Richard Mathot (OpenERP), ged-odoo, sgo@tinyerp.com, Darshan Kalola (OpenERP), Darshan Kalola, Rakesh Sindhav (OpenERP), Olivier Colson
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:38
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/7.0/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden/Dependency
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Twinkle Christian (OpenERP), Cecile Tonglet, Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Antonin Bourguignon, Martin Trigaux, Ajay Chauhan (OpenERP), Purnendu Singh (OpenERP), Fabien Pinckaers, Bharat Devnani (OpenERP), Olivier Dony, Rajesh Prajapati (OpenERP), Vo Minh Thu, Hardik, pso (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Sanjay Gohel (Open ERP), Goffin Simon, Chris Biersbach, Ravish (Open ERP), Stuart Longland
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:43:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - process
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled (a developer on a task or a
work center on manufacturing orders). This module manages a resource calendar
associated to every resource. It also manages the leaves of every resource.
    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (0)

No models found for this module.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/6.1/resource
VERSION
VERSION 1.1
CATEGORY
CATEGORYHidden/Dependency
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP SA
MAINTAINERS
MAINTAINERSOpenERP SA
COMMITTERS
COMMITTERSRaphael Collet, Stephane Wirtel, Numerigraphe - Lionel Sausin, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, vro, niv-openerp, Xavier ALT, Ujjvala Collins (OpenERP), Xavier Morel, Chris Biersbach, Serpent Consulting Services, Carlos Vásquez, Els Van Vossel, Israel Fermin Montilla, Hardik Ansodariy (OpenERP), aag (OpenERP), Tejas (OpenERP)
WEBSITE
WEBSITEhttp://www.openerp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:41:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - process
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Module for resource management.
===============================

A resource represent something that can be scheduled
(a developer on a task or a work center on manufacturing orders).
This module manages a resource calendar associated to every resource.
It also manages the leaves of every resource.

    

Code Analysis

Views touched (12)
XML IDNameModelTypeStatus
resource_calendar_form resource.calendar.form resource.calendar form New
resource_calendar_leave_form resource.calendar.leaves.form resource.calendar.leaves form New
resource_calendar_leave_tree resource.calendar.leaves.tree resource.calendar.leaves tree New
resource_resource_form resource.resource.form resource.resource form New
resource_resource_tree resource.resource.tree resource.resource tree New
view_resource_calendar resource.calendar.leaves.calendar resource.calendar.leaves calendar New
view_resource_calendar_attendance_form resource.calendar.attendance.form resource.calendar.attendance form New
view_resource_calendar_attendance_tree resource.calendar.attendance.tree resource.calendar.attendance tree New
view_resource_calendar_leaves_search resource.calendar.leaves.search resource.calendar.leaves search New
view_resource_calendar_search resource.calendar.search resource.calendar search New
view_resource_calendar_tree resource.calendar.tree resource.calendar tree New
view_resource_resource_search resource.resource.search resource.resource search New
Models touched (0)

No models found for this module.