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));
        }
예제 #2
0
        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"));
        }