Неправильный итог доставки с использованием Фиксированных фиксированных цен за единицу товара


Я искал решение этой проблемы. В основном то, что здесь происходит, заключается в том, что каждый товар в инвентаре имеет свою собственную цену доставки.

Когда эти товары добавляются в корзину, доставка рассчитывается и возвращается моделью shipping/carrier_flatrate, а затем добавляется в массив.

Кажется, я не могу найти, где это суммируется. Я слышал, что в некоторых случаях массивы могут быть отсортированы неправильно, однако, похоже, это другая ситуация полностью вызвав это. Любые идеи будут высоко оценены.

Я несколько дней искал в Google, пытаясь разобраться в этом.

Author: Aasim Goriya, 2013-05-13

1 answers

Я верю, что вы ищете

app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php

Который выглядит как

    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
        if (!$this->getConfigFlag('active')) {
            return false;
        }

        $freeBoxes = 0;
        if ($request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {

                if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
                    continue;
                }

                if ($item->getHasChildren() && $item->isShipSeparately()) {
                    foreach ($item->getChildren() as $child) {
                        if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
                            $freeBoxes += $item->getQty() * $child->getQty();
                        }
                    }
                } elseif ($item->getFreeShipping()) {
                    $freeBoxes += $item->getQty();
                }
            }
        }
        $this->setFreeBoxes($freeBoxes);

        $result = Mage::getModel('shipping/rate_result');
        if ($this->getConfigData('type') == 'O') { // per order
            $shippingPrice = $this->getConfigData('price');
        } elseif ($this->getConfigData('type') == 'I') { // per item
            $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
        } else {
            $shippingPrice = false;
        }

        $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);

        if ($shippingPrice !== false) {
            $method = Mage::getModel('shipping/rate_result_method');

            $method->setCarrier('flatrate');
            $method->setCarrierTitle($this->getConfigData('title'));

            $method->setMethod('flatrate');
            $method->setMethodTitle($this->getConfigData('name'));

            if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
                $shippingPrice = '0.00';
            }


            $method->setPrice($shippingPrice);
            $method->setCost($shippingPrice);

            $result->append($method);
        }

        return $result;
    }

Если при расчете тарифов на доставку используется пользовательский код, я бы поискал модуль, который переписывает метод collectRates, есть также пара других событий, к которым они могли бы подключиться, чтобы пересчитать стоимость доставки, я бы также посмотрел на config.xml файлы любых пользовательских модулей, которые были написаны.

Надеюсь, это поможет

 1
Author: Jeffrey L. Roberts, 2013-05-15 14:52:59