| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/pms |
| GIT | |
| GIT | https://github.com/OCA/pms.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/pms/tree/19.0/pms_base |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Generic Modules/Property Management System |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Open Source Integrators, Commit [Sun] |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Open Source Integrators, Commit [Sun] |
| COMMITTERS | |
| COMMITTERS | Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci, OCA Migration Bot |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/pms |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:50 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_geolocalize - base_setup - base - web - bus - web_tour - html_editor - product - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| 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). |
| 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 | xpath | Inherits base.view_partner_form |
view_partner_tree_inherit_pms_base |
res.partner.tree.inherit.pms.base | res.partner | field | 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 | xpath | Inherits base.res_config_settings_view_form |
view_res_partner_filter_inherit_pms_base |
res.partner.search.inherit.pms.base | res.partner | field | 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 |
active
Boolean
default=True
help='Determines if amenity is active'
default_code
Char
help='Internal unique identifier of the amenity'
string='Internal Reference'
name
Char
help='Name of the amenity'
required=True
translate=True
property_ids
Many2many → pms.property
column1='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_id
Many2one → pms.amenity.type
comodel_name='pms.amenity.type'
help='Organize amenities by type (multimedia, comfort, etc ...)'
string='Type'
No public methods.
active
Boolean
default=True
help='Determines if amenity type is active'
name
Char
required=True
translate=True
No public methods.
amenity_ids
Many2many → pms.amenity
column1='property_id'
column2='amenity_id'
comodel_name='pms.amenity'
help='Amenities available in this property'
ondelete='restrict'
relation='pms_property_amenity_rel'
string='Amenities'
area
Float
balcony
Boolean
compute='_compute_balcony'
store=True
childs_property_count
Integer
compute='_compute_childs_property'
args: 'Children Count'
company_id
Many2one → res.company
comodel_name='res.company'
string='Company'
floors_num
Integer
string='Floor'
heating
Selection
selection=[('tankless_gas', 'Gas (Tankless)'), ('boiler_gas', 'Gas Boiler'), ('tankless_electric', 'Electric (Tankless)'), ('boiler_electric', 'Electric Boiler'), ('boiler_building', 'Building Boiler')]
laundry_room
Boolean
compute='_compute_laundry_room'
store=True
owner_id
Many2one → res.partner
comodel_name='res.partner'
help='The owner of the property.'
required=True
string='Owner'
parent_id
Many2one → pms.property
comodel_name='pms.property'
string='Parent Property'
parking_lot
Boolean
compute='_compute_parking_lot'
store=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
help='Current property'
ondelete='cascade'
required=True
string='Property'
pets
Boolean
compute='_compute_pets'
store=True
property_child_ids
One2many → pms.property
string='Children Property'
args: 'pms.property', 'parent_id'
qty_bedroom
Integer
compute='_compute_qty_bedroom'
store=True
qty_dining_room
Integer
compute='_compute_qty_dining_room'
store=True
qty_half_bathroom
Integer
compute='_compute_qty_half_bathroom'
store=True
qty_kitchen
Integer
compute='_compute_qty_kitchen'
store=True
qty_living_room
Integer
compute='_compute_qty_living_room'
store=True
room_count
Integer
compute='_compute_room_count'
string='Number of rooms'
room_ids
One2many → pms.room
comodel_name='pms.room'
help='List of rooms in the property.'
inverse_name='property_id'
string='Rooms'
service_ids
One2many → pms.service
comodel_name='pms.service'
help='List of services available in the property.'
inverse_name='property_id'
string='Services'
tag_ids
Many2many → pms.tag
column1='property_id'
column2='tag_id'
comodel_name='pms.tag'
relation='pms_property_tag_rel'
string='PMS Tags'
team_id
Many2one → pms.team
default=<expr>
string='Team'
args: 'pms.team'
terrace
Boolean
compute='_compute_terrace'
store=True
tz
Selection
default=<expr>
help='This field is used to determine the timezone of the property.'
required=True
selection=<expr>
string='Timezone'
unit_floor
Integer
action_view_childs_property_list(self)
create(self, vals_list)
active
Boolean
default=True
help='Determines if room is active'
area
Float
capacity
Integer
help='The maximum number of people that can occupy a room'
name
Char
help='Room Name'
required=True
string='Room Name'
property_id
Many2one → pms.property
comodel_name='pms.property'
ondelete='restrict'
required=True
string='Property'
sequence
Integer
default=0
help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence'
type_id
Many2one → pms.room.type
comodel_name='pms.room.type'
help='Unique room type for the rooms'
ondelete='restrict'
required=True
string='Room Type'
No public methods.
icon
Char
help='Set Icon name from https://fontawesome.com/'
string='Website Icon'
name
Char
required=True
translate=True
sequence
Integer
default=0
No public methods.
active
Boolean
default=True
help='Determines if service is active'
icon
Char
help='Set Icon name from https://fontawesome.com/'
string='Website Icon'
name
Many2one → product.product
comodel_name='product.product'
domain="[('type', '=', 'service')]"
help='Service'
ondelete='restrict'
required=True
string='Service'
property_id
Many2one → pms.property
comodel_name='pms.property'
ondelete='restrict'
required=True
string='Property'
sequence
Integer
default=0
help='Field used to change the position of the rooms in tree view.Changing the position changes the sequence'
vendor_id
Many2one → res.partner
comodel_name='res.partner'
ondelete='restrict'
required=True
string='Vendor'
No public methods.
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
index=True
required=False
string='Company'
args: 'res.company'
custom_color
Char
default='#FFFFFF'
help='Use Hex Code only Ex:-#FFFFFF'
args: 'Color Code'
description
Text
translate=True
fold
Boolean
help='This stage is folded in the kanban view when there are no record in that stage to display.'
args: 'Folded in Kanban'
is_closed
Boolean
help='Services in this stage are considered as closed.'
args: 'Is a close stage'
is_default
Boolean
help='Used as default stage'
args: 'Is a default stage'
name
Char
required=True
translate=True
sequence
Integer
default=1
stage_type
Selection
required=True
args: [('property', 'Property')], 'Type'
team_ids
Many2many → pms.team
default=<expr>
string='Teams'
args: 'pms.team'
No public methods.
color
Integer
default=10
args: 'Color Index'
company_id
Many2one → res.company
default=<expr>
help='Company related to this tag'
index=True
required=True
string='Company'
args: 'res.company'
full_name
Char
compute='_compute_full_name'
name
Char
required=True
translate=True
parent_id
Many2one → pms.tag
string='Parent'
args: 'pms.tag'
No public methods.
color
Integer
company_id
Many2one → res.company
default=<expr>
help='Company related to this team'
index=True
required=False
string='Company'
args: 'res.company'
description
Text
translate=True
name
Char
required=True
translate=True
property_count
Integer
compute='_compute_property_count'
string='Properties Count'
property_ids
One2many → pms.property
string='Properties'
args: 'pms.property', 'team_id'
sequence
Integer
default=1
help='Used to sort teams. Lower is better.'
stage_ids
Many2many → pms.stage
default=<expr>
string='Stages'
args: 'pms.stage'
No public methods.
pms_uom
Selection
default='m'
string='Unit of Measure'
args: [('ft', 'Square Foot'), ('m', 'Square Meter')]
No public methods.
group_pms_show_amenity
Boolean
implied_group='pms_base.group_pms_show_amenity'
string='Show Amenities'
group_pms_show_room
Boolean
implied_group='pms_base.group_pms_show_room'
string='Show Rooms'
group_pms_show_service
Boolean
implied_group='pms_base.group_pms_show_service'
string='Show Services'
group_pms_show_team
Boolean
implied_group='pms_base.group_pms_show_team'
string='Show Teams'
module_connector_guesty
Boolean
string='Connect with Guesty'
module_connector_wubook
Boolean
string='Connect with Wubook'
module_pms_account
Boolean
string='Manage Accounting'
module_pms_account_asset
Boolean
string='Manage Assets'
module_pms_contract
Boolean
string='Manage Contracts'
module_pms_crm
Boolean
string='Link a property to a lead'
module_pms_project
Boolean
string='Link to Projects and Tasks'
module_pms_purchase
Boolean
string='Link to Purchases'
module_pms_sale
Boolean
string='Manage Reservations'
module_pms_stock
Boolean
string='Manage Content'
module_pms_website
Boolean
string='Publish properties'
module_pms_website_sale
Boolean
string='Allow online booking'
pms_uom
Selection
readonly=False
related='company_id.pms_uom'
string='Unit of Measure'
No public methods.
is_property
Boolean
string='Is a Property'
No public methods.