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.
You can also start a discount straight from the Inventory Value report's per-supplier drill-down, handy for marking down an overstocked SKU the moment you spot it. Either way the discount lands here.
Columns: Item No, Item Name, Price (current retail incl. VAT), Rate, Discounted price, Units Sold and Revenue since the discount went live (active discounts only), Status, Channels, Window, Campaign, and a Details link if the product has a live discount. Click a header to sort; drag headers to reorder, and use the columns menu to hide ones you don't need.
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), rounded down to the store currency's precision (whole krónur for ISK) so the storefront's “% off” badge shows the exact rate rather than one point under. 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. Click any column header to sort (click again to reverse). 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.