Skip to Content
  1. Home
  2. Features
  3. Owner-occupiers

Portfolio management for an owner-occupier in Odoo 19

A local authority, public body or administration that occupies its own buildings has no leases to invoice. It needs to know what it owns room by room, where the plans are, who occupies what, which regulatory obligations are falling due, what the buildings cost and where the documents are. The Portfolio modules of TSC Immo cover this scope in Odoo 19, on Community as well as Enterprise, with no Enterprise module required.

Modules immo_space to immo_synthesisOdoo 19 Community and Enterprise
Immo · Reporting · Dashboards
Portfolio dashboard: eight sites, 21 buildings, 430 rooms, floor area by site and by usage category.
The Portfolio dashboard of a fictional regional local authority: sites, buildings, rooms, areas by usage category.

The Portfolio modules and their scope

Each module has its own page or section. They share the same reference data: a room created in the space register is the same one that carries an outline on a plan, an assignment, an obligation, a budget or a document.

Need Module Where to read the details
Territories, sites, buildings, floors, zones, rooms, equipment immo_space Plans and spaces
DWG, DXF, IFC and PDF plans, plan viewer, legal floor areas immo_plan Plans and spaces
Work orders placed on the plan immo_plan_maintenance Plans and spaces
Room occupancy by divisions and departments immo_occupation, immo_plan_occupation Occupancy section, below
Obligations, inspections, outstanding issues, alerts immo_compliance, immo_plan_compliance Regulatory compliance
Planned and actual figures by site, building, floor or room immo_budget Budget section, below
Folders, versions, validation, sharing, full-text search immo_ged Portfolio document management
Building health record, dashboards immo_synthesis Building health record section, below
Mobile app for field operatives immo_intervention_portal Mobile portal section, below
Sign-in with Keycloak immo_auth_keycloak Authentication section, below

Room occupancy by departments

The immo_occupation module assigns a room or a zone to a division, a department, a team and, where needed, to a staff member. Each assignment has its type (office, teaching, staff accommodation, shared use, storage), its period, its share of floor area and its headcount. An assignment is never overwritten: the Reassign and Move wizards close the old one and open the new one, and a past assignment can be restored.

Inconsistencies are flagged without ever blocking data entry: shares above 100%, headcount above capacity, a type incompatible with the use of the room, an assignment on an archived space. Occupancy rates (occupied area over available area, headcount over capacity, square metres per staff member) are calculated for each room, floor, building and site, and updated at every change and every night. A monthly snapshot makes it possible to compare periods in the pivot and graph views.

The Occupancy colour theme of the plan viewer (module immo_plan_occupation) colours the rooms of a plan according to their occupancy, their occupying unit or their rate: see Plans and spaces.

Immo · Occupancy · Assignments
List of room assignments by division, type, period, share of floor area and headcount.
Current and future assignments: room, occupying unit, type, share and headcount.
Immo · Occupancy · Inconsistencies
List of inconsistent assignments highlighted in red, with the share and the headcount.
The inconsistencies, filtered into a single list: they can be corrected without data entry having been blocked.

Planned and actual budget

The immo_budget module does not require the budget module of Odoo Enterprise. Categories are configurable (capital or operating, expenditure or income) and grouped into families: construction, maintenance, equipment replacement, refurbishment, energy, rent paid, charges, taxes and duties, rent received and occupancy fees.

A budget is voted per financial year for a site, a building, a floor or a room. Actual expenditure and income is committed or paid, at every level of the portfolio, and linked to the vendor bill or customer invoice where there is one. The import from analytic accounting turns the analytic lines of buildings and units into actual expenditure and income, without ever counting them twice. Planned and actual figures are compared in a pivot or graph view, by usage, type, condition, location, territory and financial year, and the building or site record shows the budget summary and the cost per square metre of floor area.

