CRMconnect Azuvio · Docs

Workflow: OmniSales Order Fulfillment

Modules involved: OmniSales · Warehouse (Delivery Notes, Packing Lists) · Innoship · Couriers (Cargus / FanCourier) · Invoices
Who uses it: Order operator, Warehouse, Logistics, Finance
Typical duration: Hours – days (from order to delivery)

Overview

The complete order processing workflow for orders received from any sales channel (WooCommerce, Shopify, client portal, POS, manual): from a new order through AWB generation and automatic invoicing. Managed primarily by the warehouse and logistics teams.


Flow diagram

[OMNI ORDER]  ← WooCommerce / Shopify / Portal / Manual / POS
  │  status: Draft (0) → Processing (1) → Confirm (3)
  │  ↓ Order confirmation (manual or automatic)
  │
[DELIVERY NOTE (Goods Delivery Note)]
  │  status: ready_for_packing → packed
  │  created automatically from confirmed order
  │  ↓ Picking in warehouse — physically select products
  │
[PACKING LIST]
  │  status: wh_ready_to_deliver → wh_in_transit → wh_delivered
  │  created from the delivery note (full or partial)
  │  includes parcel dimensions: length, width, height, weight
  │  ↓ Packing list approval
  │
[AWB INNOSHIP]
  │  generated via Innoship API from approved packing list
  │  AWB printed and affixed to parcel
  │  tracking number returned automatically
  │  ↓ Hand over to courier
  │
[INVOICE]
  │  generated automatically or manually from order / delivery note
  │  status: Draft → Sent → Paid
  │
[DELIVERY COMPLETED]
  │  order status → Delivered (5)
  │  packing list status → wh_delivered

Step by step

1. OmniSales Order — Receiving the order

Where: /admin/omni_sales/order_list

Order sources:

Source How it enters the CRM
WooCommerce Automatic sync (cron) or manual — WooCommerce module
Shopify Automatic sync — Shopify module
Client portal Client places the order from their own portal
POS Operator enters the order at the counter
Manual Staff enters the order directly from /admin/omni_sales

Order statuses:

Code Status Description
0 Draft New order, unconfirmed
1 Processing In processing — reviewing stock and availability
2 Pending Payment Awaiting advance payment
3 Confirmed Confirmed — delivery note can be generated
4 Shipping Picked up by courier
5 Delivered Delivered and completed
8 Cancelled Cancelled
9 On Hold Temporarily suspended
14 Paid Paid
15 Ready Ready for delivery

Order approval:
Orders may require approval before confirmation — approve_status: 0 (pending) → 1 (approved) → -1 (rejected). Configurable per sales channel.

Key fields on the order:

  • Client (id_contact) — link to the client record
  • Channel (channel_id) — order source
  • Products + quantities + prices
  • Delivery address
  • Payment method

2. Delivery Note (Goods Delivery Note) — Preparing the order

Where: /admin/warehouse/manage_delivery

Creation:

  • Automatic: when the order reaches Confirmed (3) or Shipping (4) status, the system automatically creates the delivery note via omnisales_auto_create_goods_delivery_with_invoice()
  • Manual: from the confirmed order, Generate Delivery Note button

What the delivery note contains:

  • All product lines from the order (code, name, quantity, price)
  • Source warehouse
  • Client address (copied from the order)
  • Unique number (configurable prefix + auto-increment)

Delivery note statuses:

Status Description
ready_for_packing Created, awaiting picking
packed Products have been packed; packing list created

Picking (collecting products):
The warehouse operator takes the delivery note (physically or on screen) and collects the listed products. Stock is not definitively deducted until delivery is completed or the invoice is generated.


3. Packing List — Packing and preparing the parcel

Where: /admin/warehouse/manage_packing_list

Creation:

  • From the approved delivery note — Create Packing List button
  • Supports partial packing (type_of_packing_list = 'partial'): if not all products are in stock, you can deliver partially and generate a second packing list later

Required data for the packing list:

Field Notes
Products + quantities Copied from delivery note; adjustable for partial delivery
Weight (kg) Required for AWB generation
Length / Width / Height (cm) Parcel dimensions — required by the courier
Delivery address Copied from order; editable
Courier service Select from Innoship list (standard, express, etc.)

Packing list statuses:

Status Description
wh_ready_to_deliver Created, awaiting AWB
wh_in_transit AWB generated, parcel picked up by courier
wh_delivered Confirmed delivered

