Public/Setup/Dropdowns/Management/Get-GlpiToolsDropdownsBussinessCriticities.ps1

<#
.SYNOPSIS
    Function is getting Bussiness Criticities informations from GLPI
.DESCRIPTION
    Function is based on BussinessCriticityId which you can find in GLPI website
    Returns object with property's of Bussiness Criticities
.PARAMETER All
    This parameter will return all Bussiness Criticities from GLPI
.PARAMETER BussinessCriticityId
    This parameter can take pipeline input, either, you can use this function with -BussinessCriticityId keyword.
    Provide to this param BussinessCriticityId from GLPI Bussiness Criticities Bookmark
.PARAMETER Raw
    Parameter which you can use with BussinessCriticityId Parameter.
    BussinessCriticityId has converted parameters from default, parameter Raw allows not convert this parameters.
.PARAMETER BussinessCriticityName
    This parameter can take pipeline input, either, you can use this function with -BussinessCriticityId keyword.
    Provide to this param Bussiness Criticities Name from GLPI Bussiness Criticities Bookmark
.EXAMPLE
    PS C:\> Get-GlpiToolsDropdownsBussinessCriticities -All
    Example will return all Bussiness Criticities from Glpi
.EXAMPLE
    PS C:\> 326 | Get-GlpiToolsDropdownsBussinessCriticities
    Function gets BussinessCriticityId from GLPI from pipeline, and return Bussiness Criticities object
