Running an HVAC business with Odoo

How do I schedule maintenance for company tools in Odoo?

Workflow overview: How do I schedule maintenance for company tools in Odoo?
Workflow overview. Instructional screenshots show the actual demo interface.

Assign a company tool to a service van, schedule a preventive inspection and verify weekly recurrence stops at its end date in Odoo.

Alex needs a reminder to inspect Demo Air’s own vacuum pump. We create a fictional company-tool record, link it to the existing service van and schedule a half-hour preventive request. Then we check the exact control that generates the next weekly occurrence and confirm that the end date stops the series.

Alex Rivera and Demo Air HVAC are fictional training examples. Prices, dates, quantities and business situations in this guide are illustrative.

Before you begin

Tested in stock Odoo 20.0-20260926 Community as the demo owner administrator, with official modules and standard configuration. Complete Which Odoo apps do I need to run an HVAC business? and How do I track service vans and vehicle costs in Odoo?, including its prerequisites. Reuse the existing Demo Van 01 Fleet record and WH/Demo Van 01 Inventory location. The owner performs the procedure; technician access is unchanged and was not tested for Maintenance. Activate the Odoo-authored Maintenance app. With Fleet, Employees and Inventory already installed, the official fleet_maintenance, hr_maintenance and stock_maintenance integrations also install. All four modules are Odoo-authored LGPL-3. This example deliberately uses October 7 and October 14, 2026 as fictional training dates captured on October 16, in America/New_York. Choose reviewed dates and responsibility for actual operations; no inspection, calibration or certification is performed here.

Step-by-step workflow

Step 1. Activate Maintenance and check for existing tools

Open Apps, search Maintenance, choose the actual Search Module for: Maintenance suggestion and click Activate on the Odoo-authored app once. Wait for installation before opening Maintenance. The tested starting database has no equipment or maintenance requests. Search your own equipment records before adding another pump. Installation gives the owner the stock Maintenance administration permission; it does not demonstrate that the existing technician can manage this app.

Action 1: Search for the official Maintenance app. The actual target is highlighted in gold.
Search for the official Maintenance app.
Action 2: Choose Search Module for Maintenance. The actual target is highlighted in gold.
Choose Search Module for Maintenance.
Action 3: Activate official Maintenance once. The actual target is highlighted in gold.
Activate official Maintenance once.
Action 4: Open official Maintenance. The actual target is highlighted in gold.
Open official Maintenance.

Step 2. Create the equipment category

Open Maintenance → Equipment → New. Enter Name Demo Vacuum Pump H66. In Equipment Category, enter Demo HVAC Tools H66 and select Create and edit…. In the native category dialog, select Demo Air Owner as Technician Responsible, retain Demo Air HVAC and click Save. This saves the category; the parent equipment still needs its own Save. The category supplies the equipment’s Technician in this test.

Action 6: Choose company Equipment. The actual target is highlighted in gold.
Choose company Equipment.
Action 7: Create one fictional company tool. The actual target is highlighted in gold.
Create one fictional company tool.
Action 8: Name this fictional vacuum pump. The actual target is highlighted in gold.
Name this fictional vacuum pump.
Action 9: Enter the fictional tool category. The actual target is highlighted in gold.
Enter the fictional tool category.
Action 10: Open category Create and edit. The actual target is highlighted in gold.
Open category Create and edit.
Action 11: Choose the owner as responsible technician. The actual target is highlighted in gold.
Choose the owner as responsible technician.
Action 12: Select the existing demo owner. The actual target is highlighted in gold.
Select the existing demo owner.
Action 13: Save this category before the equipment. The actual target is highlighted in gold.
Save this category before the equipment.

Step 3. Assign the pump to the existing van and location

Under Used By, explicitly select Vehicle; the initial form selected Employee. In Vehicle, choose DEMO-H65-01: Demo Training Motors H65/Demo Service Van H65, the existing fictional van. In Used in location, select the existing WH/Demo Van 01. Retain Technician Demo Air Owner. The tool’s Maintenance Team remains empty in this test; select the team explicitly on its request later. Vehicle is a real Fleet link and Used in location is a real Inventory location link supplied by the installed official integrations. Selecting them does not supply a tool purchase or stock quantity.

Action 14: Explicitly assign the tool to a Vehicle. The actual target is highlighted in gold.
Explicitly assign the tool to a Vehicle.
Action 15: Find the existing fictional service van. The actual target is highlighted in gold.
Find the existing fictional service van.
Action 16: Select the existing Fleet van. The actual target is highlighted in gold.
Select the existing Fleet van.
Action 17: Find the existing Inventory location. The actual target is highlighted in gold.
Find the existing Inventory location.
Action 18: Select the existing van stock location. The actual target is highlighted in gold.
Select the existing van stock location.
Action 19: Check the inherited owner technician. The actual target is highlighted in gold.
Check the inherited owner technician.

