Magento: listando precios de los productos

Magento logoHoy 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.

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *