/// <summary> /// Gets the ratings. /// </summary> /// <param name="feedback">The feedback.</param> /// <returns></returns> private ICollection <EbayRatingData> GetRatings(GetFeedbackCall feedback) { List <EbayRatingData> ratings = new List <EbayRatingData>(); if (feedback.FeedbackSummary == null || CollectionUtils.IsEmpty(feedback.FeedbackSummary.SellerRatingSummaryArray)) { return(ratings); } //group the relevant items by time period IEnumerable <IGrouping <FeedbackSummaryPeriodCodeType, AverageRatingSummaryType> > groupsByPeriod = feedback .FeedbackSummary .SellerRatingSummaryArray .Cast <AverageRatingSummaryType>() .Where(o => o.FeedbackSummaryPeriodSpecified && CollectionUtils.IsNotEmpty(o.AverageRatingDetails)) .GroupBy(o => o.FeedbackSummaryPeriod); //group each previous group by rating detail foreach (var periodGroup in groupsByPeriod) { //group each previous group by rating detail var groupPeriodByRating = periodGroup.First() .AverageRatingDetails .Cast <AverageRatingDetailsType>() .GroupBy(o => o.RatingDetail); EbayRatingData ratingData = new EbayRatingData(); ratingData.TimePeriodId = ToEbayTimePeriod(periodGroup.Key); //completes ratingData FillEbayRatingData(groupPeriodByRating, ratingData); ratings.Add(ratingData); } return(ratings); }
/// <summary> /// Fills the e-bay rating data. /// </summary> /// <param name="groupPeriodByRating">The group period by rating.</param> /// <param name="ratingData">The rating data.</param> /// <exception cref="System.ArgumentOutOfRangeException"></exception> private static void FillEbayRatingData(IEnumerable <IGrouping <FeedbackRatingDetailCodeType, AverageRatingDetailsType> > groupPeriodByRating, EbayRatingData ratingData) { foreach (var group in groupPeriodByRating) { switch (group.Key) { case FeedbackRatingDetailCodeType.ItemAsDescribed: ratingData.ItemAsDescribed = group.First() .Rating; ratingData.ItemAsDescribedCount = group.First() .RatingCount; break; case FeedbackRatingDetailCodeType.Communication: ratingData.Communication = group.First() .Rating; ratingData.Communication = group.First() .RatingCount; break; case FeedbackRatingDetailCodeType.ShippingTime: ratingData.ShippingTime = group.First() .Rating; ratingData.ShippingTimeCount = group.First() .RatingCount; break; case FeedbackRatingDetailCodeType.ShippingAndHandlingCharges: ratingData.ShippingAndHandlingCharges = group.First() .Rating; ratingData.ShippingAndHandlingCharges = group.First() .RatingCount; break; default: throw new ArgumentOutOfRangeException(); } } }