Skip to content

Commit b1e8cfe

Browse files
Added logic to removeItem routine to recursively search bundles and discrete items for children items and remove them. Fixes BroadleafCommerce/QA#1184
1 parent 051ebfe commit b1e8cfe

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

core/broadleaf-framework/src/main/java/org/broadleafcommerce/core/order/service/OrderServiceImpl.java

+19-7
Original file line numberDiff line numberDiff line change
@@ -625,21 +625,33 @@ public Order removeItem(Long orderId, Long orderItemId, boolean priceOrder) thro
625625
if (oi == null) {
626626
throw new WorkflowException(new ItemNotFoundException());
627627
}
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);
635633
}
634+
} else {
635+
findAllChildrenToRemove(childrenToRemove, oi);
636636
}
637+
for (Long childToRemove : childrenToRemove) {
638+
removeItemInternal(orderId, childToRemove, false);
639+
}
637640

638641
return removeItemInternal(orderId, orderItemId, priceOrder);
639642
} catch (WorkflowException e) {
640643
throw new RemoveFromCartException("Could not remove from cart", getCartOperationExceptionRootCause(e));
641644
}
642645
}
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+
}
643655

644656
protected Order removeItemInternal(Long orderId, Long orderItemId, boolean priceOrder) throws WorkflowException {
645657
OrderItemRequestDTO orderItemRequestDTO = new OrderItemRequestDTO();

0 commit comments

Comments
 (0)