Step 4. Identify and save the fictional tool

On Product Information, enter Serial Number DEMO-H66-PUMP-001 and set Effective Date October 1, 2026, committing the date with Enter. On Description, label the tool, serial and van assignment as fictional training data. Explain that no actual inspection, calibration, purchase, receipt or stock movement is recorded. Click Save manually, then reload. Check the same name/category, Vehicle assignment, van, location and serial. Employee is empty under the selected Vehicle assignment. The Assigned Date on the main form is a separate field from Effective Date; this capture retained its October 16 default.

Action 20: Open Product Information. The actual target is highlighted in gold.
Open Product Information.
Action 21: Enter the fictional pump serial. The actual target is highlighted in gold.
Enter the fictional pump serial.
Action 22: Open this tool Effective Date. The actual target is highlighted in gold.
Open this tool Effective Date.
Action 23: Commit the fictional October 1 effective date. The actual target is highlighted in gold.
Commit the fictional October 1 effective date.
Action 24: Open the equipment Description. The actual target is highlighted in gold.
Open the equipment Description.
Action 25: Label the tool and assignment as fictional. The actual target is highlighted in gold.
Label the tool and assignment as fictional.
Action 26: Save the fictional equipment once. The actual target is highlighted in gold.
Save the fictional equipment once.
Action 27: Reopen the saved Product Information. The actual target is highlighted in gold.
Reopen the saved Product Information.
Action 28: The saved tool retains its fictional serial. The actual target is highlighted in gold.
The saved tool retains its fictional serial.

Step 5. Create a request from the saved equipment

Click 0 Maintenance, then New. Equipment is preselected as Demo Vacuum Pump H66/DEMO-H66-PUMP-001 and Assignees includes Demo Air Owner. Enter Subjects DEMO-H66-CHECK-001 — Fictional pump inspection. Select Preventive as Maintenance Type and explicitly choose Internal Maintenance in Team. That required field was initially empty even though the team existed. Category follows the equipment. The Created By field stays empty in this test; it is not proof of the assignee.

Action 29: Open this saved tool Maintenance requests. The actual target is highlighted in gold.
Open this saved tool Maintenance requests.
Action 30: Create one request from the saved equipment. The actual target is highlighted in gold.
Create one request from the saved equipment.
Action 31: Check the equipment inherited from its parent. The actual target is highlighted in gold.
Check the equipment inherited from its parent.
Action 32: Check the existing owner in Assignees. The actual target is highlighted in gold.
Check the existing owner in Assignees.
Action 33: Name the fictional pump inspection. The actual target is highlighted in gold.
Name the fictional pump inspection.
Action 34: Choose Preventive maintenance. The actual target is highlighted in gold.
Choose Preventive maintenance.
Action 35: Find the existing Internal Maintenance team. The actual target is highlighted in gold.
Find the existing Internal Maintenance team.
Action 36: Select the required Internal Maintenance team. The actual target is highlighted in gold.
Select the required Internal Maintenance team.

Step 6. Set both planned time endpoints

Click the start value beside Planned Date?, enter October 7, 2026, 9:00 AM and press Enter. Click the end value, enter October 7, 2026, 9:30 AM and press Enter. Review both displayed endpoints. The initial form proposed a one-hour window; changing only the start would not establish the intended half-hour duration. These local times save as 13:00–13:30 UTC in this configured timezone. Keep the timezone and actual operating schedule under review.

Action 37: Open the planned start date and time. The actual target is highlighted in gold.
Open the planned start date and time.
Action 38: Commit October 7 at 9 AM local time. The actual target is highlighted in gold.
Commit October 7 at 9 AM local time.
Action 39: Open the separate planned end time. The actual target is highlighted in gold.
Open the separate planned end time.
Action 40: Commit October 7 at 9:30 AM local time. The actual target is highlighted in gold.
Commit October 7 at 9:30 AM local time.

Step 7. Bound the weekly recurrence and save

Check Recurrent. Set Repeat Every 1, choose Weeks, then choose Until and enter October 14, 2026, committing the date with Enter. In Notes, label this as fictional internal preventive-maintenance training, with no actual inspection or calibration performed. Include the half-hour weekly plan and end date. Click Save manually, wait for the saved state and reload. Confirm one request, New Request stage, In Progress state, the existing tool/team/owner assignee, both dates and the retained recurrence settings.

