Hola @jorge8975,
@inmasevilla tiene razón, PrestaShop 9.0.1 (ni versiones anteriores) no ofrece una funcionalidad directa en el Back Office para bloquear la finalización de compra basándose en la combinación de tipos de productos dentro del mismo carrito. La asignación de transportistas múltiples es lo más cercano, pero no impide que se mezclen.
La solución más limpia y robusta pasa por un pequeño desarrollo personalizado. Te sugiero los siguientes pasos:
- Crear una Característica de Producto: Ve a
Catálogo > Atributos y Características. Crea una nueva característica llamada 'Tipo de Temperatura'. Añade los valores 'Congelado' y 'Ambiente' a esta característica.
- Asignar la Característica: Asigna el valor correspondiente ('Congelado' o 'Ambiente') a cada uno de tus productos.
- Desarrollo de un Módulo Personalizado: Necesitarás un pequeño módulo que se enganche a un 'hook' para validar el carrito. El
actionCartSave es ideal porque se ejecuta cada vez que el carrito se actualiza, permitiendo mostrar la advertencia temprano, incluso antes de llegar al checkout.
Aquí te dejo una idea del código que podrías incluir en la función hookActionCartSave de tu módulo personalizado. Este código añadiría una advertencia visible al usuario si detecta la mezcla de productos:
public function hookActionCartSave($params)
{
$cart = $params['cart'];
if (!Validate::isLoadedObject($cart)) {
return;
}
$idFeatureTemp = (int)Feature::getIdByName($this->context->language->id, 'Tipo de Temperatura');
if (!$idFeatureTemp) { return; }
$idFrozenValue = (int)FeatureValue::getIdByValue('Congelado', $idFeatureTemp);
$idAmbientValue = (int)FeatureValue::getIdByValue('Ambiente', $idFeatureTemp);
Este código revisa los productos del carrito, busca la característica 'Tipo de Temperatura' y si encuentra ambos valores ('Congelado' y 'Ambiente'), establece un mensaje de advertencia que PrestaShop mostrará en la parte superior de la página del carrito o en el siguiente paso del checkout. Cuando el cliente ajuste su carrito, el mensaje se eliminará automáticamente.