Case Studies

Case Study · Energy & Utilities · Odoo 19

From the utility contract to the worker's phone

Built a complete field-operations platform for a Saudi electrical-contracting group executing a national-utility framework contract — 44 custom Odoo modules plus an offline-first mobile app with over-the-air updates. It connects the contract, its permits and materials, the fleet, safety, HR and finance, all the way down to the technician logging a task on-site — with a tailored cockpit for every role, from site engineer to owner.

High-voltage transmission towers marching across the Saudi desert at golden hour.
44
custom Odoo modules
8+
role cockpits
OTA
field updates
100+
field staff
ZATCA
compliant
The system — from the contract to the phone There is no off-the-shelf system that runs a national-utility field contract end to end. So we built one — a platform of 44 Odoo modules and an offline field app — and made every part flow as a single chain: from a contract clause, to the permit that unlocks it, to the material issued, to the task on a technician's phone, to the invoice.

01 The client

A Saudi electrical-contracting group delivering medium-voltage infrastructure for the national electricity utility under a framework contract — multiple sites, hundreds of field staff, fully bilingual Arabic and English, and ZATCA-compliant.

It runs on Odoo 19 Enterprise — from head-office finance all the way out to a technician on a remote site.

A modern electrical substation with transformers and switchgear in the Saudi desert.

02 The core problem

A dozen disconnected worlds

Executing a national-utility field contract is a coordination problem across a dozen worlds that don't talk to each other. There's the contract and its work orders; the permits that legally gate every task on site; the materials the utility issues and expects accounted for to the unit; a fleet of vehicles and equipment spread across sites; safety and PPE; procurement and project budgets; attendance for hundreds of field workers; ZATCA-compliant invoicing and completion certificates.

And then there are the field teams themselves — who work on remote sites with no signal, not at desks.

None of it was connected. And every role — project manager, site engineer, warehouse, maintenance, executive — needed a completely different view of the same operation.

Every task gated by a permit, every material accounted for to the unit — and none of it talked to each other.

03 The approach

One nervous system, not a stack of features

I treated it as one nervous system, not a pile of modules. From a signed clause in the contract, to the permit that unlocks it, to the material issued to a yard, to the task on a technician's phone, to the attendance punch, to the invoice — it's one chain, and it had to flow as one.

So instead of bolting on features, I built a platform: a server-driven cockpit layer that renders each role's dashboard from configuration rather than hard-coded screens; a mobile app that works offline in the field and updates over the air; and compliance enforced in the data model itself, not left to anyone's memory.

  1. 1

    See the whole board

    One chain from a contract clause to a worker's phone — permits, materials, fleet, safety, HR and finance modelled as one connected operation, not separate apps.

  2. 2

    Build a platform, not modules

    A server-driven cockpit layer renders every role's dashboard from configuration, and re-skins across all of them from a single brand file — closer to low-code than a set of screens.

  3. 3

    Bake compliance into the model

    Permits, ZATCA invoicing and immutable closed records are enforced by the data model — no task, material or invoice slips the rules because someone forgot them.

  4. 4

    Go where the work happens

    An offline-first field app so a technician on a dead-signal site keeps working and syncs on reconnect — with over-the-air updates that ship fixes to the phone in minutes.

Engineer a platform a business runs on — not a pile of modules.

Field technicians in hi-vis PPE working on medium-voltage switchgear on site.

04 The solution

One connected platform — 44 Odoo modules and a field app

Contract execution, permit-gated

Utility work orders ingested as contract lines mapped to standardised scope clauses; pre-execution site surveys adjust planned quantities against real conditions; and permits enforced at the model layer — a computed gate blocks any material from being spent without an active, approved permit. A live material-balance report tracks planned / at-yard / used / scrapped / unaccounted per project, so leakage shows immediately. Completion certificates and ZATCA QR invoices close the loop.

Fleet & maintenance

A nine-module suite covering the full lifecycle: preventive maintenance scheduled by running hours, daily inspections that gate trip logging, inter-site equipment transfers with approval, two-stage breakdown escalation, KPI dashboards, and records that lock immutable once closed.

Safety & PPE

Request → approval → delivery with photo evidence, custody tracking of who holds what, negligence reports, and inventory-gated tool swaps.

Procurement & budget

Material requisitions flowing into multi-vendor offer comparison and auto-generated purchase orders — all gated by project wallets that track allocated, reserved, spent and remaining funds in real time.

HR & biometric attendance

A two-way ZKTeco ADMS integration syncing employees and punches across multi-site devices, with timezone handling and duplicate-punch prevention; automated rules that detect violations and route them to a manager to justify or penalise; and automatic contract renewal.

Finance & compliance

Granular per-user posting and journal permissions, partner ledgers, deferred expenses, and ZATCA-compliant e-invoicing.

Role-based cockpits

Eight-plus tailored dashboards — project manager, site engineer, warehouse, coordinator, the four maintenance roles, and an executive owner view — each rendered from configuration rather than bespoke code, and re-skinnable from a single brand file. Closer to a low-code platform than a set of screens.

The mobile field app

Flutter, offline-first, built to work where the work happens: local caching so a dead-signal site keeps working and syncs on reconnect; attendance, tasks, expenses, leaves, loans and payslips; role-specific maintenance workflows; GPS and geofence tracking; push notifications; full Arabic / English RTL — and Shorebird over-the-air updates that ship straight to the phones in minutes, no store-review delay.

05 The outcome

The contractor runs its entire field operation — contract to cash, head office to the on-site technician — on one connected system. Every role sees its own cockpit; field teams work offline and stay in sync.

Compliance is enforced by the platform rather than by memory: no material moves without a permit, every invoice is ZATCA-clean, and closed records can't be altered. And because the cockpits and the app are configuration-driven, a new role or screen is a config change — not a rebuild.

A fleet of utility service vehicles and equipment at a remote desert work site.

Why it matters

This isn't customising an ERP — it's building an operational nervous system, from a national-utility contract clause all the way to a worker's phone on a site with no signal. It took a platform mindset — server-driven cockpits, an offline app that updates over the air, compliance baked into the data model — and the whole-board view to make the back office and the field one system.

Not configuring software — engineering a platform a business runs on. That's the work.

Next case study

Retail & E-commerce