dmtrbskkv
@dmtrbskkv
Кодим и декодим, а иногда кино смотрим

Как создать массив купон=размер скидки по корзине?

Можно ли как-то сформировать массив в формате:
[
 code => amount
]


Где code - это промокод. А amount - это размер скидки в рублях по всей корзине
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmtrbskkv
@dmtrbskkv Автор вопроса
Кодим и декодим, а иногда кино смотрим
Возможно, код не лучший и содержит ошибки. Но общую цель он выполняет. И может кто дополнит его:
тут метод

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;
}


Суть в том, чтобы пройтись по текущим скидкам заказа(можно создать временный и не сохранять). А после сопоставить товары в корзине и их количество с теми скидками, что есть в заказе. Корзина тут по большей части нужна дабы закинуть её в заказ и получить число товаров в ней
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы