Promociones y descuentos no se aplican en forma de envío personalizado (módulo)
-
16-10-2019 - |
Pregunta
He creado un módulo que calcula el precio de entrega de acuerdo con el precio del artículo y funciona bien. Sin embargo promociones. (Ejemplo: Envío libre por categorías o número de elementos) y los descuentos no se aplican en mi método de envío personalizado (módulo)
¿Cómo puedo hacer que las promociones se aplican en mi método de envío de encargo?
PS:. Las promociones están activos y el trabajo en otros métodos de envío por defecto
Esta es mi clase del modelo:
class Workspace_Transportadora_Model_Carrier_Transportadoracode
extends Mage_Shipping_Model_Carrier_Abstract
implements Mage_Shipping_Model_Carrier_Interface
{
protected $_code = 'transportadoracode';
/**
* Collect rates for this shipping method based on information in $request
*
* @param Mage_Shipping_Model_Rate_Request $data
* @return Mage_Shipping_Model_Rate_Result
*/
public function collectRates(Mage_Shipping_Model_Rate_Request $request){
if(!Mage::getStoreConfig('carriers/transportadoracode/active')) {
return false;
}
$result = Mage::getModel('shipping/rate_result');
$shippingPrice = $this->resultadoValor();
$method = Mage::getModel('shipping/rate_result_method');
$method->setCarrier($this->_code);
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod($this->_code);
$dias = Mage::registry('prazoentrega');
$method->setMethodTitle($this->getConfigData('name') . ' - Em média '. ($dias ? $dias : $this->getConfigData('diasoff')) .' dias' );
$method->setPrice($shippingPrice);
$method->setCost($shippingPrice);
$result->append($method);
return $result;
}
/**
* Get allowed shipping methods
*
* @return array
*/
public function getAllowedMethods()
{
return array($this->_code=>$this->getConfigData('name'));
}
protected function resultadoValor()
{
return (($this->getConfigData('porcent')/100) * $this->geraValor()) + $this->getConfigData('adicional');
}
protected function geraValor()
{
$totals = Mage::getSingleton('checkout/cart')->getQuote()->getTotals();
$subtotal = $totals["subtotal"]->getValue();
return $subtotal;
}
}
Solución
Para aplicar promociones y envío libre, tiene que especificar el setFreeShipping(true)
sobre el tema y las necesidades freeMethodWeight
ser 0 para los elementos aplicables:
$item->setFreeShipping(true);
Y en su tasa de peticiones de objetos que necesita para establecer el peso del elemento a cero:
$request = Mage::getModel('shipping/rate_request');
$request->setFreeMethodWeight(0);