Action 41: Enable this bounded training recurrence. The actual target is highlighted in gold.
Enable this bounded training recurrence.
Action 42: Keep Repeat Every at one. The actual target is highlighted in gold.
Keep Repeat Every at one.
Action 43: Choose Weeks as the repeat unit. The actual target is highlighted in gold.
Choose Weeks as the repeat unit.
Action 44: Choose an Until boundary. The actual target is highlighted in gold.
Choose an Until boundary.
Action 45: Open the recurrence end date. The actual target is highlighted in gold.
Open the recurrence end date.
Action 46: Commit the inclusive October 14 end. The actual target is highlighted in gold.
Commit the inclusive October 14 end.
Action 47: Label the planned inspection as fictional. The actual target is highlighted in gold.
Label the planned inspection as fictional.
Action 48: Save this first bounded request once. The actual target is highlighted in gold.
Save this first bounded request once.
Action 49: The saved request remains In Progress. The actual target is highlighted in gold.
The saved request remains In Progress.

Step 8. Check what Repaired alone does

On the October 7 request, select Repaired in the stage bar and click Save manually. The separate state control still reads In Progress. In this test there is still one request, Close Date is empty and no October 14 occurrence has been created. Repaired is the workflow stage; it is not the completion trigger demonstrated here. This training check prevents a stage change from being mistaken for working recurrence.

Action 50: Choose the Repaired stage. The actual target is highlighted in gold.
Choose the Repaired stage.
Action 51: Save Repaired without completing the request. The actual target is highlighted in gold.
Save Repaired without completing the request.
Action 52: Repaired still has separate In Progress state. The actual target is highlighted in gold.
Repaired still has separate In Progress state.

Step 9. Mark the original request Done once

Open the separate In Progress state dropdown beside the subject/priority area, select Done and click Save manually once. Reload. The original remains Repaired/Done and Close Date becomes October 16, the actual completion day, while Planned Date remains October 7. Native recurrence creates one new request for October 14, 9:00–9:30 AM, in New Request/In Progress, with the same equipment, team, assignee, subject and repeat settings. It advances from the original planned start, not from the completion date. This is triggered by saving Done; no scheduled job or calendar-date wait was used.

Action 53: Open the separate request state. The actual target is highlighted in gold.
Open the separate request state.
Action 54: Choose Done for this fictional occurrence. The actual target is highlighted in gold.
Choose Done for this fictional occurrence.
Action 55: Save Done once to create the next week. The actual target is highlighted in gold.
Save Done once to create the next week.

Step 10. Reopen without repeating completion

Reload the completed original. Add a short training-review sentence to Notes, save that notes-only change and reload. There are still exactly two requests; an ordinary note edit did not create another occurrence. Click the Maintenance Requests breadcrumb to find the generated October 14 card, then open it. Its subject is copied, so check its planned date to distinguish it from the original. Do not reopen the completed original and apply Done again as a duplication test; that behavior is outside this guide’s verification.

Action 56: Reopen the original without choosing Done again. The actual target is highlighted in gold.
Reopen the original without choosing Done again.
Action 57: Add only a training review note. The actual target is highlighted in gold.
Add only a training review note.
Action 58: Save the notes-only review without another occurrence. The actual target is highlighted in gold.
Save the notes-only review without another occurrence.
Action 59: Return to the equipment Maintenance Requests. The actual target is highlighted in gold.
Return to the equipment Maintenance Requests.
Action 60: Open the generated October 14 occurrence. The actual target is highlighted in gold.
Open the generated October 14 occurrence.
Action 61: Check this occurrence planned October 14 window. The actual target is highlighted in gold.
Check this occurrence planned October 14 window.

Step 11. Complete the final occurrence and check the stop

For the fictional October 14 occurrence, select Repaired, use the separate state dropdown to choose Done, then save and reload. Both requests now retain Repaired/Done and the October 16 close date. No October 21 request is created because it falls after Until October 14. The October 14 occurrence itself was allowed, so the end date is inclusive in this test. Recurrent remains checked on the saved requests; the end-date boundary stopped creation without clearing that setting.

Action 62: Choose Repaired for the final training occurrence. The actual target is highlighted in gold.
Choose Repaired for the final training occurrence.
Action 63: Open the final occurrence separate state. The actual target is highlighted in gold.
Open the final occurrence separate state.
Action 64: Choose Done for the final fictional occurrence. The actual target is highlighted in gold.
Choose Done for the final fictional occurrence.
Action 65: Save the final Done once and stop beyond Until. The actual target is highlighted in gold.
Save the final Done once and stop beyond Until.
Action 66: The final occurrence remains Done. The actual target is highlighted in gold.
The final occurrence remains Done.
Action 67: Its planned date stays October 14. The actual target is highlighted in gold.
Its planned date stays October 14.

