Online Orders
Online Orders is the fulfilment workspace for every marketplace you connected under Integrations — pull new orders, pack and dispatch them, convert them to POS invoices, track shipments, process returns, review payout settlements, and push stock/price updates back to the marketplace, including across all connected platforms at once.
Overview
Across the top sit one tab per connected marketplace (Flipkart, Amazon, Meesho, Myntra, ONDC, etc.); each tab shows a coloured dot when connected and a badge with its pending-order count.
For a connected platform, six stat cards summarise Total Orders, Pending, Revenue, Invoiced, Open Returns and Return Rate, followed by five collapsible panels — Platform Settings, SKU Mapping, Bulk Update, Returns, and Settlements — plus a cross-platform Omnichannel Stock Sync panel that appears once any platform is connected.
Orders move through a local status ladder — PENDING → PROCESSING → PACKED → SHIPPED → DELIVERED (or PROCESSED/INVOICED/CANCELLED) — independent of, but shown alongside, the marketplace's own platform status string.
Clicking any order row opens a detail modal with customer/address, the item list, a shipment timeline (ordered/packed/shipped/delivered timestamps), and every action relevant to its current status: Mark as Packed, Generate Shipping Label, Ready to Dispatch (tracking number + courier), Refresh Tracking, Create Invoice, Start Processing, Mark Done and Cancel.
Before You Start
- At least one marketplace must already be connected under Integrations → Marketplace Integrations — an unconnected platform tab shows a "not connected" notice with a shortcut link back to Integrations instead of any orders.
- SKU Mapping should be set up per platform before relying on automatic stock sync, bulk push, or the Omnichannel panel — unmapped SKUs cannot be pushed.
- Order status changes, dispatch, invoicing, returns approval/rejection, settlement sync and bulk pushes require an Admin or Manager role (
canManage); other roles can view orders/returns/settlements read-only.
Step-by-Step Guide
1 Pull in new orders
- Select the platform tab you want to sync.
- Click Sync Now in the top-right — a toast reports how many new orders were pulled (and how many were auto-converted to invoices, if Auto create invoice is on for that platform).
- The Last sync timestamp next to the button updates, and the platform tab's pending-count badge refreshes.
2 Pack, label and dispatch an order
- Click any order row to open its detail modal.
- While the order is Pending/Processing, click Mark as Packed.
- Once Packed, click Generate Shipping Label (opens the label PDF/URL in a new tab once generated) or, if a label already exists, click Print Shipping Label.
- Click Ready to Dispatch, fill in the Tracking Number (required) and Courier Name, then Confirm Dispatch — the order moves to Shipped.
- Once Shipped or Delivered, click Refresh Tracking to pull the latest courier events into the timeline; the order automatically flips to Delivered if the courier reports a delivered status.
3 Convert an order into a POS invoice
- Open the order and, if it is not cancelled/already invoiced, click Create Invoice.
- A success toast shows the new invoice number and the modal switches to an "Invoice created" banner with a link to view it in Sales.
- Alternatively, turn on Auto create invoice per platform in Platform Settings so every new synced order gets invoiced automatically without opening it manually.
4 Map local product SKUs to marketplace listings
Expand the "SKU Mapping" panel for the active platform.
- Click Add Mapping.
- Type a local SKU or product name into "Local Product SKU" — a live product search suggests matches; pick one to auto-fill the SKU.
- Enter the marketplace's own Listing ID for that product.
- Leave "Sync stock automatically" on (default) so future stock pushes include this SKU, or turn it off to map without auto-syncing, then click Save Mapping.
- Use Sync All Stock at any time to immediately push current stock for every mapped SKU to the platform, or toggle an individual mapping's sync switch, or delete a mapping with the trash icon.
5 Handle a return or refund request
Expand the "Returns" panel for the active platform.
- Click Sync Returns to pull the latest return requests from the marketplace.
- Filter by status (All/Requested/Approved/Rejected/Received/Refunded) and click a row to open its detail.
- For a Requested return, click Approve Return, or Reject Return and type a reason the customer will see.
- Once an approved return item physically arrives, click Mark Item Received & Restore Stock to add the quantity back into inventory.
6 Review settlement (payout) reports
Expand the "Settlements" panel for the active platform.
- Click Sync Settlements to pull the latest payout records from the marketplace.
- Review the three summary cards — Total Paid Out, Average Platform Fee %, and In-Processing count/amount.
- Scroll the table for a per-period breakdown of orders, gross amount, total fees, net amount and settled date, so you can reconcile marketplace payouts against your own revenue figures.
7 Push stock or price to many SKUs at once
Expand "Bulk Update" for the active platform.
- Choose the Stock Update or Price Update tab.
- Enter each product SKU and its exact quantity (or new price) in the rows; use Add SKU for more rows or the minus icon to remove one.
- Click Push N SKUs to [Platform] — a result panel marks each row green (pushed) or red with an error message, and a summary toast reports success/failure counts.
8 Sync stock across every connected platform at once
The Omnichannel Stock Sync panel appears once any platform is connected, below the per-platform panels.
- Click Push All Platforms to push every SKU with sync enabled across all connected marketplaces in one action; per-platform result badges show how many SKUs were pushed or if it failed.
- To push just one product everywhere at once, type its SKU under "Push Single SKU to All Platforms" and click Push — a badge per platform reports the new quantity pushed or why it could not be pushed (e.g. not mapped on that platform).
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Platform tabs | One per connected/available marketplace; shows a green dot when connected and a numeric badge of pending orders on that platform. |
Sync Now | Pulls new orders for the active platform from the marketplace; disabled if the platform is not connected. |
Last sync | Timestamp of the most recent successful Sync Now for the active platform. |
Dashboard cards | Total Orders, Pending, Revenue, Invoiced, Open Returns and Return Rate for the active platform, with colour highlighting when Pending or Open Returns/Return Rate need attention. |
Platform Settings panel | Auto-sync toggle + Pull Frequency (Manual/5/15/30/60 min), Auto create invoice toggle (auto-converts every synced order to a POS sale), and an overall Integration Active/Paused toggle plus Save. |
SKU Mapping panel | Add Mapping (local SKU ↔ platform listing ID with product search), per-mapping Sync stock toggle, Sync All Stock, mapping table (SKU, product, listing ID, auto sync, last synced, qty sent, delete). |
Bulk Update panel | Stock Update / Price Update tabs, an editable SKU+value row list with Add SKU, and a Push button with per-row success/error results. |
Returns panel | Status filter chips (All/Requested/Approved/Rejected/Received/Refunded), Sync Returns button, and a table of return requests opening a detail modal with Approve/Reject/Mark Received actions and a timeline. |
Settlements panel | Sync Settlements button, summary cards (Total Paid Out, Avg Platform Fee, In Processing), and a period-by-period table of orders/gross/fees/net/settled date. |
Omnichannel Stock Sync panel | Push All Platforms (pushes every synced SKU on every connected platform) and Push Single SKU to All Platforms, both with per-platform success/failure badges. |
Order status filter chips | All / Pending / Processing / Packed / Shipped / Delivered / Invoiced / Processed / Cancelled — filters the order table for the active platform. |
Order Detail Modal actions | Mark as Packed, Generate/Print Shipping Label, Ready to Dispatch (tracking number + courier), Refresh Tracking, Create Invoice, Start Processing, Mark Done, Cancel — each shown only when relevant to the order's current status. |
Tips & Best Practices
- Set up SKU Mapping for a platform before turning on Auto-sync or using Bulk Update/Omnichannel push — unmapped products cannot receive stock or price pushes.
- Turn on Auto create invoice per platform once you trust the sync, so every online order becomes a POS sale without manual clicking.
- Sync Settlements regularly and compare the Average Platform Fee card over time — a rising fee rate is worth renegotiating or switching fulfilment methods for.
- Approve or reject return requests promptly — until you act, refund/inventory restoration stays blocked and the customer's return sits open on the marketplace.
- Use Push Single SKU when you only changed one product's stock, rather than Push All Platforms which processes every synced mapping.
Troubleshooting & FAQ
Sync Now is greyed out for a platform.
An order is stuck at Packed with no way to move it forward.
Push All Platforms reported 0 pushed everywhere.
A platform tab shows "not connected" even though I filled the form once before.
The Returns tab is empty even though a customer says they returned an item.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/marketplace/MarketplacePage.jsx
Backend endpoints used:
GET /marketplaceGET /marketplace/ordersGET /marketplace/dashboardPATCH /marketplace/orders/:id/statusPOST /marketplace/orders/:id/packPOST /marketplace/orders/:id/labelPOST /marketplace/orders/:id/dispatchGET /marketplace/orders/:id/trackingPOST /marketplace/orders/:id/convertPOST /marketplace/:platform/syncPUT /marketplace/:platform/settingsGET /marketplace/:platform/sku-mapPUT /marketplace/:platform/sku-mapDELETE /marketplace/:platform/sku-map/:idPOST /marketplace/:platform/push-all-stockPOST /marketplace/:platform/bulk-inventoryPOST /marketplace/:platform/bulk-priceGET /marketplace/returnsPOST /marketplace/returns/:id/approvePOST /marketplace/returns/:id/rejectPOST /marketplace/returns/:id/restore-inventoryPOST /marketplace/:platform/sync-returnsGET /marketplace/settlementsGET /marketplace/settlements/summaryPOST /marketplace/:platform/sync-settlementsGET /marketplace/omnichannel/statusPOST /marketplace/omnichannel/push-allPOST /marketplace/omnichannel/push-skuGET /products
Related tables (db-core repositories):
MarketplacePlatformMarketplaceOrderMarketplaceReturnMarketplaceSettlementMarketplaceSkuMapping
Redux slices:
auth (role → canManage gate)scope (selectCurrentScope / getScopeQueryParams)
Feature flag key: integrations (requires advanced plan tier or above)
Order/return items and customerAddress are stored as JSON strings and parsed client-side with try/catch fallbacks to empty arrays/objects. Every money value renders through the shared storeFmt currency/locale helper rather than a hardcoded ₹. canManage is a simple client-side check for ADMIN/MANAGER role that hides mutation buttons — the same restriction should also be enforced server-side on the corresponding endpoints.