Skip to content

Ошибка расчёта стоимости заказа при хранении корзины в БД #903

@ShevArtV

Description

@ShevArtV

Проблема:
Если в ms2 4.3.0 переключиться на хранение корзины в бд, то в обработчике корзины core/components/minishop2/handlers/storage/db/cartdbhandler.class.php в методе add() вот эта строка
$this->products = $this->msOrder->getMany('Products');
всегда возвращает 1 последний добавленный товар, ну и как следствие если добавить два товара, ничего не менять в корзине итоговая сумма заказа будет как за один товар, хотя их по факту в заказе два.

Кроме того, в методе restrictOrder() при расчёте суммы заказа и веса не учитывается количество каждой отдельной позиции товаров.

Решение:
Изменить метод restrictOrder()

protected function restrictOrder()
    {
        $this->msOrder = $this->getStorageOrder();
        $this->products = $this->msOrder->getMany('Products');
        $cartCost = 0;
        $weight = 0;

        foreach ($this->products as $product) {
            $count = $product->get('count');
            $cartCost += $product->get('cost');
            $weight += $product->get('weight') * $count;
        }

        $delivery_cost = $this->msOrder->get('delivery_cost');
        $cost = $cartCost + $delivery_cost;
        $this->msOrder->set('cost', $cost);
        $this->msOrder->set('cart_cost', $cartCost);
        $this->msOrder->set('weight', $weight);
        $this->msOrder->set('updatedon', time());
        $this->msOrder->save();
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions