Public/Remove-LedgerDocument.ps1

<#
.SYNOPSIS
Removes a general supporting document from a fiscal year.

.DESCRIPTION
Deletes the specified file from a fiscal year's shared document directory.
If the directory becomes empty after removal, it is also deleted.

.PARAMETER JournalPath
The path to an existing journal directory. If omitted, uses the current journal.

.PARAMETER FiscalYear
The fiscal year identifier. If omitted, uses the latest fiscal year.
Accepts pipeline input from fiscal year objects.

.PARAMETER FileName
The name of the file to remove.

.EXAMPLE
Remove-LedgerDocument -FileName 'kontoutdrag-jan.pdf'

Removes kontoutdrag-jan.pdf from the latest fiscal year's documents.

.EXAMPLE
Get-LedgerDocument | Where-Object FileName -like '*.tmp' |
    ForEach-Object { Remove-LedgerDocument -FiscalYear $_.FiscalYear -FileName $_.FileName }

Removes all temporary documents from the latest fiscal year.
#>

function Remove-LedgerDocument {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter()]
        [string]$JournalPath,

        [Parameter(ValueFromPipelineByPropertyName)]
        [string]$FiscalYear,

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [string]$FileName
    )

    process {
        $JournalPath = Resolve-LedgerJournalPath -JournalPath $JournalPath -SchemaCheck Write
        $FiscalYear = Resolve-LedgerFiscalYear -FiscalYear $FiscalYear -JournalPath $JournalPath

        $YearDir = Join-Path $JournalPath $FiscalYear
        if (-not (Test-Path $YearDir -PathType Container)) {
            throw "Fiscal year not found: $FiscalYear"
        }

        $FileName = Assert-LedgerSafeLeafName -Name $FileName -Kind 'document'

        $docDir = Join-Path $YearDir 'documents'
        if (-not (Test-Path $docDir -PathType Container)) {
            throw "No documents found for fiscal year $FiscalYear."
        }

        $filePath = Join-Path $docDir $FileName
        if (-not (Test-Path $filePath -PathType Leaf)) {
            throw "Document not found: $FileName"
        }

        if ($PSCmdlet.ShouldProcess($filePath, 'Remove document')) {
            Remove-Item -Path $filePath -Force

            # Remove directory if empty
            $remaining = Get-ChildItem -Path $docDir -File
            if (-not $remaining) {
                Remove-Item -Path $docDir -Force
            }
        }
    }
}