Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }