public TaskGroupRecordViewModel(TaskGroupRecord taskGroupRecord) : base(taskGroupRecord) { this.PresentGroupMembersIds = taskGroupRecord.PresentGroupMembers.Select(pgm => pgm.GroupMember?.Id); // also deal with removed group members this.AssignedTasks = taskGroupRecord.TaskGroupMemberLinks .OrderBy(tgml => tgml.Task?.Name.ToLower()) .Select(link => new AssignedTaskViewModel(link)); }
public bool FillTaskGroupRecord(DMContext dMContext, TaskGroupRecord taskGroupRecord, CreateTaskGroupRecordViewModel createTaskGroupRecordViewModel) { var presentGroupMembers = createTaskGroupRecordViewModel.PresentGroupMembersIds.Select(groupMemberId => dMContext.GroupMembers.SingleOrDefault(gm => gm.Id == groupMemberId) ); var presentGroupMembersList = presentGroupMembers.OrderBy(gm => gm.Score).ToList(); if (presentGroupMembers.Contains(null)) { return(false); } taskGroupRecord.PresentGroupMembers = presentGroupMembers.Select(gm => { var pgm = new PresentGroupMember(); pgm.GroupMember = gm; pgm.TaskGroupRecord = taskGroupRecord; return(pgm); }).ToHashSet(); var links = new HashSet <TaskGroupMemberLink>(); var tasksList = taskGroupRecord.TaskGroup.Tasks.OrderByDescending(t => t.Bounty).ToList(); while (tasksList.Count() > 0) { var heaviestTask = tasksList[0]; tasksList.RemoveAt(0); var lowestScoringMember = presentGroupMembersList.FirstOrDefault(); if (lowestScoringMember == null) { presentGroupMembersList = presentGroupMembers.OrderBy(gm => gm.Score + CalculateGainedScore(gm, links)).ToList(); lowestScoringMember = presentGroupMembersList[0]; } presentGroupMembersList.RemoveAt(0); var link = new TaskGroupMemberLink(); link.Task = heaviestTask; link.GroupMember = lowestScoringMember; link.TaskGroupRecord = taskGroupRecord; links.Add(link); } taskGroupRecord.TaskGroupMemberLinks = links; return(true); }
public async Task <IActionResult> Create([FromBody] CreateTaskGroupRecordViewModel createTaskGroupRecordViewModel) { var taskGroup = dMContext.TaskGroups .Include(tg => tg.Group) .Include(tg => tg.Tasks) .SingleOrDefault(tg => tg.Id == createTaskGroupRecordViewModel.TaskGroupId); if (taskGroup == null) { return(NotFoundJson()); } if (!VerifyIsGroupMember(taskGroup.Group.Id)) { return(UnauthorizedJson()); } var taskGroupRecord = new TaskGroupRecord(); taskGroupRecord.TaskGroup = taskGroup; taskGroupRecord.Date = System.DateTime.UtcNow; taskGroupRecordLogic.FillTaskGroupRecord(dMContext, taskGroupRecord, createTaskGroupRecordViewModel); await dMContext.PresentGroupMembers.AddRangeAsync(taskGroupRecord.PresentGroupMembers); await dMContext.TaskGroupMemberLinks.AddRangeAsync(taskGroupRecord.TaskGroupMemberLinks); await dMContext.TaskGroupRecords.AddAsync(taskGroupRecord); await dMContext.SaveChangesAsync(); return(Json(new { Succeeded = true, TaskGroupRecordId = taskGroupRecord.Id })); }
public SuperficialTaskGroupRecordViewModel(TaskGroupRecord taskGroupRecord) { this.Id = taskGroupRecord.Id; this.Date = taskGroupRecord.Date; this.Finalized = taskGroupRecord.Finalized; }