use of org.broadleafcommerce.core.order.domain.OrderMultishipOption in project BroadleafCommerce by BroadleafCommerce.
the class OfferServiceTest method testApplyOffersToOrder_Items.
public void testApplyOffersToOrder_Items() throws Exception {
final ThreadLocal<Order> myOrder = new ThreadLocal<>();
EasyMock.expect(offerDaoMock.createOrderItemPriceDetailAdjustment()).andAnswer(OfferDataItemProvider.getCreateOrderItemPriceDetailAdjustmentAnswer()).anyTimes();
CandidateItemOfferAnswer answer = new CandidateItemOfferAnswer();
OrderItemAdjustmentAnswer answer2 = new OrderItemAdjustmentAnswer();
OrderItemPriceDetailAnswer orderItemPriceDetailAnswer = new OrderItemPriceDetailAnswer();
EasyMock.expect(orderItemDaoMock.createOrderItemPriceDetail()).andAnswer(orderItemPriceDetailAnswer).atLeastOnce();
OrderItemQualifierAnswer orderItemQualifierAnswer = new OrderItemQualifierAnswer();
EasyMock.expect(orderItemDaoMock.createOrderItemQualifier()).andAnswer(orderItemQualifierAnswer).atLeastOnce();
EasyMock.expect(orderServiceMock.getAutomaticallyMergeLikeItems()).andReturn(true).anyTimes();
EasyMock.expect(orderServiceMock.save(EasyMock.isA(Order.class), EasyMock.isA(Boolean.class))).andAnswer(OfferDataItemProvider.getSaveOrderAnswer()).anyTimes();
EasyMock.expect(orderItemServiceMock.saveOrderItem(EasyMock.isA(OrderItem.class))).andAnswer(OfferDataItemProvider.getSaveOrderItemAnswer()).anyTimes();
EasyMock.expect(fgItemDaoMock.save(EasyMock.isA(FulfillmentGroupItem.class))).andAnswer(OfferDataItemProvider.getSaveFulfillmentGroupItemAnswer()).anyTimes();
EasyMock.expect(fgServiceMock.addItemToFulfillmentGroup(EasyMock.isA(FulfillmentGroupItemRequest.class), EasyMock.eq(false))).andAnswer(OfferDataItemProvider.getAddItemToFulfillmentGroupAnswer()).anyTimes();
EasyMock.expect(orderServiceMock.removeItem(EasyMock.isA(Long.class), EasyMock.isA(Long.class), EasyMock.eq(false))).andAnswer(OfferDataItemProvider.getRemoveItemFromOrderAnswer()).anyTimes();
EasyMock.expect(multishipOptionServiceMock.findOrderMultishipOptions(EasyMock.isA(Long.class))).andAnswer(new IAnswer<List<OrderMultishipOption>>() {
@Override
public List<OrderMultishipOption> answer() throws Throwable {
return new ArrayList<>();
}
}).anyTimes();
EasyMock.expect(orderServiceMock.findOrderById(EasyMock.isA(Long.class))).andAnswer(new IAnswer<Order>() {
@Override
public Order answer() throws Throwable {
return myOrder.get();
}
}).anyTimes();
multishipOptionServiceMock.deleteAllOrderMultishipOptions(EasyMock.isA(Order.class));
EasyMock.expectLastCall().anyTimes();
EasyMock.expect(fgServiceMock.collapseToOneShippableFulfillmentGroup(EasyMock.isA(Order.class), EasyMock.eq(false))).andAnswer(OfferDataItemProvider.getSameOrderAnswer()).anyTimes();
EasyMock.expect(fgItemDaoMock.create()).andAnswer(OfferDataItemProvider.getCreateFulfillmentGroupItemAnswer()).anyTimes();
fgItemDaoMock.delete(EasyMock.isA(FulfillmentGroupItem.class));
EasyMock.expectLastCall().anyTimes();
EasyMock.expect(offerTimeZoneProcessorMock.getTimeZone(EasyMock.isA(OfferImpl.class))).andReturn(TimeZone.getTimeZone("CST")).anyTimes();
replay();
Order order = dataProvider.createBasicPromotableOrder().getOrder();
myOrder.set(order);
List<Offer> offers = 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))");
offerService.applyAndSaveOffersToOrder(offers, order);
int adjustmentCount = countItemAdjustments(order);
assertTrue(adjustmentCount == 2);
order = dataProvider.createBasicPromotableOrder().getOrder();
myOrder.set(order);
offers = 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()\",\"test5\"), MVEL.eval(\"toUpperCase()\",\"test6\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.category.name))");
offerService.applyAndSaveOffersToOrder(offers, order);
adjustmentCount = countItemAdjustments(order);
// Qualifiers are there, but the targets are not, so no adjustments
assertTrue(adjustmentCount == 0);
verify();
}
use of org.broadleafcommerce.core.order.domain.OrderMultishipOption in project BroadleafCommerce by BroadleafCommerce.
the class OfferServiceTest method testOrderItemOfferWithGiftWrap.
@Test(groups = { "testOffersWithGiftWrap" }, dependsOnGroups = { "testShippingInsert" })
@Transactional
public void testOrderItemOfferWithGiftWrap() throws PricingException {
Order order = createTestOrderWithOfferAndGiftWrap();
OfferDataItemProvider dataProvider = new OfferDataItemProvider();
List<Offer> offers = dataProvider.createItemBasedOfferWithItemCriteria("order.subTotal.getAmount()>20", OfferDiscountType.PERCENT_OFF, "([MVEL.eval(\"toUpperCase()\",\"Test Sku\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.sku.name))", "([MVEL.eval(\"toUpperCase()\",\"Test Sku\")] contains MVEL.eval(\"toUpperCase()\", discreteOrderItem.sku.name))");
for (Offer offer : offers) {
offer.setName("testOffer");
// //reset the offer is the targets and qualifiers, otherwise the reference is incorrect
// for (OfferItemCriteria criteria : offer.getTargetItemCriteria()) {
// criteria.setTargetOffer(null);
// }
// for (OfferItemCriteria criteria : offer.getQualifyingItemCriteria()) {
// criteria.setQualifyingOffer(null);
// }
offerService.save(offer);
}
order = orderService.save(order, false);
Set<OrderMultishipOption> options = new HashSet<OrderMultishipOption>();
for (FulfillmentGroup fg : order.getFulfillmentGroups()) {
Address address = fg.getAddress();
for (FulfillmentGroupItem fgItem : fg.getFulfillmentGroupItems()) {
for (int j = 0; j < fgItem.getQuantity(); j++) {
OrderMultishipOption option = new OrderMultishipOptionImpl();
option.setOrder(order);
option.setAddress(address);
option.setOrderItem(fgItem.getOrderItem());
option.setFulfillmentOption(fg.getFulfillmentOption());
options.add(option);
}
}
}
for (OrderMultishipOption option : options) {
orderMultishipOptionService.save(option);
}
order = fulfillmentGroupService.matchFulfillmentGroupsToMultishipOptions(order, true);
assert order.getOrderItems().size() == 3;
assert order.getTotalTax().equals(new Money("2.00"));
assert order.getTotalShipping().equals(new Money("8.50"));
assert order.getSubTotal().equals(new Money("40.00"));
assert order.getTotal().equals(new Money("50.50"));
boolean foundGiftItemAndCorrectQuantity = false;
for (OrderItem orderItem : order.getOrderItems()) {
if (orderItem instanceof GiftWrapOrderItem && ((GiftWrapOrderItem) orderItem).getWrappedItems().size() == 1) {
foundGiftItemAndCorrectQuantity = true;
break;
}
}
assert foundGiftItemAndCorrectQuantity;
}
use of org.broadleafcommerce.core.order.domain.OrderMultishipOption in project BroadleafCommerce by BroadleafCommerce.
the class OrderMultishipOptionServiceImpl method createPopulatedOrderMultishipOption.
protected List<OrderMultishipOption> createPopulatedOrderMultishipOption(Order order, DiscreteOrderItem item, Integer quantity) {
List<OrderMultishipOption> orderMultishipOptions = new ArrayList<OrderMultishipOption>();
if (!fulfillmentGroupService.isShippable(item.getSku().getFulfillmentType()) || quantity == 0) {
return orderMultishipOptions;
}
// for (int i = 0; i < quantity; i++) {
OrderMultishipOption orderMultishipOption = new OrderMultishipOptionImpl();
orderMultishipOption.setOrder(order);
orderMultishipOption.setOrderItem(item);
orderMultishipOptions.add(orderMultishipOption);
// }
return orderMultishipOptions;
}
use of org.broadleafcommerce.core.order.domain.OrderMultishipOption in project BroadleafCommerce by BroadleafCommerce.
the class OrderMultishipOptionServiceImpl method saveOrderMultishipOptions.
@Override
public void saveOrderMultishipOptions(Order order, List<OrderMultishipOptionDTO> optionDTOs) {
Map<Long, OrderMultishipOption> currentOptions = new HashMap<Long, OrderMultishipOption>();
for (OrderMultishipOption option : findOrderMultishipOptions(order.getId())) {
currentOptions.put(option.getId(), option);
}
List<OrderMultishipOption> orderMultishipOptions = new ArrayList<OrderMultishipOption>();
for (OrderMultishipOptionDTO dto : optionDTOs) {
OrderMultishipOption option = currentOptions.get(dto.getId());
if (option == null) {
option = orderMultishipOptionDao.create();
}
option.setOrder(order);
option.setOrderItem(orderItemService.readOrderItemById(dto.getOrderItemId()));
if (dto.getAddressId() != null) {
option.setAddress(addressService.readAddressById(dto.getAddressId()));
} else {
option.setAddress(null);
}
if (dto.getFulfillmentOptionId() != null) {
option.setFulfillmentOption(fulfillmentOptionService.readFulfillmentOptionById(dto.getFulfillmentOptionId()));
} else {
option.setFulfillmentOption(null);
}
orderMultishipOptions.add(option);
}
for (OrderMultishipOption option : orderMultishipOptions) {
save(option);
}
}
use of org.broadleafcommerce.core.order.domain.OrderMultishipOption in project BroadleafCommerce by BroadleafCommerce.
the class OrderMultishipOptionServiceImpl method getOrGenerateOrderMultishipOptions.
@Override
public List<OrderMultishipOption> getOrGenerateOrderMultishipOptions(Order order) {
List<OrderMultishipOption> orderMultishipOptions = findOrderMultishipOptions(order.getId());
if (orderMultishipOptions == null || orderMultishipOptions.size() == 0) {
orderMultishipOptions = generateOrderMultishipOptions(order);
}
// Create a map representing the current discrete order item counts for the order
Map<Long, Integer> orderDiscreteOrderItemCounts = new HashMap<Long, Integer>();
for (DiscreteOrderItem item : order.getDiscreteOrderItems()) {
orderDiscreteOrderItemCounts.put(item.getId(), item.getQuantity());
}
List<OrderMultishipOption> optionsToRemove = new ArrayList<OrderMultishipOption>();
for (OrderMultishipOption option : orderMultishipOptions) {
Integer count = orderDiscreteOrderItemCounts.get(option.getOrderItem().getId());
if (count == null || count == 0) {
optionsToRemove.add(option);
} else {
count--;
orderDiscreteOrderItemCounts.put(option.getOrderItem().getId(), count);
}
}
for (Entry<Long, Integer> entry : orderDiscreteOrderItemCounts.entrySet()) {
DiscreteOrderItem item = (DiscreteOrderItem) orderItemService.readOrderItemById(entry.getKey());
orderMultishipOptions.addAll(createPopulatedOrderMultishipOption(order, item, entry.getValue()));
}
orderMultishipOptions.removeAll(optionsToRemove);
orderMultishipOptionDao.deleteAll(optionsToRemove);
return orderMultishipOptions;
}
Aggregations