diff --git a/Lieb/Data/DiscordService.cs b/Lieb/Data/DiscordService.cs index 1a16857..6c22936 100644 --- a/Lieb/Data/DiscordService.cs +++ b/Lieb/Data/DiscordService.cs @@ -308,8 +308,7 @@ namespace Lieb.Data public static ApiRaid ConvertRaid(Raid raid) { string title = raid.Title; - if (raid.SignUps.Count < raid.MinUsers - && raid.MinUserDeadLineUTC.UtcDateTime > DateTimeOffset.UtcNow) + if (!raid.HasEnoughUsers && raid.MinUserDeadLineUTC.UtcDateTime < DateTimeOffset.UtcNow) { title = $"The raid was canceled because of not enough sign ups.\n\n{raid.Title}"; } diff --git a/Lieb/Data/RaidService.cs b/Lieb/Data/RaidService.cs index 536c6f7..3042df2 100644 --- a/Lieb/Data/RaidService.cs +++ b/Lieb/Data/RaidService.cs @@ -468,8 +468,7 @@ namespace Lieb.Data return false; } - if (raid.SignUps.Count < raid.MinUsers - && raid.MinUserDeadLineUTC < DateTimeOffset.UtcNow) + if (!raid.HasEnoughUsers && raid.MinUserDeadLineUTC < DateTimeOffset.UtcNow) { errorMessage = $"The raid was canceled because of not enough sign ups."; return false; @@ -700,8 +699,8 @@ namespace Lieb.Data using var context = _contextFactory.CreateDbContext(); List raids = context.Raids .Include(r => r.SignUps) - .Where(r => r.SignUps.Count < r.MinUsers && r.MinUserPollId == null).ToList(); - foreach (Raid raid in raids.Where(r => r.MinUserDeadLineUTC < DateTimeOffset.UtcNow && r.StartTimeUTC > DateTimeOffset.UtcNow)) + .Where(r => r.MinUserPollId == null).ToList(); + foreach (Raid raid in raids.Where(r => !r.HasEnoughUsers && r.MinUserDeadLineUTC < DateTimeOffset.UtcNow && r.StartTimeUTC > DateTimeOffset.UtcNow)) { raid.MinUserPollId = await _pollService.CreatePoll( "The raid has not the required users, do you want to raid anyway?", @@ -716,8 +715,8 @@ namespace Lieb.Data using var context = _contextFactory.CreateDbContext(); List raids = context.Raids .Include(r => r.SignUps) - .Where(r => r.SignUps.Count < r.MinUsers && r.MinUserPollId != null).ToList(); - foreach (Raid raid in raids.Where(r => r.MinUserDeadLineUTC < DateTimeOffset.UtcNow && r.StartTimeUTC > DateTimeOffset.UtcNow)) + .Where(r => r.MinUserPollId != null).ToList(); + foreach (Raid raid in raids.Where(r => !r.HasEnoughUsers && r.MinUserDeadLineUTC < DateTimeOffset.UtcNow && r.StartTimeUTC > DateTimeOffset.UtcNow)) { Poll poll = _pollService.GetPoll(raid.MinUserPollId.Value); diff --git a/Lieb/Models/GuildWars2/Raid/Raid.cs b/Lieb/Models/GuildWars2/Raid/Raid.cs index 126f522..8266888 100644 --- a/Lieb/Models/GuildWars2/Raid/Raid.cs +++ b/Lieb/Models/GuildWars2/Raid/Raid.cs @@ -20,6 +20,8 @@ namespace Lieb.Models.GuildWars2.Raid public ICollection SignUps { get; set; } = new HashSet(); + public bool HasEnoughUsers {get{ return SignUps.Where(s => s.SignUpType != SignUpType.SignedOff && s.SignUpType != SignUpType.Flex).Count() >= this.MinUsers;}} + public Raid() { } public Raid(RaidTemplate template) : base(template, template.TimeZone, true)