Skip to main content
iVentureTeam

mrp_workorder_popover

An icon on a work order that explains what is holding it up, with a button that replans it on the spot. Built on the inventory popover, and split in two on the next branch.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated August 28, 20265 min read
Technical namemrp_workorder_popover
Field typeschar
Viewslist, form
Modulemrp, the Manufacturing app
Used in coreWork order lines in the Manufacturing views
VersionsOdoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. It is set in view XML and depends on module-specific data
Alternativespopover_widget, stock_rescheduling_popover, actionable_errors, mrp_should_consume

What the work order popover does

A work order that cannot start has a reason: a component is missing, an earlier operation is unfinished, the schedule has drifted. Those reasons are computed on the server and are useless unless they reach the person looking at the list.

This widget puts them behind an icon on the row. Clicking it opens a popover with the messages, each carrying its own color so a warning reads differently from an error, and the whole thing is driven by a JSON payload rather than by view configuration.

What it adds beyond the inventory popover it extends is an action. When the payload says the order can be replanned, the popover offers a button that does exactly that, without leaving the list.

What this means for your team

Replanning from the row is the point. A planner working through a list of blocked orders otherwise has to open each one, find the action and come back, and the friction is enough that lists go unreviewed.

The full reload after replanning is worth explaining rather than optimizing away: moving one work order moves others, so anything short of reloading would show a list that disagrees with the schedule. Slower and correct beats instant and wrong on a planning screen.

The other thing to know is that the icon can be suppressed entirely by the payload, which is how orders with nothing to report stay visually quiet.

Supported options in Odoo 19

There are no XML options. The payload is the configuration, and its shape is documented in a comment at the top of the source, reproduced below. Read from mrp_workorder_popover.js, Odoo 19.0.

OptionTypeWhat it does
replankey in the JSON payloadDecides whether the popover offers a replan button. Documented in the source comment.(default: false)
colorkey in the JSON payloadThe icon's color class. Setting it to the hidden class suppresses the icon entirely, which the source comment names explicitly.
infoskey in the JSON payloadA list of message objects, each with its own text and color, rendered in the popover.
positionkey in the JSON payloadInherited from the inventory popover. Which side the popover opens on, read once when the component starts.(default: top)

Setting the color to the hidden class suppresses the icon. The source comment says so explicitly, and it is how a work order with nothing to report avoids showing an empty marker. That is a payload decision rather than a view one.

Working examples

The usual usage

<field name="json_popover"
       widget="mrp_workorder_popover"/>

No options. The icon, its color and the messages all come from the payload.

The documented payload

{
  "replan": true,
  "color": "text-warning",
  "infos": [
    {"msg": "Waiting for components", "color": "text-danger"}
  ]
}

The replan flag decides whether the button appears; each message carries its own color.

Hiding the icon

{ "color": "d-none" }

The comment names this as the way to suppress the marker entirely.

Replanning moves more than one order

Two small classes. The popover subclass adds the replan handler, and the field subclass points the base widget at that popover.

The replan handler calls a named method on the work order model with the record's identifier and then reloads the model. The reload is the significant half: replanning a work order shifts the schedule of others, so refreshing only the clicked row would leave the rest of the list stale.

The popover subclass's initialization does not chain to the parent's. For a popover component that is defensible, since the base sets up the popover host rather than the content, but it is the kind of thing to check before extending this widget further.

The payload contract is documented at the top of the file, which is unusual and useful: the replan flag, the icon color with its hidden convention, and a list of message objects each carrying its own color. Everything the user sees comes from there.

Version compatibility

VersionStatusNotes
Odoo 20.0Not availableNot released. No registration under this name; the responsibilities are split into two new widgets.
Odoo 19.0VerifiedVerified against the shipped source.
Odoo 18.0VerifiedSame contract and behavior.
Odoo 17.0VerifiedSame behavior with older component conventions.
Odoo 16.0VerifiedSame behavior with older component conventions.

Upgrade note. The widget and its payload contract have been stable across Odoo 16 to 19, so server-side code producing these payloads carries over. The change to plan for is the split described below.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify this page after the release.

The widget is split in two. On the development branch there is no registration under this name; its responsibilities appear instead as a bill of materials popover and a separate planning status widget, each with its own file.

Because an unknown widget name falls back to the field's type, a view still naming this one would render the raw payload string. Custom manufacturing views should be checked before that upgrade, and any server code producing the payload re-examined against the new shapes.

Common problems and fixes

SymptomCause and fix
No icon appearsThe payload sets the color to the hidden class, which is the documented way to suppress it. Expected for an order with nothing to report.
No replan buttonThe payload's replan flag is false. The server decides; check why the order is not considered replannable.
The whole list reloads after replanningIntended. Replanning moves other work orders, so the model is reloaded. Nothing to fix; a partial refresh would show a stale schedule.
Messages have no colorEach message carries its own color key, which may be absent. Set it in the server-side payload.
The raw payload string is displayedThe widget name did not resolve, most likely on a version where it was split. Update the view to the replacement widgets.
An extension of the popover misbehavesThe popover subclass does not chain to the parent's initialization. Call through explicitly in your own subclass if you need the parent's setup.

Work order popover vs the alternatives

WidgetBest forKey difference
mrp_workorder_popoverExplaining a blocked work order and acting on it from the rowThe inventory popover plus a replan action that reloads the whole model
popover_widgetJSON-driven explanations with no actionThe base widget, fully configurable from the payload
stock_rescheduling_popoverRescheduling explanations in inventoryAnother widget built on the same base
actionable_errorsErrors that come with an actionButtons rather than explanatory text with one action
mrp_should_consumeQuantities on the same screensA comparison rather than an explanation

The inventory popover it extends is the right base for any JSON-driven explanation that does not need an action button. Where the action is the point and the explanation is secondary, an ordinary row button is simpler and needs no payload at all.

Frequently asked questions

How is the popover configured?+
Entirely from a JSON payload, whose shape is documented at the top of the source: a replan flag, an icon color and a list of messages each with its own color.
How do I hide the icon?+
Set the payload's color to the hidden class. The source comment names that as the way to suppress the marker for an order with nothing to report.
Why does the whole list reload after replanning?+
Because replanning one work order shifts others. Refreshing only the clicked row would leave the rest of the list disagreeing with the schedule.
Does it take XML options?+
No. The payload is the configuration, exactly as with the inventory popover it extends.
What happens in Odoo 20?+
The widget is split into a bill of materials popover and a planning status widget. A view still naming this one would render the raw payload string.

Blocked work orders that explain themselves

Component shortages, sequencing and schedule drift all surface as a stalled order, and the difference is whether the screen says which. We implement Odoo Manufacturing planning and shop floor on versions 16 through 19.

Book a free consultation

How this page was produced

The replan handler, the model reload, the documented payload contract with its hidden-color convention and the initialization that does not chain to the parent's were read from mrp_workorder_popover.js on the Odoo 19.0 branch, with the base behavior read from the inventory popover in stock. Version coverage comes from comparing the file across the 16.0, 17.0 and 18.0 branches, and the split was verified by locating the replacement files and registrations on the public development branch. Spotted an error? Tell us and we will correct the page.