Inventory¶
1. Purpose¶
Inventory tracks what stock the business holds, where it sits, what it is worth, and every movement in and out. It produces the receipts, delivery notes and internal transfers that warehouse staff work from, and — when valuation is automated — posts the accounting entries that keep the stock figure on the balance sheet true.
After Accounting, this is the most depended-upon module in NestERP. Purchasing, Sales, Manufacturing and our dashboards all move stock through it.
2. Features¶
- Multi-warehouse, with independent stock per warehouse
- Hierarchical storage locations within a warehouse (aisle, rack, shelf)
- Receipts, deliveries, internal transfers and returns, each as its own operation type
- Configurable operation types with their own sequences and default locations
- Multi-step routes — receive in two or three steps, pick/pack/ship on delivery
- Lot and serial number tracking, with full traceability up and down the chain
- Expiry date tracking on lots
- Reordering rules with minimum and maximum stock levels, and replenishment suggestions
- Inventory adjustments (physical counts) with a counted-versus-on-hand difference
- Scrapping, with a dedicated virtual scrap location
- Putaway rules to route incoming goods to the right location automatically
- Stock valuation — manual/periodic or automated/real-time
- Costing methods per product category: Standard, FIFO, or Average (AVCO)
- Landed costs, distributing freight and duty across received products
- Delivery slips, transfer documents and stock reports
- Full move history per product, per location, per lot
3. Where to find it¶
- Menu: Inventory → Overview / Operations / Products / Reporting / Configuration
- Technical names:
stock,stock_account - Tier: Odoo core (Community Edition)
- Available in: Odoo 16, 17 and 18 — required by our stack on all three
4. Modules used¶
| Module | Tier | Why it is needed |
|---|---|---|
stock |
Odoo core | Warehouses, locations, moves, pickings, lots, reordering |
stock_account |
Odoo core | Stock valuation and the journal entries that carry it into the ledger |
product |
Odoo core | The products being moved, their categories and costing methods |
stock_landed_costs |
Odoo core | Optional. Distributes freight and duty onto product cost |
NestERP custom modules that build on Inventory¶
| Module | Odoo version | What it adds |
|---|---|---|
stock_dashboard |
17 · 18 | OWL inventory dashboard |
inventory_dashboard |
16 | Inventory dashboard for the Odoo 16 line |
inventory_adjustments |
16 | Extended stock adjustment workflow |
inventory_valuation_report |
17 | Valuation reporting beyond core |
mrp_internal_conversion |
16 | Converts stock between products through manufacturing |
purchase_multi_approval |
17 · 18 | Approval gate before goods are received and billed |
aegis_dg |
16 | Dangerous-goods handling on top of stock |
5. Configuration¶
Several of these are one-way doors once stock movements exist. Do them in order.
- Enable the features you need first — Inventory → Configuration → Settings: Storage Locations, Multi-Step Routes, Lots & Serial Numbers, Expiration Dates, Units of Measure, Landed Costs. Multi-Step Routes requires Storage Locations and cannot be enabled alone.
- Create the warehouses — Configuration → Warehouses. Set the short name carefully; it prefixes every location and operation sequence and is painful to change later.
- Build the location tree — Configuration → Locations. Only appears once Storage Locations is on.
- Review the operation types — Configuration → Operation Types. Confirm the default source and destination location on each, and the reference sequence.
- Set the delivery and receipt steps per warehouse — one-step, two-step or three-step.
- Configure product categories — this is where valuation lives. For each category set the Costing Method (Standard / FIFO / AVCO) and the Inventory Valuation (Manual or Automated). Automated requires the stock input, output and valuation accounts to be set on the category.
- Set up putaway rules if incoming goods should be routed automatically.
- Create reordering rules per product per warehouse, with min/max quantities.
- Load opening stock through Inventory → Physical Inventory rather than by editing quantities ad hoc, so the opening entry is auditable.
Configuration traps
- Valuation and costing method are set on the product category, not the product. A product silently inherits whichever category it lands in. This is the most common cause of "why is my stock value wrong".
- Switching costing method after transactions exist re-values stock and posts correcting entries. Decide FIFO versus AVCO before go-live, not during.
- Automated valuation without accounts configured fails at the moment of the first transfer, not at configuration time.
- Product type decides whether stock is tracked at all. A product that is not storable holds no quantity, appears in no stock report, and silently breaks dashboards that expect it. See the Version differences section — this field changed in Odoo 18.
- Warehouse short name appears inside every sequence. Set it once, correctly.
6. How it's used¶
Receiving goods¶
- Purchasing — confirms the purchase order, which generates the receipt.
- Storekeeper — Inventory → Overview → Receipts, opens the transfer, sets received quantities, and Validates. Short deliveries create a backorder.
- Storekeeper — assigns lot or serial numbers if the product is tracked.
- System — with automated valuation, posts the stock-input journal entry.
Delivering goods¶
- Sales — confirms the sales order, generating the delivery.
- Storekeeper — picks and Validates the delivery. Under Anglo-Saxon accounting this is the point where cost of goods sold is recognised.
- Accountant — invoices the order.
Internal transfer¶
- Requesting department — raises the transfer, or the storekeeper creates it directly.
- Storekeeper — validates the move between the two internal locations.
Physical count¶
- Storekeeper — Inventory → Physical Inventory, enters counted quantities.
- Inventory Manager — reviews the differences and Applies the count. Differences post to the inventory-adjustment account.
Screenshots needed
Save to docs/assets/inventory/: Inventory overview with operation-type cards · a
receipt in form view · a delivery order · Physical Inventory screen · a product's
Moves History · product category showing costing and valuation · the NestERP
stock_dashboard.
7. Access rights¶
| Group | Can do |
|---|---|
| Inventory / User | Process transfers, validate receipts and deliveries, perform counts |
| Inventory / Administrator | All of the above, plus warehouses, locations, operation types, routes, reordering rules and valuation configuration |
| Manage Multiple Stock Locations | Unlocks the location tree and internal transfers |
| Manage Multiple Warehouses | Unlocks multi-warehouse behaviour |
| Manage Lots / Serial Numbers | Unlocks tracking fields |
Warehouses can be assigned to companies, so multi-company deployments restrict stock visibility by company through standard record rules.
8. Version differences (16 / 17 / 18)¶
- Product type is the
typefield with values Storable Product, Consumable and Service. Stock is tracked only for Storable Product. - View inheritance uses
attrs/states.
attrsandstatesremoved from views — conditional logic moves to directinvisible/readonly/requiredexpressions.- The transfer operations interface was reworked; detailed-operations handling differs from 16. Confirm the exact working flow against the live instance before documenting it as steps for warehouse staff.
- This is the version of the Thalia reference instance.
typeno longer carries the storable option. Storability moved to a separate boolean,is_storable. Any code, filter, domain or dashboard testingtype == 'product'silently returns nothing on 18.
This broke our stock_dashboard during the v18 upgrade and was the single fix that
module needed. Anything reading product type on 18 must be checked.
- <tree> view elements superseded by <list>.
9. Known limitations¶
- No barcode scanning app. Odoo's
stock_barcodeis Enterprise. Warehouse scanning workflows are not available on Community and cannot be substituted by configuration. - No advanced WMS features — wave picking, cluster picking and warehouse-worker task assignment are Enterprise.
- Core valuation reporting is thin, which is why
inventory_valuation_reportand our dashboards exist. - Reordering is min/max only. There is no demand forecasting or lead-time-aware planning in Community.
- Physical counts have no built-in approval step — anyone with Inventory Administrator
rights can apply a count that rewrites stock and posts an adjustment entry. This is why
inventory_adjustmentsexists on the 16 line.
Needs verification on the Thalia live instance
- Which warehouses exist, and their short names
- Whether Storage Locations and Multi-Step Routes are enabled
- Receipt and delivery step configuration per warehouse
- Costing method and valuation setting on each product category
- Whether stock accounts are configured for automated valuation
- Whether lot/serial tracking is in use, and on which products
- The actual Odoo 17 transfer flow warehouse staff follow, step by step
- Whether
stock_dashboardandinventory_valuation_reportare installed live