Public/Set-PatientStatus.ps1

<#
    .SYNOPSIS
    Sets the patient status.

    .DESCRIPTION
    Sets a patient status.

    .INPUTS
    A PSCustomObject that is the patient.

    .INPUTS
    None

    .OUTPUTS
    None.

    .PARAMETER Patient
    The Patient PSCustomObject.

    .PARAMETER Status
    The status to set on the Patient

    .NOTES
    You must ensure that a calendar exists if the status is anything other than 'Pending - Activation'

    .LINK
    Get-Patients
#>

function Set-PatientStatus {

    [CmdletBinding()]
    [OutputType([System.Void])]
    param(
        [Parameter(Mandatory, Position = 0, ValueFromPipeline)]
        [ValidateNotNullOrEmpty()]
        [PSCustomObject]
        $Patient,

        [Parameter(Mandatory, Position = 1)]
        [ValidateSet("Pending - Activation", "Active", "Suspended", "Pending - Removal", "Removed")]
        [String]
        $Status
    )
    begin {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started"
    }

    end {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete"
    }

    process {
        Write-Debug "[$($MyInvocation.MyCommand.Name)] PSBoundParameters: $($PSBoundParameters | Out-String)"
        $body = [PSCustomObject]@{ phecc__Status__c = $Status }
        $json = ConvertTo-Json $body -Depth 100
        Invoke-SfApi -Path "/sobjects/phecc__Patient__c/$($Patient.sfPatient.Id)" -Method Patch -Body $json | Out-Null
    }
}