TIP: You can type at any time to perform a new search.
PMS - Sale
pms_sale · OCA/pms
- Repository
- OCA/pms · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Generic Modules/Property Management System
- Folder size
- 0.98 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/pms
- Last tracking update
- 2026-08-07 09:06:26
- Authors
- Odoo Community Association (OCA), Gray Matter Logic
- Maintainers
- Odoo Community Association (OCA), Gray Matter Logic
- Committers
- Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- pms_website_sale
- Description
This module integrates the Sales application with the Property Management System, enabling property reservations through sale orders. It includes: - **Reservation management**: create and manage property reservations linked to sale orders. - **Guest management**: track guest details per reservation. - **Stage management**: configurable workflow stages for reservations. - **Mail notifications**: automated email templates for confirmations and reminders. - **Reservation configurator wizard**: guided wizard for property, dates, guests, and pricing. - **Timeline view**: visualise all reservations on a calendar timeline. - **Payment link integration**: send payment links directly from reservations.
Code Analysis ⓘ
Views touched (22)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
pms_configurator_view_form |
pms.configurator.view.form | pms.configurator | form | New |
pms_mail_view_search |
pms.mail.search | pms.mail | search | New |
pms_property_reservation_view_form |
pms.property.reservation.view.from | pms.property.reservation | form | New |
pms_property_reservation_view_tree |
pms.property.reservation.view.tree | pms.property.reservation | list | New |
pms_reservation_guest_view_form |
pms.reservation.guest.view.form | pms.reservation.guest | form | New |
pms_reservation_guest_view_tree |
pms.reservation.guest.view.tree | pms.reservation.guest | list | New |
product_template_form_view_inherit_pms_sale |
product.template.event.form.inherit.pms.sale | product.template | form | Inherits product.product_template_form_view |
product_template_search_view_inherit_pms_sale |
product.template.search | product.template | search | Inherits product.product_template_search_view |
sale_order_view_form_inherit_pms_sale |
sale.order.form.inherit.pms.sale | sale.order | form | Inherits sale.view_order_form |
view_move_form_inherit_pms_sale |
pms.property.invoice.form.pms | account.move | form | Inherits account.view_move_form |
view_pms_mail_form |
pms.mail.form | pms.mail | form | New |
view_pms_mail_tree |
pms.mail.tree | pms.mail | list | New |
view_pms_property_form_inherit_pms_sale |
pms.property.form.inherit.pms.sale | pms.property | form | Inherits pms_base.view_pms_property_form |
view_pms_team_kanban_inherit_pms_sale |
pms.team.kanban | pms.team | kanban | Inherits pms_base.view_pms_team_kanban |
view_reservation_calendar |
pms.reservation.calendar | pms.reservation | calendar | New |
view_reservation_form |
pms.reservation.form | pms.reservation | form | New |
view_reservation_graph |
pms.reservation.graph | pms.reservation | graph | New |
view_reservation_kanban |
pms.reservation.kanban | pms.reservation | kanban | New |
view_reservation_pivot |
pms.reservation.pivot | pms.reservation | pivot | New |
view_reservation_search |
pms.reservation.search | pms.reservation | search | New |
view_reservation_timeline |
pms.reservation.timeline | pms.reservation | New | |
view_reservation_tree |
pms.reservation.tree | pms.reservation | list | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (16)
New fields (1)
-
reservation_countIntegercompute='_compute_reservation_count' args: 'Reservations Count'
-
action_view_reservation_list(self)
New fields (1)
-
pms_reservation_idMany2one → pms.reservationcopy=Falsereadonly=Truestring='Reservation' args: 'pms.reservation'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (13)
-
currency_idMany2one → res.currencystring='Currency' args: 'res.currency' -
durationIntegercompute='_compute_duration'readonly=Falsestore=True args: 'Nights' -
existing_reservation_idInteger -
guest_idsOne2many → pms.reservation.guest.wizardstring='Guests' args: 'pms.reservation.guest.wizard', 'configurator_id' -
no_of_guestsIntegercompute='_compute_no_of_guests'store=True args: 'Number of Guests' -
priceFloatreadonly=Truerelated='reservation_id.price' -
product_idMany2one → product.productreadonly=Truestring='Product' args: 'product.product' -
property_idMany2one → pms.propertystring='Property' args: 'pms.property' -
reservation_idMany2one → pms.property.reservationstring='Reservation Type' args: 'pms.property.reservation' -
reservation_idsMany2many → pms.reservationargs: 'pms.reservation' -
startDatetimehelp='Start date of the reservation'required=True args: 'From' -
stopDatetimecompute='_compute_stop'help='Stop date of the reservation'readonly=Falserequired=Truestore=True args: 'To' -
timeline_htmlHtmlreadonly=True args: 'Timeline HTML'
-
default_get(self, fields_vals)@api.model -
onchange_dates(self)@api.onchange('start', 'stop') -
onchange_property_id(self)@api.onchange('property_id')
New fields (7)
-
intervalIntegerdefault=1 -
interval_triggerSelectionstring='Trigger' args: [('after_resev', 'After the reservation'), ('before_checkin', 'Before Checkin'), ('after_checkin', 'After Checkin'), ('before_checkout', 'Before Checkout'), ('after_checkout', 'After Checkout')] -
interval_unitMany2one → uom.uomdomain=<expr>string='Unit' args: 'uom.uom' -
nameCharrequired=True -
notification_typeSelectiondefault='Email'string='Send' args: [('email', 'Email')] -
property_idMany2one → pms.propertystring='Property' args: 'pms.property' -
template_idMany2one → mail.templatestring='Email Template' args: 'mail.template'
No public methods.
New fields (8)
-
checkinFloat -
checkoutFloat -
listing_typeSelectionselection=[('private_room', 'Private Room'), ('entire_home', 'Entire Home'), ('shared_room', 'Shared Room')] -
max_nightsIntegerargs: 'Maximum Nights' -
min_nightsIntegerargs: 'Minimum Nights' -
no_of_guestsIntegerargs: 'Number of Guests' -
pms_mail_idsOne2many → pms.mailstring='Communication' args: 'pms.mail', 'property_id' -
reservation_idsOne2many → pms.property.reservationstring='Reservation Types' args: 'pms.property.reservation', 'property_id'
-
get_property_information(self, vals, domain=False)@api.model
New fields (5)
-
currency_idMany2one → res.currencydefault=<expr>string='Currency' args: 'res.currency' -
nameCharrequired=True -
priceFloatcompute='_compute_price'digits='Product Price'readonly=Falsestore=True -
product_idMany2one → product.productdefault=<expr>domain=[('reservation_ok', '=', True)]required=Truestring='Product' args: 'product.product' -
property_idMany2one → pms.propertystring='Property' args: 'pms.property'
No public methods.
New fields (23)
-
adultsInteger -
childrenInteger -
colorIntegerdefault=0 args: 'Color Index' -
company_idMany2one → res.companydefault=<expr>string='Company' args: 'res.company' -
dateDatetimedefault=<expr> -
durationIntegercompute='_compute_duration'readonly=Falsestore=True args: 'Nights' -
guest_idsOne2many → pms.reservation.gueststring='Guests' args: 'pms.reservation.guest', 'reservation_id' -
invoice_countIntegercompute='_compute_invoice_count'copy=Falsereadonly=True -
invoice_statusSelectionindex=Truerelated='sale_order_id.invoice_status'store=True -
nameCharcopy=Falsedefault=<expr>help='Reservation Number'index=Truereadonly=Truerequired=Truestring='Reservation #' -
no_of_guestsIntegercompute='_compute_no_of_guests'store=True args: 'Number of Guests' -
partner_idMany2one → res.partnerstring='Booked by' args: 'res.partner' -
prioritySelectiondefault=<expr>index=True args: AVAILABLE_PRIORITIES -
property_idMany2one → pms.propertystring='Property' args: 'pms.property' -
reservation_type_idMany2one → pms.property.reservationstring='Reservation Type' args: 'pms.property.reservation' -
sale_order_idMany2one → sale.orderstring='Sales Order' args: 'sale.order' -
sale_order_line_idMany2one → sale.order.linestring='Sales Order Line' args: 'sale.order.line' -
stage_idMany2one → pms.stagedefault=<expr>group_expand='_read_group_stage_ids'index=Truestore=Truestring='Stage'tracking=True args: 'pms.stage' -
startDatetimedefault=fields.Date.todayhelp='Start date of the reservation'required=Truetracking=True args: 'Checkin' -
stopDatetimecompute='_compute_stop'default=fields.Date.todayhelp='Stop date of the reservation'readonly=Falserequired=Truestore=Truetracking=True args: 'Checkout' -
tag_idsMany2many → pms.tagstring='Tags' args: 'pms.tag' -
team_idMany2one → pms.teamrelated='property_id.team_id'store=Truestring='Team' args: 'pms.team' -
user_idMany2one → res.usersdefault=<expr>string='Responsible' args: 'res.users'
-
action_book(self) -
action_cancel(self) -
action_check_in(self) -
action_check_out(self) -
action_confirm(self) -
action_view_invoices(self) -
create(self, vals_list)@api.model_create_multi -
get_selections(self)@api.model -
onchange_property_id(self)@api.onchange('property_id')
New fields (6)
-
emailChar -
nameCharrequired=True -
order_line_idMany2one → sale.order.linestring='Sale Order' args: 'sale.order.line' -
partner_idMany2one → res.partnerstring='Partner' args: 'res.partner' -
phoneChar -
reservation_idMany2one → pms.reservationstring='Reservation' args: 'pms.reservation'
No public methods.
New fields (5)
-
configurator_idMany2one → pms.configuratorstring='Configurator' args: 'pms.configurator' -
emailChar -
nameCharrequired=True -
partner_idMany2one → res.partnerstring='Partner' args: 'res.partner' -
phoneChar
No public methods.
New fields (1)
-
stage_typeSelectionondelete={'reservation': 'cascade'}selection_add=[('reservation', 'Reservation')]
-
get_color_information(self)
New fields (4)
-
no_today_reservationIntegercompute='_compute_no_reservations'string='Today Reservations' -
no_tomorrow_reservationIntegercompute='_compute_no_reservations'string='Tomorrow Reservations' -
no_week_reservationIntegercompute='_compute_no_reservations'string='This Week Reservations' -
total_reservationIntegercompute='_compute_no_reservations'string='Total Reservations'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
reservation_okBooleanstring='Reservation'
No public methods.
New fields (1)
-
reservation_countIntegercompute='_compute_reservation_count' args: 'Reservations Count'
-
action_confirm(self) -
action_view_reservation_list(self)
New fields (2)
-
pms_reservation_idMany2one → pms.reservationstring='Reservation' args: 'pms.reservation' -
reservation_okBooleanreadonly=Truerelated='product_id.reservation_ok'string='Is Reservation?'
-
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, values)