use of org.broadleafcommerce.core.order.domain.OrderImpl in project BroadleafCommerce by BroadleafCommerce.
the class BandedPriceFulfillmentTest method createCandidateOrder.
/**
* @param total - this number divided by the number of items to create is the value of either the weight or the price
* (depending on which <b>option</b> is being passed in) for a single order item. Note that the final price of each item
* will be: (<b>total</b> / <b>orderItemsToCreate</b>) * <b>quantity</b>
* @param orderItemsToCreate - the number of order items to split the retail total across
* @param flatRates - the flat rates to assign to the OrderItems that are created. To have an Order that is mixed between OrderItems and
* DiscreteOrderItems (which are created for flat rates) ensure that the size of this array is less than <b>orderItemsToCreate</b>
* @param quantities - the quantities to assign to each OrderItem. If specified, this should be equal to the number of
* items to create
* @param option - the option to associate with the flat rates
* @return
*/
protected Order createCandidateOrder(BigDecimal total, int orderItemsToCreate, String[] flatRates, int[] quantities, FulfillmentOption option) {
if (flatRates != null && flatRates.length > orderItemsToCreate) {
throw new IllegalStateException("Flat rates for Skus should be less than or equal to the number of order items being created");
}
if (quantities != null && quantities.length != orderItemsToCreate) {
throw new IllegalStateException("Quantities for Skus should be less than or equal to the number of order items being created");
}
Order result = new OrderImpl();
List<FulfillmentGroupItem> fulfillmentItems = new ArrayList<FulfillmentGroupItem>();
for (int i = 0; i < orderItemsToCreate; i++) {
DiscreteOrderItem orderItem = new DiscreteOrderItemImpl();
Sku sku = new SkuImpl();
// set the sku price to some arbitrary amount - won't matter because the test is based on order item price
sku.setRetailPrice(new Money("1"));
orderItem.setSku(sku);
if (flatRates != null && i < flatRates.length) {
sku.getFulfillmentFlatRates().put(option, new BigDecimal(flatRates[i]));
}
if (option instanceof BandedPriceFulfillmentOption) {
orderItem.setPrice(new Money(total.divide(new BigDecimal(orderItemsToCreate))));
} else if (option instanceof BandedWeightFulfillmentOption) {
Weight weight = new Weight();
weight.setWeight(total.divide(new BigDecimal(orderItemsToCreate)));
weight.setWeightUnitOfMeasure(WeightUnitOfMeasureType.POUNDS);
orderItem.getSku().setWeight(weight);
orderItem.setPrice(new Money(BigDecimal.ZERO));
}
orderItem.setOrder(result);
FulfillmentGroupItem fulfillmentItem = new FulfillmentGroupItemImpl();
fulfillmentItem.setOrderItem(orderItem);
if (quantities == null) {
fulfillmentItem.setQuantity(1);
} else {
fulfillmentItem.setQuantity(quantities[i]);
}
fulfillmentItems.add(fulfillmentItem);
}
FulfillmentGroup group = new FulfillmentGroupImpl();
group.setOrder(result);
group.setFulfillmentGroupItems(fulfillmentItems);
List<FulfillmentGroup> groups = new ArrayList<FulfillmentGroup>();
groups.add(group);
result.setFulfillmentGroups(groups);
return result;
}
use of org.broadleafcommerce.core.order.domain.OrderImpl in project BroadleafCommerce by BroadleafCommerce.
the class ResourcePurgeDaoImpl method buildCartQuery.
protected <T> TypedQuery<T> buildCartQuery(String[] names, OrderStatus[] statuses, Date dateCreatedMinThreshold, Boolean isPreview, Class<T> returnType, List<Long> excludedIds) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(returnType);
Root<OrderImpl> root = criteria.from(OrderImpl.class);
if (Long.class.equals(returnType)) {
criteria.select((Selection<? extends T>) builder.count(root));
} else {
criteria.select((Selection<? extends T>) root);
}
List<Predicate> restrictions = new ArrayList<Predicate>();
List<String> statusList = new ArrayList<String>();
if (statuses != null) {
for (OrderStatus status : statuses) {
statusList.add(status.getType());
}
} else {
statusList.add("IN_PROCESS");
}
restrictions.add(root.get("status").in(statusList));
if (names != null) {
restrictions.add(root.get("name").in(Arrays.asList(names)));
}
if (dateCreatedMinThreshold != null) {
restrictions.add(builder.lessThan(root.get("auditable").get("dateCreated").as(Date.class), dateCreatedMinThreshold));
}
if (isPreview != null) {
if (isPreview) {
restrictions.add(builder.isTrue(root.get("previewable").get("isPreview").as(Boolean.class)));
} else {
restrictions.add(builder.or(builder.isNull(root.get("previewable").get("isPreview")), builder.isFalse(root.get("previewable").get("isPreview").as(Boolean.class))));
}
}
if (excludedIds != null && excludedIds.size() > 0) {
applyLimitedInClause(excludedIds, builder, root, restrictions);
}
criteria.where(restrictions.toArray(new Predicate[restrictions.size()]));
return em.createQuery(criteria);
}
Aggregations