Public/Edit-AeriesStudentTest.ps1

function Edit-AeriesStudentTest
{
    <#
        .SYNOPSIS
        Update Test Score in Aeries

        .DESCRIPTION
        The Edit-AeriesStudentTest cmdlet is used to update Tests for a specific Student in Aeries

        .EXAMPLE
        Edit-AeriesStudentTest -StudentID 99400001 -TestID "ELPAC" -TestPart 0 -TestingAdministration "0322" -TestDate "2022-03-12" -Other 5
        This will edit the Test for the specific Student ID in Aeries with the given TestID, TestPart, TestingAdministration and TestDate
    #>


    [CmdletBinding()]
    param (
        [ValidateRange(1, [Int]::MaxValue)]
        [Parameter(Mandatory=$true)]
        [int]
        $StudentID,

        [ValidateLength(1, 6)]
        [Parameter(Mandatory=$true)]
        [string]
        $TestID,

        [ValidateRange(0, [Int16]::MaxValue)]
        [Parameter(Mandatory=$true)]
        [Int16]
        $TestPart,

        [ValidateLength(0, 6)]
        [Parameter(Mandatory=$false)]
        [string]
        $TestingAdministration = "",

        [Parameter(Mandatory=$true)]
        [datetime]
        $TestDate,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $RawScore = -1,

        [Parameter(Mandatory=$false)]
        [decimal]
        $PercentCorrect = -1,

        [ValidateRange(1, [int]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [int]
        $PerformanceLevel = -1,

        [ValidateLength(1, 3)]
        [Parameter(Mandatory=$false)]
        [string]
        $TestTypeCode,

        [ValidateLength(1, 3)]
        [Parameter(Mandatory=$false)]
        [string]
        $TestSourceCode,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $ScaleScore = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $Other = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $GradeEquivalency = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $Percentile = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $Stanine = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $CurveEquivalent = -1,

        [ValidateRange(1, [Int16]::MaxValue)]
        [Parameter(Mandatory=$false)]
        [Int16]
        $Rubric = -1
    )

    Begin {
        Write-Verbose -Message "Begin running $($MyInvocation.MyCommand)"

        $Method = "Post"
        $SuccessStatusCode = 200,201
        $Endpoint = "v5/testing/UpdateScores"
        $ContentType = "application/json"
        $Body = @{}
    }

    Process {
        $Body.StudentID = $StudentID
        $Body.TestID = $TestID
        $Body.TestPart = $TestPart
        $Body.TestingAdministration = $TestingAdministration
        $Body.TestDate = $TestDate.ToString("yyyy-MM-dd")

        If ($RawScore -gt -1) {
            $Body.RawScore = $RawScore
        }

        If ($PercentCorrect -gt -1) {
            $Body.PercentCorrect = $PercentCorrect
        }

        If ($PerformanceLevel -gt -1) {
            $Body.PerformanceLevel = $PerformanceLevel
        }

        If (![string]::IsNullOrWhiteSpace($TestTypeCode)) {
            $Body.TestTypeCode = $TestTypeCode
        }

        If (![string]::IsNullOrWhiteSpace($TestSourceCode)) {
            $Body.TestSourceCode = $TestSourceCode
        }

        If ($ScaleScore -gt -1) {
            $Body.ScaleScore = $ScaleScore
        }

        If ($Other -gt -1) {
            $Body.Other = $Other
        }

        If ($GradeEquivalency -gt -1) {
            $Body.GradeEquivalency = $GradeEquivalency
        }

        If ($Percentile -gt -1) {
            $Body.Percentile = $Percentile
        }

        If ($Stanine -gt -1) {
            $Body.Stanine = $Stanine
        }

        If ($CurveEquivalent -gt -1) {
            $Body.CurveEquivalent = $CurveEquivalent
        }

        If ($Rubric -gt -1) {
            $Body.Rubric = $Rubric
        }

        <# Turn the $Body variable into a JSON string for sending to the server #>
        $BodyJSON = ($Body | ConvertTo-Json -Compress)
        $BodyJSON = "[$BodyJSON]"

        $Result = (Invoke-AeriesApiCall -Method $Method -Endpoint $Endpoint -SuccessStatusCode $SuccessStatusCode -Body $BodyJSON -ContentType $ContentType)
    }

    End {
        Write-Verbose -Message "Finish running $($MyInvocation.MyCommand)"
        return $Result
    }
}