Неправильный итог доставки с использованием Фиксированных фиксированных цен за единицу товара
Я искал решение этой проблемы. В основном то, что здесь происходит, заключается в том, что каждый товар в инвентаре имеет свою собственную цену доставки.
Когда эти товары добавляются в корзину, доставка рассчитывается и возвращается моделью shipping/carrier_flatrate, а затем добавляется в массив.
Кажется, я не могу найти, где это суммируется. Я слышал, что в некоторых случаях массивы могут быть отсортированы неправильно, однако, похоже, это другая ситуация полностью вызвав это. Любые идеи будут высоко оценены.
Я несколько дней искал в Google, пытаясь разобраться в этом.
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 файлы любых пользовательских модулей, которые были написаны.
Надеюсь, это поможет