Bonjour @chloe_6953 et @juliette_panier,
C'est effectivement un scénario qui dépasse les capacités des règles de transport ou des règles panier de PrestaShop 1.7.3.2. Le système de transporteur gère le découpage en colis si des produits n'ont pas les mêmes transporteurs compatibles, mais ne bloque pas la commande si la combinaison est impossible.
Pour implémenter cette logique de blocage, vous devrez passer par un override d'un contrôleur frontal, probablement CartController.php ou OrderController.php, pour intercepter la validation du panier avant le passage à l'étape suivante.
Voici les étapes que je vous suggère :
Créer une Caractéristique Produit : Allez dans Catalogue > Attributs et Caractéristiques. Créez une caractéristique nommée par exemple 'Zone de Température'. Ajoutez des valeurs comme 'Surgelé' et 'Ambiant'. Assignez cette caractéristique à tous vos produits avec la valeur appropriée.
Override du Contrôleur : Créez un fichier dans override/controllers/front/CartController.php (si le fichier n'existe pas, copiez-le depuis controllers/front/CartController.php).
Ajouter la Logique de Vérification : Dans la méthode postProcess() de votre CartController surchargé, vous devrez ajouter une vérification du contenu du panier. Voici un extrait de code à adapter :
class CartController extends CartControllerCore
{
public function postProcess()
{
parent::postProcess();
$cart = Context::getContext()->cart;
$has_frozen = false;
$has_ambient = false;
foreach ($cart->getProducts() as $product) {
$features = Product::getFeaturesStatic($product['id_product']);
- Effacer le cache : Après avoir créé ou modifié le fichier d'override, supprimez manuellement le fichier
class_index.php dans var/cache/prod (ou dev si vous êtes en mode développement) pour que PrestaShop prenne en compte la surcharge.
Ce code va parcourir les produits du panier, vérifier leurs caractéristiques 'Zone de Température' et si une combinaison interdite est trouvée, il ajoutera une erreur et redirigera le client vers le panier. N'oubliez pas d'adapter le message de traduction si nécessaire.