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

This commit is contained in:
2025-11-06 15:02:29 +01:00
parent 87c66c6485
commit e533b6929e

View File

@@ -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