Running an HVAC business with Odoo

How do I check stock availability and replenishment needs in Odoo?

Workflow overview: How do I check stock availability and replenishment needs in Odoo?
Workflow overview. Instructional screenshots show the actual demo interface.

Check Odoo stock by location, trace completed movements and inspect pending receipts and RFQs before ordering HVAC parts again.

Odoo inventory reporting helps Alex answer three different questions: what parts are physically on hand, where they are, and what supply is still pending. In this example, Demo Air has two filters in its van and none in the warehouse. The company forecast shows 52 because 50 more are on open receipts. A separate capacitor rule shows no new quantity to order because an existing draft RFQ already supplies four pending units. This guide follows those numbers to their native source records.

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. Use the existing Inventory setup and owner role. Complete H15 warehouse and van locations, H35 replenishment, H36 parts delivery and H38 supplier return. Keep the established receipts, returns, stock count and later job movements rather than recreating them. The quantities below describe this series checkpoint after later deliveries; your business will have its own quantities and dates. No Enterprise dashboard, additional module or customized report is required for the demonstrated views.

Step-by-step workflow

Step 1. Open the company stock report

Open Inventory → Reporting → Stock. Check the current company is Demo Air HVAC. The tested list contains six tracked products and columns On Hand, Free to Use, Incoming, Outgoing and Unit. This opening view is the company stock scope, not a promise that every unit is in WH/Stock. Find [H12-FILTER] Demo Return-Air Filter H12 and [H12-CAP] Demo Run Capacitor H12 by their references.

Action 1: Check the current company: Demo Air HVAC. The actual target is highlighted in gold.
Check the current company: Demo Air HVAC.
Action 2: Company stock report: six tracked products. The actual target is highlighted in gold.
Company stock report: six tracked products.

Step 2. Read physical stock and pending supply separately

On the filter row, check On Hand 2.00, Free to Use 2.00, Incoming 50.00 and Outgoing 0.00, in Units. The capacitor has one on hand and one free, with zero incoming/outgoing in this report. Free to Use equals On Hand here because none of these units is reserved. Do not add Incoming to physical stock or use a company-wide free quantity as proof that the warehouse has that quantity ready to pick.

Action 3: Filters:2 on hand/free,50 incoming,0 outgoing. The actual target is highlighted in gold.
Filters:2 on hand/free,50 incoming,0 outgoing.
Action 4: Capacitor:1 on hand/free,0 incoming/outgoing. The actual target is highlighted in gold.
Capacitor:1 on hand/free,0 incoming/outgoing.

Step 3. Locate the two filters

Click Locations on the filter row. The native Stock by Location view retains the Product filter and Internal Locations. It shows WH/Demo Van 01, Inventoried Quantity 2.00, Reserved Quantity 0.00. This is the physical location needed for a warehouse-versus-van decision. The zero-stock warehouse row is omitted in this view; absence of a row is not evidence of a positive quantity elsewhere.

Action 5: Open Locations for the filter product. The actual target is highlighted in gold.
Open Locations for the filter product.
Action 6: The two filters are in WH/Demo Van01, with none reserved. The actual target is highlighted in gold.
The two filters are in WH/Demo Van01, with none reserved.

Step 4. Check the warehouse scope explicitly

In the same search box, type WH/Stock, then select Search Location for: WH/Stock. Check the resulting Location: WH/Stock search facet. The demonstrated result is No Stock On Hand. Remove only that Location facet with its close control; the Product/Internal Locations filters remain, and the two-unit van row returns. WH/Stock and WH/Demo Van 01 are sibling internal locations under WH in this setup. Verify the actual location hierarchy rather than assuming a warehouse parent and its stock location are interchangeable.

