Как подсчитать сумму заказа со скидкой, не создавая заказ

Пытаюсь просчитать заказ со скидкой по купону, не сохраняя заказ в базе данных.

$order = [
            'contact' => $contact,
            'items' => $items,
            'shipping' => 0,
            'discount' => 'calculate',
            'params' => []
];

$coupon_model = new shopCouponModel();
$coupon = $coupon_model->getByField('code', $code, false, 1);

$order['params']['coupon_id'] = (int) $coupon['id'];

далее пытаюсь так:

$order_discount = shopDiscounts::calculate($order, false, $discount_description);

возвращает 0.

Пытаюсь сяк:

$so = new shopOrder($order, array(
                'items_format' => 'tree',
                'items_extend_round' => true,
            ));

и внутри

$so->items_discount

получается пустотой массив.

--

Купон находит нормально. Товары тоже находит. Но на выходе заказ всегда получается без скидки.

Подскажите: Что я делаю не так?

2 ответа

  • 1

    Без доставки?

    $total = wao(new shopCart())->total();

    ¯\_(ツ)_/¯

    • +1
      Никита Траторов Никита Траторов 29 февраля 2020 10:55 #

      Предлагаемый вариант предназначен исключительно для фронтенда, т.к. опирается на сессии, куки и пр. Доставка может быть, а может не быть. Нужен универсальный нативный метод.

  • 1
    Никита Траторов 29 февраля 2020 22:24 #

    Дополнительная пища для размышлений.

    Если сохранить заказ вот так:

    $order = $so->save();

    тогда метод

    $order->items_discount

    начинает возвращать следующее:

            {
                "value": 499.9,
                "html": "Общая скидка на этот товар: -499,90 <span class=\"ruble\">Р<\/span>.",
                "selector": 0,
                "cart_item_id": null,
                "type": "product",
                "product_id": "7460",
                "sku_id": "44864",
                "service_id": null,
                "service_variant_id": null
            }

    и даже есть понятное описание в discount_description.

    Однако при всём, при этом:

    $order->total // выдает цену без учета скидки
    $order->discount // выдает 0.0000

    Товарищи разработчики, можете это пояснить?

    • +2

      Есть скидка на весь заказ, есть скидка на товар отдельно. Надо суммировать

      • +1
        Никита Траторов Никита Траторов 1 марта 2020 02:10 #

        Подскажите, это я руками должен делать? Дублировать код разработчиков из класса shopOrder/shopDiscounts ? (shopDiscounts не посчитает скидку, пока у заказа не появится id)

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите