Public/ImportBatches.ps1


#Import Batches
Function Get-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][PSObject]$TMSession = 'Default',
        [Parameter(Mandatory = $false)][int]$BatchId
    )

    ## Get Session Configuration
    $TMSession = Get-TMSession $TMSession
    if (-not $TMSession) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    $TMCertSettings = @{SkipCertificateCheck = $TMSession.AllowInsecureSSL }


    ## Construct the server URI
    $Instance = $TMSession.TMServer.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')

    ## Handle the URL Creation based on the TM Version
    if ($TMSession.TMVersion.Major -eq 4) {
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    }
    elseif ($TMSession.TMVersion.Major -eq 5) {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    } else {
        $uri = "https://$Instance/tdstm/ws/import/batches"
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSession.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    } catch {
        throw $_
    }
}

#Import Batch Records
Function Get-TMImportBatchRecord {
    param(
        [Parameter(Mandatory = $false)][PSObject]$TMSession = 'Default',
        [Parameter(Mandatory = $true)][int]$BatchId,
        [Parameter(Mandatory = $false)][int]$RecordId
    )
    ## Get Session Configuration
    $TMSession = Get-TMSession $TMSession
    if (-not $TMSession) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    #Honor SSL Settings
    $TMCertSettings = @{SkipCertificateCheck = $TMSession.AllowInsecureSSL }


    ## Construct the server URI
    $Instance = $TMSession.TMServer.Replace('/tdstm', '')
    $instance = $instance.Replace('https://', '')
    $instance = $instance.Replace('http://', '')

    ## Check version 4
    if ($TMSession.TMVersion -like '4*') {

        ## TODO Get the 4.7 Web Service URI for this
        $uri = "https://$Instance/tdstm/module/importbatch/$($BatchId ? $BatchId : "list")"
    } else {
        if (-not $RecordId) {

            ## Get a List of the records if no specific record was requested
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/records"
        } else {
            ## Get a specific record
            $uri = "https://$Instance/tdstm/ws/import/batch/$($BatchId)/record/$($RecordId)"

        }
    }

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Get -Uri $uri -WebSession $TMSession.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = ($response.Content | ConvertFrom-Json).data
        }
        return @($Result)
    } catch {
        throw $_
    }
}


Function Start-TMImportBatch {
    param(
        [Parameter(Mandatory = $false)][PSObject]$TMSession = 'Default',
        [Parameter(Mandatory = $true)][int[]]$BatchId
    )

    ## Get Session Configuration
    $TMSession = Get-TMSession $TMSession
    if (-not $TMSession) {
        Write-Host 'TMSession: [' -NoNewline
        Write-Host $TMSession -ForegroundColor Cyan
        Write-Host '] was not Found. Please use the New-TMSession command.'
        Throw "TM Session Not Found. Use New-TMSession command before using features."
    }

    ## Construct the server URI
    $uri = "https://$($TMSession.TMServer)/tdstm/ws/import/batches"

    $PatchBody = @{
        action = "QUEUE"
        ids    = $BatchId
    } | ConvertTo-Json

    ## Attempt the Request
    try {
        $response = Invoke-WebRequest -Method Patch -Body $PatchBody -Uri $uri -WebSession $TMSession.TMWebSession @TMCertSettings
        if ($response.StatusCode -eq 200) {
            $Result = $response.Content | ConvertFrom-Json
            if ($Result.status -ne 'Success') {
                throw $Result.errors
            }
        }
    } catch {
        throw $_
    }
}