Materials

Component availability, FIFO supply allocation and how priority decides who gets the parts.

What APS knows about materials

For every manufacturing order, APS reads its Bill of Materials (BOM) from Odoo and computes the components and quantities needed. It also reads:

  • Stock on hand — available quantity at this moment
  • Incoming POs — quantities arriving on a confirmed date
  • Already-allocated quantities — what other in-progress MOs already claim

These come from the same sync that pulls MOs and work centers — no extra setup needed once the connector is configured.

Material-aware scheduling

In the scheduler modal, switch on Respect material availability. Every MO is then delayed until all its BOM components are available.

Available means: in stock or arriving on a PO before the MO needs it. APS computes a per-MO “material floor” date and prevents any operation of that MO from starting earlier.

The four material flags

Every order carries one of four flags, and the step that consumes the material carries the same one. They answer a single question: can this order be made when the plan says it will be?

  • Available — every component is either on the shelf now or on a purchase order that lands before this order needs it. Nothing is holding it back.
  • Arriving — nothing is missing, but the last component only lands on a date, and that date is why the order sits where it does. The badge shows the date. Odoo would call this order not available today; APS is telling you when it becomes available.
  • Partial — some of what the order needs is covered and some is not. Enough to start, not enough to finish.
  • Waiting — at least one component has no stock and nothing on order. Hover the badge and it names the parts, what is needed and how short you are.
Why a flag can differ from Odoo. Odoo asks whether the components are reservable right now. APS asks whether they will be there on the date the plan needs them, which is why an order Odoo calls unavailable can read Arriving here. Both are right about different questions. Live counts what Odoo has reserved for an order as that order's. A plan shares it out again, as described below, so in a scenario an order can be short of parts Odoo has reserved for it.
Material handling by direction:
  • Forward — delays placement until parts are available.
  • Backward — plans to the deadline and reports what the material cannot support, as MATERIAL_LATE / MATERIAL_SHORTAGE conflicts, rather than moving the date quietly.
  • Bidirectional and RCCP — enforce the same material floor as Forward.

FIFO supply allocation (priority decides)

When two MOs need the same component and there's not enough to go around, the higher-priority order claims first. Within the same priority, the earlier due date wins. This mirrors the scheduler's sort order — the order you see on screen is the order APS hands out parts.

Concretely: APS walks every MO in scheduling order. For each component it consumes from the supply ledger in PO-arrival order (first-in-first-out). If existing stock fills it, no waiting. If only future POs cover it, the MO's material floor is the latest PO arrival date.

Conflicts

APS flags two material conflict types on operations:

  • MATERIAL_SHORTAGE — existing supply records don't cover demand. Surfaced by both Forward (when delaying isn't enough) and Backward post-validation. The conflict names the part, how much the order needs, how much was covered, when the next supply arrives, and which orders ahead of it in the run took that supply.
  • MATERIAL_LATE — supply arrives after the requested start. Surfaced by Backward (just-in-time) runs to highlight orders that can't finish on time without expediting purchasing.

Both surface in the conflict list above the Gantt. Click the operation to see which component is the bottleneck and what date is needed.

The Materials page

Open Materials from the sidebar to see every BOM component across the dataset. Columns:

  • Code — internal product code
  • Material — product name
  • On Hand — current stock
  • Reserved — quantity allocated to scheduled MOs
  • Available — On Hand minus Reserved
  • Shortage — how much you're short, if any
  • Status — OK or SHORTAGE

Filter by Status (All / Shortage / OK) or use the search box to match by code or material name. This is the fastest way to spot the part that's holding up your plan.

A part with nothing behind it is a shortage

If a component has no stock and nothing on order, the order that needs it is reported as a shortage, the same as a part you are only short of.

One exception: a component that another manufacturing order in the same plan produces is not a shortage. The sub-assembly is sequenced ahead of the order that consumes it, so the part arrives from your own shop floor rather than from stock.

Shortages are shown for the dataset you are looking at. A scenario reports its own, and Live reports Live's.

By default a shortage does not stop the order being scheduled — it is placed and flagged, so production has a date and purchasing can see what to chase. On the scheduler's Custom tab you can ask for the opposite, and have orders with no supply left out of the plan entirely. That withholds the orders above them too: an end item whose sub-assembly has nothing to make it from cannot be finished either, and giving it a date only fills the floor with work that cannot become a finished product. When you publish, the Unplan what this plan leaves out option carries the same decision into Odoo, so those work orders lose their dates there too rather than keeping a start nothing supports. An order left out has every step cleared that the run may move, including a step an earlier run had dated. Locked and running steps stay where they are, and so do steps inside the freeze window. The run reads stock and purchase orders afresh each time the scheduler window is opened.

A purchase order line counts as supply while a receipt is open for it (see the Odoo connector page for the exact rule), on the date of that receipt. A line whose day has passed without a receipt counts as arriving today, and the Materials page shows it in orange with the days it is late. Settings → Material supply can put a limit on that: past the given number of days the run and the Material column treat the line as no supply until purchasing gives it a date. The shortage reason then names it, "P01234 (14) overdue since 29 Oct 2025, not counted", and the Materials page shows it in red. Set 0 to drop a line the day after its date; leave the setting empty to always count.

Scarce material is allocated in the order the run plans in — priority, or due date, depending on the preset — so the order that comes first takes the parts and the next one is held to the following arrival.

Odoo reserves stock in the order manufacturing orders are confirmed. The plan goes by priority, so what Odoo has reserved for an order that has not started, is not locked and has no step inside the freeze window is back on the shelf for the run to share out. With ten sheets in stock, all reserved for MO-A, and a rush MO-B confirmed later that needs five, the run gives MO-B five and MO-A waits for the next delivery. An order with a started, locked or frozen step keeps what Odoo reserved for it. Only stock that is on the shelf goes back: where Odoo holds a reservation with nothing behind it, the order keeps it and asks for no more than before. Publish with Update material reservations on, and Odoo's reservations follow the plan; an order that kept its reservation is left out of that step.

And when an order is left out of the plan for lack of material, what it was holding is released and the allocation is redone, so a smaller order that can actually be finished gets the parts instead.

Pushing an MO ahead of others

To get a specific MO first pick of parts:

  1. Raise its priority in Odoo (lower number = higher priority).
  2. Or change priority temporarily in an APS scenario, run the scheduler, and observe the new allocation.
  3. Or pull in its due date — same priority, earlier date wins the tiebreaker.

Parts Odoo has already reserved for another order count too, as long as that order has not started, is not locked and has no step inside the freeze window.

Run the scheduler after changes and you'll see other MOs absorb the downstream impact (waiting longer, or hitting MATERIAL_SHORTAGE).

APS 4 Manufacturing

Built by Avalah

Odoo Gold Partner

APS 4 Manufacturing

Built by Avalah

Odoo Gold Partner