Skip to main content
iVentureTeam

Odoo Inventory / Purchase widgets

Inventory and purchase widgets handle quantities, lots and serials, putaway and route lines, vendor pricelists and the receipt flows the warehouse runs on barcode scanners.

Quantity and availability rendering changed repeatedly across recent versions, so the per-widget version tables matter here more than anywhere outside accounting.

24 widgets documented122 uses in Odoo coreVersions 16.0 → 20.0 verified per widget

Every inventory / purchase widget, by use in Odoo core

Odoo Inventory / Purchase widgets: name, purpose, field types and uses in Odoo core
WidgetWhat it doesField typesUses in core
many2one_uomThe unit dropdown on order and move lines is many2one_uom: a many2one that knows which product the line carries and offers the units that make sense for it.many2one69
package_m2oThe many2one that Inventory uses for packages. package_m2o looks like a plain relation field until you notice the names it displays change with the transfer's state and context.many2one12
stock_rescheduling_popoverThe red triangle next to a transfer's scheduled date is a widget: stock_rescheduling_popover reads a JSON field and lists the late upstream documents that put the date at risk.char7
stock.forced_placeholderOn Odoo's replenishment screen, an empty Route cell still tells you which route would apply. That is stock.forced_placeholder: a many2one whose placeholder text survives where the standard widget would show nothing.many2one5
dateEvery date field in Odoo renders through the Date widget. Here is its full option set as shipped in the source: accepted date limits, future warnings, picker precision, display format, and the range pairing the documentation never mentions.date3
forecast_widgetThe green Available, orange Exp date and red Not Available pills on Odoo transfer lines are one widget reading five fields you cannot see. Here is exactly how forecast_widget decides which badge you get.float3
pick_fromThe Pick From column on Odoo's detailed operations tells a warehouse worker exactly which location, lot and package to take stock from. The pick_from widget is a many2one over stock.quant that fakes its display name when the quant is not set.many2one3
picking_type_dashboard_graphThe six little bars on every Odoo Inventory Overview card, late, yesterday, today, the next days, are the picking_type_dashboard_graph widget. Each bar is clickable and filters the transfer list to its exact date bucket.text3
monetary_no_zeromonetary_no_zero is the standard monetary widget with one refinement: amounts that round to zero in the currency's precision render as an empty cell instead of 0.00. Purchase built it to keep its bill matching list readable.monetary2
counted_quantity_widgetThe counted quantity cell in a physical inventory. The hard part is not the number, it is knowing the difference between counted zero and not counted at all.float1
lead_days_widgetThe lead time breakdown on a reordering rule: supplier delay, purchase security, warehouse handling, all added up. It is a server-computed JSON payload rendered by a five line widget.char1
many2many_alt_posThe list of competing quotations on a purchase order. It marks the one you are looking at, refuses to reopen it, and opens the others in the same window so the breadcrumb keeps growing.many2many1
mondialrelay_relayA carrier's own map, loaded from their servers into an Odoo form. It is one of the very few widgets in core that pulls a third-party script, and it comes with a hand-written workaround for that carrier's bug.char1
move_product_label_fieldThe product cell on a transfer line, with the delivery description tucked underneath it. Its most useful behavior is knowing when that description is worth showing at all.many2one1
open_match_line_widgetA cell whose only job is to open the matching line it sits on. Model and method are both written into the widget, which makes it precise and completely non-portable.any1
package_m2mPackage names as tags on a transfer line, plus a synthetic No Package tag for the lines that are not in one. It is deliberately display only, and the code makes sure of that.many2many1
pol_product_many2oneThe product field on a purchase order line. Pick a product with one variant and it fills in; pick one with several and a grid opens.many2one1
popover_widgetAn icon in a cell that opens a popover when clicked, with the message, the icon, the color and the position all decided server side and shipped as JSON in a text field.char1
replenishment_graph_widgetThe saw-tooth stock curve on a reordering rule, drawn against its minimum and maximum lines. New in Odoo 19, and it replaced a widget that showed history instead of a forecast.char1
sml_x2_manyThe detailed operations list on a stock move. Its Add a line does not create an empty row: it opens the quants that actually hold the product, filtered to what is left after the lines you have already typed.one2many, many2many1
stock_action_fieldA quantity or an amount that is also a link. Click the On Hand figure on a product list and it opens the stock view for that product, with context.float, monetary1
stock_move_one2manyThe operations list on a transfer. Its distinguishing feature is a button that adds every line in a package at once, and it saves the whole picking before it can even offer that.one2many, many2many1
stock_picking_many2manyThe transfers list on a wave. Adding one does not link a record directly: it opens a selection, creates a wizard, and lets the server attach them properly.many2many1
time_period_selectionA selection whose labels are written when the page loads. Instead of "last year, month plus one" it says "February 2025", which is the difference between a setting people use and one they avoid.selection1

Each widget page has the usage XML, Studio steps, every developer option, and a per-version compatibility table verified against the shipped Odoo source.

We use cookies to improve your experience

Essential cookies make the site work; with your permission we also use analytics to improve it. See our cookie policy.