modx-pro / miniShop2

Second version of simple online shop for MODX Revolution
GNU General Public License v2.0
150 stars 128 forks source link

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

Open ShevArtV opened 10 months ago

ShevArtV commented 10 months ago

Проблема: Если в 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();
    }