Skip to main content

Odoo Solutions

Odoo 19 Enterprise for facility management
Case study  /  Project Upkeep

Odoo 19 Enterprise for a multi-service facility management company

One database carries a contract from enquiry to a costed, invoiced, reconciled job, with a custom workforce-visibility layer for field staff who are never in the office.

Facility management
Property & event management
Catering, pest control, disinfection
India

Project snapshot

IndustryFacility management services
Sub-industryProperty management, event management, catering, pest control, disinfection and specialised on-site services
RegionIndia
ShapeMany contracts, many sites, one shared pool of field staff and supervisors
PlatformOdoo 19 Enterprise
PartnerOchre, Official Odoo Partner
StatusDelivered, live on Odoo 19 Enterprise

Odoo modules in scope

CRMSalesSubscriptionsProjectTimesheetsAttendancesEmployeesPlanningInventoryPurchaseAccountingDashboardsOdoo mobile

Custom-built and beyond standard

  • Custom Attendance Manager dashboard: headcount and attendance percentage, who is checked in, late check-ins past a grace period, missing check-outs, and worked versus expected hours by department
  • Mobile self check-in and check-out portal for distributed field staff, with live status and dated history
  • Subscription-driven annual maintenance and housekeeping contracts, with one-click quotation templates and held renewal dates
  • Quotation confirmed to sales order automatically generates the project task, so the commercial document and the operational job are the same record
  • Timesheets linked back to the sales order line, turning booked hours into real margin per site
  • Kiosk attendance at each client site by badge, RFID token or manual identification
  • Customer-to-multi-site hierarchy so profitability is visible per site, not just per customer

The business

This company does not sell one service to one kind of buyer. Its lines run across facility management, property management, event management, catering, pest control, general disinfection and specialised services delivered to a client’s specification. That mix is the whole problem statement.

Each line has a different commercial shape. Property management is an annual contract billed on a cycle. Event management is a one-off job with a fixed date and a spike in labour. Pest control and disinfection are scheduled visit programmes. Catering carries consumables and stock. All of them share the same pool of field staff, the same supervisors and the same bank account.

What was breaking

A business like this usually runs on four or five disconnected systems: a package or an accountant for the books, spreadsheets for contract renewals, chat groups for job allocation, a register or biometric machine at each site for attendance, and the owner’s memory for margin per contract. Nothing reconciles.

Contract revenue was an assumption

Facility management revenue is contract revenue, yet renewal dates and recurring value lived in spreadsheets. Nobody could see the recurring book as a number rather than a guess.

Margin per site was unknowable

Answering “did we make money on that contract last quarter” took a week of work, because labour cost was never attached to the contract that funded it.

The workforce was invisible

Staff are never in the office. Attendance sat in a register or a machine at each client site, disconnected from payroll and from the job it belonged to.

Nothing joined up

Enquiry, quote, job, roster, attendance, timesheet and invoice each lived in a different place, so a single job never had one thread running through it.

What the system had to do

One requirement shaped the whole build: a single Odoo 19 Enterprise database had to carry a contract from enquiry through to a costed, invoiced, reconciled job without leaving the system at any point. The solution was built along that chain in order, rather than app by app.

Inside the solution

Enquiry to quotation

CRM · Sales

The enquiry that arrives through the website or a referral sits in a stage-based pipeline with an owner and a next action, not in an inbox. A quotation is raised directly from the opportunity record.

Quotation becomes the job

Sales · Project

Confirming the sales order generates the project task automatically. The commercial document and the operational job are the same object, so nobody re-enters the scope into a separate job sheet. For a facility management company this is the mechanism that matters most.

Recurring contracts

Subscriptions

Annual maintenance and housekeeping contracts run as subscriptions with a recurring plan, payment terms and a pricelist, raised in one click from a template. Subscriptions produce the invoice on schedule, hold the renewal date, and turn recurring revenue into a visible number. This is the single highest-value app in the stack for this business.

Delivery and labour cost

Project · Timesheets

A project with a New, work-in-progress and Done flow holds the tasks, each linked back to the originating sales order line. Hours booked against a task become real cost against the contract that funded it, so margin per site becomes a report rather than an argument.

Attendance for distributed staff

Attendances · Employees

A tablet in kiosk mode at each client site takes attendance by badge scan, RFID token or manual identification, turning it into an auditable record tied to payroll and to the job. This is the answer to the hardest operational problem in facility management: the workforce is never where the office is.

Procurement and stock

Purchase · Inventory

Cleaning chemicals, consumables, pest control material and catering supplies enter as cost through purchase and stock, issued to a site and accounted for, rather than surfacing later as cash reimbursements.

Books and collections

Accounting

Customer invoices, bank reconciliation and the aged receivable report run from one place. The aged receivable view is the collection tool: which client owes what, for how long, against which contract.

Management view

Dashboards

Pre-built dashboards carry quotation and order counts, revenue and average order value over a rolling window, giving the owner a live read without exporting anything.

The custom workforce layer

Standard Odoo handles the contract-to-cash chain. The workforce-visibility layer that a distributed-labour business actually runs on is custom work by Ochre, running on real data here and across other Ochre production deployments.

Attendance Manager dashboard

Built by Ochre, not standard Odoo. Attendance percentage against headcount, employees currently checked in, late check-ins beyond a grace period, missing check-outs and worked hours in period, filterable by period, department and manager, with a daily trend and a worked-versus-expected comparison by department.

Mobile self check-in portal

Field staff check in and out from a phone, with live status, hours worked today and a dated check-in history. It is the piece that makes site attendance real without a machine on every wall.

The Odoo 19 Enterprise footprint

Enquiry pipeline, site surveys, follow-up CRM
Quotations, rate cards, service catalogue Sales
Annual maintenance and housekeeping contracts, renewals Subscriptions
Job execution, site-wise stages, checklists Project
Labour cost against contract Timesheets
Site-level attendance, kiosk, payroll input Attendances, Employees
Shift rosters and on-site scheduling Planning
Consumables, chemicals, catering material Inventory, Purchase
Invoicing, GST, collections, reconciliation Accounting
Contract-wise margin, receivables, workforce Dashboards
Field staff on phones, on site Odoo mobile app

A version note that changes the plan

Odoo retired the standalone Field Service app in release 19.2 and merged its capability into Planning. Anyone scoping a facility management rollout against older Odoo 19 material will budget for a module that no longer exists as a separate line. For this business that is good news: Planning handles shifts and roles, which is closer to how a housekeeping or security roster works than a task-per-visit model, and recurring shifts map cleanly onto a monthly deep-clean cycle or a scheduled pest control programme.

The result

The company now runs enquiry to invoice on one Odoo 19 Enterprise database. A confirmed quotation opens the job automatically, recurring contracts invoice on schedule and hold their own renewal dates, and hours booked at each site land as real cost against the contract that funded them, so margin per site is a report rather than an argument. Field staff check in from a phone or a site kiosk, and supervisors see attendance, late arrivals and worked-versus-expected hours on one dashboard instead of chasing registers across sites.

Running a distributed workforce off registers and spreadsheets?

We put the whole contract-to-cash chain on one Odoo database and add the workforce-visibility layer a field-service business actually runs on. See it working on your own service lines.

Talk to Ochre