Ejemplo n.º 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;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates a new WorkItem from the given model
        /// </summary>
        /// <param name="cwvm">Model containing the detail of the WorkItem to create</param>
        /// <returns>Null if the class or teacher is not found, Otherwise, returns the WorkItem created</returns>
        public async Task<WorkItem> CreateWorkItem(CreateWorkItemViewModel cwvm)
        {
            var @class = await Db.Classes.FindAsync(cwvm.ClassId);

            if(@class == null)
            {
                return null;
            }

            WorkItem workItem = new WorkItem
            {
                Title = cwvm.Title,
                Description = cwvm.Description,
                DueDate = cwvm.DueDate,
                MaxPoints = cwvm.MaxPoints,
                Type = cwvm.Type,
                Class = @class
            };

            Db.WorkItems.Add(workItem);
            await Db.SaveChangesAsync();
            return workItem;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Returns a students ScoreUnit for a WorkItem
 /// </summary>
 /// <param name="workItem">WorkItem to return the ScoreUnit for</param>
 /// <param name="student">Student to return the ScorreUnit for</param>
 /// <returns></returns>
 public async Task<ScoreUnit> GetStudentScoreUnit(WorkItem workItem, ApplicationUser student)
 {
     return await _db.ScoreUnits.Where(su => su.WorkItem.Id == workItem.Id && su.Student.Id == student.Id).FirstOrDefaultAsync();
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Creates a view-model for the given WorkItem
 /// </summary>
 /// <param name="workItem">Model after which the view-model is created</param>
 public WorkItemViewModel(WorkItem workItem)
 {
     if(workItem != null)
     {
         Id = workItem.Id;
         Title = workItem.Title;
         Description = workItem.Description;
         DueDate = workItem.DueDate;
         MaxPoints = workItem.MaxPoints;
         Type = workItem.Type;
         Class = new ClassViewModel(workItem.Class);
     }
 }