private async Task HandleShiftAdjustmentsAndOvertime(int locationId, DateTimeOffset targetDate, string timezone, IEnumerable <Guid?> sheriffsForDuties)
        {
            var startRange = targetDate.ConvertToTimezone(timezone).DateOnly();
            var endRange   = startRange.TranslateDateForDaylightSavings(timezone, hoursToShift: 24);

            var shiftExpansions = new List <ShiftAdjustment>();

            foreach (var sheriff in sheriffsForDuties.Where(sheriff => sheriff != null))
            {
                var shiftsForDay = await Db.Shift.Where(s =>
                                                        s.ExpiryDate == null && s.SheriffId == sheriff && s.LocationId == locationId && s.StartDate >= startRange && s.StartDate < endRange).ToListAsync();

                if (shiftsForDay.Count == 0)
                {
                    continue;
                }
                var referenceShift = shiftsForDay.First();

                var earliestShift = shiftsForDay.FirstOrDefault(s => s.StartDate == shiftsForDay.Min(s2 => s2.StartDate));
                var latestShift   = shiftsForDay.FirstOrDefault(s => s.EndDate == shiftsForDay.Max(s2 => s2.EndDate));

                var dutySlotsForSheriffOnDay = await Db.DutySlot.Where(s =>
                                                                       s.ExpiryDate == null && s.SheriffId == sheriff && s.LocationId == locationId && s.StartDate >= startRange && s.StartDate < endRange).ToListAsync();

                var earliestDutySlot = dutySlotsForSheriffOnDay.FirstOrDefault(ds => ds.StartDate == dutySlotsForSheriffOnDay.Min(ds2 => ds2.StartDate));
                var latestDutySlot   = dutySlotsForSheriffOnDay.FirstOrDefault(ds => ds.EndDate == dutySlotsForSheriffOnDay.Max(ds2 => ds2.EndDate));

                if (latestShift !.EndDate < latestDutySlot?.EndDate)
                {
                    await Db.Shift.AddAsync(new Shift
                    {
                        SheriffId  = sheriff.Value,
                        Timezone   = referenceShift.Timezone,
                        LocationId = referenceShift.LocationId,
                        StartDate  = latestShift.EndDate,
                        EndDate    = latestDutySlot.EndDate
                    });

                    shiftExpansions.Add(new ShiftAdjustment {
                        SheriffId = sheriff.Value, Date = earliestDutySlot.StartDate, Timezone = earliestShift.Timezone
                    });
                }

                if (earliestShift !.StartDate > earliestDutySlot?.StartDate)
                {
                    await Db.Shift.AddAsync(new Shift
                    {
                        SheriffId  = sheriff.Value,
                        Timezone   = referenceShift.Timezone,
                        LocationId = referenceShift.LocationId,
                        StartDate  = earliestDutySlot.StartDate,
                        EndDate    = earliestShift.StartDate
                    });

                    shiftExpansions.Add(new ShiftAdjustment {
                        SheriffId = sheriff.Value, Date = earliestDutySlot.StartDate, Timezone = earliestShift.Timezone
                    });
                }
            }

            if (!shiftExpansions.Any())
            {
                return;
            }
            await Db.SaveChangesAsync();

            foreach (var shiftExpansion in shiftExpansions.Distinct())
            {
                await ShiftService.CalculateOvertimeHoursForSheriffOnDay(
                    shiftExpansion.SheriffId, shiftExpansion.Date,
                    shiftExpansion.Timezone);
            }
        }