Hola @valeriamadrid, @antonio92 tiene toda la razón. La clase DeliveryOptionsFinder y el DeliveryOptionsCollection que maneja están intrínsecamente ligados a un único contexto de carrito para el cálculo de envío. Tu enfoque de intentar 'duplicar' las opciones de envío o crear nuevas instancias directamente dentro de getDeliveryOptions() choca con la arquitectura de PrestaShop 1.7.8.1 (y las versiones más recientes).
Para PrestaShop, un carrito es una unidad. Dividirlo en múltiples envíos implica, a nivel conceptual, gestionar múltiples sub-carritos o simularlos, cada uno con sus propias reglas de envío, transportistas y costes. Esto requiere una modificación muy profunda del flujo de checkout, la creación de nuevos objetos de Cart o Order en el backend, y adaptar la interfaz de usuario para que refleje esta complejidad.
Un pequeño ejemplo de cómo empezarías a agrupar productos para este fin, pero que aún no resuelve el problema de la interfaz de envío, sería:
// Este código iría en un módulo personalizado, en un hook como actionCartSave o similar
// para agrupar productos por un criterio (ej. ID de proveedor o almacén)
$productsInCart = $this->context->cart->getProducts();
$groupedProducts = [];
foreach ($productsInCart as $product) {
// Suponiendo un 'id_supplier' o un campo personalizado para el grupo de envío
$shippingGroupKey = (int)$product['id_supplier']; // O un atributo personalizado
$groupedProducts[$shippingGroupKey][] = $product;
}
// El desafío real es cómo PrestaShop usa este 'groupedProducts' para generar
Como puedes ver, agrupar es solo el primer paso. El verdadero trabajo es integrar esa lógica en el cálculo de envío y el proceso de pedido, lo cual es muy invasivo y propenso a errores en las actualizaciones. Para una tienda en producción, esta funcionalidad es tan compleja que casi siempre requiere un módulo dedicado. Te recomiendo echar un vistazo a una solución para dividir el carrito que gestiona todo el ciclo, desde la visualización de opciones hasta la creación de pedidos y facturas separados, lo que te ahorrará muchísimos problemas de compatibilidad y mantenimiento.