Creating Purchase Orders
There are four ways to create a PO in Synplex. All four result in the same PO form — they differ only in how you get there and how much is pre-filled.
Method 1: Manual Creation
- Go to Purchase Orders and click Create PO. The page title is Create draft purchase order.
- Select a supplier from the dropdown. Synplex will automatically set the PO currency to that supplier's default currency. If the supplier has a Supplier Product record for any items in the table, the supplier SKU and unit price are also auto-filled for those rows.
- Add line items. Each row requires: product/variant, order quantity, unit price, warehouse location. Discount, tax, and notes are optional. Per-row totals are calculated automatically as
quantity × unit price − discount + tax. - Set the incoterm (default: DAP). Options: DAP, DPP, CIF, FOB, EXW, FCA.
- Set the order date and requested delivery date.
- Set the Sync receipts to Shopify toggle — controls whether receipt quantities from this PO are pushed to Shopify inventory when goods are received. Defaults to the shop-level setting in Settings. Can only be changed while the PO is in draft status.
- Review the Cost summary panel (right side): shows subtotal, additional costs, general discount, and total cost.
- Click Save. The PO is always saved as draft — there is no send step at creation.
Method 2: From the Inventory Table (Recommended Daily Workflow)
Open a saved view filtered to products that need reordering — for example, Status = Running Low, Grade = A. Multi-select the rows, click Add to PO, and choose Create new PO or Add to existing PO. Synplex passes the selected items with their inventory level data (available stock, daily sales rate, recommended order qty, days of coverage, stock assessment) pre-populated into the PO item table. Items with a procurement strategy of produce are excluded automatically. This method keeps you focused on high-priority items and eliminates the risk of accidentally ordering products with healthy stock.
Method 3: From the Supply Plan
Go to Demand & Supply Plan → Supply Plan. Click Convert to PO on any recommended order. The item list is pre-filled from the supply plan with supplier, quantity, and expected delivery date already set.
Method 4: CSV Import
Use the Import button on the Purchase Orders list page to bulk-create POs from a CSV file. This is the recommended method for migrating historical PO data or creating many purchase orders at once.
How it works
The import is a two-phase process:
- Parse & preview — upload your CSV file and click Parse file. Synplex validates the headers and shows a summary (number of POs, line items, and shipments detected) before anything is written to the database.
- Start import — click Start Import to confirm. The import runs as a background job. You will receive an email when it completes.
Required columns
| Column | Description |
|---|---|
poNumber | Purchase order number. Use the same value for all rows belonging to the same PO. |
supplierName | Exact name of an existing supplier. The supplier must already exist in Synplex. |
productVariantSKU | SKU of the product variant. Must exist in your Shopify store. |
quantity | Quantity to order. Must be a positive number. |
unitPrice | Unit price for the line item. Must be a number. |
Optional columns
| Column | Description |
|---|---|
requestedDeliveryDate | Expected delivery date. Format: YYYY-MM-DD. Must be the same for all rows of the same PO. |
confirmedDeliveryDate | Confirmed delivery date. Format: YYYY-MM-DD. If provided, the PO is automatically confirmed and one shipment is created per unique date per PO. |
orderDate | Date the order was placed. Format: YYYY-MM-DD. Defaults to today. |
poNotes | Free-text notes for the purchase order. |
shopifyLocation | Exact name of the Shopify location for this line item. Also used to assign the shipment location. If omitted, no location is assigned. |
syncPOreceiptToShopify | true or false. Defaults to false. Must be the same value for all rows of the same PO. |
quantityAnnounced | Announced quantity for the shipment item. Triggers shipment creation if provided. |
quantityAccepted | Accepted quantity for the shipment item. |
quantityDefect | Defect quantity for the shipment item. |
Status behaviour
POs are always created as draft initially. Status is promoted automatically based on the data present in the CSV:
- No
confirmedDeliveryDateor shipment quantity columns → stays draft confirmedDeliveryDateor any shipment quantity provided → automatically promoted to confirmed and one shipment per unique delivery date is created
Important notes
- Multiple rows with the same
poNumberare grouped into one purchase order with multiple line items. - PO-level fields (
supplierName,orderDate,requestedDeliveryDate,poNotes,syncPOreceiptToShopify) must be consistent across all rows for the samepoNumber. - Suppliers must already exist in Synplex before importing — create them first if needed.
- Location names must exactly match the Shopify location names in your store.
- Product variants are matched by SKU — ensure all SKUs exist in your Shopify store before importing.
- Duplicate PO numbers are rejected — each
poNumbermust not already exist in your shop.
Only set syncPOreceiptToShopify to true for purchase orders that were
created in Synplex and do not yet exist in Shopify. Setting it to
true for a PO already created in Shopify will create a duplicate
inventory receipt.
A sample CSV template can be downloaded directly from the Import modal.
Supplier Auto-suggestion
When arriving at the PO creation page with pre-selected items (from the inventory table or supply plan), Synplex checks the primary supplier set on each item's inventory item record. If 70% or more of the unique SKUs share the same primary supplier, that supplier is automatically pre-selected. If SKUs have mixed or missing primary suppliers, a dismissible warning banner appears showing how many SKUs use a different primary supplier than the one selected, and how many have no primary supplier set. The PO can still be saved regardless — it is a warning, not a block.
Validation: MOQ, Pack Size, and Minimum Order Value
Two layers of constraints are checked simultaneously on every row and shown as inline validation messages. The PO cannot be saved if any row has a validation error.
Supplier-product level (set on the Supplier Product record for this specific variant):
| Constraint | Rule | Error shown |
|---|---|---|
| MOQ | Total qty ordered for this variant across all locations must meet or exceed the supplier-product MOQ | MOQ not met: X/Y |
| Pack size | Total qty for this variant must be a multiple of the pack size | Pack size not met: must be multiple of N |
Use the Scale to MOQ/pack bulk action button to auto-adjust selected rows to the nearest valid value.
Supplier level (set on the Supplier record itself):
| Constraint | Rule | Error shown |
|---|---|---|
| Min order qty per SKU | Applies to every SKU on the PO | Supplier MOQ not met: X/Y |
| Min order value | Total PO value must meet or exceed this amount | Order value not met: $X/$Y |
PO Currency
The PO currency is automatically set to the selected supplier's default currency when a supplier is chosen. If the supplier has no currency configured, it falls back to the shop's Shopify base currency. You can override it manually at any time before the payment status reaches invoiced — after which the currency field is locked.
Adding Products via the Resource Picker
On the creation form you can also add products using the Shopify resource picker (a product search modal). Synplex fetches inventory levels for the selected variants filtered to procurement strategy = purchase. If no inventory level exists for a variant, a blank row is added with location and quantity set to defaults. Duplicate variant + location combinations are deduplicated automatically. Maximum 250 variants per PO.
What Happens on Save
- The PO is created with status = draft
- All line items are created with status = draft and
quantityPending = quantityOrdered - The user is navigated to the Purchase Orders list
- No supply plan regeneration is triggered at draft creation — this happens when the PO is confirmed or completed