//TODO: This is written in a super stupid way. Needs re-writing :( public void TransferSignups(Event newEvent, out List <Signup> newReserves) { newReserves = new List <Signup>(); if (newEvent.Signups.All(e => !e.IsRequired)) { foreach (var signup in Signups) { if (signup.IsFilled()) { newEvent.Signups.Add(signup); } } Signups = newEvent.Signups; return; } foreach (var signup in Signups) { if (!signup.IsFilled()) { continue; } if (signup.Role == Role.Maybe || signup.Role == Role.Reserve) { //Don't add the same reserve or maybe more than once (if someone signed up in more than 1 role) if (newEvent.Signups.Any(e => e.Role == signup.Role && e.UserId == signup.UserId)) { continue; } newEvent.Signups.Add(new Signup(signup.Role, false, DateTime.UtcNow, signup.UserId)); continue; } var spotInNewEvent = newEvent.Signups.FirstOrDefault(e => e.Role == signup.Role && e.IsRequired && !e.IsFilled()); if (spotInNewEvent != null) { spotInNewEvent.UserId = signup.UserId; } else { //Don't add the same reserve or maybe more than once (if someone signed up in more than 1 role) if (newEvent.Signups.Any(e => e.Role == Role.Reserve && e.UserId == signup.UserId)) { continue; } var newReserve = new Signup(Role.Reserve, false, DateTime.UtcNow, signup.UserId); newEvent.Signups.Add(newReserve); newReserves.Add(newReserve); } } Signups = newEvent.Signups; }
public void RemoveSignup(Signup signupToRemove) { if (signupToRemove == null) { return; } if (signupToRemove.IsRequired == true) { signupToRemove.UserId = 0; } else { Signups.Remove(signupToRemove); } }
public Signup GetNextReserve(Role priorityRole = Role.None) { Signup nextReserve = null; if (priorityRole != Role.None) { nextReserve = Signups.FirstOrDefault(e => e.Role == Role.Reserve && e.ReserveRole == priorityRole); } if (nextReserve == null) { nextReserve = Signups.FirstOrDefault(e => e.Role == Role.Reserve); } return(nextReserve); }
public bool TryAddSignup(Signup signup) { if (signup.Role != Role.Maybe && signup.Role != Role.Reserve && Signups.Any(e => e.IsRequired == true)) { var freeSlot = Signups.FirstOrDefault(e => e.Role == signup.Role && !e.IsFilled()); if (freeSlot != null) { freeSlot.UserId = signup.UserId; return(true); } return(false); } else { Signups.Add(signup); return(true); } }