Holds, cancellations and worked examples

Holds, cancellations and worked examples

Holds

A hold is the 3PL saying "we have the order but cannot progress it" - no stock, replenishment needed, back order, manual hold. Holds are not errors: the order stays at the warehouse and usually resolves there. The connector shows holds on the dashboard (On Hold card - click through for the list), on the Orders page and on each sales order, with the 3PL's own reason label. If a hold will not clear (e.g. genuinely out of stock), your options are at the 3PL portal or cancelling and re-routing.

Cancellation - both directions

Odoo cancels first. Cancelling a sales order whose 3PL order is in a sent state automatically requests cancellation at the warehouse (where the provider supports API cancellation - both Sprint and ShipHero do). If the 3PL refuses - typically because the parcel already shipped - the refusal lands in the order's chatter and the order stays cancelled in Odoo, so you know to handle the shipped parcel (it will likely come back as a return; see Returns). For providers without API cancellation, the chatter tells you to contact the warehouse. There is also a Cancel at 3PL button on the 3PL Order for cancelling at the warehouse without cancelling in Odoo (e.g. to re-route to another instance).

The 3PL cancels first. A status poll finding the order cancelled remotely marks the 3PL Order cancelled and applies the instance's If the 3PL Cancels an Order policy: flag the sales order with an activity for a person to decide (default), or cancel the Odoo order automatically. The flag-for-review default exists because the right answer is often not cancellation but re-routing: the order is still owed to the customer, just not from that warehouse.

Worked scenarios

Normal flow. Order SO1042 confirmed at 09:00 with Royal Mail 48. 09:07 the scheduler pushes it; Sprint answers with AWB 20416212. Polls show Ready to Pick > Picking > Packed. At 14:00 the poll sees COMPLT: tracking FP877310181GB and two batches come back, the delivery validates itself with those lot numbers, the customer-facing tracking link sits on the order. Nobody touched anything.

Out of stock at the warehouse. SO1055 goes on hold - "Error - No Stock". It counts on the dashboard's On Hold card. The buyer books an urgent inbound (see ASNs); when stock arrives the hold clears at Sprint and the next poll moves the order onward.

Customer cancels in time. Customer service cancels SO1060 in Odoo at 10:02; the parcel had not been picked, Sprint accepts the cancellation, chatter records "Cancellation confirmed by 3PL". Had it already shipped, chatter would instead record the refusal and the parcel would be handled as a return on arrival back.

    • Related Articles

    • Unmatched returns and worked scenarios

      Unmatched returns A parcel the 3PL cannot tie to any Odoo order (unknown reference, hand-written label…) becomes an RMA flagged Unmatched with an orange ribbon and a to-do activity. The 3PL's reported lines are on the RMA for identification, but no ...
    • UNBATCHED stock, forced syncs and a worked example

      The UNBATCHED bucket When despatches had to ship lot-tracked goods without batch data (see Allow Un-batched Despatches), that stock lives under the special UNBATCHED lot. The inventory sync is what heals this: as soon as the 3PL reports real batch ...
    • Automation and schedule

      Most of what the app does happens without you. This page sets out precisely what runs on its own, what triggers it, and what each one needs in order to run at all. It is worth reading once, because "why has nothing happened yet?" is almost always ...
    • Buy Box performance

      The Buy Box is the "Add to basket" position on an Amazon product page. When several sellers offer the same product, Amazon awards that button to one of them, and the overwhelming majority of sales on that listing go to whoever holds it. If you do not ...
    • Setup checklist

      The Finish setting up card sits at the top of the Dashboard and tracks four steps. It is not decoration. Each step is checked against the real state of your store, so a step ticks itself the moment the underlying condition is true, and it will not ...