¿Por qué algunos métodos de entrega no están disponibles para algunos clientes?
-
16-10-2019 - |
Pregunta
Tengo 4 métodos de envío.
El viejo cliente obtiene sólo 2 métodos. He creado el mismo cliente de correo electrónico con otro. Se pone todos los métodos de envío 4.
Me sumergió en código y tabla de DB sales_flat_quote_shipping_rate .
Clasificar por address_id tenemos: para el viejo cliente: 2 registros de tasa; para el mismo nuevo cliente:. 4 registros de tipos
¿Por qué sucede? y donde se registro la tasa creada?
ACTUALIZACIÓN 1:
I no depende de la dirección. Depende de producto. Si el producto ha llenado de peso, entonces los clientes no pueden ver algunos de los métodos de envío. Ahora la pregunta es ¿por qué?)
Solución
La razón estaba en función de la clase 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;
}