Возможно, код не лучший и содержит ошибки. Но общую цель он выполняет. И может кто дополнит его:
тут метод
protected function getCouponsResult($order, $basket)
{
$productQuantity = [];
foreach ($basket as $basketItem) {
$id = $basketItem->getId();
$quantity = $basketItem->getQuantity();
$productQuantity[$id] = $quantity;
}
$orderDiscounts = $order->getDiscount();
$orderDiscounts = $orderDiscounts->getApplyResult(true);
$couponsList = $orderDiscounts['COUPON_LIST'];
$couponsBasket = $orderDiscounts['RESULT']['BASKET'];
$couponsPrices = $orderDiscounts['PRICES']['BASKET'];
$coupons = [];
foreach ($couponsList as $code => $data) {
$coupons[$data['ORDER_DISCOUNT_ID']] = $code;
}
$prices = [];
foreach ($couponsPrices as $productID => $data) {
$quantity = isset($productQuantity[$productID]) ? $productQuantity[$productID] : 1;
$prices[$productID] = $data['DISCOUNT'] * $quantity;
}
$result = [];
foreach ($couponsBasket as $productID => $discounts) {
foreach ($discounts as $discount) {
$discountID = $discount['DISCOUNT_ID'];
$code = isset($coupons[$discountID]) ? $coupons[$discountID] : null;
if (!$code) {
continue;
}
$result[$code] = isset($result[$code]) ? $result[$code] : 0;
$price = isset($prices[$productID]) ? $prices[$productID] : 0;
$result[$code] += $price;
}
}
$formattedResult = [];
foreach ($result as $code => $amount) {
$formattedResult = [
'promoCodeId' => $code,
'discountAmount' => $amount * 100
];
}
return $formattedResult;
}
Суть в том, чтобы пройтись по текущим скидкам заказа(можно создать временный и не сохранять). А после сопоставить товары в корзине и их количество с теми скидками, что есть в заказе. Корзина тут по большей части нужна дабы закинуть её в заказ и получить число товаров в ней