TIP: You can type at any time to perform a new search.
Property Management System
pms_base · OCA/pms
- Repository
- OCA/pms · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Generic Modules/Property Management System
- Folder size
- 7.13 MB
- License
- AGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/pms
- Last tracking update
- 2026-08-07 09:06:26
- Authors
- Odoo Community Association (OCA), Open Source Integrators, Commit [Sun]
- Maintainers
- Odoo Community Association (OCA), Open Source Integrators, Commit [Sun]
- Committers
- Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci, OCA Migration Bot
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- pms_account, pms_crm, pms_project, pms_stock, pms_website
- Description
This module is the base module for the Property Management System (PMS) suite. It provides the foundation for managing real estate properties, including: - **Properties**: Track residential and commercial properties with address, timezone, area, floor information, tags, and images. - **Rooms**: Define rooms within each property with type, capacity, and area. - **Amenities**: Catalog amenities grouped by type (toiletries, connectivity, kitchen facilities, laundry, parking, pets, etc.). - **Services**: Link service products (cleaning, internet, parking, etc.) to properties for operational tracking. - **Stages**: Configure lifecycle stages (New, Available, Cancelled) for property pipelines with Kanban support. - **Teams**: Organize properties into teams for management and reporting. - **Tags**: Classify properties with color-coded tags. - **Settings**: Enable or disable features (rooms, amenities, services, teams) per company and configure the unit of measure for areas. This module also provides access rights (User / Manager), security rules scoped per company, and integration points for optional PMS extensions (accounting, contracts, reservations, website, CRM, and more).
Code Analysis ⓘ
Views touched (29)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
pms_amenity_view_tree |
pms.amenity.tree | pms.amenity | list | New |
view_partner_form_inherit_pms_base |
res.partner.form.inherit.pms.base | res.partner | form | Inherits base.view_partner_form |
view_partner_tree_inherit_pms_base |
res.partner.tree.inherit.pms.base | res.partner | tree | Inherits base.view_partner_tree |
view_pms_amenity_form |
pms.amenity.form | pms.amenity | form | New |
view_pms_amenity_search |
pms.amenity.search | pms.amenity | search | New |
view_pms_amenity_type_tree |
pms.amenity.type.tree | pms.amenity.type | list | New |
view_pms_property_form |
pms.property.form | pms.property | form | New |
view_pms_property_kanban |
pms.property.kanban | pms.property | kanban | New |
view_pms_property_search |
pms.property.search | pms.property | search | New |
view_pms_property_tree |
pms.property.tree | pms.property | list | New |
view_pms_room_amenity_type_form |
pms.amenity.type.form | pms.amenity.type | form | New |
view_pms_room_form |
pms.room.form | pms.room | form | New |
view_pms_room_search |
pms.room.search | pms.room | search | New |
view_pms_room_tree |
pms.room.tree | pms.room | list | New |
view_pms_room_type_form |
pms.room.type.form | pms.room.type | form | New |
view_pms_room_type_tree |
pms.room.type.tree | pms.room.type | list | New |
view_pms_service_form |
pms.service.form | pms.service | form | New |
view_pms_service_search |
pms.service.search | pms.service | search | New |
view_pms_service_tree |
pms.service.tree | pms.service | list | New |
view_pms_tag_form |
Tag | pms.tag | form | New |
view_pms_tag_tree |
Tags | pms.tag | list | New |
view_pms_team_kanban |
pms.team.kanban | pms.team | kanban | New |
view_res_config_settings_form |
res.config.settings.view.form.pms | res.config.settings | form | Inherits base.res_config_settings_view_form |
view_res_partner_filter_inherit_pms_base |
res.partner.search.inherit.pms.base | res.partner | search | Inherits base.view_res_partner_filter |
view_stage_form |
pms.stage.view.form | pms.stage | form | New |
view_stage_search |
pms.stage.view. | pms.stage | search | New |
view_stage_tree |
pms.stage.view.tree | pms.stage | list | New |
view_team_form |
pms.team.view.form | pms.team | form | New |
view_team_tree |
pms.team.view.tree | pms.team | list | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (12)
New fields (5)
-
activeBooleandefault=Truehelp='Determines if amenity is active' -
default_codeCharhelp='Internal unique identifier of the amenity'string='Internal Reference' -
nameCharhelp='Name of the amenity'required=Truetranslate=True -
property_idsMany2many → pms.propertycolumn1='amenity_id'column2='property_id'comodel_name='pms.property'help='Properties with access to the amenity'ondelete='restrict'relation='pms_property_amenity_rel'string='Properties' -
type_idMany2one → pms.amenity.typecomodel_name='pms.amenity.type'help='Organize amenities by type (multimedia, comfort, etc ...)'string='Type'
No public methods.
New fields (2)
-
activeBooleandefault=Truehelp='Determines if amenity type is active' -
nameCharrequired=Truetranslate=True
No public methods.
New fields (27)
-
amenity_idsMany2many → pms.amenitycolumn1='property_id'column2='amenity_id'comodel_name='pms.amenity'help='Amenities available in this property'ondelete='restrict'relation='pms_property_amenity_rel'string='Amenities' -
areaFloat -
balconyBooleancompute='_compute_balcony'store=True -
childs_property_countIntegercompute='_compute_childs_property' args: 'Children Count' -
company_idMany2one → res.companycomodel_name='res.company'string='Company' -
floors_numIntegerstring='Floor' -
heatingSelectionselection=[('tankless_gas', 'Gas (Tankless)'), ('boiler_gas', 'Gas Boiler'), ('tankless_electric', 'Electric (Tankless)'), ('boiler_electric', 'Electric Boiler'), ('boiler_building', 'Building Boiler')] -
laundry_roomBooleancompute='_compute_laundry_room'store=True -
owner_idMany2one → res.partnercomodel_name='res.partner'help='The owner of the property.'required=Truestring='Owner' -
parent_idMany2one → pms.propertycomodel_name='pms.property'string='Parent Property' -
parking_lotBooleancompute='_compute_parking_lot'store=True -
partner_idMany2one → res.partnercomodel_name='res.partner'help='Current property'ondelete='cascade'required=Truestring='Property' -
petsBooleancompute='_compute_pets'store=True -
property_child_idsOne2many → pms.propertystring='Children Property' args: 'pms.property', 'parent_id' -
qty_bedroomIntegercompute='_compute_qty_bedroom'store=True -
qty_dining_roomIntegercompute='_compute_qty_dining_room'store=True -
qty_half_bathroomIntegercompute='_compute_qty_half_bathroom'store=True -
qty_kitchenIntegercompute='_compute_qty_kitchen'store=True -
qty_living_roomIntegercompute='_compute_qty_living_room'store=True -
room_countIntegercompute='_compute_room_count'string='Number of rooms' -
room_idsOne2many → pms.roomcomodel_name='pms.room'help='List of rooms in the property.'inverse_name='property_id'string='Rooms' -
service_idsOne2many → pms.servicecomodel_name='pms.service'help='List of services available in the property.'inverse_name='property_id'string='Services' -
tag_idsMany2many → pms.tagcolumn1='property_id'column2='tag_id'comodel_name='pms.tag'relation='pms_property_tag_rel'string='PMS Tags' -
team_idMany2one → pms.teamdefault=<expr>string='Team' args: 'pms.team' -
terraceBooleancompute='_compute_terrace'store=True -
tzSelectiondefault=<expr>help='This field is used to determine the timezone of the property.'required=Trueselection=<expr>string='Timezone' -
unit_floorInteger
-
action_view_childs_property_list(self) -
create(self, vals_list)@api.model_create_multi
New fields (7)
-
activeBooleandefault=Truehelp='Determines if room is active' -
areaFloat -
capacityIntegerhelp='The maximum number of people that can occupy a room' -
nameCharhelp='Room Name'required=Truestring='Room Name' -
property_idMany2one → pms.propertycomodel_name='pms.property'ondelete='restrict'required=Truestring='Property' -
sequenceIntegerdefault=0help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence' -
type_idMany2one → pms.room.typecomodel_name='pms.room.type'help='Unique room type for the rooms'ondelete='restrict'required=Truestring='Room Type'
No public methods.
New fields (3)
-
iconCharhelp='Set Icon name from https://fontawesome.com/'string='Website Icon' -
nameCharrequired=Truetranslate=True -
sequenceIntegerdefault=0
No public methods.
New fields (6)
-
activeBooleandefault=Truehelp='Determines if service is active' -
iconCharhelp='Set Icon name from https://fontawesome.com/'string='Website Icon' -
nameMany2one → product.productcomodel_name='product.product'domain="[('type', '=', 'service')]"help='Service'ondelete='restrict'required=Truestring='Service' -
property_idMany2one → pms.propertycomodel_name='pms.property'ondelete='restrict'required=Truestring='Property' -
sequenceIntegerdefault=0help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence' -
vendor_idMany2one → res.partnercomodel_name='res.partner'ondelete='restrict'required=Truestring='Vendor'
No public methods.
New fields (11)
-
activeBooleandefault=True -
company_idMany2one → res.companydefault=<expr>index=Truerequired=Falsestring='Company' args: 'res.company' -
custom_colorChardefault='#FFFFFF'help='Use Hex Code only Ex:-#FFFFFF' args: 'Color Code' -
descriptionTexttranslate=True -
foldBooleanhelp='This stage is folded in the kanban view when there are no record in that stage to display.' args: 'Folded in Kanban' -
is_closedBooleanhelp='Services in this stage are considered as closed.' args: 'Is a close stage' -
is_defaultBooleanhelp='Used as default stage' args: 'Is a default stage' -
nameCharrequired=Truetranslate=True -
sequenceIntegerdefault=1 -
stage_typeSelectionrequired=True args: [('property', 'Property')], 'Type' -
team_idsMany2many → pms.teamdefault=<expr>string='Teams' args: 'pms.team'
No public methods.
New fields (5)
-
colorIntegerdefault=10 args: 'Color Index' -
company_idMany2one → res.companydefault=<expr>help='Company related to this tag'index=Truerequired=Truestring='Company' args: 'res.company' -
full_nameCharcompute='_compute_full_name' -
nameCharrequired=Truetranslate=True -
parent_idMany2one → pms.tagstring='Parent' args: 'pms.tag'
No public methods.
New fields (8)
-
colorIntegerargs: 'Color Index' -
company_idMany2one → res.companydefault=<expr>help='Company related to this team'index=Truerequired=Falsestring='Company' args: 'res.company' -
descriptionTexttranslate=True -
nameCharrequired=Truetranslate=True -
property_countIntegercompute='_compute_property_count'string='Properties Count' -
property_idsOne2many → pms.propertystring='Properties' args: 'pms.property', 'team_id' -
sequenceIntegerdefault=1help='Used to sort teams. Lower is better.' -
stage_idsMany2many → pms.stagedefault=<expr>string='Stages' args: 'pms.stage'
No public methods.
New fields (1)
-
pms_uomSelectiondefault='m'string='Unit of Measure' args: [('ft', 'Square Foot'), ('m', 'Square Meter')]
No public methods.
New fields (17)
-
group_pms_show_amenityBooleanimplied_group='pms_base.group_pms_show_amenity'string='Show Amenities' -
group_pms_show_roomBooleanimplied_group='pms_base.group_pms_show_room'string='Show Rooms' -
group_pms_show_serviceBooleanimplied_group='pms_base.group_pms_show_service'string='Show Services' -
group_pms_show_teamBooleanimplied_group='pms_base.group_pms_show_team'string='Show Teams' -
module_connector_guestyBooleanstring='Connect with Guesty' -
module_connector_wubookBooleanstring='Connect with Wubook' -
module_pms_accountBooleanstring='Manage Accounting' -
module_pms_account_assetBooleanstring='Manage Assets' -
module_pms_contractBooleanstring='Manage Contracts' -
module_pms_crmBooleanstring='Link a property to a lead' -
module_pms_projectBooleanstring='Link to Projects and Tasks' -
module_pms_purchaseBooleanstring='Link to Purchases' -
module_pms_saleBooleanstring='Manage Reservations' -
module_pms_stockBooleanstring='Manage Content' -
module_pms_websiteBooleanstring='Publish properties' -
module_pms_website_saleBooleanstring='Allow online booking' -
pms_uomSelectionreadonly=Falserelated='company_id.pms_uom'string='Unit of Measure'
No public methods.
New fields (1)
-
is_propertyBooleanstring='Is a Property'
No public methods.