Connects with ERP & MES systems like

Integrations / ERP / Odoo

Does Odoo Have Finite Capacity Scheduling? The Plan Button Explained, and When to Add SkyPlanner APS

Odoo has finite capacity scheduling at a basic level. Odoo Manufacturing’s Plan button books every work order into the first free slot on its work center calendar, so two planned work orders never overlap on one work center. But it plans one manufacturing order at a time against a single constraint, and it does not resequence, optimize or replan across orders. Plants that need every order sequenced by due date and setup run SkyPlanner APS beside Odoo.

SkyPlanner APS Gantt timeline with jobs scheduled across workstations and an order list below.

Odoo’s own marketing says you can “plan resources with finite capacity planning” (odoo.com/app/manufacturing). Below is what that means in Odoo 19.0, from the official docs and the source code: how Plan works, where it stops, and when it is all you need.

How Odoo plans work orders, step by step

1. Switch on work orders and set up work centers

Go to Manufacturing > Configuration > Settings and enable Work Orders. Work Centers then appear under Configuration. Each work center (mrp.workcenter) carries the fields the planner uses:

FieldWhat it does in planning
Working HoursThe resource calendar the work center runs on. Default “Standard 40 hours/week”, Monday to Friday
Time EfficiencyPercentage that speeds up or slows down every work order on this work center
Setup Time / Cleanup TimeMinutes added before and after each work order
Alternative WorkcentersOther work centers Plan may use instead
Product Capacities tabPieces per cycle and product-specific setup and cleanup minutes (mrp.workcenter.capacity)
OEE TargetPerformance target for reporting, not a planning input
Allowed EmployeesWho may work here. A filter, not a capacity

2. Operations on the bill of materials

There is no shared routing master. Operations live on each BoM, on the Operations tab (mrp.routing.workcenter). Each operation has a Work Center and a Duration Computation: a fixed time you enter, or a time computed from the last work orders (10 by default). Expected duration is setup plus cleanup plus cycles times cycle time, with the cycle part divided by Time Efficiency (mrp_routing.py).

With Work Order Dependencies enabled, an operation can be Blocked By another. Odoo’s docs: “A blocked work order is scheduled at the end of the time period specified in the Expected Duration field of the work order that precedes it.” (source)

3. Confirm the MO, then press Plan

Confirming a manufacturing order (mrp.production) creates its work orders (mrp.workorder). Pressing Plan on the MO starts from the final work orders and recursively plans each blocking work order first. Every work order is placed forward in time after its predecessors. For each work order Odoo:

  1. Takes the latest of the MO start, now, and the end of any blocking work orders.
  2. Tries the primary work center and every Alternative Workcenter.
  3. Searches forward on each calendar for the first free interval long enough for the expected duration.
  4. Picks the work center that finishes earliest and books the slot as a resource.calendar.leaves record on that calendar.

The 19.0 source states the rule plainly: “The available interval is disjoinct with all other workorders planned on this workcenter” (mrp_workcenter.py). That is the finite part. A work order that hits a closure continues in the next working interval. If nothing fits within 700 days (the default search window), Plan stops with “Impossible to plan the workorder.”

4. Time off and alternatives

With the Time Off app and developer mode you can block a work center for maintenance or a holiday. Plan then sends work orders to the Alternative Workcenters. Without an alternative, Odoo’s docs say “work orders begin to pile up at the work center until it is operational again” (source).

5. Review and adjust

Manufacturing > Planning > Planning by Production and Planning by Workcenter open the Work Orders Planning views. Enterprise shows a Gantt chart with drag and drop. Community shows list, calendar, pivot and graph views. The docs describe adjustment as manual: “Times and planned work centers can be changed by clicking to access the individual work order.” (source)

Where Odoo stops

  • First come, first served. Plan works MO by MO, and whatever you plan first takes the earliest slots. Selecting several MOs plans them in Odoo’s default order (priority, then start date). Nothing weighs due dates against changeovers or moves a planned MO aside for a more urgent one.
  • No setup sequencing. Setup Time is a fixed add-on per work order, the same minutes whatever ran before. Odoo has no changeover matrix and does not group similar jobs to avoid changeovers.
  • One constraint. Only the work center calendar limits the plan. Operators are an Allowed Employees filter. Tools and material availability are not checked when Plan books a slot. Component reservations and purchase order dates feed replenishment only.
  • MRP ignores capacity. Reordering rules and MTO create MOs from the BoM’s Manuf. Lead Time in calendar days. The docs: “Lead times do not consider weekends, holidays, or work center capacity” (source). MO deadlines and delivery promises come from calendar days, not from the actual queue.
  • MPS is a suggestion list. The Master Production Schedule (Enterprise) does not read load either. “The MPS only suggests the amount of product to be replenished, requiring the user to actually create the replenishing POs/MOs.” (source)
  • No automatic replanning. A breakdown or rush order does not move anything by itself. Once a work order has started, Odoo refuses to unplan the MO: “Some work orders have already started, so you cannot unplan this manufacturing order.” (mrp_production.py)
  • Sub-assemblies planned separately. Multi-level BoMs create separate child MOs, each planned on its own. The planner has to plan them in the right order so the sub-assembly is ready when the parent operation needs it.
  • Gantt and MPS are Enterprise. The editions page marks Manufacturing “Scheduling” and “Shopfloor” as Enterprise only (odoo.com/page/editions). Community planners work from lists and a calendar.

