[string] $dtHost = $ENV:DONETICKHOST [string] $dtPort = $ENV:DONETICKPORT [string] $dtAPIKey = $ENV:DONETICKAPIKEY [string] $appriseWebhookURL = $ENV:APPRISEWEBHOOKURL [string] $appriseWebhookTag = $ENV:APPRISEWEBHOOKTAG function Send-Notification { param( # Title of the notification [Parameter(Mandatory=$true)] [string] $title, # Content of the notification [Parameter(Mandatory=$true)] [string] $content ) $headers = @{ "Content-Type"="application/json" } $body = @{ title=$title body=$content tags="$appriseWebhookTag" } $json = $body | ConvertTo-Json try { Invoke-WebRequest -URI $appriseWebhookURL -Method post -Body $json -Headers $headers } catch { Write-Host "Notification Error Encountered: $($global:Error[0])" } } function Get-Chores { try { $headers = @{ secretkey = $dtAPIKey } $results = Invoke-WebRequest -Uri "https://$dtHost`:$dtPort/eapi/v1/chore" -Method Get -Headers $headers return ($results.Content | ConvertFrom-Json) } catch { Write-Error "Error fetching chores: $($global:Error[0])" } } $today = (Get-Date "23:59:59") $chores = Get-Chores $overdueTasks = @() $todaysTasks = @() foreach($chore in $chores) { if ($chore.nextDueDate) { $dueDate = (Get-Date $chore.nextDueDate).ToLocalTime() if (($dueDate - $today).Days -lt 0) #OVERDUE { write-host "$($chore.name) $dueDate is overdue!" $overdueTasks += $chore } elseif (($dueDate - $today) -lt 1) #due today { write-host "$($chore.name) $dueDate is due today!" $todaysTasks += $chore # Send-Notification -title "TASK DUE TODAY" -content "$($chore.Name) is due today!" } else { write-host "$($chore.name) $dueDate is due in the future" } } } if ($overdueTasks.Count -ne 0) { Write-Host "Sending a notification for $($overdueTasks.Count) overdue tasks" $content = "The following tasks are overdue!`n" foreach($overdueTask in $overdueTasks) { $content += "$($overdueTask.Name) was due $((Get-Date $overdueTask.nextDueDate -Format "MM/dd/yyyy HH:mm").ToLocalTime())`n" } Send-Notification -title "OVERDUE TASKS" -content $content } if ($todaysTasks.Count -ne 0) { Write-Host "Sending a notification for $($todaysTasks.Count) tasks due today" $content = "The following tasks are due today!`n" foreach($task in $todaysTasks) { $content += "$($task.Name) is due $((Get-Date $task.nextDueDate -Format "MM/dd/yyyy HH:mm").ToLocalTime())`n" } Send-Notification -title "TODAY'S TASKS" -content $content }