Running an HVAC business with Odoo

How do I track service vans and vehicle costs in Odoo?

Workflow overview: How do I track service vans and vehicle costs in Odoo?
Workflow overview. Instructional screenshots show the actual demo interface.

Create a service van and driver record, track a fictional inspection cost and review its linked draft supplier bill in Odoo Fleet.

Alex wants to know which technician has the van and what its maintenance costs. We create a clearly fictional Fleet vehicle, assign the existing technician and record one $75 inspection. We follow that same service through its stages, inspect Fleet Costs and use the native supplier-bill handoff. The bill remains a labelled draft for review.

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 How do I create an employee record in Odoo?, How do I assign a technician and deadline to an Odoo task?, How do I set up warehouse and service-van stock locations in Odoo?, How do I add suppliers and purchase terms in Odoo? and How do I match a supplier bill to its purchase order in Odoo?. Reuse the Demo Technician H42 contact, Demo Supply H10 supplier and WH/Demo Van 01 Inventory location. The owner performs this lesson. Activate the official Fleet app; the installed official hr_fleet and account_fleet integrations supply employee and accounting links. These are Odoo-authored LGPL-3 modules. Installation adds the owner's stock Fleet administration access; the technician's permissions are unchanged. Model specifications, plate, registration status, mileage, supplier service and cost are invented training data. No actual vehicle or supplier service is supplied.

Step-by-step workflow

Step 1. Activate Fleet and check the starting records

Open Apps, search Fleet, choose the actual module search suggestion and activate the Odoo-authored app once. Wait for installation, then open Fleet. The tested database has no vehicle or model yet. Empty-view sample cards are not saved business records. Search your own existing records before adding another van.

Action 1: Find the official Fleet app. The actual target is highlighted in gold.
Find the official Fleet app.
Action 2: Activate official Fleet once. The actual target is highlighted in gold.
Activate official Fleet once.
Action 3: Open the native Fleet app. The actual target is highlighted in gold.
Open the native Fleet app.

Step 2. Create the training vehicle model

Open Fleet → Configuration → Models → New. Enter Demo Service Van H65 in Model name. In Manufacturer, enter Demo Training Motors H65 and choose its native Create option. Set Vehicle Type → Other, leave Category empty and save the model. Reopen it to check the manufacturer and type. Keep the other technical defaults unchanged; they are not verified vehicle specifications. This is ordinary Fleet configuration data.

Action 4: Open Fleet Configuration. The actual target is highlighted in gold.
Open Fleet Configuration.
Action 5: Open the native vehicle Models. The actual target is highlighted in gold.
Open the native vehicle Models.
Action 6: Create one fictional vehicle model. The actual target is highlighted in gold.
Create one fictional vehicle model.
Action 7: Name this fictional service van model. The actual target is highlighted in gold.
Name this fictional service van model.
Action 8: Enter the fictional manufacturer. The actual target is highlighted in gold.
Enter the fictional manufacturer.
Action 9: Create the single fictional manufacturer. The actual target is highlighted in gold.
Create the single fictional manufacturer.
Action 10: Set Vehicle Type to Other. The actual target is highlighted in gold.
Set Vehicle Type to Other.
Action 11: Save this vehicle model once. The actual target is highlighted in gold.
Save this vehicle model once.
Action 12: The saved model retains its manufacturer. The actual target is highlighted in gold.
The saved model retains its manufacturer.

Step 3. Create the vehicle with the existing technician

On the saved model, click New Vehicle. The model is preselected. Enter DEMO-H65-01 as License Plate and select the existing Demo Technician H42 contact in Driver. Set Last Odometer 1000, then explicitly change its unit from km to mi. The Driver field uses the contact linked to the technician; do not create another employee or person for this example.

Action 13: Create the van from the saved model. The actual target is highlighted in gold.
Create the van from the saved model.
Action 14: Enter the fictional license plate. The actual target is highlighted in gold.
Enter the fictional license plate.
Action 15: Find the existing technician contact. The actual target is highlighted in gold.
Find the existing technician contact.
Action 16: Select the existing technician as Driver. The actual target is highlighted in gold.
Select the existing technician as Driver.
Action 17: Enter the training van reading of 1000. The actual target is highlighted in gold.
Enter the training van reading of 1000.
Action 18: Change the van odometer unit to miles. The actual target is highlighted in gold.
Change the van odometer unit to miles.

