Public/New-PatientDeviceNeedsCsv.ps1

<#
    .SYNOPSIS
    Create a new CSV file that contains new patient device needs.

    .DESCRIPTION
    The patient device needs

    .INPUTS
    None. You cannot pipe objects to New-PatientDeviceNeedsCs.

    .OUTPUTS
    The file name if there are new needs or $null.

    If created, the CSV file create will contain the following columns:
        FamilyName
        GivenName
        Needs
        DeliveryChannel
        TierOfService
        Preferences
        MRN
        City
        State
        Address
        PostalCode
        District
        Country
        HomePhone
        MobilePhone
        CdrId

    .PARAMETER Folder
    The folder to place the needs file.

    .LINK

    .NOTES
    The file name will be created in yyyy-MM-dd-hhmmss format
#>

function New-PatientDeviceNeedsCsv {

    [CmdletBinding()]
    [OutputType([String])]
    param(
        [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline)]
        [ValidateNotNullOrEmpty()]
        [String]
        $Folder = "./temp",

        [Parameter(Mandatory = $false, Position = 1)]
        [ValidateNotNull()]
        [PSCustomObject]
        $Def
    )

    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)"
        New-Item -ItemType Directory -Force -Path $Folder | Out-Null
        if (-not $PSBoundParameters.ContainsKey('Def')) {
            $Def = Get-MetricDefinitions
        }
        $File = Join-Path -Path $Folder -ChildPath "$(Get-Date -f 'yyyy-MM-dd-hhmmss').csv"
        # Only retrieve the statuses of 'Active' and 'Pending - Activation'
        $patients = @(Get-Patients -Status "Active") + @(Get-Patients -Status "Pending - Activation")
        $needs = Get-NewPatientDeviceNeeds -Def $Def -Folder $Folder -Patients $patients
        if ($needs) {
            Write-Information "$(Get-Date -f 'hh:mm:ss') Found $($needs.length) new device need(s)"
            $needs | Select-Object -Property Site, FamilyName, GivenName, Needs, DeliveryChannel, TierOfService, Preferences, MRN, City, State, Address, PostalCode, District, Country, HomePhone, MobilePhone, CdrId | Export-Csv -Path $File -NoTypeInformation | Out-Null
            Write-Output $File
        }
    }
}