Private/ConvertTo-UKGProDateFilter.ps1
|
function ConvertTo-UKGProDateFilter { <# .SYNOPSIS Builds a UKG Pro operator-prefixed date filter value. .DESCRIPTION UKG Pro date-time query parameters use an unusual inline-operator syntax where the comparison operator is part of the *value*, not a separate parameter. From the API docs: less than =<MM-DD-YYYY e.g. dateOfTermination=<01-01-1900 greater than =>MM-DD-YYYY e.g. dateOfTermination=>01-01-1900 equal to =MM-DD-YYYY e.g. dateOfTermination=01-01-1900 between ={MM-DD-YYYY,MM-DD-YYYY} Note the operator sits *after* the '=' that the query string already has, so the value we emit is the part after '='. For "greater than" the value is ">01-01-1900" (which yields ...?dateOfTermination=>01-01-1900). This helper takes friendly inputs and returns the correctly formatted value string, so callers never have to hand-assemble the operator syntax. .PARAMETER Operator One of: LessThan, GreaterThan, EqualTo, Between. .PARAMETER Date The date to compare against (for LessThan / GreaterThan / EqualTo). .PARAMETER RangeStart Start of the range (for Between). .PARAMETER RangeEnd End of the range (for Between). .EXAMPLE ConvertTo-UKGProDateFilter -Operator GreaterThan -Date '2026-01-01' # returns '>01-01-2026' -> dateOfTermination=>01-01-2026 .EXAMPLE ConvertTo-UKGProDateFilter -Operator Between -RangeStart '2026-01-01' -RangeEnd '2026-03-31' # returns '{01-01-2026,03-31-2026}' .NOTES Internal helper. Not exported. #> [CmdletBinding(DefaultParameterSetName = 'Single')] [OutputType([string])] param ( [Parameter(Mandatory)] [ValidateSet('LessThan', 'GreaterThan', 'EqualTo', 'Between')] [string]$Operator, [Parameter(Mandatory, ParameterSetName = 'Single')] [datetime]$Date, [Parameter(Mandatory, ParameterSetName = 'Range')] [datetime]$RangeStart, [Parameter(Mandatory, ParameterSetName = 'Range')] [datetime]$RangeEnd ) # UKG Pro expects MM-DD-YYYY. $fmt = 'MM-dd-yyyy' switch ($Operator) { 'LessThan' { return '<' + $Date.ToString($fmt) } 'GreaterThan' { return '>' + $Date.ToString($fmt) } 'EqualTo' { return $Date.ToString($fmt) } 'Between' { if ($PSCmdlet.ParameterSetName -ne 'Range') { throw "The Between operator requires -RangeStart and -RangeEnd." } return '{' + $RangeStart.ToString($fmt) + ',' + $RangeEnd.ToString($fmt) + '}' } } } |