Controlar el stock en los packs

Hace unos días uno de nuestros clientes nos reportó un problema con PrestaShop que afecta al menos a sus versiones 1.7.3.0 y anteriores. La incidencia surgía cuando se vendía a la vez un producto pack y un producto contenido en el mismo, PrestaShop no tenía en cuenta el stock total del producto contenido y permitía realizar ventas sin stock. Pero mejor los explicamos con un ejemplo:

Pongamos que tenemos un producto pack que es una escoba formada por su cepillo y palo, donde estos últimos son productos estándar contenidos en el pack.

El stock es el siguiente:

  • Palo de escoba: 5 unidades
  • Cepillo de escoba: 5 unidades
  • Pack escoba de cepillo y palo: 5 unidades

Además, tenemos configurado PrestaShop para que cuando se realice una venta de un producto pack descuenta stock tanto del pack como de los productos individuales.

Ahora pongamos el caso de que un cliente nos realiza el siguiente pedido:

  • 5 unidades de cepillo de escoba
  • 5 unidades del pack escoba

En este caso, no debería de poder completar el pedido, ya que para el mismo necesitaríamos 10 cepillos y solo tenemos 5 en stock. Pues bien, las versiones antiguas de PrestaShop presentan este fallo que nos permite completar este pedido sin el stock necesario.

Para solucionar este problema en Prestahsop 1.7.3.0 hemos hecho un override sobre la función InitContent de OrderController:

public function initContent()
{
    $prs = $this->context->cart->getProducts();
    $real_stock = array();
    foreach ($prs as $pr) {            
        if (Pack::isPack($pr['id_product'])) {
            $pps = Pack::getItems($pr['id_product'],
                $this->context->language->id);
                foreach ($pps as $ppi) {
                    $real_stock[$ppi->id][$ppi->id_pack_product_attribute] =
                    (int)$real_stock[$ppi->id][$ppi->id_pack_product_attribute] +
                    ($ppi->pack_quantity * $pr['cart_quantity']);
                }
            } else {
                $real_stock[$pr['id_product']][$pr['id_product_attribute']] =
                (int)$real_stock[$pr['id_product']][$pr['id_product_attribute']] +
                ($ppi->pack_quantity * $pr['cart_quantity']);
            }
            foreach ($real_stock as $k => $v) {
                foreach ($v as $kk => $vv) {                       
                    $s = StockAvailableCore::getQuantityAvailableByProduct($k, $kk);
                    if ((int)$vv > (int)$s) {
                        $link = new Link();                   
                        Tools::redirect($link->getPageLink('cart').
                            '?action=show&qpstock=true');
                    }
                }
            }
            
            $s = StockAvailableCore::getQuantityAvailableByProduct($pr['id_product'],
                $pr['id_product_attribute']);
            if ((int)$pr['cart_quantity'] > (int)$s) {
                $link = new Link();                   
                Tools::redirect($link->getPageLink('cart').'?action=show');
        }
    }
    return parent::initContent();
} 

Este problema ha sido solucionado en las ultimas versiones de PrestaShop.

Con esto y más ¡tu tienda online siempre preparada!

Te puede interesar

  • Entrada

    Forzar stock en el listado de productos

    Hace unos días nos surgió un pequeño problema en una de las tiendas que administramos en Tiendaprest. Hicimos un desarrollo a medida para que los productos tipo pack tomasen su stock con la cantidad mínima disponible de los productos contenidos en el pack, es decir, si un pack contiene el producto A y el producto …

    Seguir leyendo

  • Entrada

    Confirmación de pedidos desde el backoffice sin stock

    Hemos detectado un problema con las versiones 1.7 de PrestaShop (probado en la última 1.7.5.0 y en PS 1.7.3.0). Cuando convertimos desde el backoffice a pedido un carro de la compra de un cliente, el sistema no verifica el stock de los productos en él contenidos. Si al crear un nuevo pedido desde el backoffice …

    Seguir leyendo

  • Combinación por defecto

    Entrada

    Cambiar de manera automática combinación por defecto sin stock

    Con este módulo Prestashop podrás cambiar de manera automática la combinación por defecto de tus productos cuando esta se quede sin stock.

    Seguir leyendo

¿Necesitas ayuda más avanzada para solucionar tus problemas?

Contáctanos o echa un vistazo a nuestros servicios, entre los cuales podrás encontrar varios planes de mantenimiento de Prestahop.

Nuestros servicios

Impulsa la venta online y haz crecer tu negocio en poco tiempo.

Deja una respuesta

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