public async Task <IActionResult> CreateAndAssign([Bind("Id,Name,Description,Status")] Idea idea) { if (ModelState.IsValid) { _context.Add(idea); await _context.SaveChangesAsync(); var evaluators = _context.Evaluators.Include(_ => _.IdeaEvaluators) .Select(g => new { GroupId = g.Id, Count = g.IdeaEvaluators.Count() }) .OrderBy(_ => _.Count) .Select(_ => new { Id = _.GroupId }) .Take(_NoOfJudge) .ToList(); List <int> tempEvaluator = new List <int>(); foreach (var evaluator in evaluators) { tempEvaluator.Add(evaluator.Id); } var random = new Random(); for (int i = 0; i < _NoOfJudge; i++) { int evaluatorId = random.Next(tempEvaluator.Count); var assignJudge = new IdeaEvaluator() { IdeaId = idea.Id, EvaluatorId = tempEvaluator[evaluatorId] }; _context.Add(assignJudge); if (tempEvaluator.Count > 0) { tempEvaluator.Remove(tempEvaluator[evaluatorId]); } } await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(idea)); }
public async Task <IActionResult> Process() { var ideasToBeAssign = _context.Ideas .ToList() .LeftExcludingJoin(_context.IdeaEvaluators, idea => idea.Id, ideaEvaluator => ideaEvaluator.IdeaId, (idea, ideaEvaluator) => new { PendingIdea = idea }).ToList(); foreach (var idea in ideasToBeAssign) { var evaluators = _context.Evaluators.Include(_ => _.IdeaEvaluators) .Select(g => new { GroupId = g.Id, Count = g.IdeaEvaluators.Count() }) .OrderBy(_ => _.Count) .Select(_ => new { Id = _.GroupId }) .Take(_NoOfJudge) .ToList(); List <int> tempEvaluator = new List <int>(); foreach (var evaluator in evaluators) { tempEvaluator.Add(evaluator.Id); } var random = new Random(); for (int i = 0; i < _NoOfJudge; i++) { int evaluatorId = random.Next(tempEvaluator.Count); var assignJudge = new IdeaEvaluator() { IdeaId = idea.PendingIdea.Id, EvaluatorId = tempEvaluator[evaluatorId] }; _context.Add(assignJudge); if (tempEvaluator.Count > 0) { tempEvaluator.Remove(tempEvaluator[evaluatorId]); } } await _context.SaveChangesAsync(); } return(RedirectToAction(nameof(Index), "Ideas")); }