Step 4. Save the fictional vehicle and its manual stock reference

Set Location to Demo Van 01 — Inventory reference WH/Demo Van 01; manual text only. On Description, identify the vehicle and plate as fictional and explain that its Inventory location is a separate record. Select Registered, retain the displayed registration date October 16, 2026, and click Save manually. This is the current-date default shown during capture; use a reviewed registration date for an actual vehicle. Reopen the vehicle. Its native name is computed from plate and model: DEMO-H65-01: Demo Training Motors H65/Demo Service Van H65. Driver, 1000 mi and Registered persist; Drivers History has one assignment. The chassis number stays blank. The story alias Demo Van 01 is retained in the text, not entered into a separate vehicle-name field.

Action 19: Add the manual Inventory location reference. The actual target is highlighted in gold.
Add the manual Inventory location reference.
Action 20: Open the vehicle Description. The actual target is highlighted in gold.
Open the vehicle Description.
Action 21: Label this vehicle and location as fictional. The actual target is highlighted in gold.
Label this vehicle and location as fictional.
Action 22: Select the training Registered status. The actual target is highlighted in gold.
Select the training Registered status.
Action 23: Review the displayed Registration Date. The actual target is highlighted in gold.
Review the displayed Registration Date.
Action 24: Save the fictional vehicle once. The actual target is highlighted in gold.
Save the fictional vehicle once.
Action 25: The saved van has one Driver History assignment. The actual target is highlighted in gold.
The saved van has one Driver History assignment.
Action 26: The saved Registration Date stays visible. The actual target is highlighted in gold.
The saved Registration Date stays visible.

Step 5. Open Services and define the inspection type

Click the vehicle's 0 Services smart button, then New. Vehicle and Driver are already filled from the van. In Service Type, enter Demo Inspection H65 and choose Create and edit…. The native dialog shows Name and Company. Keep Demo Air HVAC and click Save. The created type is in the service category through the form's standard defaults. The original Vendor Bill service type remains unchanged.

Action 27: Open this van’s Services. The actual target is highlighted in gold.
Open this van’s Services.
Action 28: Add one fictional service to this van. The actual target is highlighted in gold.
Add one fictional service to this van.
Action 29: Enter the fictional inspection service type. The actual target is highlighted in gold.
Enter the fictional inspection service type.
Action 30: Open native Create and edit for the type. The actual target is highlighted in gold.
Open native Create and edit for the type.
Action 31: Save the fictional inspection type once. The actual target is highlighted in gold.
Save the fictional inspection type once.

Step 6. Enter the labelled service and mileage

Use Description DEMO-H65-SERVICE-001 — Fictional van inspection, Date October 14, 2026, Cost 75.00 USD, and the existing Vendor Demo Supply H10. Explicitly set Odometer Value 1000 mi: this service form initially showed zero despite the vehicle's 1000-mile reading. In Notes, say this is a fictional inspection, synthetic supplier and illustrative cost, with no actual work, invoice or payment. Verify the preselected van/driver, then save. The record starts at New.

Action 32: Describe the fictional van inspection. The actual target is highlighted in gold.
Describe the fictional van inspection.
Action 33: Check the van inherited from its Services button. The actual target is highlighted in gold.
Check the van inherited from its Services button.
Action 34: Check the existing Driver inherited from this van. The actual target is highlighted in gold.
Check the existing Driver inherited from this van.
Action 35: Open the native service Date control. The actual target is highlighted in gold.
Open the native service Date control.
Action 36: Enter the illustrative October 14 service date. The actual target is highlighted in gold.
Enter the illustrative October 14 service date.
Action 37: Enter the illustrative inspection cost of 75. The actual target is highlighted in gold.
Enter the illustrative inspection cost of 75.
Action 38: Find the existing demo supplier. The actual target is highlighted in gold.
Find the existing demo supplier.
Action 39: Select the existing demo supplier. The actual target is highlighted in gold.
Select the existing demo supplier.
Action 40: Set this service reading explicitly to 1000 miles. The actual target is highlighted in gold.
Set this service reading explicitly to 1000 miles.
Action 41: Label the service and cost as fictional. The actual target is highlighted in gold.
Label the service and cost as fictional.
Action 42: Save this one fictional service as New. The actual target is highlighted in gold.
Save this one fictional service as New.

