Compare commits

..

3 Commits

2 changed files with 67 additions and 37 deletions

View File

@@ -2,31 +2,46 @@
"monday": {
"ds": "jiri.kotlan@itego.cz",
"ho": ["milan.husak@itego.cz"],
"os": ["vaclav.spaninger@itego.cz","roman.lesyk@itego.cz","jan.zazvonil@itego.cz"],
"os": [
{ "email": "vaclav.spaninger@itego.cz", "customer": "KB" },
{ "email": "roman.lesyk@itego.cz", "customer": "KB" },
{ "email": "jan.zazvonil@itego.cz", "customer": "Pragolab" }
],
"ns": []
},
"tuesday": {
"ds": "milan.husak@itego.cz",
"ho": ["jiri.kotlan@itego.cz"],
"os": ["vaclav.spaninger@itego.cz","roman.lesyk@itego.cz"],
"os": [
{ "email": "vaclav.spaninger@itego.cz", "customer": "KB" },
{ "email": "roman.lesyk@itego.cz", "customer": "KB" }
],
"ns": ["jan.zazvonil@itego.cz"]
},
"wednesday": {
"ds": "jiri.kotlan@itego.cz",
"ho": ["jiri.kotlan@itego.cz"],
"os": ["vaclav.spaninger@itego.cz","roman.lesyk@itego.cz"],
"os": [
{ "email": "vaclav.spaninger@itego.cz", "customer": "KB" },
{ "email": "roman.lesyk@itego.cz", "customer": "KB" }
],
"ns": ["jan.zazvonil@itego.cz"]
},
"thursday": {
"ds": "milan.husak@itego.cz",
"ho": ["milan.husak@itego.cz"],
"os": ["vaclav.spaninger@itego.cz","roman.lesyk@itego.cz"],
"os": [
{ "email": "vaclav.spaninger@itego.cz", "customer": "KB" },
{ "email": "roman.lesyk@itego.cz", "customer": "KB" }
],
"ns": ["jan.zazvonil@itego.cz"]
},
"friday": {
"ds": "roman.lesyk@itego.cz",
"ho": [],
"os": ["jan.zazvonil@itego.cz"],
"os": [
{ "email": "jan.zazvonil@itego.cz", "customer": "Pragolab" }
],
"ns": []
}
}

View File

@@ -168,8 +168,12 @@ $allemails = $schedule.PSObject.Properties | ForEach-Object {
if ($_.Name -in @("monday", "tuesday", "wednesday", "thursday", "friday")) {
$_.Value.PSObject.Properties | ForEach-Object {
if ($_.Name -in @("ds", "ho", "os", "ns")) {
$_.Value | ForEach-Object {
$_
if ($_.Name -eq "os") {
# Collect the email field from objects
$_.Value | ForEach-Object { $_.email }
}
else {
$_.Value | ForEach-Object { $_ }
}
}
}
@@ -182,10 +186,11 @@ $allemails = $schedule.PSObject.Properties | ForEach-Object {
$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 1 -Month 1 -Year 2026 -Hour 9 -Minute 00 -Second 00 -Millisecond 00
$daysahead = 14 #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
@@ -241,7 +246,8 @@ try {
$ds_shift_inplace = $false
$ho_emails = $schedule.($dayDate.DayOfWeek.ToString().ToLower()).'ho'
$ds_email = $schedule.($dayDate.DayOfWeek.ToString().ToLower()).'ds'
$os_emails = $schedule.($dayDate.DayOfWeek.ToString().ToLower()).'os'
$os_entries = $schedule.($dayDate.DayOfWeek.ToString().ToLower()).'os'
$os_emails = $os_entries | ForEach-Object { $_.email }
$ns_emails = $schedule.($dayDate.DayOfWeek.ToString().ToLower()).'ns'
# ---| TIME SYNC |---
@@ -307,10 +313,9 @@ 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
# ---| 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 +332,15 @@ 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)) {
# ---| UPDATE COLLECTION OF SHIFTS TODAY |---
$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
@@ -391,8 +402,12 @@ try {
# ---| ON-SITE SHIFT CHECK |---
if($email -in $os_emails) {
$entry = $os_entries | Where-Object { $_.email -eq $email }
$customer = $entry.customer
$os_shift_name = ("On-Site - {0}" -f $customer)
if((Invoke-HasShiftorTimeOff -UID $userId -shifts $shifts_today -timeoff $timeoff_today -mail $email) -eq $false) {
$newshift = Set-Shift -userId $userId -groupID $group.id -shiftName "On-site" -StartDate $dateStart -EndDate $dateEnd -color "white" -teamID $team.id -mail $email
$newshift = Set-Shift -userId $userId -groupID $group.id -shiftName $os_shift_name -StartDate $dateStart -EndDate $dateEnd -color "white" -teamID $team.id -mail $email
$allshifts += [Object[]] $newshift
continue
}