Action 7: Search Location for WH/Stock, keeping the product scope. The actual target is highlighted in gold.
Search Location for WH/Stock, keeping the product scope.
Action 8: WH/Stock filter: No Stock On Hand. The actual target is highlighted in gold.
WH/Stock filter: No Stock On Hand.
Action 9: Remove only the WH/Stock Location facet. The actual target is highlighted in gold.
Remove only the WH/Stock Location facet.
Action 10: The original product/internal-location scope again shows two filters in the van. The actual target is highlighted in gold.
The original product/internal-location scope again shows two filters in the van.

Step 5. Trace the completed filter movements

Click the Stock breadcrumb, then History on the filter row. Keep the Product and Done filters. The eight history rows include six received, three transferred to the van, one van count reduction, two repair movements, an initial customer delivery of one, a return of one and a later delivery of two. Reconcile by From/To, not by adding all row quantities: WH/Stock is 6 − 3 − 1 repair issue − 1 first delivery + 1 return − 2 later delivery = 0; the van is 3 − 1 count reduction = 2. The repair’s Production → Inventory adjustment row does not deduct a second unit from WH/Stock.

Action 11: Use Stock to return to the company report. The actual target is highlighted in gold.
Use Stock to return to the company report.
Action 12: Open the filter movement History. The actual target is highlighted in gold.
Open the filter movement History.
Action 13: Keep Product and Done filters: eight completed movements. The actual target is highlighted in gold.
Keep Product and Done filters: eight completed movements.

Step 6. Inspect the filter forecast and its source orders

Return through Stock and click Forecast on the filter row. The Forecasted Report displays 2 On Hand + 50 Incoming − 0 Outgoing = 52 Forecasted. Its source rows are P00001: 4, P00002: 5, P00003: 20, P00004: 1 and P00005: 20 expected units. These are open, unreceived training purchases, including the earlier approval examples; a real review must confirm that the orders and expected dates still represent valid supply. A separate 1 Quotation row reduces Forecasted with Pending to 51. That pending quotation does not make the current physical stock 51 or create a completed delivery.

Action 14: Open Forecast for the filter product. The actual target is highlighted in gold.
Open Forecast for the filter product.
Action 15: 2 on hand +50 incoming -0 outgoing =52 forecasted. The actual target is highlighted in gold.
2 on hand +50 incoming -0 outgoing =52 forecasted.
Action 16: Trace the50 incoming Units to five open purchases. The actual target is highlighted in gold.
Trace the50 incoming Units to five open purchases.
Action 17: One pending quotation brings Forecasted with Pending to51. The actual target is highlighted in gold.
One pending quotation brings Forecasted with Pending to51.

Step 7. Review the capacitor reordering rule

Return to Stock, then click Replenishment on the capacitor row. This opens Reordering Rules, filtered to that product. The existing WH/Stock rule shows On Hand 1.00, Forecast 5.00, Trigger Auto, Min 2.00, Max 5.00 and To Order 0.00. A low physical quantity alone is not a reason to generate another purchase. This is the existing rule from H35; leave its Min, Max, Trigger and order quantity unchanged during the review.

Action 18: Open Replenishment for the capacitor. The actual target is highlighted in gold.
Open Replenishment for the capacitor.
Action 19: Review the existing Auto rule: On Hand1, Forecast5, To Order0. The actual target is highlighted in gold.
Review the existing Auto rule: On Hand1, Forecast5, To Order0.

Step 8. Explain the pending RFQ before buying again

Click the small chart button beside the rule’s Forecast. The capacitor Forecasted Report shows 1 On Hand, 0 Incoming, 0 Outgoing, 1 Forecasted, then Requests for quotation: P00008, 4.00 Units and Forecasted with Pending 5.00. Click P00008. Check Request for Quotation, the one capacitor line of 4 Units at $12, and total $50.88 including the example tax. It is still a draft, with zero received and billed quantities in the saved source record. Review the existing supply before deciding whether to confirm, change or cancel it; this lesson leaves it as an RFQ.

