Public/Get-FSvcTicketOverview.ps1
|
function Get-FSvcTicketOverview { <# .SYNOPSIS Three-list triage: unassigned, waiting on customer, awaiting agent. .DESCRIPTION Returns one object per ticket with a Category property, so pipe it to Where-Object / Group-Object / Format-Table. .EXAMPLE Get-FSvcTicketOverview -OlderThanDays 2 | Format-Table Category, Id, Subject, Days #> [CmdletBinding()] param( [string]$UnassignedQueryHash, [string]$AssignedQueryHash, [double]$OlderThanDays = 2, [int]$PerPage = 100 ) $cfg = Get-FSvcEffectiveConfig $now = [datetimeoffset]::Now $out = @() $unassigned = if ($UnassignedQueryHash) { Get-FSvcTickets -QueryHash $UnassignedQueryHash -PerPage $PerPage -Config $cfg } else { Get-FSvcViewTickets -View Unassigned -PerPage $PerPage -Config $cfg } foreach ($t in @($unassigned)) { $created = ConvertTo-FSDateTimeOffset $t.created_at $days = 0.0 if ($null -ne $created) { $days = Get-FSvcBusinessDaysBetween -From $created -To $now } $out += [pscustomobject]@{ Category = 'unassigned' Id = $t.id Subject = $t.subject Days = [math]::Round($days, 1) Link = ("{0}/a/tickets/{1}" -f $cfg.BaseUrl, $t.id) } } $assigned = if ($AssignedQueryHash) { Get-FSvcTickets -QueryHash $AssignedQueryHash -PerPage $PerPage -Config $cfg } else { Get-FSvcViewTickets -View SelfAssigned -PerPage $PerPage -Config $cfg } foreach ($t in @($assigned)) { $latest = Get-FSvcLatestConversation -TicketId $t.id -Config $cfg $lastMessage = $null $lastUser = [int64]0 if ($null -ne $latest) { $lastMessage = $latest.At; $lastUser = $latest.UserId } $category = Get-FSvcTicketCategory -ResponderID $t.responder_id -LastMessage $lastMessage -LastUserID $lastUser -CreatedAt (ConvertTo-FSDateTimeOffset $t.created_at) -OlderThanDays $OlderThanDays -Now $now if ($category -ne 'waiting' -and $category -ne 'awaiting_agent') { continue } $ref = ConvertTo-FSDateTimeOffset $t.created_at if ($null -ne $lastMessage) { $ref = $lastMessage } $days = 0.0 if ($null -ne $ref) { $days = Get-FSvcBusinessDaysBetween -From $ref -To $now } $out += [pscustomobject]@{ Category = $category Id = $t.id Subject = $t.subject Days = [math]::Round($days, 1) Link = ("{0}/a/tickets/{1}" -f $cfg.BaseUrl, $t.id) } } return $out } |