Functions/BusinessLayer/Department.ps1

function Get-OIMDepartment {
    <#
    .SYNOPSIS
    Gets one or more Department objects.

    .EXAMPLE
    Get-OIMDepartment -DepartmentName 'Finance'

    .EXAMPLE
    Get-OIMDepartment -id $uid
    #>

    [CmdletBinding(DefaultParameterSetName = 'Search')]
    param(
        [Parameter(ParameterSetName = 'Single', Mandatory = $true)]
        [Alias('uid')]
        [string]$id,

        [Parameter(ParameterSetName = 'Search')]
        [string]$DepartmentName,

        [Parameter(ParameterSetName = 'Search')]
        [string]$Where,

        [Parameter(ParameterSetName = 'Search')]
        [int]$First
    )

    if ($PSCmdlet.ParameterSetName -eq 'Single') {
        Get-OIMObject -ObjectName Department -id $id
        return
    }

    $conditions = [Collections.Generic.List[string]]::new()
    if ($PSBoundParameters.ContainsKey('DepartmentName')) { $conditions.Add("DepartmentName = '$($DepartmentName | ConvertTo-SQLLiteral)'") }
    if ($PSBoundParameters.ContainsKey('Where')) { $conditions.Add("($Where)") }

    $getParams = @{ ObjectName = 'Department' }
    if ($conditions.Count -gt 0) { $getParams['Where'] = $conditions -join ' AND ' }
    if ($PSBoundParameters.ContainsKey('First')) { $getParams['First'] = $First }

    Get-OIMObject @getParams
}

function New-OIMDepartment {
    <#
    .SYNOPSIS
    Creates a Department object.

    .PARAMETER ParentDepartment
    A Department object (as returned by Get-OIMDepartment) or UID string to nest this department under.

    .PARAMETER checkexists
    If a Department with the given -DepartmentName already exists, return it instead of creating a duplicate.

    .EXAMPLE
    New-OIMDepartment -DepartmentName 'Finance' -ShortName FIN
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory = $true)]
        [string]$DepartmentName,

        [string]$ShortName,

        $ParentDepartment,

        [hashtable]$Properties = @{},

        [switch]$checkexists
    )

    if ($checkexists) {
        $existing = Get-OIMDepartment -DepartmentName $DepartmentName
        if ($null -ne $existing) { return $existing }
    }

    $allProperties = @{ DepartmentName = $DepartmentName }
    if ($PSBoundParameters.ContainsKey('ShortName')) { $allProperties['ShortName'] = $ShortName }
    if ($PSBoundParameters.ContainsKey('ParentDepartment')) { $allProperties['UID_ParentDepartment'] = ConvertTo-OIMUID -InputObject $ParentDepartment -PropertyName UID_Department }
    foreach ($key in $Properties.Keys) { $allProperties[$key] = $Properties[$key] }

    if ($PSCmdlet.ShouldProcess($DepartmentName, 'Create Department')) {
        New-OIMObject -ObjectName Department -Properties $allProperties -Confirm:$false
    }
}

function Set-OIMDepartment {
    <#
    .SYNOPSIS
    Updates properties on one or more Department objects.

    .EXAMPLE
    Get-OIMDepartment -DepartmentName Finance | Set-OIMDepartment -Properties @{ShortName = 'FIN'}
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Object,

        [Parameter(Mandatory = $true)]
        [hashtable]$Properties
    )

    Process {
        if ($PSCmdlet.ShouldProcess("$($Object.UID_Department)", 'Update Department')) {
            $Object | Set-OIMObject -Properties $Properties -Confirm:$false
        }
    }
}

function Remove-OIMDepartment {
    <#
    .SYNOPSIS
    Removes one or more Department objects.

    .EXAMPLE
    Get-OIMDepartment -DepartmentName Finance | Remove-OIMDepartment
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $Object
    )

    Process {
        if ($PSCmdlet.ShouldProcess("$($Object.UID_Department)", 'Remove Department')) {
            $Object | Remove-OIMObject -Confirm:$false
        }
    }
}