Odoo’s Maintenance module is powerful out of the box, but like many ERP features, it’s designed around licensed users. In real-world operations, however, maintenance teams often consist of technicians and employees who don’t need (or justify the cost of) full Odoo user licenses.
In this article, we’ll walk through a clean and practical customization in Odoo 19 Maintenance that aligns the system with how maintenance teams actually work—without compromising visibility, accountability, or communication.
The result is a streamlined, license-free assignment flow that ensures maintenance requests are handled quickly, transparently, and professionally.
The Real-World Problem with Standard Maintenance Assignments
By default, Odoo maintenance requests are typically assigned to res.users. While this makes sense from a system perspective, it introduces several operational challenges:
Every assigned technician needs a paid Odoo license
Maintenance staff may not need system access at all
Communication often happens outside Odoo (WhatsApp, email, paper)
Silent failures occur when emails are missing or misconfigured
Request creators lack visibility after assignment
For many organizations—especially manufacturing plants, facilities teams, or service operations—this model simply doesn’t scale.
The Goal: Practical, License-Free Maintenance Operations
The objective of this customization was clear:
Allow maintenance requests to be assigned to employees, not licensed users, while maintaining strong communication and traceability.
To achieve that, the solution focuses on five key improvements:
Assign requests to
hr.employeeValidate employee email addresses before assignment
Automatically send assignment emails
Include all critical maintenance details in the email
Keep request creators informed via CC
Let’s break down how each part fits into a clean operational flow.
Assigning Maintenance Requests to Employees (Not Users)
The foundation of this customization is replacing user-based assignment with an employee-based assignment.
Instead of linking a maintenance request to res.users, we introduce a new field:
assigned_employee_id → hr.employee
This allows maintenance requests to be assigned directly to real people—technicians, electricians, mechanics—without requiring them to log into Odoo.
Why This Matters
No additional Odoo licenses required
Assignment reflects real organizational roles
Works seamlessly with HR data (departments, job roles)
Keeps system usage clean and cost-effective
This simple change dramatically improves alignment between Odoo and day-to-day operations.
Preventing Silent Failures with Email Validation
One of the most common operational issues in ERP workflows is silent failure—when something doesn’t happen, and no one knows why.
In maintenance flows, this often occurs when:
An employee is assigned
The employee has no email address
No notification is sent
The request sits unattended
To prevent this, a constraint-level validation is added:
If an employee is assigned
And they do not have a valid email
The system raises a clear validation error
Result
No assignments without contact information
Errors are caught immediately
Administrators are forced to maintain clean HR data
Maintenance requests never disappear into a black hole
This small check saves hours of follow-up and confusion.
Automatic Email Notifications on Assignment
Once assignment is employee-based and email-safe, the next step is communication.
This customization automatically sends emails in two scenarios:
When a maintenance request is created with an assigned employee
When an existing request is reassigned to a different employee
There’s no manual button, no optional step, and no reliance on user discipline—the email is sent automatically as part of the workflow.
Why Automation Is Critical
Maintenance work is time-sensitive. If notification depends on someone remembering to click a button, delays are inevitable. Automation ensures:
Faster response times
Consistent communication
Zero training overhead for request creators
Email Content That Actually Helps Technicians
Sending an email is one thing. Sending a useful email is another.
The assignment email in this setup includes:
Maintenance request reference
Request title and description
Equipment or asset involved
Priority level
Request date
Clickable shared document link (instructions, SOPs, manuals)
The Shared Document Link
Instead of forcing technicians into Odoo, the email includes a shared document URL—such as:
Google Docs
SharePoint
Internal SOP portal
Cloud-based instruction manuals
This allows technicians to:
Access instructions instantly
View procedures on mobile devices
Work without system credentials
The result is a frictionless experience that respects how maintenance teams actually operate.
Keeping the Request Creator in the Loop (CC Logic)
Maintenance requests often originate from production managers, office staff, or supervisors. Once the request is submitted, visibility is critical.
This customization ensures:
The request creator is CC’d on assignment emails
They know who the request is assigned to
They receive confirmation that action has started
Operational Benefits
Reduced follow-up messages (“Did anyone see my request?”)
Clear ownership from the start
Improved trust in the maintenance process
Better cross-team communication
This single CC field eliminates a surprising amount of operational noise.
Clean Overrides: Create and Write Hooks
Figure: Extending maintenance.request to support employee-based assignment, email validation, and automated notifications using create/write overrides.
From a technical standpoint, the solution remains clean and maintainable by:
Using
create()overrides to trigger initial emailsUsing
write()overrides to detect reassignmentAvoiding hard dependencies on UI actions
Keeping logic centralized and predictable
This approach ensures:
Emails are sent regardless of how the record is created (form, import, API)
Reassignments are always captured
The customization survives upgrades with minimal friction
The Final Result: A Real-World Maintenance Flow
With this setup in place, the maintenance workflow looks like this:
A request is created in Odoo
An employee is assigned (license-free)
The system validates email availability
An automatic assignment email is sent
The technician receives all required details
Instructions are accessible via shared link
The request creator stays informed
No extra licenses. No manual steps. No communication gaps.
Why This Matters Beyond Maintenance
Although this example focuses on maintenance, the pattern applies broadly across Odoo:
Field service teams
Warehouse staff
Shop floor workers
External contractors
Any scenario where people need information, not system access, benefits from this approach.
Closing Thoughts
ERP systems should adapt to operations—not the other way around.
By assigning maintenance requests to employees instead of users, validating communication paths, and automating notifications, this Odoo 19 customization delivers a solution that is:
-
Cost-efficient
-
Operationally realistic
-
Technically clean
-
Easy to maintain
Most importantly, it respects how real teams work—fast, mobile, and outside the ERP interface.
If you’re building Odoo solutions for real-world environments, this is the kind of customization that makes the difference between using a system and trusting it.
For more tips on optimizing your Odoo workflows, check out my blog on streamlining Odoo operations and discover how to get the most out of your ERP system.