Step 7. Track the same service through Running and Done

For this simulated inspection, select Running and save the same record. Then select Done, save and reload. Description, vendor, driver, $75 cost and 1000-mile service reading persist on one service. Its start date remains October 14. The End of Service value remains empty in this test; Done did not fill it automatically. No actual inspection was performed. The vehicle reading and service reading produce two odometer-log rows at the same 1000 miles, each belonging to its respective entry.

Action 43: Move the same fictional service to Running. The actual target is highlighted in gold.
Move the same fictional service to Running.
Action 44: Save Running on this same service once. The actual target is highlighted in gold.
Save Running on this same service once.
Action 45: Move this simulated inspection to Done. The actual target is highlighted in gold.
Move this simulated inspection to Done.
Action 46: Save Done on this same service once. The actual target is highlighted in gold.
Save Done on this same service once.
Action 47: The Done service retains its illustrative cost. The actual target is highlighted in gold.
The Done service retains its illustrative cost.

Step 8. Review Fleet Costs with its actual scope

Open Reporting → Costs, then Pivot View. With the native Date: 2026 filter, the van and total show Service 75.00 / Contract 0.00 / Cost 75.00. There is no vehicle contract. This same $75 was already included while the service was New, so check the service stage separately. A Fleet Costs total alone is not proof that work is complete, an invoice is posted or money has been paid.

Action 48: Open the native Fleet Reporting menu. The actual target is highlighted in gold.
Open the native Fleet Reporting menu.
Action 49: Open the native Costs report. The actual target is highlighted in gold.
Open the native Costs report.
Action 50: Switch Costs Analysis to Pivot View. The actual target is highlighted in gold.
Switch Costs Analysis to Pivot View.
Action 51: Review Service 75, Contract 0 and Total 75. The actual target is highlighted in gold.
Review Service 75, Contract 0 and Total 75.

Step 9. Create the native draft-bill handoff once

Return to the existing service and click New Service's Bill. The installed accounting integration creates one linked Draft Bill for Demo Supply H10, with one quantity-one inspection line at $75. It does not create another service. In this test, tax is empty and Total is $75, while Bill Date and Bill Reference initially are blank. The line defaults to Cost of Goods Sold. Review those defaults before any confirmation; the handoff has not supplied a reviewed supplier invoice or accounting decision.

Action 52: Create one native draft service bill. The actual target is highlighted in gold.
Create one native draft service bill.
Action 53: The generated draft has one inspection unit. The actual target is highlighted in gold.
The generated draft has one inspection unit.

Step 10. Label and save the draft for review

Enter the fictional Bill Date October 14, 2026, commit it with Enter, and enter Bill Reference DEMO-H65-DRAFT-REVIEW. Click Save manually. Editing the generated draft's reference initially left Save disabled because Bill Date was required by the form; filling that date resolved it. Inspect Journal Items and the line's Cost of Goods Sold account. Retain the bill as Draft for account, tax and supporting-invoice review. Leave Confirm unused. PO Matching is 0%: this handoff came from a Fleet service, without linking a purchase order.

Action 54: Review the required Bill Date input. The actual target is highlighted in gold.
Review the required Bill Date input.
Action 55: Commit the fictional October 14 Bill Date. The actual target is highlighted in gold.
Commit the fictional October 14 Bill Date.
Action 56: Label this draft for separate review. The actual target is highlighted in gold.
Label this draft for separate review.
Action 57: Save the labelled review draft without confirming. The actual target is highlighted in gold.
Save the labelled review draft without confirming.
Action 58: Open the draft Journal Items for review. The actual target is highlighted in gold.
Open the draft Journal Items for review.
Action 59: Default Cost of Goods Sold remains under review. The actual target is highlighted in gold.
Default Cost of Goods Sold remains under review.
Action 60: PO Matching is zero for this Fleet handoff. The actual target is highlighted in gold.
PO Matching is zero for this Fleet handoff.

Step 11. Reopen the existing service and its bill