Packing list approval:
If the approval workflow is active, the manager approves the packing list (approval = 1) before AWB generation.


4. AWB Innoship — Generating the shipping document

Where: Generate AWB button from the approved packing list
or directly from /admin/innoship/awb

Prerequisites:

  • Innoship credentials configured: innoship_api_key, innoship_external_id (at /admin/innoship/settings)
  • Courier and service selected in the packing list
  • Dimensions and weight filled in
  • Valid delivery address in the Innoship database

What happens on generation:

  1. CRM sends a request to the Innoship API with the parcel data
  2. Innoship returns: AWB number + tracking code
  3. CRM creates a record in wh_omni_shipments with the returned data
  4. Packing list status → wh_in_transit
  5. Order status → Shipping (4)
  6. AWB available for printing (A4 or thermal PDF)
  7. Log created in innoship_audit_log

Couriers supported through Innoship:
Fan Courier, DPD, Cargus, Sameday, GLS, DHL, and others (depends on active Innoship contracts).

Direct alternative — Couriers module:
If you have direct contracts with Cargus or FanCourier (without an aggregator), you can generate AWBs through the Couriers module (/admin/couriers) — configure API keys directly with each courier, without an intermediary.

Solution Supported couriers When to use it
Innoship Fan Courier, DPD, Cargus, Sameday, GLS, DHL, + others You have a contract with Innoship as aggregator
Direct Couriers Cargus, FanCourier You have a direct contract; want integration without an aggregator

Tracking:
From the AWB list (/admin/innoship/awb or /admin/couriers/awb), the delivery status is updated automatically via periodic synchronization.


5. Invoice — The payment request

Where: /admin/invoices

Generation:

Mode When
Automatic at confirmation If the create_invoice = on option is enabled on the channel — the invoice is generated when the order reaches Shipping status (4)
Automatic at delivery If generation is configured at Delivered status (5)
Manual From the confirmed order, Create Invoice button; or from the delivery note

Links created:

  • cart.number_invoiceinvoices.id
  • goods_delivery.invoice_idinvoices.id

Invoice content:
Lines are taken from the order: products, quantities, prices, taxes. The billing address comes from the client profile or from the order.


6. Completed delivery and returns

Delivery confirmation: When Innoship confirms delivery (product_delivered):

  • Packing list status → wh_delivered
  • Order status → Delivered (5)
  • Stock is definitively deducted from the warehouse

Returns (if applicable):

Field Notes
Return window Configurable (default 30 days)
Return type manual, partially, fully
Table wh_order_returns — linked to original_order_id
Refund If the return is approved, a refund is generated in omni_refunds

Client return → Return Receipt Note (/admin/warehouse/manage_order_return_receipt)


What is created automatically

Event Created automatically
Order synced from WooCommerce/Shopify OmniSales order with client and products
Order → Confirmed status Delivery Note with order lines
Packing list approved + AWB generated wh_omni_shipments, Innoship log, status → In Transit
Order → Shipping status (if create_invoice = on) Invoice with order lines
Delivery confirmed by Innoship Order status → Delivered, stock deducted

Points where the workflow may stall

Problem Likely cause Solution
Order does not appear from WooCommerce Sync cron not running or incorrect credentials Check /admin/woocommerce/stores and cron
Delivery note not generated automatically Auto-create option disabled on channel Enable from the sales channel settings
Error generating AWB Client address not found in Innoship database Check the locality spelling; contact Innoship
Dimensions/weight missing Fields were not filled in on the packing list Fill in all 4 physical fields (mandatory)
Stock is 0 but order is confirmed Insufficient stock in warehouse Check pending receipt notes or make a stock adjustment
Invoice not generated automatically create_invoice disabled on channel Enable from /admin/omni_sales/omni_sales_channel → Edit channel

Audit and reports

  • Sync Audit/admin/omni_sales/diary_sync — WooCommerce/Shopify sync log
  • Innoship Audit Log/admin/innoship/audit — all AWB operations
  • OmniSales Reports/admin/omni_sales/report — orders by channel, status, period
  • Inventory History/admin/warehouse/warehouse_history — stock movements

Modules involved — detailed documentation

← Back to Workflows

Tip

Configure auto-invoice in WooCommerce and Shopify settings to generate a draft CRM invoice automatically when an order reaches a specific status — this eliminates manual invoice creation for every online order.

Note

Check the Channel Sync Audit daily for errors. A single overnight sync failure means customer orders are not in the system — the fulfilment team processes other work while those orders wait without anyone knowing.