Sell resource bookings

sale_resource_booking
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/18.0/sale_resource_booking
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Anusha
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of sale and resource bookings to
support creating pending resource bookings automatically when confirming
a sale order and to allow you to generate those sale orders easily from
a resource booking type.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_view_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_view_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' tracking=True args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    domain="[('resource_booking_type_id', '=', type_id)]" ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids Many2many → resource.booking
    default=_default_resource_booking_ids string='Bookings' args: 'resource.booking', 'sale_order_booking_confirm_rel', 'sale_order_booking_confirm_id', 'booking_id'
Public methods (2)
  • action_invite(self)
    Invite booking requesters without using odoo.tests.Form.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/17.0/sale_resource_booking
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module extends the functionality of sale and resource bookings to
support creating pending resource bookings automatically when confirming
a sale order and to allow you to generate those sale orders easily from
a resource booking type.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_view_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_view_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' tracking=True args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    domain="[('resource_booking_type_id', '=', type_id)]" ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids One2many
    readonly=False related='order_id.order_line.resource_booking_ids'
Public methods (2)
  • action_invite(self)
    Invite booking requesters.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/16.0/sale_resource_booking
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSoca-ci, r.perez
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_view_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_view_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' tracking=True args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    index=True ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    context="{'default_resource_booking_type_id': type_id}" domain="[('resource_booking_type_id', '=', type_id)]" index=True ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids Many2many → resource.booking
    default=_default_resource_booking_ids string='Bookings' args: 'resource.booking', 'sale_order_booking_confirm_resource_booking_rel', 'sale_order_booking_confirm_id', 'resource_booking_id'
Public methods (2)
  • action_invite(self)
    Invite booking requesters.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/15.0/sale_resource_booking
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, angel
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:33
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' tracking=True args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    index=True ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    context="{'default_resource_booking_type_id': type_id}" domain="[('resource_booking_type_id', '=', type_id)]" index=True ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids One2many
    readonly=False related='order_id.order_line.resource_booking_ids'
Public methods (2)
  • action_invite(self)
    Invite booking requesters.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/13.0/sale_resource_booking
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
    - calendar
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
freezegun
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' tracking=True args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    index=True ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    context="{'default_resource_booking_type_id': type_id}" domain="[('resource_booking_type_id', '=', type_id)]" index=True ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids One2many
    readonly=False related='order_id.order_line.resource_booking_ids'
Public methods (2)
  • action_invite(self)
    Invite booking requesters.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/12.0/sale_resource_booking
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYAppointments
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSJairo Llopis, OCA Transbot, oca-travis, Weblate, OCA-git-bot, sergiocorato
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/calendar:
    - resource_booking
OCA/web:
    - web_calendar_slot_duration
    - web_ir_actions_act_multi
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - calendar
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cssselect
freezegun
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
product_template_form_view Display resource booking info in form product.template group Inherits product.product_template_form_view
resource_booking_form Display sale order info in booking form resource.booking group Inherits resource_booking.resource_booking_form
resource_booking_sale_view_form resource.booking.sale.view.form resource.booking.sale form New
resource_booking_type_form Sale order generator from booking type form resource.booking.type header Inherits resource_booking.resource_booking_type_form
sale_order_booking_confirm_view_form sale.order.booking.confirm.view.form sale.order.booking.confirm form New
view_order_form Display resource booking info in form sale.order button Inherits sale.view_order_form
Models touched (7)

New fields (2)
  • resource_booking_type_combination_rel_id Many2one → resource.booking.type.combination.rel
    domain="[('type_id', '=', resource_booking_type_id)]" help='If set, the booking will be created with this resource combination. Otherwise, the combination will be assigned automatically later, when the requester schedules the booking.' index=True ondelete='restrict' string='Resource combination' args: 'resource.booking.type.combination.rel'
  • resource_booking_type_id Many2one → resource.booking.type
    help='If set, one pending booking will be generated when sold.' index=True ondelete='restrict' string='Booking type' args: 'resource.booking.type'
Public methods (0)

No public methods.

New fields (3)
  • sale_order_id Many2one
    help='Sale order that origins this booking.' readonly=True related='sale_order_line_id.order_id'
  • sale_order_line_id Many2one → sale.order.line
    copy=False index=True ondelete='cascade' string='Sale order line' track_visibility='onchange' args: 'sale.order.line'
  • sale_order_state Selection
    help='If there is a related quotation and it is not confirmed, the booking will not be able to become confirmed.' readonly=True related='sale_order_id.state' string='Sale order state'
Public methods (0)

No public methods.

New fields (4)
  • partner_id Many2one → res.partner
    index=True ondelete='cascade' required=True string='Customer' args: 'res.partner'
  • product_id Many2one → product.product
    context="{'default_resource_booking_type_id': type_id}" domain="[('resource_booking_type_id', '=', type_id)]" index=True ondelete='cascade' required=True args: 'product.product', 'Product'
  • product_uom_qty Integer
    default=1 required=True string='Quantity'
  • type_id Many2one → resource.booking.type
    index=True ondelete='cascade' required=True string='Booking type' args: 'resource.booking.type'
Public methods (1)
  • action_generate(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • action_sale_order_wizard(self)
    Help user creating a sale order for this RBT.

New fields (2)
  • resource_booking_count Integer
    compute='_compute_resource_bookings' args: 'Resource bookings count'
  • resource_booking_ids Many2many → resource.booking
    compute='_compute_resource_bookings' args: 'resource.booking'
Public methods (5)
  • action_bookings_resync(self)
    User-forced bookings resync.
  • action_confirm(self)
    Ask to fill booking values, if necessary.
  • action_open_resource_bookings(self)
    Open related bookings.
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • order_id Many2one → sale.order
    index=True ondelete='cascade' readonly=True required=True string='Order' args: 'sale.order'
  • resource_booking_ids One2many
    readonly=False related='order_id.order_line.resource_booking_ids'
Public methods (2)
  • action_invite(self)
    Invite booking requesters.
  • action_noop(self)

New fields (1)
  • resource_booking_ids One2many → resource.booking
    copy=False string='Resource bookings' args: 'resource.booking', 'sale_order_line_id'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)