Public/Get-ADPOrgStructure.ps1

function Get-ADPOrgStructure {
    <#
    .SYNOPSIS
        Get a user's Division and Department from ADP

    .DESCRIPTION
        Get a user's Division and Department from ADP

    .PARAMETER ADPObject
        Object which holds the Division and Department

    .EXAMPLE
        Input Object: ADP Object
        Return Object: {division, department, combined}

    .NOTES
        This is used when passing the full adp worker object from ADP's APID

    .FUNCTIONALITY
        Powershell Language
    #>

    [CmdletBinding()]
    param (
        [Parameter( Mandatory = $true,
            Position = 0,
            ValueFromPipeline = $true
        )]
        $ADPObject
    )

    $codes = [PSCustomObject]@{
        201 = [PSCustomObject]@{
            division = "Revenue"
            department = "Customer Success"
        }
        204 = [PSCustomObject]@{
            division = "Revenue"
            department = "Customer Success"
        }
        205 = [PSCustomObject]@{
            division = "Revenue"
            department = "Customer Support"
        }
        206 = [PSCustomObject]@{
            division = "Revenue"
            department = "Customer Success"
        }
        209 = [PSCustomObject]@{
            division = "Revenue"
            department = "Customer Success"
        }
        502 = [PSCustomObject]@{
            division = "Engineering"
            department = "QA"
        }
        503 = [PSCustomObject]@{
            division = "Engineering"
            department = "Project Management"
        }
        506 = [PSCustomObject]@{
            division = "Engineering"
            department = "Data & Strategy"
        }
        507 = [PSCustomObject]@{
            division = "Engineering"
            department = "Development"
        }
        508 = [PSCustomObject]@{
            division = "Engineering"
            department = "InfoSec"
        }
        509 = [PSCustomObject]@{
            division = "Engineering"
            department = "Development"
        }
        601 = [PSCustomObject]@{
            division = "Product"
            department = "Design"
        }
        602 = [PSCustomObject]@{
            division = "Product"
            department = "Design"
        }
        603 = [PSCustomObject]@{
            division = "Product"
            department = "Design"
        }
        701 = [PSCustomObject]@{
            division = "Revenue"
            department = "Sales"
        }
        702 = [PSCustomObject]@{
            division = "Revenue"
            department = "Sales"
        }
        705 = [PSCustomObject]@{
            division = "Revenue"
            department = "Partnerships"
        }
        706 = [PSCustomObject]@{
            division = "Revenue"
            department = "Services"
        }
        707 = [PSCustomObject]@{
            division = "Revenue"
            department = "Pre-Sales"
        }
        710 = [PSCustomObject]@{
            division = "Revenue"
            department = "Business Development"
        }
        711 = [PSCustomObject]@{
            division = "Revenue"
            department = "Operations"
        }
        801 = [PSCustomObject]@{
            division = "Marketing"
            department = "Demand Generation"
        }
        804 = [PSCustomObject]@{
            division = "Marketing"
            department = "Product"
        }
        806 = [PSCustomObject]@{
            division = "Marketing"
            department = "Solutions"
        }
        807 = [PSCustomObject]@{
            division = "Marketing"
            department = "Design"
        }
        808 = [PSCustomObject]@{
            division = "Marketing"
            department = "Syndication"
        }
        901 = [PSCustomObject]@{
            division = "Finance"
            department = "Finance"
        }
        902 = [PSCustomObject]@{
            division = "Executive"
            department = "Office of the CEO"
        }

        905 = [PSCustomObject]@{
            division = "People"
            department = "Operations"
        }
        906 = [PSCustomObject]@{
            division = "People"
            department = "Talent"
        }
        907 = [PSCustomObject]@{
            division = "Operations"
            department = "IT"
        }
        908 = [PSCustomObject]@{
            division = "Operations"
            department = "Legal"
        }
        910 = [PSCustomObject]@{
            division = "Engineering"
            department = "Project Management"
        }
        911 = [PSCustomObject]@{
            division = "Engineering"
            department = "InfoSec"
        }
    }

    $localOrgStructure = [PSCustomObject]@{
        division   = $null;
        department = $null;
        combined   = $null;
    }
    $localTitle = ($ADPObject | Get-ADPTitle ).ToLower()

    $orgCode = $null
    $leadershipCode = $null

    try {
        $orgCode = ($ADPObject.workAssignments | Where-Object { $_.primaryIndicator }).assignedOrganizationalUnits[1].nameCode.codeValue.Remove(0,3)
        $orgCode = ( $orgCode | Get-ValidADPReturn )
    }
    catch {}

    try {
        $leadershipCode = ($ADPObject.customFieldGroup.codeFields | Where-Object { $_.nameCode.codeValue -eq "Leadership Team" }).codeValue
        $leadershipCode = ($leadershipCode | Get-ValidADPReturn)
    }
    catch {}

    $localOrgStructure.division = $codes.$orgCode.division
    
    #fix slt
    if ($leadershipCode -eq "SLT" -and $localOrgStructure.division -ne "Executive") {
        $localOrgStructure.department = $localOrgStructure.division
        $localOrgStructure.division = "Executive"
    } else {
        $localOrgStructure.department = $codes.$orgCode.department
    }

    #fix one offs
    switch ($localOrgStructure.division) {
        "Finance" {
            switch -wildcard ($localTitle) {
                "*fp&a*" { $localOrgStructure.department = "FP&A"; break }
                "*Accounting*" { $localOrgStructure.department = "Accounting"; break }
                Default {}
            }
        }
        "Engineering" {
            switch -wildcard ($localTitle) {
                "*site reliability*" { $localOrgStructure.department = "Platform"; break }
                "*cloud*" { $localOrgStructure.department = "Platform"; break }
                Default {}
            }
        }
        Default {}
    }

    $localOrgStructure.combined = "$($localOrgStructure.division) | $($localOrgStructure.department)"

    $localOrgStructure.division = ( $localOrgStructure.division | Get-ValidADPReturn )
    $localOrgStructure.department = ( $localOrgStructure.department | Get-ValidADPReturn )
    $localOrgStructure.combined = ( $localOrgStructure.combined | Get-ValidADPReturn )

    return $localOrgStructure
}