.EXAMPLE
    PS C:\> 326, 321 | Get-GlpiToolsDropdownsBussinessCriticities
    Function gets BussinessCriticityId from GLPI from pipeline (u can pass many ID's like that), and return Bussiness Criticities object
.EXAMPLE
    PS C:\> Get-GlpiToolsDropdownsBussinessCriticities -BussinessCriticityId 326
    Function gets BussinessCriticityId from GLPI which is provided through -BussinessCriticityId after Function type, and return Bussiness Criticities object
.EXAMPLE
    PS C:\> Get-GlpiToolsDropdownsBussinessCriticities -BussinessCriticityId 326, 321
    Function gets Bussiness Criticities Id from GLPI which is provided through -BussinessCriticityId keyword after Function type (u can provide many ID's like that), and return Bussiness Criticities object
.EXAMPLE
    PS C:\> Get-GlpiToolsDropdownsBussinessCriticities -BussinessCriticityName Fusion
    Example will return glpi Bussiness Criticities, but what is the most important, Bussiness Criticities will be shown exactly as you see in glpi dropdown Bussiness Criticities.
    If you want to add parameter, you have to modify "default items to show". This is the "key/tool" icon near search.
.INPUTS
    Bussiness Criticities ID which you can find in GLPI, or use this Function to convert ID returned from other Functions
.OUTPUTS
    Function returns PSCustomObject with property's of Bussiness Criticities from GLPI
.NOTES
    PSP 09/2019
#>


function Get-GlpiToolsDropdownsBussinessCriticities {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $false,
            ParameterSetName = "All")]
        [switch]$All,
        [parameter(Mandatory = $true,
            ValueFromPipeline = $true,
            ParameterSetName = "BussinessCriticityId")]
        [alias('BCID')]
        [string[]]$BussinessCriticityId,
        [parameter(Mandatory = $false,
            ParameterSetName = "BussinessCriticityId")]
        [switch]$Raw,
        
        [parameter(Mandatory = $true,
            ParameterSetName = "BussinessCriticityName")]
        [alias('BCN')]
        [string]$BussinessCriticityName
    )
    
    begin {
        $SessionToken = $Script:SessionToken    
        $AppToken = $Script:AppToken
        $PathToGlpi = $Script:PathToGlpi

        $SessionToken = Set-GlpiToolsInitSession | Select-Object -ExpandProperty SessionToken
        $AppToken = Get-GlpiToolsConfig | Select-Object -ExpandProperty AppToken
        $PathToGlpi = Get-GlpiToolsConfig | Select-Object -ExpandProperty PathToGlpi

        $ChoosenParam = ($PSCmdlet.MyInvocation.BoundParameters).Keys

        $BussinessCriticitiesArray = [System.Collections.Generic.List[PSObject]]::New()
    }
    
    process {
        switch ($ChoosenParam) {
            All { 
                $params = @{
                    headers = @{
                        'Content-Type'  = 'application/json'
                        'App-Token'     = $AppToken
                        'Session-Token' = $SessionToken
                    }
                    method  = 'get'
                    uri     = "$($PathToGlpi)/businesscriticity/?range=0-9999999999999"
                }
                
                $BussinessCriticitiesAll = Invoke-RestMethod @params -Verbose:$false

                foreach ($BussinessCriticity in $BussinessCriticitiesAll) {
                    $BussinessCriticityHash = [ordered]@{ }
                    $BussinessCriticityProperties = $BussinessCriticity.PSObject.Properties | Select-Object -Property Name, Value 
                                
                    foreach ($BussinessCriticityProp in $BussinessCriticityProperties) {
                        $BussinessCriticityHash.Add($BussinessCriticityProp.Name, $BussinessCriticityProp.Value)
                    }
                    $object = [pscustomobject]$BussinessCriticityHash
                    $BussinessCriticitiesArray.Add($object)
                }
                $BussinessCriticitiesArray
                $BussinessCriticitiesArray = [System.Collections.Generic.List[PSObject]]::New()
            }
            BussinessCriticityId { 
                foreach ( $BCId in $BussinessCriticityId ) {
                    $params = @{
                        headers = @{
                            'Content-Type'  = 'application/json'
                            'App-Token'     = $AppToken
                            'Session-Token' = $SessionToken
                        }
                        method  = 'get'
                        uri     = "$($PathToGlpi)/businesscriticity/$($BCId)"
                    }

                    Try {
                        $BussinessCriticity = Invoke-RestMethod @params -ErrorAction Stop

                        if ($Raw) {
                            $BussinessCriticityHash = [ordered]@{ }
                            $BussinessCriticityProperties = $BussinessCriticity.PSObject.Properties | Select-Object -Property Name, Value 
                                
                            foreach ($BussinessCriticityProp in $BussinessCriticityProperties) {
                                $BussinessCriticityHash.Add($BussinessCriticityProp.Name, $BussinessCriticityProp.Value)
                            }
                            $object = [pscustomobject]$BussinessCriticityHash
                            $BussinessCriticitiesArray.Add($object)
                        } else {
                            $BussinessCriticityHash = [ordered]@{ }
                            $BussinessCriticityProperties = $BussinessCriticity.PSObject.Properties | Select-Object -Property Name, Value 
                                
                            foreach ($BussinessCriticityProp in $BussinessCriticityProperties) {

                                $BussinessCriticityPropNewValue = Get-GlpiToolsParameters -Parameter $BussinessCriticityProp.Name -Value $BussinessCriticityProp.Value

                                $BussinessCriticityHash.Add($BussinessCriticityProp.Name, $BussinessCriticityPropNewValue)
                            }
                            $object = [pscustomobject]$BussinessCriticityHash
                            $BussinessCriticitiesArray.Add($object)
                        }
                    } Catch {

                        Write-Verbose -Message "Bussiness Criticity ID = $BCId is not found"
                        
                    }
                    $BussinessCriticitiesArray
                    $BussinessCriticitiesArray = [System.Collections.Generic.List[PSObject]]::New()
                }
            }
            BussinessCriticityName { 
                Search-GlpiToolsItems -SearchFor businesscriticity -SearchType contains -SearchValue $BussinessCriticityName
            } 
            Default { }
        }
    }
    
    end {
        Set-GlpiToolsKillSession -SessionToken $SessionToken
    }
}