Skip to main content

Orders

The order lifecycle, statuses, stock effects, the call-confirm workflow, sending to a courier, and the Advanced Orders CRM addon.

Written by Support

Every order moves through a set of statuses, some of which you set by hand and some of which DZBuild sets for you. This page covers the orders list, the preview popup and detail page, the call-confirm workflow most Algerian merchants run, sending orders to a courier, and the Advanced Orders CRM addon for sub-statuses and call attempts.

Video

The orders list

Open Dashboard → Orders at /dashboard/orders. Each row shows:

  • Selection checkbox

  • Order number — with a product thumbnail (a +N badge when the order has several items), a traffic-source icon and any colour label you've set

  • Customer name and phone — with a fraud-score badge, and a red badge if you've banned that customer

  • Total

  • Status pill — plus a truck badge once the order has been sent to delivery

  • Date and time

  • Actions — view, print label, edit

Wilaya and commune are not columns; they appear in the order preview popup and on the detail page.

Order numbers: the list shows a short per-store number (#1, #2, …), counted separately for every store. The full system reference used on courier labels, emails and the track-order page is ORD-<store id>-<YYYYMMDD>-<8 hex characters> (for example ORD-11-20260804-3F9A2B1C), or LP-<8 hex characters> for an order taken on a landing page. Numbers are never reused, so a gap after a deleted order is normal.

Filter by:

Filter

Use

Status

Find all pending orders to call

Period

All periods / Today / This week / This month (fixed presets, not a free date range)

Wilaya

Plan courier hand-overs by region

Delivery type

home / desk / pickup

Sent to delivery

Sent / not sent — how you find the day's un-dispatched orders

Duplicates

Same phone ordering the same product across more than one order

There is no filter by delivery company and no payment filter — storefront orders are cash-on-delivery.

Search by phone, customer name, or order number from the search box at the top.

Live orders

Leave the Orders page open during a campaign: new orders arrive in real time. The row is injected at the top of the list with a flash animation, the counters bump, a toast appears and a short chime plays — no refresh needed.

Colour labels

Each order can carry a colour label — a lightweight way to tag orders ("call back tomorrow", "needs address check") straight from the list, without installing the Advanced Orders addon. The chip shows on the row in both the desktop table and the mobile card.

Where did this order come from?

Every order carries a small traffic-source icon (Meta, TikTok, Google, Direct, …). DZBuild works it out at checkout time from, in order: click IDs (fbclid, ttclid, gclid), UTM tags, the referring domain, and finally in-app-browser detection (Instagram, Facebook, TikTok, Snapchat, Threads, YouTube, Telegram). An order opened from an in-app browser with no pixel installed often lands as direct/other, and orders placed before this feature shipped have no source at all.

Order limits per plan

Plan

Orders per calendar month

Free

30

Pro

Unlimited

Unlimited

Unlimited

Enterprise

Unlimited

When a Free-plan store reaches 30 orders in a calendar month, the storefront closes: the home page, product pages and the checkout page are replaced by a "store closed" notice, and both storefront and landing-page order submissions are rejected — it is not just the checkout button. Orders already placed are untouched and the dashboard stays fully usable. Manual orders created from the dashboard also count against the limit.

The counter resets automatically on the 1st of the month, or immediately when you upgrade. The orders page shows a live usage card with a progress bar, the remaining count and a days-until-reset countdown, a warning from 80% and a red banner once you hit the limit.

To upgrade, open /dashboard/subscribe and click ▶ How to renew for the in-app guided tour, or watch the DZBuild YouTube channel tutorials.

The state machine

pending → confirmed → processing → shipped → delivered
                ↓                       ↓
            cancelled             cancelled / returned

📝 Note

The diagram is the normal path, not an enforced one — the status picker lets you move an order to any of the seven statuses at any time. processing is also set automatically the moment you send an order to a courier, and shipped / delivered / returned are set automatically by the courier tracking sync.

Status

Description

pending

Customer placed the order; you haven't reviewed it yet.

confirmed

You've called and verified — stock is decremented.

processing

Being packed / prepared, or just sent to a courier.

shipped

Handed to the courier; tracking number issued.

delivered

Customer received it.

cancelled

Cancelled before delivery — stock is restored if it had been decremented.

returned

Returned after delivery — stock is restored and a negative event is recorded against the customer's fraud score. No refund is logged for a store order; a refunded payment state exists only on digital-store orders.

Stock effects

  • Stock is decremented when the order moves to confirmed, not at pending. This protects you from spam orders.

  • Stock counts as committed while the order is confirmed, processing, shipped or delivered.

  • Cancelling or returning an order restores stock — but only if it had been committed. Cancelling a still-pending order changes no stock.

  • Sending a still-pending order to a courier moves it to processing, which is the moment its stock is deducted.

  • Deleting an order whose stock had already been committed puts that stock back; deleting a still-pending order changes nothing.

Opening an order

Clicking an order row opens a quick preview popup in the list: items, customer, totals, a status changer, a call button, send-to-delivery and print label.

To open the full standalone page at /dashboard/orders/<id>, use the eye icon in the Actions column. The pencil icon opens the full edit page at /dashboard/orders/<id>/edit.

The order detail page

  • Status pipeline — a read-only visual bar showing where the order is now (pending → confirmed → processing → shipped → delivered, with a cancelled/returned branch). It is display-only: change the status from the status picker in the preview popup or on the detail page, not by clicking the pipeline.

  • Items — what was ordered, with variants, prices, totals.

  • Customer — name, phone, address. The preview popup also shows a small badge counting how many orders this phone number has placed with you, displayed only when it is more than one. It's an indicator, not a link — to see the customer's other orders, search their phone number in the orders search box or open Customers.

  • Shipping — wilaya / commune, courier, tracking number, delivery type (home / desk / pickup).

  • Payment — cash on delivery, and the amount to collect.

  • Notes — two separate fields: Customer notes, whatever the buyer typed in the checkout form (so this one is customer-supplied, not internal), and Seller notes, your own internal notes. Both are editable from the order page. Landing-page custom form fields are appended to the seller notes as label: value lines and render as chips.

The core order page keeps no per-change audit log. A full timestamped status history, with the agent who made each change, exists only in the Advanced Orders addon.

Editing an order

The full edit page at /dashboard/orders/<id>/edit lets you:

  • Change customer details, wilaya and commune — shipping recalculates live.

  • Change the delivery type.

  • Add or remove products, change quantities, and edit a line's price.

  • Apply a discount.

  • Override the shipping price by hand.

⚠️ Warning

Saving from the preview popup in the list does not carry a shipping override — it resets a hand-set shipping price back to your rate table. If you've overridden shipping, save from the full edit page.

Create an order by hand

Taking orders by phone, Instagram DM or WhatsApp? Add them from the orders page: search a product, pick variants and quantity, then fill in the customer's details and their wilaya / commune — shipping is priced from your store's rate table.

Manual orders start as pending, are cash-on-delivery like any other order, and do count against the Free plan's 30-per-month limit. Creating one needs the orders.edit permission.

The call-confirm workflow

Most Algerian merchants run a phone-confirm flow:

  1. Order arrives as pending.

  2. You call the customer to confirm the order is real and still wanted.

  3. Mark as confirmed if real → stock decrements, ready to ship.

  4. Mark as cancelled if fake or customer-cancelled → no stock used.

A green Call button in the order preview popup (and in the Advanced Orders table) turns the customer's number into a tel: link, so the call is one tap away on mobile. It lives in the list's preview popup, not on the standalone order detail page.

For a dedicated CRM-style page with sub-statuses, call-attempt tracking and a full per-order timeline, install Advanced Orders.

Spotting bad orders

  • Fraud score — every order shows a badge for that phone number, built from its cancellation, return and successful-delivery history. Moving an order to cancelled, returned or delivered feeds that history.

  • Ban a customer — from the order, ban the phone number from your store with a required reason. Banned customers get a red badge on their orders.

  • Duplicates filter — surfaces the same phone number ordering the same product across more than one order, which is the usual shape of a double-submit or a prank.

Sending an order to a courier

Link a courier first at /dashboard/link-shipping — see Shipping. Once one is linked, the preview popup and the order detail page both show a Send to delivery button:

  1. Pick a delivery provider from the dropdown (shown only if you have several linked; your default is marked with a ⭐).

  2. Click Send. DZBuild calls the courier's API, gets back a tracking number and stores it on the order along with the courier's name, flags the order as sent, and moves the status from pending / confirmed to processing — not shipped. An order already in any other status keeps that status. If the order was still pending, this is the moment stock is deducted.

The order then moves to shipped / delivered / returned on its own as the tracking sync reads the courier's status.

The send dialog only lets you choose the courier. Home vs desk vs pickup is a property of the order itself, set by the customer at checkout — to change it, edit the order (the preview popup's edit modal, or /dashboard/orders/<id>/edit), which also recalculates the shipping cost.

A desk send is refused by DZBuild, before any API call, when the synced courier data says that wilaya has no desk. And if the courier's API is down, DZBuild surfaces the error and leaves the order untouched — no half-state.

Tracking after the hand-off

Once the order has a tracking number, DZBuild re-checks the courier automatically and maps the courier's current status onto the order status (shipped, delivered, returned, cancelled). A change on the courier's side can take a little while to show up on the order. The order page shows the courier's latest status as a single line, with a Refresh button for an on-demand check.

There is no per-event courier history — only the latest status is stored. An unrecognised courier status is ignored rather than guessed, so a rare status can leave the order where it is until you set it by hand.

Printing a label

The printer icon on any order prints its label.

  • If the order has already been sent to an Ecotrack-powered courier or Elogistia and has a tracking number, you get that courier's own PDF bordereau.

  • For every other courier, and for orders not yet dispatched, DZBuild prints its own sheet: store name and phone, customer name, phone and address, the item list with quantities and prices, subtotal / shipping / total, the tracking number when there is one, and a QR code that reopens the order in your dashboard.

On mobile — and on desktop when the popup is blocked — the sheet renders inline instead of opening a print window. For per-product label customisation, see Custom Delivery Label.

Bulk actions

Ticking order checkboxes (or the header select-all) reveals one bulk action: Send to delivery, with a courier dropdown when more than one courier is linked. The bulk bar only exists when at least one courier is linked, and orders already sent have their checkbox disabled.

Maximum 50 orders per operation. Results come back in a modal split into sent / failed / skipped.

There is no bulk status change, no bulk label generation, and no CSV or Excel export of orders in the dashboard. The closest thing to an export is the Google Sheets addon, which pushes orders out to a spreadsheet.

Who can do what

Orders are permission-gated at three levels — view, edit and delete (a fourth export checkbox exists in the team screen but is not wired to anything today) — so a call-centre worker can be given view + edit without the ability to delete orders. Note that confirming an order, editing it, creating one by hand and sending it to a courier all share the same orders.edit permission; they can't be granted separately.

Notifications

When a new order arrives:

  • On the Orders page — the row is injected live at the top of the list with a flash, a toast appears and a short chime plays. There is no notification-bell centre in the dashboard and no on/off switch for the chime; it plays only on the Orders page.

  • Email to the store owner.

  • Push — turn the Push switch on at /dashboard/notifications and accept the browser prompt. This works in any browser that supports Web Push; installing the dashboard as a PWA is not required (though on iOS it is, which is why the page shows an iOS hint). In the DZBuild mobile app the same row is labelled "app notifications".

  • Telegram — connect one or more accounts; each team member gets their own seat with independent new-order and status-change toggles.

  • Discord — same per-channel new-order and status-change toggles.

The channels you can toggle at /dashboard/notifications are Push, Email, Telegram and Discord.

Webhooks

Two separate paths:

  1. Install the Webhooks (n8n / Make / Zapier) addon from /dashboard/addons — it requires the Unlimited plan — then add your automation URL at /dashboard/webhooks. DZBuild posts an HMAC-signed payload the moment an order is created or its status changes.

  2. If you're building against the public API, register webhooks with your API key instead — see Webhooks (API).

Advanced Orders (addon — Unlimited plan)

The CRM-style page at /dashboard/orders/advanced adds:

  • 12 sub-statuses on top of the standard ones: no answer, busy line, postponed, waiting customer call, confirmed, cancelled, fake, duplicate, customer cancelled, at courier, returned, completed.

  • Call-attempt tracking — each attempt is logged with one of five outcomes (no answer, busy, answered, wrong number, callback requested) plus a note, and a red call-count chip shows on the row.

  • Full status timeline per order, with the agent who made each change.

  • Team stats — per-agent activity across the call queue.

  • Filter and search by sub-status.

The CRM page does not replace the standard orders page, but it is not read-only either. Eight of the twelve sub-statuses are mapped onto the core order status — confirmed → confirmed; cancelled, fake, duplicate and customer cancelled → cancelled; at courier → shipped; returned → returned; completed → delivered. Setting one of those also changes the status on the standard orders page, moves stock, updates the customer's fraud score, and fires the normal status-change notifications. The four pre-confirmation states (no answer, busy line, postponed, waiting customer call) have no core equivalent and leave the order status untouched.

Activate from /dashboard/addons (requires the Unlimited plan).

Tips

  • Confirm by phone within 1 hour of the order when you can — the longer the delay, the more cancellations.

  • Don't move orders to confirmed unless you've actually verified. It decrements stock and creates a real shipping intent.

  • Use sub-statuses if your team handles ≥ 50 orders/day — no answer callbacks need their own queue.

  • Clear out old pending orders weekly. They're usually fake or spam and clutter the list — cancel them one by one from the list, or work through them in the Advanced Orders queue.

  • Bind the order detail to a single screen during call sessions — open it on tablet, dial on phone.

  • Send to courier in batches at the same hour each day so the courier expects a pickup window — up to 50 orders per batch.

What's next

Did this answer your question?