Exemple #1
0
        /// <summary>
        /// Returns all the ScoreUnits associated with the given WorkItem
        /// </summary>
        /// <param name="workItem">WorkItem for which to return ScoreUnits</param>
        /// <returns>Creates new ScoreUnits for all students who have none</returns>
        public async Task<IEnumerable<ScoreUnit>> GetScoreUnits(WorkItem workItem)
        {
            ClassManager classManager = new ClassManager(_db, _userManager);
            var students = await classManager.GetAcceptedStudents(workItem.Class);

            var newScoreUnits = new List<ScoreUnit>();
            var scoreUnits = await _db.ScoreUnits
                .Include(su => su.Student)
                .Where(su => su.WorkItem.Id == workItem.Id).ToDictionaryAsync(su => su.Student.Id);

            // Create new ScoreUnits for those who don't have one
            foreach(var student in students)
            {
                if(!scoreUnits.ContainsKey(student.Id))
                {
                    var newScoreUnit = new ScoreUnit();
                    newScoreUnit.WorkItem = workItem;
                    newScoreUnit.Student = student;
                    newScoreUnit.Grade = null;

                    newScoreUnits.Add(newScoreUnit);
                }
            }

            var addedScoreUnits = _db.ScoreUnits.AddRange(newScoreUnits);
            await _db.SaveChangesAsync();

            // Convert dictionary to list and add new ScoreUnits
            var result = scoreUnits.Select(kvp => kvp.Value).ToList();
            result.AddRange(addedScoreUnits);
            return result;
        }
Exemple #2
0
 /// <summary>
 /// Creates a model from the given ScoreUnit
 /// </summary>
 /// <param name="scoreUnit">ScoreUnit to create the model from</param>
 public ScoreUnitBindingModel(ScoreUnit scoreUnit)
 {
     Id = scoreUnit.Id;
     StudentUserName = scoreUnit.Student.UserName;
     WorkItemId = scoreUnit.WorkItem.Id;
     Grade = scoreUnit.Grade;
 }