| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/18.0/resource_booking |
| VERSION | |
| VERSION | 1.0.14 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | GitHub, Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, Don Kendall, oca-ci, FernandoRomera, christian-ramos-tecnativa, Pilar Vargas, Dan Kendall |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - html_editor - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module adds a new app to allow you to book resource combinations in given schedules. Example use cases: - Management of consultations in a clinic. - Salesman appointments. - Classroom and projector reservations. - Hotel room booking. Among the things you can do: - Specify the type of booking, which includes a calendar of availability. - Specify which resources can be booked together. All of them must be free to be booked. - Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot. - Partners can do that from their portals. - If a partner has no user, he can still do the same via a tokenized URL. - Backend users can also do that from the backend. - Booking lifecycle with computed states. - Automatic meeting creation and deletion. - Automatic conflict detection. - Deadline to block modifications. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
mail_activity_schedule_view_form |
mail.activity.schedule.inherit.calendar | mail.activity.schedule | xpath | Inherits mail.mail_activity_schedule_view_form |
mail_activity_view_form_popup |
mail.activity.form.inherit.booking | mail.activity | xpath | Inherits mail.mail_activity_view_form_popup |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_view_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination list | resource.booking.combination | list | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_view_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type list | resource.booking.type | list | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_form |
Resource booking form | resource.booking | form | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking list | resource.booking | list | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
view_partner_form |
res.partner | div | Inherits base.view_partner_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create(self, vals_list)
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
booking_id
Many2one → resource.booking
ondelete='cascade'
string='Resource booking'
args: 'resource.booking'
action_open_resource_booking(self)
No new fields.
Public methods (1)action_open_resource_booking(self)
category
Selection
selection_add=[('resource_booking', 'Resource booking')]
No public methods.
resource_booking_count
Integer
compute='_compute_resource_booking_count'
string='Resource booking count'
resource_booking_ids
Many2many → resource.booking
column1='res_partner_id'
column2='resource_booking_id'
comodel_name='resource.booking'
copy=False
relation='res_partner_resource_booking_rel'
string='Bookings'
action_view_resource_booking(self)
active
Boolean
default=True
booking_activity_ids
One2many → mail.activity
string='Booking Activities'
args: 'mail.activity', 'booking_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
store=True
string='Resources combination'
tracking=True
description
Html
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_id'
inverse='_inverse_partner_id'
readonly=False
search='_search_partner_id'
string='Requester'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
help='Who will attend this booking?'
relation='res_partner_resource_booking_rel'
required=True
string='Attendees'
tracking=True
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
videocall_location
Char
compute='_compute_videocall_location'
readonly=False
store=True
string='Meeting URL'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
help='Bookings available for this type'
inverse_name='type_id'
string='Bookings'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assigned manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
slot_duration
Float
default=0.5
help='Interval offered to start each resource booking.'
required=True
videocall_location
Char
string='Meeting URL'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
index=True
ondelete='cascade'
required=True
string='Combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)is_available(self, start_dt, end_dt, domain=None, tz=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/17.0/resource_booking |
| VERSION | |
| VERSION | 1.1.4 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Carlos Lopez, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - onboarding - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module adds a new app to allow you to book resource combinations in given schedules. Example use cases: - Management of consultations in a clinic. - Salesman appointments. - Classroom and projector reservations. - Hotel room booking. Among the things you can do: - Specify the type of booking, which includes a calendar of availability. - Specify which resources can be booked together. All of them must be free to be booked. - Place pending bookings, effectively giving permissions to someone to see the availability calendar and choose one slot. - Partners can do that from their portals. - If a partner has no user, he can still do the same via a tokenized URL. - Backend users can also do that from the backend. - Booking lifecycle with computed states. - Automatic meeting creation and deletion. - Automatic conflict detection. - Deadline to block modifications. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
mail_activity_schedule_view_form |
mail.activity.schedule.inherit.calendar | mail.activity.schedule | xpath | Inherits mail.mail_activity_schedule_view_form |
mail_activity_view_form_popup |
mail.activity.form.inherit.booking | mail.activity | xpath | Inherits mail.mail_activity_view_form_popup |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_view_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_view_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_form |
Resource booking form | resource.booking | form | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
view_partner_form |
res.partner | div | Inherits base.view_partner_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create(self, vals_list)
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
booking_id
Many2one → resource.booking
ondelete='cascade'
string='Resource booking'
args: 'resource.booking'
action_open_resource_booking(self)
No new fields.
Public methods (1)action_open_resource_booking(self)
category
Selection
selection_add=[('resource_booking', 'Resource booking')]
No public methods.
resource_booking_count
Integer
compute='_compute_resource_booking_count'
string='Resource booking count'
resource_booking_ids
Many2many → resource.booking
column1='res_partner_id'
column2='resource_booking_id'
comodel_name='resource.booking'
copy=False
relation='res_partner_resource_booking_rel'
string='Bookings'
action_view_resource_booking(self)
active
Boolean
default=True
booking_activity_ids
One2many → mail.activity
string='Booking Activities'
args: 'mail.activity', 'booking_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
store=True
string='Resources combination'
tracking=True
description
Html
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_id'
inverse='_inverse_partner_id'
readonly=False
search='_search_partner_id'
string='Requester'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
help='Who will attend this booking?'
relation='res_partner_resource_booking_rel'
required=True
string='Attendees'
tracking=True
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
videocall_location
Char
compute='_compute_videocall_location'
readonly=False
store=True
string='Meeting URL'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
help='Bookings available for this type'
inverse_name='type_id'
string='Bookings'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assigned manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
slot_duration
Float
default=0.5
help='Interval offered to start each resource booking.'
required=True
videocall_location
Char
string='Meeting URL'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
index=True
ondelete='cascade'
required=True
string='Combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)is_available(self, start_dt, end_dt, domain=None, tz=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/16.0/resource_booking |
| VERSION | |
| VERSION | 1.5.3 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Carolina Fernandez, Adasat Torres de León, r.perez |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
mail_activity_view_form_popup |
mail.activity.form.inherit.booking | mail.activity | xpath | Inherits mail.mail_activity_view_form_popup |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_view_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_view_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_form |
Resource booking form | resource.booking | form | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
view_partner_form |
res.partner | div | Inherits base.view_partner_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create(self, vals_list)
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
booking_id
Many2one → resource.booking
ondelete='cascade'
string='Resource booking'
args: 'resource.booking'
action_open_resource_booking(self)
category
Selection
selection_add=[('resource_booking', 'Resource booking')]
No public methods.
resource_booking_count
Integer
compute='_compute_resource_booking_count'
string='Resource booking count'
resource_booking_ids
Many2many → resource.booking
column1='res_partner_id'
column2='resource_booking_id'
comodel_name='resource.booking'
copy=False
relation='res_partner_resource_booking_rel'
string='Bookings'
action_view_resource_booking(self)
active
Boolean
default=True
booking_activity_ids
One2many → mail.activity
string='Booking Activities'
args: 'mail.activity', 'booking_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
states={'scheduled': [('required', True)], 'confirmed': [('required', True)]}
store=True
string='Resources combination'
tracking=True
description
Html
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_id'
inverse='_inverse_partner_id'
readonly=False
search='_search_partner_id'
string='Requester'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
help='Who will attend this booking?'
relation='res_partner_resource_booking_rel'
required=True
string='Attendees'
tracking=True
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
videocall_location
Char
compute='_compute_videocall_location'
readonly=False
store=True
string='Meeting URL'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
name_get(self)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
help='Bookings available for this type'
inverse_name='type_id'
string='Bookings'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assigned manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
slot_duration
Float
default=0.5
help='Interval offered to start each resource booking.'
required=True
videocall_location
Char
string='Meeting URL'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
index=True
ondelete='cascade'
required=True
string='Combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)is_available(self, start_dt, end_dt, domain=None, tz=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/15.0/resource_booking |
| VERSION | |
| VERSION | 2.1.1 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, sergiocorato, David, Carmen Bianca BAKKER, oca-ci, Carolina Fernandez |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
mail_activity_view_form_popup |
mail.activity.form.inherit.booking | mail.activity | xpath | Inherits mail.mail_activity_view_form_popup |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_form |
Resource booking form | resource.booking | form | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create(self, vals_list)
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
booking_id
Many2one → resource.booking
ondelete='cascade'
string='Resource booking'
args: 'resource.booking'
action_open_resource_booking(self)
category
Selection
selection_add=[('resource_booking', 'Resource booking')]
No public methods.
active
Boolean
default=True
booking_activity_ids
One2many → mail.activity
string='Activities'
args: 'mail.activity', 'booking_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
states={'scheduled': [('required', True)], 'confirmed': [('required', True)]}
store=True
string='Resources combination'
tracking=True
description
Html
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_id'
inverse='_inverse_partner_id'
readonly=False
search='_search_partner_id'
string='Requester'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
help='Who will attend this booking?'
required=True
string='Attendees'
tracking=True
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
videocall_location
Char
compute='_compute_videocall_location'
readonly=False
store=True
string='Meeting URL'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
name_get(self)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
help='Bookings available for this type'
inverse_name='type_id'
string='Bookings'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assiged manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Interval offered to start each resource booking. Also used as booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
videocall_location
Char
string='Meeting URL'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
index=True
ondelete='cascade'
required=True
string='Combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)is_available(self, start_dt, end_dt, domain=None, tz=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/14.0/resource_booking |
| VERSION | |
| VERSION | 1.3.4 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, Carmen Bianca BAKKER, oca-ci, hugues de keyzer |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
assets_frontend |
assets_frontend | ir.ui.view | qweb | Inherits web.assets_frontend |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_form |
Resource booking form | resource.booking | form | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create(self, vals_list)
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
active
Boolean
default=True
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
states={'scheduled': [('required', True)], 'confirmed': [('required', True)]}
store=True
string='Resources combination'
tracking=True
description
Html
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
help='Who requested this booking?'
index=True
ondelete='cascade'
required=True
string='Requester'
tracking=True
args: 'res.partner'
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
args: 'res.users'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
name_get(self)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
index=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
help='Bookings available for this type'
string='Bookings'
args: 'resource.booking', 'type_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assiged manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Interval offered to start each resource booking. Also used as booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
index=True
ondelete='cascade'
required=True
string='Combination'
args: 'resource.booking.combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
index=True
ondelete='cascade'
required=True
string='Type'
args: 'resource.booking.type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)is_available(self, start_dt, end_dt, domain=None, tz=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/13.0/resource_booking |
| VERSION | |
| VERSION | 2.6.5 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Jairo Llopis, david, OCA Transbot, oca-travis, OCA-git-bot, jguenat |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:18 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - portal - web_editor - http_routing - auth_signup - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect freezegun |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
assets_frontend |
assets_frontend | ir.ui.view | qweb | Inherits web.assets_frontend |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_form |
Resource booking form | resource.booking | form | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
create_attendees(self)
get_interval(self, interval, tz=None)
unlink(self, can_be_deleted=True)
write(self, vals)
active
Boolean
default=True
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_auto_assign
Boolean
default=True
help='When checked, resource combinations will be (un)assigned automatically based on their availability during the booking dates.'
string='Auto assigned'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
compute='_compute_combination_id'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
readonly=False
states={'scheduled': [('required', True)], 'confirmed': [('required', True)]}
store=True
string='Resources combination'
tracking=True
duration
Float
compute='_compute_duration'
help='Amount of time that the resources will be booked and unavailable for others.'
readonly=False
store=True
track_sequence=220
tracking=True
is_modifiable
Boolean
compute='_compute_is_modifiable'
is_overdue
Boolean
compute='_compute_is_overdue'
location
Char
compute='_compute_location'
readonly=False
store=True
meeting_id
Many2one → calendar.event
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
help='Leave empty to autogenerate a booking name.'
index=True
partner_id
Many2one → res.partner
help='Who requested this booking?'
index=True
ondelete='cascade'
required=True
string='Requester'
tracking=True
args: 'res.partner'
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_start'
copy=False
index=True
readonly=False
store=True
track_sequence=200
tracking=True
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
tracking=True
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_stop'
copy=False
index=True
store=True
track_sequence=210
tracking=True
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
tracking=True
user_id
Many2one → res.users
compute='_compute_user_id'
default=<expr>
help='Who organized this booking? Usually whoever created the record. It will appear as the calendar event organizer, when scheduled, and calendar notifications will be sent in his/her name.'
index=True
readonly=False
store=True
string='Organizer'
tracking=True
args: 'res.users'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
create(self, vals_list)
name_get(self)
unlink(self)
write(self, vals)
active
Boolean
default=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
index=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
help='Bookings available for this type'
string='Bookings'
args: 'resource.booking', 'type_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assiged manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
copy=True
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help='Interval offered to start each resource booking. Also used as booking default duration.'
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
index=True
ondelete='cascade'
required=True
string='Combination'
args: 'resource.booking.combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
index=True
ondelete='cascade'
required=True
string='Type'
args: 'resource.booking.type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/calendar |
| GIT | |
| GIT | https://github.com/OCA/calendar.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/calendar/tree/12.0/resource_booking |
| VERSION | |
| VERSION | 1.5.1 |
| CATEGORY | |
| CATEGORY | Appointments |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Jairo Llopis, OCA Transbot, João Marques, oca-travis, Weblate, OCA-git-bot, Yajo, jguenat |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/calendar |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:23 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_calendar_slot_duration odoo/odoo: - calendar - base - base_setup - web - bus - web_tour - portal - http_routing - resource |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES |
cssselect freezegun |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_availability_lost |
Alert Resource Booking Availability was Lost | ir.ui.view | qweb | New |
assets_frontend |
assets_frontend | ir.ui.view | qweb | Inherits web.assets_frontend |
message_combination_assigned |
message_combination_assigned | ir.ui.view | qweb | New |
portal_breadcrumbs |
portal_breadcrumbs | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_bookings |
My Bookings | ir.ui.view | qweb | New |
portal_my_home |
portal_my_home | ir.ui.view | qweb | Inherits portal.portal_my_home |
resource_booking_combination_form |
Resource booking combination form | resource.booking.combination | form | New |
resource_booking_combination_view_search |
resource.booking.combination.view.search | resource.booking.combination | search | New |
resource_booking_combination_view_tree |
Resource booking combination tree | resource.booking.combination | tree | New |
resource_booking_form |
Resource booking form | resource.booking | form | New |
resource_booking_portal_form |
Booking portal form | ir.ui.view | qweb | New |
resource_booking_portal_header |
Resource Booking Header | ir.ui.view | qweb | New |
resource_booking_portal_schedule |
Resource Booking Scheduling | ir.ui.view | qweb | New |
resource_booking_type_form |
Resource booking type form | resource.booking.type | form | New |
resource_booking_type_view_search |
resource.booking.type.view.search | resource.booking.type | search | New |
resource_booking_type_view_tree |
Resource booking type tree | resource.booking.type | tree | New |
resource_booking_view_calendar |
Resource booking calendar | resource.booking | calendar | New |
resource_booking_view_search |
resource.booking.view.search | resource.booking | search | New |
resource_booking_view_tree |
Resource booking tree | resource.booking | tree | New |
scheduling_calendar |
Resource Booking Calendar | ir.ui.view | qweb | New |
view_calendar_event_form |
calendar.event.view.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_form |
resource_booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='meeting_id'
string='Resource booking'
get_interval(self, interval, tz=None)
unlink(self)
write(self, vals)
active
Boolean
default=True
index=True
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
combination_id
Many2one → resource.booking.combination
comodel_name='resource.booking.combination'
copy=False
domain="[('type_rel_ids.type_id', 'in', [type_id])]"
index=True
states={'scheduled': [('required', True)], 'confirmed': [('required', True)]}
string='Resources combination'
track_visibility='onchange'
involves_me
Boolean
compute='_compute_involves_me'
search='_search_involves_me'
is_modifiable
Boolean
compute='_compute_overdue'
is_overdue
Boolean
compute='_compute_overdue'
meeting_id
Many2one → calendar.event
auto_join=True
comodel_name='calendar.event'
context={'default_res_id': False, 'default_res_model': False}
copy=False
help='Meeting confirmed for this booking.'
index=True
ondelete='set null'
string='Meeting'
name
Char
compute='_compute_name'
partner_id
Many2one → res.partner
help='Who requested this booking?'
index=True
ondelete='cascade'
required=True
string='Requester'
track_visibility='onchange'
args: 'res.partner'
requester_advice
Text
readonly=True
related='type_id.requester_advice'
start
Datetime
compute='_compute_dates'
copy=False
index=True
inverse='_inverse_dates'
store=True
track_sequence=200
track_visibility='onchange'
state
Selection
compute='_compute_state'
default='pending'
help='Pending: No meeting scheduled.\nScheduled: The requester has not confirmed attendance yet.\nConfirmed: Meeting scheduled, and requester attendance confirmed.\nCanceled: Meeting removed, booking archived.'
index=True
store=True
track_visibility='onchange'
args: [('pending', 'Pending'), ('scheduled', 'Scheduled'), ('confirmed', 'Confirmed'), ('canceled', 'Canceled')]
stop
Datetime
compute='_compute_dates'
copy=False
index=True
inverse='_inverse_dates'
store=True
track_sequence=210
track_visibility='onchange'
type_id
Many2one → resource.booking.type
comodel_name='resource.booking.type'
index=True
ondelete='cascade'
required=True
string='Type'
track_visibility='onchange'
action_cancel(self)
action_confirm(self)
action_open_portal(self)
action_schedule(self)
action_unschedule(self)
message_get_suggested_recipients(self)
active
Boolean
default=True
index=True
booking_count
Integer
compute='_compute_booking_count'
string='Booking count'
booking_ids
One2many → resource.booking
comodel_name='resource.booking'
inverse_name='combination_id'
string='Bookings'
forced_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
help="Force a specific calendar, instead of combining the resources'."
index=True
string='Forced calendar'
name
Char
compute='_compute_name'
store=True
resource_ids
Many2many → resource.resource
comodel_name='resource.resource'
help='Resources that must be free to be booked together.'
required=True
string='Resources'
type_count
Integer
compute='_compute_type_count'
string='Booking types'
type_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource booking types where this combination is available.'
inverse_name='combination_id'
string='Resource booking types'
action_open_bookings(self)
action_open_resource_booking_types(self)
active
Boolean
default=True
index=True
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Meetings will be created with these reminders by default.'
string='Default reminders'
booking_count
Integer
compute='_compute_booking_count'
booking_ids
One2many → resource.booking
help='Bookings available for this type'
string='Bookings'
args: 'resource.booking', 'type_id'
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
help='Meetings will be created with these tags by default.'
string='Default tags'
combination_assignment
Selection
default='random'
help='Choose how to auto-assign resource combinations. It has no effect if assiged manually.'
required=True
args: [('sorted', 'Sorted: pick the first one that is free'), ('random', 'Randomly: order is not important')]
combination_rel_ids
One2many → resource.booking.type.combination.rel
comodel_name='resource.booking.type.combination.rel'
help='Resource combinations available for this type of bookings.'
inverse_name='type_id'
string='Available resource combinations'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
help='Company where this booking type is available.'
index=True
readonly=False
store=True
string='Company'
duration
Float
default=0.5
help="Establish each interval's duration."
required=True
location
Char
modifications_deadline
Float
default=24
help='When this deadline has been exceeded, if a booking was not yet confirmed, it will be canceled automatically. Also, only booking managers will be able to unschedule or reschedule them. The value is expressed in hours.'
required=True
name
Char
index=True
required=True
translate=True
requester_advice
Text
help='Text that will appear by default in portal invitation emails and in calendar views for scheduling.'
translate=True
resource_calendar_id
Many2one → resource.calendar
comodel_name='resource.calendar'
default=<expr>
help='Restrict bookings to this schedule.'
index=True
ondelete='restrict'
required=True
string='Availability Calendar'
action_open_bookings(self)
combination_id
Many2one → resource.booking.combination
index=True
ondelete='cascade'
required=True
string='Combination'
args: 'resource.booking.combination'
sequence
Integer
default=100
index=True
required=True
type_id
Many2one → resource.booking.type
index=True
ondelete='cascade'
required=True
string='Type'
args: 'resource.booking.type'
type_name
Char
related='type_id.name'
No public methods.
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/calendar |
| PULL REQUEST | |
| PULL REQUEST | [19.0][MIG] resource_booking: Migration to 19.0 (#217) |