Public/Export-Transfer.ps1

function Export-Transfer {
    <#
    .SYNOPSIS
        Exports transfers to a file.
 
    .DESCRIPTION
        Exports one or all transfers from a budget to CSV or JSON format.
 
    .PARAMETER OutputPath
        The file path for the export. Extension determines format (.csv or .json).
 
    .PARAMETER Name
        Optional transfer name to export. If omitted, exports all transfers.
 
    .PARAMETER Format
        Output format: CSV or JSON. If not specified, determined by file extension.
 
    .PARAMETER Budget
        Optional budget name to target. Uses active budget if not specified.
 
    .PARAMETER DataPath
        Optional custom path for data storage. Overrides budget-based paths.
 
    .EXAMPLE
        Export-Transfer -OutputPath "transfers.csv"
 
        Exports all transfers to a CSV file.
 
    .EXAMPLE
        Export-Transfer -Name "Savings" -OutputPath "savings-transfer.json"
 
        Exports a specific transfer to JSON format.
 
    .EXAMPLE
        Export-Transfer -OutputPath "C:\Backups\transfers.json" -Format JSON -Budget "MyPersonalBudget"
 
        Exports all transfers from a specific budget to JSON.
 
    .OUTPUTS
        File path of the exported data
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$OutputPath,

        [Parameter()]
        [string]$Name,

        [Parameter()]
        [ValidateSet('CSV', 'JSON')]
        [string]$Format,

        [Parameter()]
        [string]$Budget,

        [Parameter()]
        [string]$DataPath
    )

    # Get transfers
    $getParams = @{}
    if ($Name) { $getParams['Name'] = $Name }
    if ($Budget) { $getParams['Budget'] = $Budget }
    if ($DataPath) { $getParams['DataPath'] = $DataPath }

    $transfers = Get-Transfer @getParams

    if (-not $transfers -or $transfers.Count -eq 0) {
        Write-Warning "No transfers found to export."
        return
    }

    # Calculate annual amount for each transfer using helper
    $transfersWithAnnual = $transfers | ForEach-Object {
        $annualAmount = Get-CalculatedAmount -Amount $_.Amount -Frequency $_.Frequency -TargetPeriod Annual
        $_ | Add-Member -NotePropertyName 'AnnualAmount' -NotePropertyValue $annualAmount -PassThru
    }

    # Build export parameters
    $exportParams = @{
        Data = $transfersWithAnnual
        OutputPath = $OutputPath
        Properties = @('Id', 'Name', 'StartDate', 'Frequency', 'Amount', 'AnnualAmount', 'FromAccountId', 'ToAccountId')
        EntityType = 'transfer'
    }
    if ($Format) { $exportParams['Format'] = $Format }

    # Use helper for export
    return Export-EntityData @exportParams
}