Hoy traigo un pequeño HOWTO para ver el estado de los precios del catálogo de productos. Está hecho sobre un Magento 1.9. La idea es la misma que vengo exponiendo en posts anteriores. Es decir, cogemos la colección de productos y vamos imprimiendo por pantalla los datos. Esto si queremos lo guardamos en un fichero y a trabajar con los datos.
Vamos al grano hermano..
El script
En el directorio donde lo tengamos, con algo tal que así:
<?php require_once __DIR__.'/../web/app/Mage.php'; Mage::app(); $trace = true; $products = Mage::getModel('catalog/product')->getCollection()->setStoreId(0) ->addAttributeToSelect('price') ->addAttributeToSelect('special_price') ->addAttributeToSelect('special_from_date') ->addAttributeToSelect('special_to_date'); $cont = 0; foreach ($products as $product) { echo $cont .': ID '.$product->getId() .', sku '.$product->getSku() .', price '.$product->getPrice() .', special_price '.$product->getSpecialPrice() .', final_price '.$product->getFinalPrice() .PHP_EOL; ++$cont; if ($trace and $cont == 20) { break; } }
Entonces, ejecutando este script en línea de comandos tenemos que tener una salida por pantalla parecida a esto:
.. 8202: ID 8306, sku AAA, price 179.0000, special_price 148.5000, final_price 148.5000 8203: ID 8307, sku BBB, price 249.0000, special_price 193.5000, final_price 193.5000 8204: ID 8308, sku CCC, price 65.0000, special_price 44.0000, final_price 44.0000 8205: ID 8309, sku DDD, price 225.0000, special_price 94.0000, final_price 94.0000 8206: ID 8310, sku EEE, price 299.0000, special_price 225.0000, final_price 225.0000 8207: ID 8311, sku FFF, price 300.0000, special_price 245.0000, final_price 245.0000 8208: ID 8312, sku GGG, price 219.0000, special_price , final_price 219 8209: ID 8313, sku HHH, price 300.0000, special_price 245.0000, final_price 245.0000 8210: ID 8314, sku III, price 65.0000, special_price 54.0000, final_price 54.0000 8211: ID 8315, sku JJJ, price 109.0000, special_price , final_price 109 8212: ID 8316, sku KKK, price 25.0000, special_price , final_price 25 ..
Esto nos sirve tanto para el back-end como para el front-end. Es decir, los precios principales de un producto los obtenemos con las funciones getPrice(), getSpecialPrice() o getFinalPrice(). Si nos fijamos en los datos de ejemplo, el final_price tiene en cuenta todos los precios y muestra el que corresponde.
Las fechas desde y hasta del precio especial
El precio especial tiene unos datos extra que son las fechas desde y hasta en que se activa el precio especial. Como su nombre indica, activan o desactivan el precio especial entre dichas fechas. Si queremos listarlas podemos añadir el siguiente código:
.. .', special_price '.$product->getSpecialPrice() .', final_price '.$product->getFinalPrice() .', special_from_date '.$product->getSpecialFromDate() .', special_to_date '.$product->getData('special_to_date') .PHP_EOL; ++$cont; ..
Por cambiar un poco, mira que podemos tener la fecha hasta (special_to_date) tanto como en el código de aquí encima como con la función getSpecialToDate(). Con esto entonces así vemos en la salida algo parecido a esto:
.. 3452: ID 3458, sku XXX, price 24.0000, special_price 10.0000, final_price 10.0000, special_from_date 2015-12-21 00:00:00, special_to_date 3453: ID 3459, sku YYY, price 29.0000, special_price 9.0000, final_price 9.0000, special_from_date 2015-12-21 00:00:00, special_to_date 3454: ID 3460, sku ZZZ, price 30.0000, special_price , final_price 30, special_from_date , special_to_date ..
Productos con descuento
Ahora bien, este precio especial, supone un descuento a nivel de producto. Si queremos saber el descuento que resulta del precio especial con respecto al precio original, no tenemos más que aplicarle un poco de matemáticas al asunto:
$discount = number_format((($product->getPrice() - $product->getSpecialPrice()) / $product->getPrice()) * 100, 0);
En $discount tendremos el porcentaje descontado en números enteros sin decimales. Habrá que tener en cuenta que si el precio especial está vacío no tiene sentido calcular un descuento.
Terminando
Una cosa muy interesante son los precios de grupo y los precios que se aplican a partir de un número de unidades definido, los llamados tier prices. En la versión 2 de Magento tanto los precios de grupo como los precios por cantidad se han fusionado en el mismo elemento. A ver si puedo sacar tiempo para escribir pronto un poco más.. 😉
Si estás aquí leyendo, espero que sirva de ayuda el post.