Почему некоторые методы доставки недоступны для некоторых клиентов?
-
16-10-2019 - |
Вопрос
У меня есть 4 метода доставки.
Старый клиент получает только 2 метода. Я создал одного и того же клиента с другим электронным письмом. Он получает все 4 метода доставки.
Я погрузился в код и таблицу БД sales_flat_quote_shipping_rate.
Сортировка по адресу address_id У нас есть: для старого клиента: 2 записи о ставках; Для того же нового клиента: 4 записи о цене.
Почему это происходит? А где создается запись о ставках?
Обновление 1:
Я не зависит от адреса. Это зависит от продукта. Если продукт заполнил вес, клиент не может увидеть некоторые методы доставки. Теперь вопрос в том, почему?)
Решение
Причина была в proccessAdditionalValidation
функционировать в Mage_Shipping_Model_Carrier_Abstract
учебный класс:
/**
* Processing additional validation to check is carrier applicable.
*
* @param Mage_Shipping_Model_Rate_Request $request
* @return Mage_Shipping_Model_Carrier_Abstract|Mage_Shipping_Model_Rate_Result_Error|boolean
*/
public function proccessAdditionalValidation(Mage_Shipping_Model_Rate_Request $request)
{
$maxAllowedWeight = (float) $this->getConfigData('max_package_weight');
$error = null;
$showMethod = $this->getConfigData('showmethod');
foreach ($request->getAllItems() as $item) {
if ($item->getProduct() && $item->getProduct()->getId()) {
// here I got true
if ($item->getProduct()->getWeight() > $maxAllowedWeight) { $error = Mage::getModel('shipping/rate_result_error');
$error->setCarrier($this->_code)
->setCarrierTitle($this->getConfigData('title'));
$errorMsg = $this->getConfigData('specificerrmsg');
$error->setErrorMessage($errorMsg?$errorMsg:Mage::helper('shipping')->__('The shipping module is not available.'));
break;
}
}
}
if (null !== $error && $showMethod) {
return $error;
} elseif (null !== $error) {
return false;
}
return $this;
}
Не связан с magento.stackexchange