@Override public void setOrderSubTotalToPriceWithoutAdjustments() { Money calculatedSubTotal = calculateSubtotalWithoutAdjustments(); order.setSubTotal(calculatedSubTotal); }
@Override public void setOrderSubTotalToPriceWithAdjustments() { Money calculatedSubTotal = calculateSubtotalWithAdjustments(); order.setSubTotal(calculatedSubTotal); }
@Override public void applyAllOrderOffers(List<PromotableCandidateOrderOffer> orderOffers, PromotableOrder promotableOrder) { // If order offer is not combinable, first verify order adjustment is zero, if zero, compare item discount total vs this offer's total Iterator<PromotableCandidateOrderOffer> orderOfferIterator = orderOffers.iterator(); while (orderOfferIterator.hasNext()) { PromotableCandidateOrderOffer orderOffer = orderOfferIterator.next(); if (promotableOrder.canApplyOrderOffer(orderOffer)) { if (orderMeetsQualifyingSubtotalRequirements(promotableOrder, orderOffer) && orderMeetsSubtotalRequirements(promotableOrder, orderOffer)) { applyOrderOffer(promotableOrder, orderOffer); if (orderOffer.isTotalitarian() || promotableOrder.isTotalitarianItemOfferApplied()) { if (LOG.isTraceEnabled()) { LOG.trace("Totalitarian Order Offer Applied. Comparing order and item offers for best outcome."); } compareAndAdjustOrderAndItemOffers(promotableOrder); // We continue because this could be the first offer and marked as totalitarian, but not as good as an // item offer. There could be other order offers that are not totalitarian that also qualify. continue; } if (!orderOffer.isCombinable()) { if (LOG.isTraceEnabled()) { LOG.trace("Non-Combinable Order Offer Applied with id=[" + orderOffer.getOffer().getId() + "]. No other order offers can be applied"); } break; } } } } promotableOrder.getOrder().setSubTotal(promotableOrder.calculateSubtotalWithAdjustments()); }
order.setSubTotal(order.calculateSubTotal()); order.finalizeItemPrices();
cloned.setStatus(getStatus()); cloned.setTotalFulfillmentCharges(getTotalFulfillmentCharges()); cloned.setSubTotal(getSubTotal()); cloned.setTaxOverride(taxOverride == null ? null : taxOverride); for(OrderItem entry : orderItems){
public void testBundleDistribution() throws Exception { Order order = dataProvider.createOrderWithBundle(); Money subTotal = new Money(order.getCurrency()); for (OrderItem orderItem : order.getOrderItems()) { subTotal = subTotal.add(orderItem.getTotalPrice()); } order.setSubTotal(subTotal); OrderAdjustment adjustment = new OrderAdjustmentImpl(); adjustment.setValue(new Money(new BigDecimal("1"), order.getCurrency())); adjustment.setOrder(order); order.getOrderAdjustments().add(adjustment); ProcessContext<Order> context = new DefaultProcessContextImpl<Order>(); context.setSeedData(order); fulfillmentItemPricingActivity.execute(context); assertTrue(sumProratedOfferAdjustments(order).equals( new Money(new BigDecimal("1"), order.getCurrency()))); }
public void testRoundingRequired() throws Exception { Order order = dataProvider.createBasicOrder(); Money subTotal = new Money(order.getCurrency()); for (OrderItem orderItem : order.getOrderItems()) { orderItem.getOrderItemPriceDetails().clear(); orderItem.setQuantity(2); orderItem.setSalePrice(new Money(10D)); subTotal = subTotal.add(orderItem.getTotalPrice()); } order.setSubTotal(subTotal); OrderAdjustment adjustment = new OrderAdjustmentImpl(); adjustment.setValue(new Money(new BigDecimal(".05"), order.getCurrency())); adjustment.setOrder(order); order.getOrderAdjustments().add(adjustment); ProcessContext<Order> context = new DefaultProcessContextImpl<Order>(); context.setSeedData(order); fulfillmentItemPricingActivity.execute(context); assertTrue(sumProratedOfferAdjustments(order).equals( new Money(new BigDecimal(".05"), order.getCurrency()))); }
public void testBundleDistributionWithoutItemSum() throws Exception { Order order = dataProvider.createOrderWithBundle(); Money subTotal = new Money(order.getCurrency()); for (OrderItem orderItem : order.getOrderItems()) { if (orderItem instanceof BundleOrderItem) { BundleOrderItem bItem = (BundleOrderItem) orderItem; bItem.getProductBundle().setPricingModel(ProductBundlePricingModelType.BUNDLE); } subTotal = subTotal.add(orderItem.getTotalPrice()); } order.setSubTotal(subTotal); OrderAdjustment adjustment = new OrderAdjustmentImpl(); adjustment.setValue(new Money(new BigDecimal("1"), order.getCurrency())); adjustment.setOrder(order); order.getOrderAdjustments().add(adjustment); ProcessContext<Order> context = new DefaultProcessContextImpl<Order>(); context.setSeedData(order); fulfillmentItemPricingActivity.execute(context); assertTrue(sumProratedOfferAdjustments(order).equals( new Money(new BigDecimal("1"), order.getCurrency()))); } }
public void testDistributeOneDollarAcrossFiveEqualItems() throws Exception { Order order = dataProvider.createBasicOrder(); Money subTotal = new Money(order.getCurrency()); for (OrderItem orderItem : order.getOrderItems()) { orderItem.setSalePrice(new Money(10D)); orderItem.getOrderItemPriceDetails().clear(); subTotal = subTotal.add(orderItem.getTotalPrice()); } OrderAdjustment adjustment = new OrderAdjustmentImpl(); adjustment.setValue(new Money(new BigDecimal("1"), order.getCurrency())); order.getOrderAdjustments().add(adjustment); adjustment.setOrder(order); order.setSubTotal(subTotal); ProcessContext<Order> context = new DefaultProcessContextImpl<Order>(); context.setSeedData(order); fulfillmentItemPricingActivity.execute(context); // Each item is equally priced, so the adjustment should be .20 per item. Money proratedAdjustment = new Money(".20"); for (FulfillmentGroup fulfillmentGroup : order.getFulfillmentGroups()) { for (FulfillmentGroupItem fulfillmentGroupItem : fulfillmentGroup.getFulfillmentGroupItems()) { assertTrue(fulfillmentGroupItem.getProratedOrderAdjustmentAmount().compareTo( proratedAdjustment.multiply(fulfillmentGroupItem.getQuantity())) == 0); } } }
protected boolean compareAndAdjustFulfillmentGroupOffers(PromotableOrder order, boolean fgOfferApplied) { Money regularOrderDiscountShippingTotal = BroadleafCurrencyUtils.getMoney(BigDecimal.ZERO, order.getOrderCurrency()); regularOrderDiscountShippingTotal = regularOrderDiscountShippingTotal.add(order.calculateSubtotalWithoutAdjustments()); for (PromotableFulfillmentGroup fg : order.getFulfillmentGroups()) { regularOrderDiscountShippingTotal = regularOrderDiscountShippingTotal.add(fg.getFinalizedPriceWithAdjustments()); } Money discountOrderRegularShippingTotal = BroadleafCurrencyUtils.getMoney(BigDecimal.ZERO, order.getOrderCurrency()); discountOrderRegularShippingTotal = discountOrderRegularShippingTotal.add(order.calculateSubtotalWithAdjustments()); for (PromotableFulfillmentGroup fg : order.getFulfillmentGroups()) { discountOrderRegularShippingTotal = discountOrderRegularShippingTotal.add(fg.calculatePriceWithoutAdjustments()); } if (discountOrderRegularShippingTotal.lessThan(regularOrderDiscountShippingTotal)) { // order/item offer is better; remove totalitarian fulfillment group offer and process other fg offers order.removeAllCandidateFulfillmentOfferAdjustments(); fgOfferApplied = false; } else { // totalitarian fg offer is better; remove all order/item offers order.removeAllCandidateOrderOfferAdjustments(); order.removeAllCandidateItemOfferAdjustments(); order.getOrder().setSubTotal(order.calculateSubtotalWithAdjustments()); } return fgOfferApplied; }
order.setSubTotal(total); order.setTotal(total);
order.setSubTotal(new Money((2 * 19.99D) + (3 * 29.99D)));
order.setSubTotal(new Money((2 * 19.99D) + (3 * 29.99D)));