@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());
        }
      }
    }
  }