Functions/BusinessLayer/ProfitCenter.ps1

<#
Functions for the ProfitCenter table - one of OIM's three organizational-unit types
alongside Department and Locality (see Department.ps1 / Locality.ps1). If your OIM
instance has a genuinely custom "Org" table, this file is a direct template for it -
every table involved (ProfitCenter/UID_ProfitCenter/ParentProfitCenter) would just be
renamed.
#>


function Get-OIMProfitCenter {
    <#
    .SYNOPSIS
    Gets one or more ProfitCenter objects.

    .EXAMPLE
    Get-OIMProfitCenter -ShortName CC100

    .EXAMPLE
    Get-OIMProfitCenter -id $uid
    #>

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

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

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

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

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

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

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

    Get-OIMObject @getParams
}

function New-OIMProfitCenter {
    <#
    .SYNOPSIS
    Creates a ProfitCenter object.

    .PARAMETER ParentProfitCenter
    A ProfitCenter object (as returned by Get-OIMProfitCenter) or UID string to nest this one under.

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

    .EXAMPLE
    New-OIMProfitCenter -ShortName CC100 -AccountNumber 100
    #>

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

        [Parameter(Mandatory = $true)]
        [string]$AccountNumber,

        $ParentProfitCenter,

        [hashtable]$Properties = @{},

        [switch]$checkexists
    )

    if ($checkexists) {
        $existing = Get-OIMProfitCenter -ShortName $ShortName
        if ($null -ne $existing) { return $existing }
    }

    $allProperties = @{ ShortName = $ShortName }
    if ($PSBoundParameters.ContainsKey('AccountNumber')) { $allProperties['AccountNumber'] = $AccountNumber }
    if ($PSBoundParameters.ContainsKey('ParentProfitCenter')) { $allProperties['UID_ParentProfitCenter'] = ConvertTo-OIMUID -InputObject $ParentProfitCenter -PropertyName UID_ProfitCenter }
    foreach ($key in $Properties.Keys) { $allProperties[$key] = $Properties[$key] }

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

function Set-OIMProfitCenter {
    <#
    .SYNOPSIS
    Updates properties on one or more ProfitCenter objects.

    .EXAMPLE
    Get-OIMProfitCenter -ShortName CC100 | Set-OIMProfitCenter -Properties @{AccountNumber = '101'}
    #>

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

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

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

function Remove-OIMProfitCenter {
    <#
    .SYNOPSIS
    Removes one or more ProfitCenter objects.

    .EXAMPLE
    Get-OIMProfitCenter -ShortName CC100 | Remove-OIMProfitCenter
    #>

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

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