private async Task ValidateSheriffActingRankExists(SheriffActingRank actingRank) { var conflictingRanks = await Db.SheriffActingRank.AsNoTracking().Where(sal => sal.Id != actingRank.Id && sal.SheriffId == actingRank.SheriffId && (sal.StartDate < actingRank.EndDate && actingRank.StartDate < sal.EndDate) && sal.ExpiryDate == null).ToListAsync(); if (conflictingRanks.Count > 0) { var start = actingRank.StartDate.ConvertToTimezone(actingRank.Timezone); var end = actingRank.EndDate.ConvertToTimezone(actingRank.Timezone); throw new BusinessLayerException($"Acting Rank date-range({start.Year}-{start.Month}-{start.Day}" + $" to {end.Year}-{end.Month}-{end.Day}) has coflict with current acting ranks."); } }
public async Task<SheriffActingRank> UpdateSheriffActingRank(DutyRosterService dutyRosterService, ShiftService shiftService, SheriffActingRank actingRank, bool overrideConflicts) { ValidateStartAndEndDates(actingRank.StartDate, actingRank.EndDate); await ValidateSheriffExists(actingRank.SheriffId); var savedActingRank = await Db.SheriffActingRank.FindAsync(actingRank.Id); savedActingRank.ThrowBusinessExceptionIfNull($"{nameof(SheriffActingRank)} with the id: {actingRank.Id} could not be found. "); if (savedActingRank.ExpiryDate.HasValue) throw new BusinessLayerException($"{nameof(SheriffActingRank)} with the id: {actingRank.Id} has been expired"); await ValidateSheriffActingRankExists(actingRank); Db.Entry(savedActingRank).CurrentValues.SetValues(actingRank); Db.Entry(savedActingRank).Property(x => x.SheriffId).IsModified = false; Db.Entry(savedActingRank).Property(x => x.ExpiryDate).IsModified = false; Db.Entry(savedActingRank).Property(x => x.ExpiryReason).IsModified = false; await Db.SaveChangesAsync(); return savedActingRank; }
public async Task<SheriffActingRank> AddSheriffActingRank(DutyRosterService dutyRosterService, ShiftService shiftService, SheriffActingRank actingRank, bool overrideConflicts) { ValidateStartAndEndDates(actingRank.StartDate, actingRank.EndDate); await ValidateSheriffExists(actingRank.SheriffId); await ValidateSheriffActingRankExists(actingRank); actingRank.Sheriff = await Db.Sheriff.FindAsync(actingRank.SheriffId); await Db.SheriffActingRank.AddAsync(actingRank); await Db.SaveChangesAsync(); return actingRank; }