@Override public void filterFulfillmentGroupLevelOffer( PromotableOrder order, List<PromotableCandidateFulfillmentGroupOffer> qualifiedFGOffers, Offer offer) { for (PromotableFulfillmentGroup fulfillmentGroup : order.getFulfillmentGroups()) { boolean fgLevelQualification = false; fgQualification: { // handle legacy fields in addition to the 1.5 order rule field if (couldOfferApplyToOrder(offer, order, fulfillmentGroup)) { fgLevelQualification = true; break fgQualification; } for (PromotableOrderItem discreteOrderItem : order.getAllOrderItems()) { if (couldOfferApplyToOrder(offer, order, discreteOrderItem, fulfillmentGroup)) { fgLevelQualification = true; break fgQualification; } } } if (fgLevelQualification) { fgLevelQualification = false; // handle 1.5 FG field if (couldOfferApplyToFulfillmentGroup(offer, fulfillmentGroup)) { fgLevelQualification = true; } } // Item Qualification - new for 1.5! if (fgLevelQualification) { CandidatePromotionItems candidates = couldOfferApplyToOrderItems(offer, fulfillmentGroup.getDiscountableOrderItems()); if (candidates.isMatchedQualifier()) { PromotableCandidateFulfillmentGroupOffer candidateOffer = createCandidateFulfillmentGroupOffer(offer, qualifiedFGOffers, fulfillmentGroup); candidateOffer.getCandidateQualifiersMap().putAll(candidates.getCandidateQualifiersMap()); } } } }