@miriamdev, como bien señala @antonioonline, la lógica de dividir un carrito en múltiples envíos es una de las funcionalidades más complejas de implementar en PrestaShop 1.7 sin recurrir a overrides muy intrusivos que comprometen la estabilidad del sistema. Tu intento en CartController es el camino natural que muchos prueban, pero la arquitectura del carrito y del pedido en PrestaShop está muy acoplada a la idea de un único Cart que se convierte en un único Order.
Para una solución robusta, no basta con un override sencillo. Necesitarías un módulo que intercepte el proceso de validación del pedido (hookActionValidateOrder) o incluso antes, para manipular los productos y generar múltiples objetos Order a partir de un solo Cart original, gestionando la referencia de pago y los estados de stock para cada sub-pedido.
Un ejemplo de cómo un módulo empezaría a abordar la agrupación, aunque esto es solo el primer paso y la complejidad es mucho mayor:
// En un módulo que implementa hookActionValidateOrder
public function hookActionValidateOrder($params)
{
/** @var Cart $cart */
$cart = $params['cart'];
$products = $cart->getProducts();
$shipmentGroups = [];
foreach ($products as $product) {
$supplierId = (int)$product['id_supplier']; // Ejemplo de criterio de agrupación
if (!isset($shipmentGroups[$supplierId])) {
Como ves, incluso este fragmento inicial solo agrupa los productos. La lógica de crear los nuevos pedidos, asociar los pagos, manejar los transportistas para cada sub-pedido, y actualizar el stock correctamente es enorme y requiere un conocimiento profundo del core de PrestaShop. Además, cualquier modificación directa del core o del tema puede ser sobrescrita en una actualización o causar problemas de compatibilidad con PHP 7.x, que es el límite para PS 1.7.0.0.
Para entornos de producción y para garantizar la mantenibilidad y compatibilidad, lo más recomendable es utilizar una solución dedicada. Hay módulos diseñados específicamente para esta funcionalidad que gestionan toda esa complejidad por ti. Te sugiero que busques una automatización de dividir el carrito ya existente. Te ahorrará muchos quebraderos de cabeza y te asegurará una solución estable.