From e533b6929eedee3de490f18bc59bb777636da042 Mon Sep 17 00:00:00 2001 From: kotlanj Date: Thu, 6 Nov 2025 15:02:29 +0100 Subject: [PATCH] fixed double shift for replacement when day-shift member has time off, added setting for how many days ahead to look during a day-shift replacement check --- shifts.ps1 | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/shifts.ps1 b/shifts.ps1 index 87fe214..9fe02a6 100644 --- a/shifts.ps1 +++ b/shifts.ps1 @@ -179,13 +179,14 @@ $allemails = $schedule.PSObject.Properties | ForEach-Object { # --------------------------- | DATE SETTINGS | --------------------------- # ---| Today's date |--- -$today = (Get-Date).Date +#$today = (Get-Date).Date # ---| Specific date |--- -#$today = Get-Date -Day 20 -Month 10 -Year 2025 -Hour 9 -Minute 00 -Second 00 -Millisecond 00 +$today = Get-Date -Day 2 -Month 12 -Year 2025 -Hour 9 -Minute 00 -Second 00 -Millisecond 00 -$daysahead = 14 #How many days ahead to plan +$daysahead = 30 #How many days ahead to plan $timeoff_past_look = -7 #How many days to look into the past for the start of a multi-day time off +$ds_replace_daysahead = 14 #How many days ahead do we look for a day-shift replacement # ---| Time span |--- $startSpanDate = Get-Date -Day $today.Day -Month $today.Month -Year $today.Year -Hour 9 -Minute 00 -Second 00 -Millisecond 00 @@ -307,10 +308,10 @@ try { # ---| DAY SHIFT REPLACEMENT CHECK |--- else { Write-Debug("{0} {1}: looking ahead for a day shift replacement" -f $dayDate, $dayDate.DayOfWeek) - $remainingdays = $timespan.Days - $dayNumber + #$remainingdays = $timespan.Days - $dayNumber # ---| FUTURE DAYS LOOP |--- - for ($daysahead = 1; $daysahead -lt $remainingdays; $daysahead++) { + for ($daysahead = 1; $daysahead -lt $ds_replace_daysahead; $daysahead++) { $futureday = $dayDate.AddDays($daysahead) # ---| WEEKEND CHECK |--- @@ -327,9 +328,14 @@ try { # ---| THE NEXT IN LINE FOR THE DAY-SHIFT DOESN'T HAVE TIME OFF, NO-SHIFT OR ON-SITE |--- if((Invoke-HasTimeOff -UID $futureds_id -timeoff $timeoff_today -mail $futureds_email) -eq $false -and ($futureds_email -notin $os_emails) -and ($futureds_email -notin $ns_emails)) { + $shifts_today = [Object[]] $allshifts | Where-Object -Filter { + $_.schedulingGroupId -eq $group.Id -and $_.SharedShift.StartDateTime.ToString("yyyy-MM-dd HH:mm") -ge $dateStart.ToString("yyyy-MM-dd HH:mm") -and $_.SharedShift.EndDateTime.ToString("yyyy-MM-dd HH:mm") -le $dateEnd.ToString("yyyy-MM-dd HH:mm") + } + # ---| NEXT IN LINE DOESN'T HAVE A SHIFT ALREADY |--- if((Invoke-HasShift -UID $futureds_id -shifts $shifts_today -mail $futureds_email) -eq $false) { + # ---| HOME-OFFICE DAY SHIFT |--- if($futureds_email -in $ho_emails) { $newshift = Set-Shift -userId $futureds_id -groupID $group.id -shiftName "Home Office - Denní směna" -StartDate $dateStart -EndDate $dateEnd -color "purple" -teamID $team.id -mail $futureds_email