Probablement le le plus sain La meilleure façon de gérer ce problème serait de créer deux commandes par type de produit, chacune étant expédiée par un transporteur différent à la même adresse. Cette solution est également plus logique du point de vue du suivi des magasins, car vous pouvez traiter chaque commande indépendamment de l'autre.
Pour vous mettre sur la bonne voie (puisque Magento est particulièrement cryptique dans cette partie de lui-même), vous devriez lire le document suivant Création programmatique d'une commande dans Magento par Inchoo post et par le même auteur Création programmée d'un client et d'une commande dans Magento avec une page complète de paiement. .
En gros, je vois les choses comme ça :
- Obtenir la commande du client
- Itérer à travers chaque produit de la commande et le diviser en deux tableaux pour chaque type de produit.
- Créez une commande distincte pour chaque type de produit et utilisez les différentes méthodes d'expédition pour chacun.
Vous devrez probablement étendre certains contrôleurs OU le faire de manière non standard en utilisant des fonctions d'aide. Le plus difficile sera d'intégrer les modules de paiement/expédition dans votre processus de commande. En procédant de cette manière, vous devrez créer un processus de paiement complet, car la page de paiement unique proposée par Magento ne fonctionne pas vraiment et est trop difficile à faire fonctionner en raison de la manière dont elle utilise AJAX.
Une autre solution consiste à se connecter aux événements de pré-création de commande de Magento et à créer les commandes à partir des données de commande déjà définies, en les divisant en deux commandes, mais c'est quelque chose que je n'ai jamais entendu ou vu mis en œuvre pour l'instant, donc il faut le faire "les yeux bandés" pour ainsi dire.
Une approche plus simple serait d'utiliser un champ personnalisé qui définit la méthode d'expédition de votre produit, de cette façon vous ajoutez simplement cela et ne vous souciez pas des commandes personnalisées. Vous réagissez simplement avec cela, cependant le suivi deviendra pratiquement impossible IMO.