public ServerQueue ChooseQueueForPerson(Person person) { var queues = Queues.Values.ToList().Where(x => x.IsOpened).OrderBy(x => x.Id).ToList(); var firstQueue = queues.First(); if (person.IsCrippled || person.IsPregnant) { var mostShorterQueue = queues.First(x => x.WaitingPeoplesCount == queues.Min(y => y.WaitingPeoplesCount)); mostShorterQueue.WaitingPeoples.Add(person); return mostShorterQueue; } if (queues.Skip(1).All(x => x.WaitingPeoplesCount > firstQueue.WaitingPeoplesCount) && firstQueue.WaitingPeoplesCount <= 1) { firstQueue.WaitingPeoples.Add(person); return firstQueue; } //Let's always have first queue missed var nextQueues = queues.Skip(1).OrderBy(x => x.WaitingPeoples.Count); var next = nextQueues.First(); next.WaitingPeoples.Add(person); return next; }
public void AssignNewUnorderedPerson() { UnorderedPerson = new Person() { Guid = Guid.NewGuid() }; }