Marketing → Discounts shows every product in your catalog in one table, with the current retail price, any live discount, and the channel sync state for DK and Shopify. Tick rows, hit Apply discount, and the cron pushes the discount to every selected channel on its next hourly tick.
Columns: Item No, Item Name, Price (current retail incl. VAT), Rate, Discounted price, Channels, Window, and a Details link if the product has a live discount.
Channel dots show the latest sync state for each enabled channel: green = applied, amber= pending (cron hasn't picked it up yet), red = error, grey = reverted. Hover a dot for the underlying message.
Shopify variants are resolved on the fly by SKU when the discount applies — no pre-step needed. If a SKU has no matching variant in Shopify, that product's Shopify channel ends up in error state with the message “Product not found on shopify for SKU …”; the other selected products still apply. There's an optional pre-warm script, scripts/sync-shopify-variants.mjs <company>, that fills in the cache ahead of time to make the first apply faster — useful for big batches but not required.
Tick the rows you want to end and click End discounts. Scheduled discounts that never ran get cancelled outright. Active discounts get an end time of now, so the next cron tick reverts every channel — DK clears the Discount field; Shopify restores the original price and compareAtPrice.
Discount field via PUT /Product/{ItemCode}. The regular price stays put; DK applies the discount at sale time. Revert sets it back to 0.compareAtPrice (the strikethrough) and set price to price × (1 − rate/100). Revert restores both fields from a snapshot taken at apply time, so any pre-existing compareAtPrice (for MSRP reasons) is preserved.Floor employees see currently-active discounts at Store → Active Discounts — SKU, discounted price, end time. Read-only. Use it when a customer asks “is this on sale?”.
v1 keeps things simple. Discounts are chain-wide (every store plus Shopify, not a single location). The discount is a flat percent off; fixed amounts and price overrides come later. Stacking, multi-buy and category-level rules aren't supported.