Tak urzeźbiłem to dawno temu.
Ogólnie robiłem to poprzez php + zapytania mySQL. Najpierw pobierałem wszystkie rabaty do zamówienia. Jedyne zapytanie jakie znalazłem
SELECT o_c_r.id_order, c_r_p_r_v.id_item, c_r_p_r.type, c_r_p_r.id_product_rule, c_r_p_r.id_product_rule_group, c_r_p_r_g.id_cart_rule, o_c_r.value, c_r.reduction_percent, c_r.reduction_amount
FROM
ps_order_cart_rule o_c_r
LEFT JOIN ps_cart_rule c_r ON (o_c_r.id_cart_rule = c_r.id_cart_rule)
LEFT JOIN ps_cart_rule_product_rule_group c_r_p_r_g ON (c_r.id_cart_rule=c_r_p_r_g.id_cart_rule)
LEFT JOIN ps_cart_rule_product_rule c_r_p_r ON (c_r_p_r_g.id_product_rule_group=c_r_p_r.id_product_rule_group)
LEFT JOIN ps_cart_rule_product_rule_value c_r_p_r_v ON (c_r_p_r.id_product_rule = c_r_p_r_v.id_product_rule)
WHERE o_c_r.id_order =
Dane te wprowadzałem do tablicy. Później każdy produkt w zamówieniu sprawdzałem czy pasuje według tej tablicy czy pasuje po manufacturers, products, categories ( przy kategoriach też pobierałem wszystkie kategorie produktu do tablicy i porównywałem każda kategorie).