Skip to content
Back to catalog
ModuleInventory & warehouseNew

Fulfilment Appointments

So the appointment doesn't fall through over something already known

Runs the shipment appointment to the marketplace's fulfilment centre: whether it fits the vehicle, whether free stock exists, whether it is really reserved, and who answers for each step. It warns while you build it and stops you when you commit.

Compatibility
Odoo 19Odoo 18Odoo 17

How you get it

Every development works in all three Odoo environments. The only thing that changes is how we deliver it.

Nothing to install

Odoo Online (SaaS)

You do not need the ability to install modules. A Millora consultant comes in with temporary access that you authorize and implements it with Odoo Studio. When they are done, you revoke the access.

Install it today

Odoo.sh or your own server

You receive the module and the installation guide by email as soon as payment clears. Install it yourself, or we install it with you.

Installation · shell
# 1 · copia el módulo a tu addons_path
cp -r millora_citas_de_embarque_a_full /mnt/extra-addons/

# 2 · reinicia y actualiza la lista de apps
odoo-bin -u all -d tu_base --stop-after-init

# 3 · instala desde Apps
#     busca "Fulfilment Appointments"

What it solves

The problem

A fulfilment appointment is not a calendar entry: it is an agreement between whoever sold and whoever ships. The account manager commits to a day and an hour with the marketplace, and the warehouse has to have the goods reserved, picked and on the vehicle by then.

Between those two people, today, sits WhatsApp. And the appointment falls through over things that were knowable in advance: the vehicle couldn't take the weight, the product was committed to another order, the channel doesn't receive that day with third-party transport, or another appointment already held the same slot at the same dock.

And when an appointment falls through you don't lose an hour: you lose the slot. The next one available may be days out, with the goods already off the rack.

The four questions

The appointment answers them in order, and won't let you past one without the last.

Does it fit? The vehicle has capacity in kilos and in cubic metres, and the appointment measures its load against both, up to the cap the marketplace sets. A load of fasteners hits the weight limit long before the volume; a load of pillows does the opposite. Watching only one of the two lets half the cases through.

Is it there? Every line is checked against free stock — what exists minus what other documents have already reserved — not against the theoretical availability that always looks sufficient on screen.

Is it reserved? Reserving is not ticking a box: it creates the real transfer for the first stage of the flow, and Odoo reserves. If the reservation comes back partial, it says so in the conversation instead of calling the job done. Releasing cancels that transfer and returns the goods to availability.

Who is on it? The appointment carries a conversation and activities: on approval the picking is assigned to the warehouse lead, on loading and delivery the account manager is notified, and moving the date of a committed appointment never happens quietly.

The path runs from draft to closed, through approved, reserved, loaded, in transit and delivered. Closing requires stating how it went — complete, incomplete or returned — and if it wasn't complete, it requires an explanation.

It warns while you build, it stops you when you commit

Every rule lives in one place and feeds two things at once: the warnings box visible while you capture, and the hard stop on approval and on reservation. You can build an appointment by trial and error without fighting an error on save.

It watches the on-the-hour rule, the minimum notice, the channel's receiving window, the dock's slot capacity, load by weight and by volume, lines without free stock, and detail that mixes warehouses.

And there is a way out: a supervisor can override by entering the reason. The appointment proceeds and the exception is written into the conversation, along with the list of what was skipped. At six on a Friday evening that happens; better it lives in the system than gets settled outside it.

Configured, not programmed

Scheduling rules are data: a receiving window per marketplace, per day and — where needed — per transport type. "Fridays from 9 to 3, except with third-party transport, which is 11 to 3" is two captured rows, not a condition buried in code.

The warehouse flow too: one row per step, with its operation type. The first stage is the one generated on reserving, and the rest the warehouse does with its usual flow while the appointment counts them off. Opening another warehouse, or changing the number of steps, is data entry.

It works in Studio too

It started life exactly there — as a Studio customisation — and was consolidated into a module without losing that property. Nothing it does falls outside what Odoo Online can reach.

What it does not do

It does not book with the marketplace. It does not connect to the channel's calendar or confirm the slot with them: it runs the commitment on your side. Booking the appointment with the marketplace stays a separate errand.

It does not plan the load. It says whether it fits in kilos and cubic metres, not how to arrange it in the trailer. It is not a load optimiser.

One appointment per vehicle. Two appointments sharing a truck and adding their load against the same capacity is not in this version.

The notice warning can go stale on screen. The box recalculates when the date, the transport or the detail changes, not with the passing of time. Nothing slips through — the full validation runs again on approval and on reservation — but what you are reading may be hours old.

Outbound to fulfilment only. It does not cover receipts or returns from the channel's distribution centre.

What changes

The appointment stops living in a WhatsApp thread and becomes a document with a state, an owner and a log. What used to surface at the dock — that it didn't fit, that the product was committed, that the channel doesn't receive that day — shows up while you are still capturing it, when it can still be changed.

And when an appointment gets overridden, you know who did it, when, and why.

What's included

  • Measures the vehicle's load in weight and in volume, against the cap the marketplace sets
  • Checks every line against free stock, netting out what other documents have already reserved
  • Reserving creates the real transfer and reserves in Odoo; releasing cancels it and returns the goods
  • Warns when the reservation came back partial, instead of calling the job done
  • Validates the on-the-hour rule, minimum notice, the channel's receiving window and dock capacity
  • Lets a supervisor override by entering the reason, written into the conversation with what was skipped
  • Configured rather than programmed: receiving windows per channel and day, and the warehouse flow as stages
  • Assigns the picking activity to the warehouse on approval, and notifies the account manager on loading and delivery
  • Measures how long each stage took and how fast the warehouse reacted, across several appointments at once
  • Separates permissions between account manager, warehouse and supervisor
  • Requires stating how it went on closing: complete, incomplete or returned

Requirements

  • Inventory module active
  • Capturing each vehicle's capacity in kilos and in cubic metres: without both, the load cannot be watched
  • Capturing the warehouse's picking flow as stages, each with its operation type
  • Defining per marketplace its minimum notice, its receiving window and how many appointments a slot admits
  • Weight and volume on the catalogue, or correcting them per line — the module allows it without touching the product
  • Deciding who is account manager, who is warehouse and who is supervisor