@@ -625,21 +625,33 @@ public Order removeItem(Long orderId, Long orderItemId, boolean priceOrder) thro
625
625
if (oi == null ) {
626
626
throw new WorkflowException (new ItemNotFoundException ());
627
627
}
628
- if (CollectionUtils .isNotEmpty (oi .getChildOrderItems ())) {
629
- List <Long > childrenToRemove = new ArrayList <Long >();
630
- for (OrderItem childOrderItem : oi .getChildOrderItems ()) {
631
- childrenToRemove .add (childOrderItem .getId ());
632
- }
633
- for (Long childToRemove : childrenToRemove ) {
634
- removeItemInternal (orderId , childToRemove , false );
628
+ List <Long > childrenToRemove = new ArrayList <Long >();
629
+ if (oi instanceof BundleOrderItem ) {
630
+ List <DiscreteOrderItem > bundledItems = ((BundleOrderItem ) oi ).getDiscreteOrderItems ();
631
+ for (DiscreteOrderItem doi : bundledItems ) {
632
+ findAllChildrenToRemove (childrenToRemove , doi );
635
633
}
634
+ } else {
635
+ findAllChildrenToRemove (childrenToRemove , oi );
636
636
}
637
+ for (Long childToRemove : childrenToRemove ) {
638
+ removeItemInternal (orderId , childToRemove , false );
639
+ }
637
640
638
641
return removeItemInternal (orderId , orderItemId , priceOrder );
639
642
} catch (WorkflowException e ) {
640
643
throw new RemoveFromCartException ("Could not remove from cart" , getCartOperationExceptionRootCause (e ));
641
644
}
642
645
}
646
+
647
+ protected void findAllChildrenToRemove (List <Long > childrenToRemove , OrderItem orderItem ){
648
+ if (CollectionUtils .isNotEmpty (orderItem .getChildOrderItems ())) {
649
+ for (OrderItem childOrderItem : orderItem .getChildOrderItems ()) {
650
+ findAllChildrenToRemove (childrenToRemove , childOrderItem );
651
+ childrenToRemove .add (childOrderItem .getId ());
652
+ }
653
+ }
654
+ }
643
655
644
656
protected Order removeItemInternal (Long orderId , Long orderItemId , boolean priceOrder ) throws WorkflowException {
645
657
OrderItemRequestDTO orderItemRequestDTO = new OrderItemRequestDTO ();
0 commit comments