public static IList <StudentGradingStatsViewData> Create(IList <ClassAnnouncement> announcements , IList <StudentAnnouncementDetails> studentAnnouncements, IList <ClaimInfo> claims) { var res = new List <StudentGradingStatsViewData>(); studentAnnouncements = studentAnnouncements.Where(x => x.NumericScore.HasValue).ToList(); announcements = announcements.Where(x => studentAnnouncements.Any(y => y.AnnouncementId == x.Id)).ToList(); var dicDateAnns = announcements.GroupBy(x => x.Expires).ToDictionary(x => x.Key, x => x.ToList()); foreach (var dateAnn in dicDateAnns) { var anns = dateAnn.Value; var stAnns = studentAnnouncements.Where(x => anns.Any(y => y.Id == x.AnnouncementId)).ToList(); var stIds = stAnns.GroupBy(x => x.StudentId).Select(x => x.Key).ToList(); var item = new StudentGradingStatsViewData { Date = dateAnn.Key, AnnouncementGrades = dateAnn.Value.Select(x => ShortAnnouncementGradeViewData.Create(x, stAnns, stIds, claims)).ToList() }; if (stAnns.Any()) { item.Grade = (stAnns.Max(x => x.NumericScore) + stAnns.Min(x => x.NumericScore)) / 2; } res.Add(item); } return(res); }
public static IList <StudentGradingByTypeStatsViewData> Create(IList <ClassAnnouncement> announcements , IList <StudentAnnouncementDetails> studentAnnouncements, IList <ClaimInfo> claims) { var res = new List <StudentGradingByTypeStatsViewData>(); announcements = announcements.Where(x => x.ClassAnnouncementTypeRef.HasValue).ToList(); var dicbyType = announcements.GroupBy(x => x.ClassAnnouncementTypeRef).ToDictionary(x => x.Key, x => x.ToList()); foreach (var typeAnns in dicbyType) { var ann = typeAnns.Value.First(); Trace.Assert(ann.ClassAnnouncementTypeRef.HasValue); res.Add(new StudentGradingByTypeStatsViewData { ClassAnnouncementTypeId = ann.ClassAnnouncementTypeRef.Value, ClassAnnouncementTypeName = ann.ClassAnnouncementTypeName, StudentGradingStats = StudentGradingStatsViewData.Create(typeAnns.Value, studentAnnouncements, claims) }); } return(res); }