Action 20: Open the chart beside the rule forecast. The actual target is highlighted in gold.
Open the chart beside the rule forecast.
Action 21: Core forecast:1 on hand,0 incoming/outgoing,1 forecasted. The actual target is highlighted in gold.
Core forecast:1 on hand,0 incoming/outgoing,1 forecasted.
Action 22: Draft P00008 adds4 pending Units, giving pending forecast5. The actual target is highlighted in gold.
Draft P00008 adds4 pending Units, giving pending forecast5.
Action 23: Follow the existing P00008 request for quotation. The actual target is highlighted in gold.
Follow the existing P00008 request for quotation.
Action 24: P00008 remains a draft request for quotation. The actual target is highlighted in gold.
P00008 remains a draft request for quotation.
Action 25: Its same one line is4 capacitor Units at $12. The actual target is highlighted in gold.
Its same one line is4 capacitor Units at $12.
Action 26: Review the unchanged $50.88 total; leave the RFQ pending. The actual target is highlighted in gold.
Review the unchanged $50.88 total; leave the RFQ pending.

Step 9. Reopen the report and reconcile the result

Return to Inventory → Reporting → Stock and reload. The filter remains two on hand/free with 50 incoming; the capacitor and serial-tracked equipment each remain one on hand/free. Existing receipts, deliveries, purchases and the reordering rule retain their quantities/states. This review creates no purchase, transfer, stock count, receipt, invoice or payment. It identifies where stock is held and which pending supply needs an office decision.

Action 27: Reopened Stock keeps2 filters,1 capacitor and1 serial unit on hand. The actual target is highlighted in gold.
Reopened Stock keeps2 filters,1 capacitor and1 serial unit on hand.

Check the result

The native report and location view agree: two filters are in the van, none are in WH/Stock, and none is reserved. Completed history explains that split. Five existing unreceived purchases contribute 50 incoming filters and a forecast of 52. The capacitor has one physically available unit; its reordering rule counts four units on draft RFQ P00008, yielding pending forecast five and To Order zero. Reopening retains the same product quantities, pending movements, purchases and rule. No duplicate procurement or new stock/financial transaction was created.

If your screen differs

Results depend on the company, location, date and search scope. This test covers the owner role and the displayed views, not every stock-report permission or multi-company configuration. On Hand, Free to Use, Incoming, Forecasted and Forecasted with Pending answer different questions. Here the rule’s Forecast includes the draft RFQ while the product’s core Forecasted value is one; follow its source rows before calling this an error or ordering again. The test did not reserve new stock, run the replenishment scheduler, change the rule or save a reusable filter. H35 retains the earlier scheduler/repeat evidence; unattended execution is still disabled in the training runtime. Opening the native location report removed one empty zero-quantity/zero-reservation storage row through shipped housekeeping; physical quantities, reservations and movements did not change. Unit Cost/Total Value were not validated as a financial valuation or job-profit report.

Frequently asked questions

How do I check stock availability in Odoo? Open Inventory → Reporting → Stock and read On Hand, Free to Use, Incoming and Outgoing for the selected product/company. Use its Locations view before promising stock at a particular warehouse or van. In the verified example, two filters were free at company level but both were in the van; the warehouse had none.
Why do Odoo on-hand and forecast quantities differ? The tested filter report shows two physically on hand plus 50 on existing unreceived purchase receipts, giving 52 forecasted. Pending quotations and RFQs appear separately in Forecasted with Pending. The capacitor rule counted a four-unit draft RFQ and showed five forecast while the product core forecast remained one. Check the source documents and scope before buying again.
Can I see warehouse and van stock separately in Odoo? Yes, the demonstrated stock product row has Locations. Its Internal Locations view showed two filters at WH/Demo Van 01 with none reserved. Adding Location: WH/Stock returned No Stock On Hand; removing only that facet restored the van row. The van and WH/Stock are sibling internal locations here, so review the actual hierarchy and selected location scope.

Continue building the business

Continue with H21: How do I record an HVAC site assessment in Odoo?. Use the location and pending-supply checks before promising parts for the next job.

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.