use of org.broadleafcommerce.core.order.service.call.OrderItemRequestDTO in project BroadleafCommerce by BroadleafCommerce.
the class BroadleafCartController method updateAddRequestQuantities.
protected void updateAddRequestQuantities(OrderItemRequestDTO itemRequest, Long originalOrderItemId) {
// Update the request to match the quantity of the order item it's replacing
OrderItem orderItem = orderItemService.readOrderItemById(originalOrderItemId);
// Make sure there is actually an order item to process
if (orderItem == null) {
return;
}
itemRequest.setQuantity(orderItem.getQuantity());
for (OrderItemRequestDTO childDTO : itemRequest.getChildOrderItems()) {
childDTO.setQuantity(childDTO.getQuantity() * orderItem.getQuantity());
}
}
use of org.broadleafcommerce.core.order.service.call.OrderItemRequestDTO in project BroadleafCommerce by BroadleafCommerce.
the class OrderItemServiceImpl method buildOrderItemRequestDTOFromOrderItem.
@Override
public OrderItemRequestDTO buildOrderItemRequestDTOFromOrderItem(OrderItem item) {
OrderItemRequestDTO orderItemRequest;
if (item instanceof DiscreteOrderItem) {
DiscreteOrderItem doi = (DiscreteOrderItem) item;
orderItemRequest = new OrderItemRequestDTO();
if (doi.getCategory() != null) {
orderItemRequest.setCategoryId(doi.getCategory().getId());
}
if (doi.getProduct() != null) {
orderItemRequest.setProductId(doi.getProduct().getId());
}
if (doi.getSku() != null) {
orderItemRequest.setSkuId(doi.getSku().getId());
}
if (doi.getAdditionalAttributes() != null) {
for (Entry<String, String> entry : doi.getAdditionalAttributes().entrySet()) {
orderItemRequest.getAdditionalAttributes().put(entry.getKey(), entry.getValue());
}
}
} else {
orderItemRequest = new NonDiscreteOrderItemRequestDTO();
NonDiscreteOrderItemRequestDTO ndr = (NonDiscreteOrderItemRequestDTO) orderItemRequest;
ndr.setItemName(item.getName());
ndr.setOverrideRetailPrice(item.getRetailPrice());
ndr.setOverrideSalePrice(item.getSalePrice());
}
orderItemRequest.setQuantity(item.getQuantity());
if (item.getOrderItemAttributes() != null) {
for (Entry<String, OrderItemAttribute> entry : item.getOrderItemAttributes().entrySet()) {
orderItemRequest.getItemAttributes().put(entry.getKey(), entry.getValue().getValue());
}
}
if (CollectionUtils.isNotEmpty(item.getChildOrderItems())) {
for (OrderItem childItem : item.getChildOrderItems()) {
orderItemRequest.getChildOrderItems().add(buildOrderItemRequestDTOFromOrderItem(childItem));
}
}
return orderItemRequest;
}
use of org.broadleafcommerce.core.order.service.call.OrderItemRequestDTO in project BroadleafCommerce by BroadleafCommerce.
the class OrderServiceImpl method addAllItemsFromNamedOrder.
@Override
@Transactional("blTransactionManager")
public Order addAllItemsFromNamedOrder(Order namedOrder, boolean priceOrder) throws RemoveFromCartException, AddToCartException {
Order cartOrder = orderDao.readCartForCustomer(namedOrder.getCustomer());
if (cartOrder == null) {
cartOrder = createNewCartForCustomer(namedOrder.getCustomer());
}
List<OrderItem> items = new ArrayList<OrderItem>(namedOrder.getOrderItems());
// Remove any order items that are children
CollectionUtils.filter(items, new TypedPredicate<OrderItem>() {
@Override
public boolean eval(OrderItem orderItem) {
return orderItem.getParentOrderItem() == null;
}
});
for (OrderItem item : items) {
OrderItemRequestDTO orderItemRequest = orderItemService.buildOrderItemRequestDTOFromOrderItem(item);
cartOrder = addItem(cartOrder.getId(), orderItemRequest, priceOrder);
if (moveNamedOrderItems) {
removeItem(namedOrder.getId(), item.getId(), false);
}
}
if (deleteEmptyNamedOrders) {
cancelOrder(namedOrder);
}
return cartOrder;
}
use of org.broadleafcommerce.core.order.service.call.OrderItemRequestDTO in project BroadleafCommerce by BroadleafCommerce.
the class OrderServiceImpl method removeItemInternal.
protected Order removeItemInternal(Long orderId, Long orderItemId, boolean priceOrder) throws WorkflowException {
OrderItemRequestDTO orderItemRequestDTO = new OrderItemRequestDTO();
orderItemRequestDTO.setOrderItemId(orderItemId);
CartOperationRequest cartOpRequest = new CartOperationRequest(findOrderById(orderId), orderItemRequestDTO, priceOrder);
Session session = em.unwrap(Session.class);
FlushMode current = session.getFlushMode();
if (!autoFlushRemoveFromCart) {
// Performance measure. Hibernate will sometimes perform an autoflush when performing query operations and this can
// be expensive. It is possible to avoid the autoflush if there's no concern about queries in the flow returning
// incorrect results because something has not been flushed to the database yet.
session.setFlushMode(FlushMode.MANUAL);
}
ProcessContext<CartOperationRequest> context;
try {
context = (ProcessContext<CartOperationRequest>) removeItemWorkflow.doActivities(cartOpRequest);
} finally {
if (!autoFlushRemoveFromCart) {
session.setFlushMode(current);
}
}
context.getSeedData().getOrder().getOrderMessages().addAll(((ActivityMessages) context).getActivityMessages());
return context.getSeedData().getOrder();
}
use of org.broadleafcommerce.core.order.service.call.OrderItemRequestDTO in project BroadleafCommerce by BroadleafCommerce.
the class UpdateCartServiceImpl method copyCartToCurrentContext.
@Override
public UpdateCartResponse copyCartToCurrentContext(Order currentCart) {
if (currentCart.getOrderItems() == null) {
return null;
}
BroadleafCurrency currency = findActiveCurrency();
if (currency == null) {
return null;
}
// Reprice order logic
List<OrderItemRequestDTO> itemsToReprice = new ArrayList<>();
List<OrderItem> itemsToRemove = new ArrayList<>();
List<OrderItem> itemsToReset = new ArrayList<>();
boolean repriceOrder = true;
for (OrderItem orderItem : currentCart.getOrderItems()) {
// Lookup price in price list, if null, then add to itemsToRemove
if (orderItem instanceof DiscreteOrderItem) {
DiscreteOrderItem doi = (DiscreteOrderItem) orderItem;
if (checkAvailabilityInLocale(doi, currency)) {
OrderItemRequestDTO itemRequest = new OrderItemRequestDTO();
itemRequest.setProductId(doi.getProduct().getId());
itemRequest.setQuantity(doi.getQuantity());
itemsToReprice.add(itemRequest);
itemsToReset.add(orderItem);
} else {
itemsToRemove.add(orderItem);
}
} else if (orderItem instanceof BundleOrderItem) {
BundleOrderItem boi = (BundleOrderItem) orderItem;
for (DiscreteOrderItem doi : boi.getDiscreteOrderItems()) {
if (checkAvailabilityInLocale(doi, currency)) {
OrderItemRequestDTO itemRequest = new OrderItemRequestDTO();
itemRequest.setProductId(doi.getProduct().getId());
itemRequest.setQuantity(doi.getQuantity());
itemsToReprice.add(itemRequest);
itemsToReset.add(orderItem);
} else {
itemsToRemove.add(orderItem);
}
}
}
}
for (OrderItem orderItem : itemsToReset) {
try {
currentCart = orderService.removeItem(currentCart.getId(), orderItem.getId(), false);
} catch (RemoveFromCartException e) {
LOG.error("Could not remove from cart.", e);
}
}
for (OrderItemRequestDTO itemRequest : itemsToReprice) {
try {
currentCart = orderService.addItem(currentCart.getId(), itemRequest, false);
} catch (AddToCartException e) {
LOG.error("Could not add to cart.", e);
}
}
// Reprice and save the cart
try {
currentCart = orderService.save(currentCart, repriceOrder);
} catch (PricingException e) {
LOG.error("Could not save cart.", e);
}
setSavedCurrency(currency);
UpdateCartResponse updateCartResponse = new UpdateCartResponse();
updateCartResponse.setRemovedItems(itemsToRemove);
updateCartResponse.setOrder(currentCart);
return updateCartResponse;
}
Aggregations