@Override public <G extends OrderItemPriceDetail> CreateResponse<G> createOrRetrieveCopyInstance(MultiTenantCopyContext context) throws CloneNotSupportedException { CreateResponse<G> createResponse = context.createOrRetrieveCopyInstance(this); if (createResponse.isAlreadyPopulated()) { return createResponse; } OrderItemPriceDetail cloned = createResponse.getClone(); cloned.setQuantity(quantity); cloned.setUseSalePrice(useSalePrice); // dont clone cloned.setOrderItem(orderItem); for(OrderItemPriceDetailAdjustment entry : orderItemPriceDetailAdjustments){ OrderItemPriceDetailAdjustment clonedEntry = entry.createOrRetrieveCopyInstance(context).getClone(); clonedEntry.setOrderItemPriceDetail(cloned); cloned.getOrderItemPriceDetailAdjustments().add(clonedEntry); } return createResponse; } }
private int checkOrderItemOfferAppliedCount(Order order) { int count = 0; for (OrderItem item : order.getOrderItems()) { for (OrderItemPriceDetail detail : item.getOrderItemPriceDetails()) { count = count + (detail.getOrderItemPriceDetailAdjustments().size() * detail.getQuantity()); } } return count; }
processMatchingDetails(orderItemPriceDetail, promotableDetail); } else { unmatchedDetailsMap.put(orderItemPriceDetail.getId(), orderItemPriceDetail); existingDetail.setUseSalePrice(true); newPriceDetail.setOrderItem(orderItem); offerServiceUtilities.updatePriceDetail(newPriceDetail, priceDetail); orderItem.getOrderItemPriceDetails().add(newPriceDetail);
protected String buildItemPriceDetailKey(OrderItemPriceDetail itemDetail) { List<Long> offerIds = new ArrayList<Long>(); for (OrderItemPriceDetailAdjustment adjustment : itemDetail.getOrderItemPriceDetailAdjustments()) { Long offerId = adjustment.getOffer().getId(); offerIds.add(offerId); } Collections.sort(offerIds); return itemDetail.getOrderItem().toString() + offerIds.toString() + itemDetail.getUseSalePrice(); }
@Override public OrderItemPriceDetail initializeOrderItemPriceDetails(OrderItem item) { OrderItemPriceDetail detail = createOrderItemPriceDetail(); detail.setOrderItem(item); detail.setQuantity(item.getQuantity()); detail.setUseSalePrice(item.getIsOnSale()); item.getOrderItemPriceDetails().add(detail); return detail; }
buildItemDetailAdjustmentMap(itemDetail); if (itemDetail.getQuantity() != promotableDetail.getQuantity()) { itemDetail.setQuantity(promotableDetail.getQuantity()); itemDetail.setUseSalePrice(promotableDetail.useSaleAdjustments()); itemDetail.getOrderItemPriceDetailAdjustments().add(newItemAdjustment); Iterator<OrderItemPriceDetailAdjustment> iterator = itemDetail.getOrderItemPriceDetailAdjustments().iterator(); while (iterator.hasNext()) { OrderItemPriceDetailAdjustment adj = iterator.next();
@Override protected void setUp() throws Exception { PromotableOrder promotableOrder = new PromotableOrderImpl(new OrderImpl(), new PromotableItemFactoryImpl(), false); DiscreteOrderItemImpl discreteOrderItem1 = new DiscreteOrderItemImpl(); discreteOrderItem1.setName("test1"); discreteOrderItem1.setOrderItemType(OrderItemType.DISCRETE); discreteOrderItem1.setQuantity(2); discreteOrderItem1.setRetailPrice(new Money(19.99D)); OrderItemPriceDetail pdetail = new OrderItemPriceDetailImpl(); pdetail.setOrderItem(discreteOrderItem1); pdetail.setQuantity(2); PromotableOrderItem orderItem1 = new PromotableOrderItemImpl(discreteOrderItem1, null, new PromotableItemFactoryImpl(), false); priceDetail1 = new PromotableOrderItemPriceDetailImpl(orderItem1, 2); OfferDataItemProvider dataProvider = new OfferDataItemProvider(); offer = dataProvider.createItemBasedOfferWithItemCriteria( "order.subTotal.getAmount()>20", OfferDiscountType.PERCENT_OFF, "([MVEL.eval(\"toUpperCase()\",\"test1\"), MVEL.eval(\"toUpperCase()\",\"test2\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.category.name))", "([MVEL.eval(\"toUpperCase()\",\"test1\"), MVEL.eval(\"toUpperCase()\",\"test2\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.category.name))" ).get(0); candidateOffer = new PromotableCandidateItemOfferImpl(promotableOrder, offer); }
protected List<String> getAppliedOfferNamesForOrderItem(OrderItem orderItem) { List<String> appliedOfferNames = new ArrayList<>(); for (OrderItemPriceDetail oipd : orderItem.getOrderItemPriceDetails()) { for (OrderItemPriceDetailAdjustment adjustment : oipd.getOrderItemPriceDetailAdjustments()) { appliedOfferNames.add(adjustment.getOfferName()); } } return appliedOfferNames; }
protected void processMatchingDetails(OrderItemPriceDetail itemDetail, PromotableOrderItemPriceDetail promotableItemDetail) { Map<Long, OrderItemPriceDetailAdjustment> itemAdjustmentMap = offerServiceUtilities.buildItemDetailAdjustmentMap(itemDetail); if (itemDetail.getQuantity() != promotableItemDetail.getQuantity()) { itemDetail.setQuantity(promotableItemDetail.getQuantity()); } for (PromotableOrderItemPriceDetailAdjustment adjustment : promotableItemDetail.getCandidateItemAdjustments()) { OrderItemPriceDetailAdjustment itemAdjustment = itemAdjustmentMap.get(adjustment.getOfferId()); if (!itemAdjustment.getValue().equals(adjustment.getAdjustmentValue())) { itemAdjustment.setValue(adjustment.getAdjustmentValue()); itemAdjustment.setAppliedToSalePrice(adjustment.isAppliedToSalePrice()); } } }
OrderItemPriceDetail clonedEntry = entry.createOrRetrieveCopyInstance(context).getClone(); clonedEntry.setOrderItem(cloned); cloned.getOrderItemPriceDetails().add(clonedEntry);
@Override public void removeUnmatchedPriceDetails(Map<Long, ? extends OrderItemPriceDetail> unmatchedDetailsMap, Iterator<? extends OrderItemPriceDetail> pdIterator) { while (pdIterator.hasNext()) { OrderItemPriceDetail currentDetail = pdIterator.next(); if (unmatchedDetailsMap.containsKey(currentDetail.getId())) { pdIterator.remove(); } } }
protected BroadleafCurrency getCurrency() { return getOrderItemPriceDetail().getOrderItem().getOrder().getCurrency(); }
@Override public Money getTotalPrice(boolean includeChildren) { Money returnValue = convertToMoney(BigDecimal.ZERO); if (orderItemPriceDetails != null && orderItemPriceDetails.size() > 0) { for (OrderItemPriceDetail oipd : orderItemPriceDetails) { returnValue = returnValue.add(oipd.getTotalAdjustedPrice()); } } else { if (price != null) { returnValue = convertToMoney(price).multiply(quantity); } else { returnValue = getSalePrice().multiply(quantity); } } if (includeChildren) { for (OrderItem child : getChildOrderItems()) { Money childPrice = child.getTotalPrice();//.multiply(quantity); returnValue = returnValue.add(childPrice); } } return returnValue; }
@Override public Money getTotalAdjustmentValue(boolean includeChildren) { Money totalAdjustmentValue = BroadleafCurrencyUtils.getMoney(getOrder().getCurrency()); List<OrderItemPriceDetail> priceDetails = getOrderItemPriceDetails(); if (priceDetails != null) { for (OrderItemPriceDetail priceDetail : getOrderItemPriceDetails()) { totalAdjustmentValue = totalAdjustmentValue.add(priceDetail.getTotalAdjustmentValue()); } } if (includeChildren) { for (OrderItem child : getChildOrderItems()) { Money childPrice = child.getTotalAdjustmentValue(); totalAdjustmentValue = totalAdjustmentValue.add(childPrice); } } return totalAdjustmentValue; }
pdetail.setOrderItem(orderItem1); pdetail.setQuantity(2); priceDetail = new PromotableOrderItemPriceDetailImpl(promotableOrderItem, 2);
@Override public Map<Long, OrderItemPriceDetailAdjustment> buildItemDetailAdjustmentMap(OrderItemPriceDetail itemDetail) { Map<Long, OrderItemPriceDetailAdjustment> itemAdjustmentMap = new HashMap<Long, OrderItemPriceDetailAdjustment>(); List<OrderItemPriceDetailAdjustment> adjustmentsToRemove = new ArrayList<OrderItemPriceDetailAdjustment>(); for (OrderItemPriceDetailAdjustment adjustment : itemDetail.getOrderItemPriceDetailAdjustments()) { if (itemAdjustmentMap.containsKey(adjustment.getOffer().getId())) { if (LOG.isDebugEnabled()) { StringBuilder sb = new StringBuilder("Detected collisions for item adjustments with ids ") .append(itemAdjustmentMap.get(adjustment.getOffer().getId()).getId()) .append(" and ") .append(adjustment.getId()); LOG.debug(sb.toString()); } adjustmentsToRemove.add(adjustment); } else { itemAdjustmentMap.put(adjustment.getOffer().getId(), adjustment); } } for (OrderItemPriceDetailAdjustment adjustment : adjustmentsToRemove) { itemDetail.getOrderItemPriceDetailAdjustments().remove(adjustment); } return itemAdjustmentMap; }
private int checkOrderItemOfferAppliedQuantity(Order order, Offer offer) { int count = 0; for (OrderItem item : order.getOrderItems()) { for (OrderItemPriceDetail detail : item.getOrderItemPriceDetails()) { for (OrderItemPriceDetailAdjustment adjustment : detail.getOrderItemPriceDetailAdjustments()) { if (adjustment.getOffer().getId().equals(offer.getId())) { count += detail.getQuantity(); } } } } return count; }
priceDetail.setOrderItem(bundleOrderItem); priceDetail.setQuantity(2); bundleOrderItem.getOrderItemPriceDetails().add(priceDetail); priceDetail1.setOrderItem(orderItem1); priceDetail1.setQuantity(2); orderItem1.getOrderItemPriceDetails().add(priceDetail1); priceDetail2.setOrderItem(orderItem2); priceDetail2.setQuantity(3); orderItem2.getOrderItemPriceDetails().add(priceDetail2);
private int countItemAdjustments(Order order) { int adjustmentCount = 0; for (OrderItem item : order.getOrderItems()) { for (OrderItemPriceDetail detail : item.getOrderItemPriceDetails()) { if (detail.getOrderItemPriceDetailAdjustments() != null) { adjustmentCount += detail.getOrderItemPriceDetailAdjustments().size(); } } } return adjustmentCount; }
for (OrderItemPriceDetail detail : orderItem.getOrderItemPriceDetails()) { PromotableOrderItemPriceDetail poid = itemFactory.createPromotableOrderItemPriceDetail(this, detail.getQuantity()); itemPriceDetails.add(poid); for (OrderItemPriceDetailAdjustment adjustment : detail.getOrderItemPriceDetailAdjustments()) { PromotableOrderItemPriceDetailAdjustment poidAdj = new PromotableOrderItemPriceDetailAdjustmentImpl(adjustment, poid);