When Odoo’s native planning is enough

Odoo’s Plan button does the job when:

  • Each operation has one obvious work center and volumes are moderate.
  • Few orders compete for the same bottleneck, so first come, first served gives acceptable dates.
  • Your alternative machines are identical, so Alternative Workcenters plus Time Off cover most disruptions.
  • Setups are short or do not depend on the previous job.
  • A planner can review Planning by Workcenter once a day and adjust the few conflicts by hand.

If that describes your plant, put your effort into clean data. Give every work center a calendar and enter realistic Setup and Cleanup Time. Use fixed durations where history is noisy, switch dependencies on, and plan MOs in priority order.

When you need a finite capacity scheduler

You have outgrown Plan when several of these are true:

  • Many orders compete for two or more bottlenecks and due dates must drive the sequence.
  • Setup depends on what ran before, so the order of jobs changes output.
  • People and shifts limit the plan as much as machines.
  • Material arrival decides when a job can start.
  • Rush orders, breakdowns and late deliveries force a replan several times a week.
  • Sales needs delivery dates based on the real queue, not on Manuf. Lead Time.

What to look for

  • Finite capacity on every workstation at once, with shifts, personnel and absences.
  • Sequencing across all orders by due date and priority, not per MO.
  • A setting time matrix for sequence-dependent changeovers, so the engine picks the job order with least setup.
  • Tools and crews as constraints: a shared tool used on one machine is unavailable to another, and a job can need several operators at once.
  • Material-aware scheduling that checks stock and incoming purchase orders.
  • Alternative workstations the engine chooses for the whole plan, not one work order at a time.
  • Multi-level products so sub-assemblies finish before the parent needs them.
  • Automatic rescheduling when production progresses or orders change.
  • A Gantt for planners and a job queue for operators, also on Community.
  • A clear ownership rule with Odoo. Work order dates in Odoo are computed from the calendar booking, and pressing Plan again overwrites them. Agree that the scheduler owns the sequence, write dates and work centers back through mrp.workorder, and skip work orders already in progress.
  • The right API for your version and plan. Odoo 19 has the External JSON-2 API. XML-RPC and JSON-RPC are scheduled for removal in Odoo 22 (Odoo Online 21.1). External API access is only available on Custom pricing plans, not on One App Free or Standard (external API docs). Custom modules need Odoo.sh or on-premise hosting (Odoo pricing).

The options fall into four groups:

  • Odoo’s own planning covers the Plan button and, in Enterprise, the Gantt view.
  • Add-on modules inside the Odoo client improve the board or the slotting logic, maintained by an Odoo partner.
  • Supply chain engines and enterprise APS suites are connected through an implementation project and run by a dedicated planning team.
  • Cloud APS with shop-floor execution, where SkyPlanner sits, schedules every resource automatically beside Odoo. It keeps replanning as production changes and puts the schedule in operators’ hands.

Where SkyPlanner fits

SkyPlanner APS answers each limit listed above:

  • First come, first served becomes a real sequence. The Arcturus AI engine schedules all open orders together against finite capacity in seconds, ordered by completion date, priority, customer priority, Fast Track and Dynamic Priorities.
  • Fixed setups become shorter setups. A setting time matrix holds the changeover between each pair of products, and it can differ by direction: blue to red 30 minutes, red to blue 60. The scheduler picks the order with least setup and runs similar jobs in succession.
  • One constraint becomes all of them. Workstations, shifts, personnel, absences, tools and materials are checked in the same schedule. Tools are finite, so a fixture in use on one machine is not booked on another at the same time. A job can need several operators at once, and the engine turns to alternative machines or personnel when the primary resource is unavailable. Workstation groups, efficiencies and splitting one job across workstations are part of the same model. The material check covers stock on hand and open purchase.order lines: ordered components count as available on the PO delivery date, and stock updates when the PO is marked Delivered.
  • Sub-assemblies line up. Subproducts and multi-level products are scheduled so the parts are ready when the assembly needs them.
  • Manual replanning becomes Autopilot. Autopilot reschedules automatically when production changes, within your locks, Running Time Lock and priorities.
  • Community gets a Gantt and a shop floor. Planners edit an interactive Gantt timeline. Operators see their queue and log work on phone or tablet with Mobile Confirmations, Production Timer and Quick Log Mode.

Odoo stays the system of record for products, BoMs, inventory, purchasing and accounting. SkyPlanner integrates with it in both directions over the External JSON-2 API, or XML-RPC and JSON-RPC on older versions:

  • In: mrp.production, mrp.workorder, mrp.workcenter, mrp.bom and open purchase.order lines.
  • Back: planned start, end and the chosen work center, with a write on each mrp.workorder (date_start, date_finished, workcenter_id). This moves Odoo’s own calendar booking, so Odoo’s planning views show SkyPlanner’s dates.
  • Shop floor: operator confirmations are created as mrp.workcenter.productivity Time Logs.