Step 12. Review the equipment’s history and preserve the handoff

Use the breadcrumbs to return to the saved pump. Its smart button now shows 2 Maintenance. Open it and choose List View: the two saved rows retain the same subject, owner technician and Repaired stage. Open each record to check its planned date and separate Done state. The equipment has two linked requests and zero open requests. Its serial does not match a stock lot in this example, and no pump stock quantity was supplied. The existing Fleet service/$75 draft bill, filters, employee leave, billed time and earlier financial records remain unchanged.

Action 68: Use the Maintenance Requests breadcrumb. The actual target is highlighted in gold.
Use the Maintenance Requests breadcrumb.
Action 69: Return to the saved pump through its breadcrumb. The actual target is highlighted in gold.
Return to the saved pump through its breadcrumb.
Action 70: The equipment has two linked maintenance requests. The actual target is highlighted in gold.
The equipment has two linked maintenance requests.
Action 71: Open both saved requests from the equipment. The actual target is highlighted in gold.
Open both saved requests from the equipment.
Action 72: Choose List View for the history. The actual target is highlighted in gold.
Choose List View for the history.
Action 73: Review two Repaired rows with the same owner. The actual target is highlighted in gold.
Review two Repaired rows with the same owner.
Action 74: Open the first saved history occurrence. The actual target is highlighted in gold.
Open the first saved history occurrence.
Action 75: Check Done on this saved occurrence. The actual target is highlighted in gold.
Check Done on this saved occurrence.
Action 76: Open the other saved history occurrence. The actual target is highlighted in gold.
Open the other saved history occurrence.
Action 77: The other occurrence also remains Done. The actual target is highlighted in gold.
The other occurrence also remains Done.
Action 5: Later navigation reference: the Maintenance menu. The actual target is highlighted in gold.
Later navigation reference: the Maintenance menu.

Check the result

One company-owned training pump retains category, serial, Vehicle assignment, Fleet van and Inventory location. One half-hour preventive request is saved for October 7. Repaired alone creates no successor; saving the separate Done state creates exactly one October 14 request with the same half-hour window. Reload and a notes-only save leave two requests. Completing the final occurrence creates no October 21 request beyond the inclusive October 14 end date. Both remain Repaired/Done, with two linked requests and zero open. Scoped preservation checks retain the prior $75 Fleet draft, stock, timesheet, time-off and financial records. There are still 18 accounting moves, eight payments and zero Bank entries.

If your screen differs

Confirm the actual record and visible controls after navigation; this client briefly exposes stale cached content before the new form settles. Team must be selected on the request, both planned-time endpoints need review and Repaired stage differs from Done state. The bounded weekly preventive case is the demonstrated automation. Forever, other intervals, cancellation, reopening/reapplying Done, notifications, other-role access and overdue escalation were not tested. This is internal company-tool scheduling, with no actual inspection, calibration compliance, customer-installed equipment history, stock movement or automatic dispatch established.

Frequently asked questions

How do I schedule maintenance for company tools in Odoo? Create the company-owned equipment under Maintenance → Equipment, select its category and responsibility, then open its Maintenance smart button and create a Preventive request. Review Team, Assignees and both planned time endpoints before saving. The tested owner workflow uses stock Odoo 20 Community and official Fleet/Employees/Inventory integrations for the available assignment links.
Can Odoo Maintenance manage customer-installed HVAC equipment? This guide demonstrates a company-owned pump linked to the company’s Fleet van and Inventory location. It does not establish a customer-installed equipment register, service agreement, customer equipment history or calibration compliance. Those outcomes need their own verified workflow; the company-tool example is not evidence that they are implemented.
Does Odoo automatically create the next tool-maintenance request? In the tested weekly Preventive request, Recurrent with Repeat Every 1 Week and Until October 14 creates the next planned occurrence when the separate state is saved as Done. Repaired stage alone does not. Completing the October 14 occurrence creates no October 21 request beyond the end date. Reload and a notes-only edit retained two requests; reapplying Done and other recurrence modes were not tested.

Continue building the business

Continue with How do I track HVAC job costs in Odoo?. Reuse the existing van, tool and job records rather than rebuilding the business for later lessons.

Talk to an Odoo partner

Bring your current process and the result you need to Onward to plan your Odoo workflow. Talk to an Odoo partner.