· Publicado por Sergio Baixauli en: Magento Opinión
Etiquetas: extensión, magento, métodos de envío, multiplerates, shipping cost, tablerates
3.- Habilitamos el módulo y lo personalizamos a nuestro gusto. La opción más importante es la “Condición”. Vamos a seleccionar “Peso vs. Destino”.
En el cálculo de los costos de envío elegimos “Fijo”. La explicación de esto es que para cada zona de envío que creemos, se sumará el peso total y se realizará un cálculo fijo.
4.- Ahora vamos a crear nuestra pequeña tabla con la configuración de los envíos. Cambiamos desde la parte superior izquierda (en el administrador) la vista de tienda (el alcance de la configuración actual). Posiblemente tuvieras seleccionada la “Configuración por defecto”. Al cambiar la vista, verás que han aparecido dos nuevos botones. Importar y exportar.
5.- Si no hemos subido nada todavía, pulsamos exportar y tendremos un fichero .csv en “blanco” para poder completarlo. Una vez rellenado, lo importaremos.
6.- Para empezar subiremos este.
El fichero está más o menos claro. Aquellos pedidos que no superen los 140Kg y se envien a cualquier zona (*) de España (ESP), se cobrarán a 48.6 €.
"País","Región/Estado","Código postal","Peso (and above)","Precio de envío","Method Code","Method Name","Method Description","Condition Type" ESP,*,*,140.0000,48.6000,bajo,Envío a planta baja: Hasta 140Kg,Envio a Bajos,value7.- Si nos fijamos, en la última palabra de nuestro fichero de configuración pone “value”. Esto hace referencia a la condicion que usamos antes “Cálculo de los costos”. Si hubieramos puesto “percent”, en vez de calcular el precio “fijo”, se calcularia en base a un porcentaje. Bueno, hasta aquí el funcionamiento “normal” de este módulo. Ahora vamos a modificarlo para que haga lo que nosotros queremos en base a un escenario concreto. Ejemplo: Queremos calcular los costes de envio para una tienda. Esta tienda realiza dos tipos de envíos, uno a plantas bajas y otro a naves industriales. Cada uno de ellos tiene un coste diferente y se rige por unas reglas completamente distintas. Por una parte, el envío a plantas bajas se calcula mediante la clásica tabla de pesos vs. destino, pero vamos a hacer una modificación. Queremos que una vez superado un peso, el importe no sea “fijo”, sino que se multiplique por una constante. Por ejemplo, los pedidos mayores de 200Kg y menores de 500Kg, costarán 0.24€ x Kilo. Por otra, para los envíos a Naves insdustriales, tendremos que saber primero que tipo de producto estamos enviando y luego los multiplicaremos por lo que cuesta el envío de cada uno de ellos. Por ejemplo, dos cajas de bebida (cada una cuesta 10€ de enviar) y una caja de comida (cada una cuesta 20€ de enviar). El total del envío será 30€. Ya os adelanto que todo esto no lo hace el módulo de Multiple TableRates, así que tenemos que hacer unos cuantos cambios. Lo primero, editar el fichero que hace todos los cálculos. Básicamente he cambiado toda la función “collectRates” que es la que hace todos los cálculos.
.../Multipletablerates/Model/Carrier/Multipletablerates.php
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
if (!$this->getConfigFlag('active')) {
return false;
}
if (!$request->getConditionName()) {
$request->setConditionName($this->getConfigData('condition_name') ? $this->getConfigData('condition_name') : $this->_default_condition_name);
}
$result = Mage::getModel('shipping/rate_result');
$rates = $this->getRate($request);
foreach($rates as $rate)
{
if (!empty($rate) && $rate['price'] >= 0)
{
$method = Mage::getModel('shipping/rate_result_method');
$method->setCarrier('multipletablerates');
$method->setCarrierTitle($this->getConfigData('title'));
$method->setMethod('bestway_' . $rate['pk']);
$method->setMethodTitle($rate['method_name']);
$price = $rate['price'];
/* Onestic Si el peso es mayor o igual a 200 multiplicamos el peso total por el coeficiente*/
if($rate['condition_value'] >=200){ /*Aquí podemos poner el valor que queramos*/
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('checkout/session');
$aux_weight= 0;
/* Sumamos el peso de todos los productos del carrito y lo multiplicamos por el coeficiente */
foreach ($session->getQuote()->getAllItems() as $item) {
$prod = new Mage_Catalog_Model_Product();
$prod= $prod->load($item->getProduct()->getId());
$aux_weight = ($item->getQty() * $prod->getWeight()) + $aux_weight;
}
$price = $aux_weight * $rate['price'];
}
/* Esto lo dejamos igual. El cálculo en porcentaje es correcto */
if ($rate['condition_type'] == 'percent')
{
$price = ($price * $request->getData($request->getConditionName())) / 100;
}
/*Onestic*/
/* Calculamos el precio del envío, para eso cogemos el número de productos que hay en el carro, sacamos su tipo, y lo
multiplicamos por el coste unidad. Esto solo ocurre cuando la entrega es en un Piso, dnd el cálculo del envío se hace
por producto y no por peso. condition_type = product. En nuestro fichero .csv ahora podemos poner condition_type además de percent ó value el tipo product*/
if ($rate['condition_type'] == 'product')
{
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('checkout/session');
$aux_price = 0;
foreach ($session->getQuote()->getAllItems() as $item) {
$prod = new Mage_Catalog_Model_Product();
$prod= $prod->load($item->getProduct()->getId());
/* Previo a este paso, hemos creado un atributo desde el configurador de atributos, llamado 'tipo_producto'. Es un dropdown con dos valores (bebida y comida), para poder determinar que clase de producto es */
if($prod->getAttributeText('tipo_producto') == 'bebida'){
$aux_price = $aux_price + $item->getQty() * 10; /*Multiplicamos por 10 */
}elseif(($prod->getAttributeText('tipo_producto') == 'comida')){
$aux_price = $aux_price + $item->getQty() * 20; /*Multiplicamos por 20 */
}
}
$price = $aux_price;
}
/* Fin Onestic */
$method->setPrice($this->getFinalPriceWithHandlingFee($price));
$method->setCost($rate['cost']);
$result->append($method);
}
}
return $result;
}
Bueno, y con esto ya está todo. Ahora el Multiple Tablerates hace exactamente lo que queremos. Quizás no sea el modo más “limpio”, pero desde luego hace lo que necesitamos.
Compartir:













Twitter
Manaco #
25 de Enero de 2010 a las 23:24