Immo · Budget · Analysis · Planned / actual
Pivot table of planned and actual figures by expenditure family and by financial year 2025 and 2026.
Planned, committed and actual figures by budget family and by financial year, on demonstration data.
Immo · Budget · Budgets
List of budgets by financial year and by level, with planned, committed and actual expenditure and consumption.
Budgets by financial year and by level (site, building, room), with their consumption rate.

Building health record and dashboards

The immo_synthesis module prints the building health record of a building or a site as a PDF, one at a time or in batches from the list, as well as a consolidated summary of any selection of buildings. The health record covers the identity of the building, the areas by usage category, the floors described, the occupancy and the main occupying units, the condition of the rooms and the equipment at end of life, the regulatory obligations that are overdue or approaching, the open outstanding issues, the budget for the year, the cost per square metre and how it changes, the key documents and the completeness of the data.

Three dashboards are ready to use (Portfolio and areas, occupancy, regulatory compliance). They can be filtered by site, territory, occupying unit or period. Each user can also build their own dashboard from any pivot or graph view. A public accessibility statement page, configurable by the administrator, is published at /accessibilite on the Odoo instance.

Immo · Reporting · Health records · Buildings
List of building health records with occupancy rate, compliance, number of obligations and completeness.
The building health records: area, occupancy rate, compliance, obligations and data completeness.

Mobile portal for field operatives

The immo_intervention_portal module gives in-house technicians and external companies a web application designed for the phone, within the Odoo portal. A portal user sees the work orders of their own contact or company and, where the administrator has granted it, all those of a set of sites or buildings.

Work orders appear as cards sorted by priority and due date, with filters by status, building and priority, and a search. The record gives the subject, the location (site, building, floor, room), the equipment, the priority, the due date and the requester. The Start and Finish buttons move the standard Odoo Maintenance stage forward, timestamp the author and allow a short report. Photos taken with the phone are compressed in the browser and stored as attachments to the request, visible in the back-office gallery. The floor plan shows the work orders that the user can see, in the same colours as the back office, and can be handled by touch. The application can be installed on the phone's home screen.

This portal is for field operatives. It is not a tenant portal.

Portal · My work orders
Three phone screens: a technician's list of work orders, the record of a started work order with the Finish button and its photos, the floor plan with markers.
On a phone, with the account of a service provider's technician: their list, a record with photos and a Finish button, the floor plan.

Authentication with Keycloak

The immo_auth_keycloak module extends the standard Odoo OAuth sign-in (auth_oauth, available in Community) for a Keycloak realm. A Keycloak role, at realm or client level, or a custom claim grants Odoo groups at every sign-in: the groups granted are added, the managed groups whose role has gone are removed, and unmanaged groups are never touched. An unknown staff member receives an internal user account at their first sign-in, built from the token claims and from configurable attributes such as the division or department.

The required authentication level (acr, for multi-factor authentication) is an option, as is hiding the local login form, which remains accessible at /web/login?local=1, and propagating sign-out to Keycloak. A sign-in log records who, when, the roles received, the groups applied and the refusals with their reason. The "authorization code" flow with PKCE goes through the immo_auth_keycloak_oidc module, which relies on the OCA community module auth_oidc and follows its AGPL-3 licence.

Settings · Keycloak role mappings
Mapping between Keycloak roles and the Odoo property management groups: reader, manager, service charge manager, administrator.
The mapping of Keycloak roles to Odoo groups: reader, manager, service charge manager, administrator.

What this offer does not cover

The scope of the owner-occupier Portfolio does not include letting. The lease relies on Odoo Subscriptions and on Odoo Accounting, two Enterprise modules: lease management, indexation, service charge statements and rental profitability are described on their own pages and belong to the Enterprise suite.

The data in the screenshots comes from a fictional regional local authority, on real territories. The names of establishments, identification numbers, staff and vendors are invented. A demonstration on your own plans and your own obligations can be requested through the contact form.

See TSC Immo on your own cases

A demonstration on a database with fictitious data, then on your own management questions.

A solution TSC, The Service Company Connect. Transform. Grow.