On the draft bill, click 1 Services. This opens the service list; open the existing DEMO-H65-SERVICE-001 — Fictional van inspection row. The service remains Done, its Cost displays $75 without an editable cost input, and its smart button is now Service's Bill. Click that button to reopen the same draft with the saved date and review reference. Reuse the link instead of starting a second bill. The saved result remains one vehicle, one service and one linked draft bill, with $75 Fleet costs.

Action 61: Follow the one existing Services link. The actual target is highlighted in gold.
Follow the one existing Services link.
Action 62: Reopen the same inspection from its list. The actual target is highlighted in gold.
Reopen the same inspection from its list.
Action 63: The same Done service has a read-only cost. The actual target is highlighted in gold.
The same Done service has a read-only cost.
Action 64: Reopen its existing draft instead of another bill. The actual target is highlighted in gold.
Reopen its existing draft instead of another bill.
Action 65: The held draft still shows 75 Amount Due. The actual target is highlighted in gold.
The held draft still shows 75 Amount Due.

Step 12. Keep van stock and accounting review distinct

The Location and Description entries are manual references to WH/Demo Van 01. This Fleet procedure did not move its filters, create an Inventory location or demonstrate a GPS feed. Earlier stock, service-job time, leave, skills and posted financial records are preserved. The new financial record is the unposted $75 draft; payments remain at eight and no Bank entry is added. Review the supporting invoice and intended coding/tax treatment separately before continuing any bill-posting or payment workflow.

Action 66: The van stock reference is manual text only. The actual target is highlighted in gold.
The van stock reference is manual text only.
Action 67: Review the saved fictional vehicle description. The actual target is highlighted in gold.
Review the saved fictional vehicle description.
Action 68: This description creates no automatic Inventory link. The actual target is highlighted in gold.
This description creates no automatic Inventory link.

Check the result

One Fleet vehicle retains its fictional plate/model, existing technician driver, Registered status and 1000-mile reading. One inspection service passes New → Running → Done at $75, with a separate 1000-mile service reading and the original start date. Fleet Costs shows Service75/Contract0/Total75. The native accounting handoff creates one linked $75 draft supplier bill; its required date and review reference are saved, while Cost of Goods Sold/no-tax defaults remain for separate review. Reopening Service's Bill retains the same bill and service. Prior stock, service tasks/time, leave, skills and financial records are preserved; the accounting-move count increases only from17 to18 for the new draft, with eight payments and zero Bank entries.

If your screen differs

This is an owner-administrator test with one fictional vehicle and service. Driver/other-role access, live GPS, automated Inventory links, recurring maintenance alerts and dispatch were not exercised. Location is manually entered text. Technical defaults and Registered status are training values, not proof of actual specifications or external registration. Costs included the service while New; Done did not set End of Service. The bill handoff retained no tax and a default Cost of Goods Sold account; it was deliberately held as a draft for review. Entering a fictional Bill Date allows this training draft to save but does not provide a real invoice or validate its coding. No posted vehicle expense or payment is claimed.

Frequently asked questions

How do I track vehicle maintenance costs in Odoo? Create the Fleet model and vehicle, assign the existing driver and record a labelled service with its date, vendor, cost and explicit odometer reading. Save and track the same service through its stages, then inspect Reporting → Costs. The tested report included the $75 while New, so review stage and accounting status separately from the total.
Can I create a vendor bill from an Odoo Fleet service? The installed official account_fleet integration exposed New Service's Bill on this service. It created one linked $75 Draft Bill with the existing vendor and service line. The form needed Bill Date before the review reference could save. Default Cost of Goods Sold/no-tax values stayed under review; no confirmation or payment was performed. The service then offered Service's Bill to reopen that same draft.
Is an Odoo Fleet vehicle the same as a van stock location? They are separate records in this example. The Fleet vehicle has the driver, mileage and service cost; WH/Demo Van 01 is the existing Internal Inventory location for parts. A manual Location/Description reference did not transfer stock or establish an automatic link. This lesson also does not demonstrate GPS tracking from a typed location.

Continue building the business

Continue with How do I schedule maintenance for company tools in Odoo?. Keep company-owned equipment requests, vehicle service records and customer service jobs clear in the office process.

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.