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;
    }
}
¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top