SkyPlanner webhooks push schedule changes as they happen. Every plant runs Odoo differently, with its own operations, calendars and custom modules. The SkyPlanner team configures the integration to your setup during onboarding and supports it after go-live. Your Odoo partner or your own developers can also build on SkyPlanner’s documented REST API (API reference). An API key is enough to start. API and feature details are in the SkyPlanner docs.

Choose SkyPlanner when many orders compete for the same bottlenecks and due dates must set the sequence across all of them.

Choose SkyPlanner when changeovers depend on sequence, or shared tools and multi-operator jobs decide what can run next.

Choose SkyPlanner when you replan several times a week and want a working schedule of your own production in weeks rather than after a long project.

Start with a CSV or XLSX export in the 30-day free trial (up to 20 workstations, no credit card) and compare SkyPlanner’s schedule with your Plan button results. After that, pricing is from 199 € per month with 5 workstations included, billed monthly, cancel any time. The integration is quoted up front for your process and needs, together with your plan, so you see the full cost before you start. Implementation is normally completed within weeks after onboarding starts. See pricing and features.

More on SkyPlanner for Odoo, the Odoo integration guide and other ERP integrations.

SkyPlanner reviews from manufacturers

Kalle Kalliomäki, Supply Chain Specialist at UTU, on the switchboard production floor in Ulvila

2 hsaved every week

“SkyPlanner has taken our production planning from Excel spreadsheets to real-time production optimization.”

Kalle Kalliomäki, Supply Chain Specialist
UTU · Electrical switchboards and switchgear

Production planning saves 2 hours of working time every week, and a new work queue reaches the line in seconds.

Read the UTU review

Operators in cleanroom suits at a bottle-filling line in Laboratory & Allied's pharmaceutical plant in Nairobi

+90%production efficiency

“Efficiency has gone up 90% in production.”

Abdul Rucyinga, Head of IT
Laboratory & Allied · Pharmaceutical manufacturing

Production efficiency is up 90%, and a three-month optimized plan across all workstations takes under 30 minutes.

Read the Laboratory & Allied review

Anu Järvinen, Production Manager at Fredman Operations, beside a robot palletising cell in Rauma

6 monthsof free capacity visible to sales

“SkyPlanner creates the foundation and reliability for all production planning.”

Anu Järvinen, Production Manager
Fredman Operations · Food-safe packaging papers

Sales sees free capacity six months ahead, and schedule-change requests that took an hour or more are answered in seconds.

Read the Fredman Operations review

A KJH-Comp welder grinding a welded steel structure at the Alahärmä plant

98%delivery reliability, up from about 50%

“SkyPlanner plays a decisive role in maintaining our delivery reliability.”

Hannu Lahtinen, Managing Director
KJH-Comp · Sheet-metal mechanics and contract manufacturing

Delivery reliability rose from around 50% to as high as 98%, and scheduling now needs one supervisor instead of two.

Read the KJH-Comp review

FAQ

Does Odoo Community have production scheduling?

Yes, at a basic level. Community has manufacturing orders, work orders, work centers and the Plan button, shown as lists, a calendar, pivot and graph. The Gantt scheduling view, Shop Floor and the Master Production Schedule are Enterprise features. SkyPlanner gives Community plants a Gantt and an operator queue.

Does Odoo MRP consider work center capacity?

No. Replenishment uses lead times in calendar days, and Odoo’s docs say lead times “do not consider weekends, holidays, or work center capacity”. Capacity only applies when you press Plan on an MO.

Can Odoo run several jobs on one work center at the same time?

In the planner, no. The 19.0 code books each work order in an interval disjoint from all other work orders on that work center. The Product Capacities tab sets pieces per cycle within one work order, not parallel work orders.

Does Odoo handle sequence-dependent setup times?

No. Setup Time and Cleanup Time are fixed minutes per work center, or per product on the Product Capacities tab. Odoo adds them to every work order, whatever job ran before. SkyPlanner’s setting time matrix stores changeovers per product pair and direction and sequences jobs to minimize them.

How does SkyPlanner APS connect to Odoo?

SkyPlanner integrates with Odoo in both directions over the external JSON-2 API, or execute_kw over XML-RPC or JSON-RPC on 16.0 to 18.0. Planned dates and work centers are written to each mrp.workorder, and logged time becomes Odoo Time Logs. The SkyPlanner team configures it during onboarding and supports it after go-live. Details are in the Odoo integration guide.

Can I test SkyPlanner before integrating it with Odoo?

Yes. The 30-day trial runs on CSV or XLSX exports from Odoo’s list views, with up to 20 workstations and no credit card. You compare SkyPlanner’s schedule with your Plan button results before connecting anything. Start the free trial or talk to sales.