# PrestaShop Pre-Order module documentation (dfpreorder)

> The DataFirefly Pre-Orders module (dfpreorder) lets you sell products before they reach your warehouse on PrestaShop 8 and 9. This page covers installation, settings, rules, incoming stock and troubleshooting. Installation…

- Page: <https://www.datafirefly.com/en/documentation/dfpreorder/>
- Language: en
- Last updated: 2026-10-07
- Other languages: [fr](https://www.datafirefly.com/documentation/dfpreorder/index.md), [es](https://www.datafirefly.com/es/documentation/dfpreorder/index.md), [de](https://www.datafirefly.com/de/documentation/dfpreorder/index.md), [it](https://www.datafirefly.com/it/documentation/dfpreorder/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfpreorder/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfpreorder/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfpreorder/index.md)
- Index: <https://www.datafirefly.com/en/documentation/llms.txt>

The **DataFirefly Pre-Orders** module (dfpreorder) lets you sell products before they reach your warehouse on PrestaShop 8 and 9. This page covers installation, settings, rules, incoming stock and troubleshooting.

## Installation

1. Download the ZIP from your DataFirefly customer account.
2. In the back office, go to _Modules > Module Manager > Upload a module_ and send the ZIP.
3. On installation the module creates its tables, its three order statuses and two menu tabs: _Catalog > Pre-orders_ for the rules and _Orders > Pre-orders_ for the follow-up.
4. Open the module configuration to review the general settings and copy the cron URL.

The module runs on PrestaShop 8.0 to 9.x from the same ZIP, in multistore and multilingual setups. Strings ship in English, French, Spanish, German, Italian, Dutch, Polish and Portuguese.

## General settings

- **Default button label** and **badge label**, per language. Each rule can override them.
- **Carts mixing pre-order and in-stock items**: allow silently, allow with a warning saying the order ships in one go, or forbid the mix.
- **Consent checkbox at checkout**: adds a mandatory checkbox when the cart holds a pre-order. The text accepts the `%date%` token, replaced by the latest estimated shipping date of the cart. The consent timestamp is stored on every pre-ordered line.
- **E-mails** for confirmation and availability, each switchable.
- **Automatic allocation** of incoming stock and the **order status** to apply once every line is allocated.
- **Notify me form** on products that cannot be ordered or whose pre-orders are full.
- **Shipping of mixed orders**: one shipment once every item is available, partial shipment (in-stock items first, one order and one invoice) or split into two orders at checkout under the same reference. With the split, you choose whether the customer decides in the cart or whether every mixed cart is split.
- **Partial shipment e-mail**, sent with the list of shipped items and the tracking link.
- **PreOrder structured data**, off by default: only turn it on when your theme or SEO module does not already output product JSON-LD.

## Creating a pre-order rule

Go to _Catalog > Pre-orders_ then _Add a rule_. A rule targets a product, or one specific combination. The mode is chosen with three cards, and a panel on the right previews the front office block while you type, with the pending pre-orders of the rule and its date history.

### The three modes

- **When out of stock**: pre-orders start when stock reaches zero and stop when stock is back. This is the mode for supplier shortages.
- **Forced**: the product stays in pre-order while the rule is active, even with stock. This is the product launch mode.
- **Date window**: pre-orders open and close at the dates you set. Closing is applied by the cron task and, as a fallback, whenever the product page is viewed.

### The other fields

- **Estimated shipping date**: shown on the product page, in the cart, in the customer account, on the invoice and in e-mails.
- **Maximum quantity** and **maximum per customer**: 0 means unlimited. Limits are enforced server side on every cart save.
- **Pre-order discount** as a percentage or an amount: available in forced and date window modes, where the period is known in advance. It creates a specific price removed when the rule ends.
- **Button label** and **message** per language, specific to the rule.
- **Countdown** (to the closing date or to the release) and the **reserved units bar**, which needs a maximum quantity.

### Creating many rules at once

The _Bulk assignment and CSV import_ button opens two forms. The first targets every product matching a category, a brand or a supplier (criteria are combined). For products that already have rules, choose _Update the estimated shipping date only_ (default), _Replace all settings_ or _Leave unchanged_, and whether products without a rule get one.

The second imports a CSV whose columns are `product` (ID or reference), `combination` (optional), `mode`, `release_date`, `max_qty`, `max_per_customer`, `date_start`, `date_end`. On existing rules only the columns present and filled in are changed.

### Moving a supplier's restocking date

Choose the supplier in the bulk assignment, enter the new estimated shipping date, keep _Update the estimated shipping date only_ and _Notify customers if the date changes_, then apply. Every rule of the supplier's products moves, including combination rules; modes, caps and windows stay untouched. Waiting pre-orders take the new date, customers receive the delay e-mail with a cancellation link and the change is logged in each rule history. A CSV containing only `product` and `release_date` does the same product by product.

## What the customer sees

On a pre-order product the add-to-cart button takes the chosen label, a badge appears on listing and product images, and a panel shows the estimated date, your message, the countdown and the reserved units bar. The panel refreshes when the combination changes.

In the cart, each affected line is flagged with the estimated date. At checkout the consent checkbox repeats the date. After the order, customers follow their pre-orders in _My account > My pre-orders_ and can request cancellation of the lines still waiting.

## Shipping mixed orders

The _Shipping of mixed orders_ setting decides what happens when an order contains in-stock items and pre-order items.

- **One shipment** (default): the whole order waits in _Pre-order: awaiting stock_ and ships once every item is available.
- **Partial shipment**: the order page shows the in-stock items with a tracking number field and the _Mark as partially shipped_ button. The order moves to _Pre-order: partially shipped_, which allows the delivery slip, and the customer receives the list of shipped items, the carrier tracking link and the remaining items with their dates. The dashboard lists every order whose in-stock part can leave now. One order, one invoice; the second parcel uses the native PrestaShop tracking number.
- **Split into two orders**: PrestaShop creates at checkout one order for the in-stock items and one for the pre-order items, under the same reference, with its native package mechanism (no override). A partly available line is cut in two. Shipping is charged for each parcel. With the customer choice option, a box in the cart lets the customer ask for the split; otherwise every mixed cart is split.

Test the split mode with your payment modules on a staging shop before enabling it. A product in forced mode that still has stock is treated as in stock by PrestaShop and is not separated.

### Pre-order column in the orders list

The native _Orders_ list gains a _Pre-order_ column with a filter: any pre-order, awaiting stock, ready to ship, cancellation requested. It isolates in one click the orders that wait for stock.

## Follow-up and stock allocation

_Orders > Pre-orders_ gathers the follow-up.

### Dashboard

The indicators show the units waiting, the number of orders involved, the reserved revenue tax included, the units already allocated and the cancellation requests. The per-product table shows, for each product or combination, the units waiting, the PrestaShop stock, the units that can be allocated right now and the quantity to order from the supplier. The CSV export button uses the same columns.

### Allocating a delivery

A pre-order lowers the stock when the order is placed, pushing it below zero. The units physically available for pre-orders are therefore: units waiting + current stock. After a restock, the _Allocate (oldest first)_ button serves orders by order date, or _Choose orders_ opens the allocation screen where the suggested lines are ticked and editable. The total of the selection updates live, with a warning if it exceeds the units physically available.

When every pre-ordered line of an order is allocated, the order moves to the configured status (by default _Pre-order: ready to ship_) and the customer gets an e-mail. You then prepare the order as usual.

Automatic allocation serves pre-orders without manual validation, but never before the announced date of a forced or date window rule.

## Handling a delay

Open the rule, change the estimated shipping date and leave _Notify customers if the date changes_ on. Waiting pre-orders are updated and every affected customer receives an e-mail with the new date and a link to request cancellation. The number of notified customers is shown after saving, and the history of announced dates appears under the form.

Cancellation requests land in the dashboard. _Confirm cancellation_ frees the reserved units; the refund is still made from the order page with your payment method. _Keep the pre-order_ puts the lines back to waiting.

## Cron task

The module configuration shows a token URL. Schedule it every 15 minutes at your host. It opens and closes date windows on time and, when automatic allocation is on, serves the pre-orders whose stock has arrived.

## Frequently asked questions

### Does the customer pay in full?

Yes. The customer pays the full amount at checkout with your usual payment methods.

### Can in-stock items ship before the pre-orders?

Yes, with the partial shipment or split modes described in Shipping mixed orders. In one-shipment mode the order waits until every item is available.

### Why does an order move to Pre-order: awaiting stock?

The module moves the order to that status as soon as it is paid and contains at least one pre-ordered line. The status is paid and not shippable, which keeps an incomplete order out of preparation.

### Does a rule on one combination affect the others?

PrestaShop only handles the allow-orders-when-out-of-stock setting at product level. The module therefore sets it on the product, then blocks out-of-stock combinations without a rule on the front office and in the cart, so the original shop behaviour is preserved.

### The countdown does not show

It only shows when the closing date (window mode) or the estimated shipping date is in the future, and when the option is enabled on the rule.

### The button keeps its original label

The module replaces the add-to-cart label on standard themes. On a heavily customised theme, contact support with the product URL: the button selector can be adapted.
