Public/HFAssignment/Get-HFAssignment.ps1
function Get-HFAssignment { [CmdletBinding()] Param ( [Parameter(Mandatory = $false, Position = 0)] [int]$Id, [Parameter(Mandatory = $false)] [datetime]$StartDate = (Get-Date), [Parameter(Mandatory = $false)] [datetime]$EndDate = ((Get-Date).AddDays(180)) ) #TODO allow user to specify more than 180 days and do multiple pulls BEGIN { $VerbosePrefix = "Get-HFAssignment:" $TimeSpan = New-TimeSpan -Start $StartDate -End $EndDate $TotalDays = $TimeSpan.Days + 1 $Global:testdays = $TotalDays $QueryString = @{} $QueryString.state = 'active' $QueryString.start_date = (Get-Date -Date $StartDate -Format 'yyyy-MM-dd').ToString() $QueryString.end_date = (Get-Date -Date $EndDate -Format 'yyyy-MM-dd').ToString() $QueryString = $global:HFServer.createQueryString($QueryString) $ReturnObject = @() } PROCESS { if ($TotalDays -gt 180) { $DaysLeft = $TotalDays $ThisStartDate = $StartDate $ThisEndDate = $StartDate.AddDays(179) <# do { Write-Verbose "$VerbosePrefix DaysLeft: $DaysLeft" $DaysLeft -= 180 $ReturnObject += Get-HFAssignment -StartDate $ThisStartDate -EndDate $ThisEndDate $ThisStartDate = $ThisEndDate.AddDays(1) if ($DaysLeft -lt 180) { $ThisEndDate = $ThisStartDate.AddDays($DaysLeft) } else { $ThisEndDate = $ThisStartDate.AddDays(180) } } while ($DaysLeft -gt 0) #> do { Write-Verbose "$VerbosePrefix DaysLeft: $DaysLeft, $ThisStartDate - $ThisEndDate" $ReturnObject += Get-HFAssignment -StartDate $ThisStartDate -EndDate $ThisEndDate -Verbose:$false $DaysLeft -= 179 $ThisStartDate = $ThisEndDate.AddDays(1) if ($DaysLeft -lt 180) { $ThisEndDate = $EndDate } else { $ThisEndDate = $ThisStartDate.AddDays(180) } } while ( $DaysLeft -gt 0 ) } else { $ApiParams = @{} $ApiParams.UriPath = 'assignments' if ($Id) { $ApiParams.UriPath += '/' + $Id } else { $ApiParams.UriPath += $QueryString } $Response = Invoke-HfApiQuery @ApiParams if ($Response.assignment) { $Response = $Response.assignment } else { $Response = $Response.assignments } foreach ($r in $Response) { $Params = @{} $Params.AllocationInSeconds = $r.allocation $Params.ProjectId = $r.project_id $Params.StartDate = $r.start_date $Params.EndDate = $r.end_date if ($r.person_id) { $Params.PersonId = $r.person_id } elseif ($r.placeholder_id) { $Params.PlaceholderId = $r.placeholder_id } else { $Params.Everyone = $true } Write-Verbose "$VerbosePrefix $($r.id): PersonId: $($Params.PersonId), PlaceholderId: $($Params.PlaceholderId)" $ThisObject = New-HFAssignment @Params $ThisObject.FullData = $r $ThisObject.Id = $r.id $ThisObject.Notes = $r.notes $ThisObject.UpdatedAt = $r.updated_at $ThisObject.UpdateById = $r.updated_by_id $ThisObject.RepeatedAssignmentSetId = $r.repeated_assignment_set_id $ThisObject.ActiveOnDaysOff = $r.active_on_days_off $ReturnObject += $ThisObject } } } END { $ReturnObject } } |