Private/Workbook/Write-TcSettingsSheet.ps1

function Write-TcSettingsSheet {
    <#
    .SYNOPSIS
    Writes the Settings tab: the project, its tenants, and the named lists behind the drop-down menus.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][hashtable]$Book
    )

    $theme = $Book['Theme']
    $plan = $Book['Plan']
    $meta = Get-TcProperty $plan 'meta'
    $tenants = @(Get-TcProperty $plan 'tenants' @())
    $sheet = Add-TcWorkbookSheet -Book $Book -Name 'Settings' -Title 'Settings' -Color $theme['Muted'] -Width 11 `
        -Subtitle 'The project, its tenants, and the lists behind the drop-down menus'

    $heading = {
        param([int]$Row, [string]$Text)
        Write-TcWorkbookValue -Sheet $sheet -Row $Row -Column 1 -Value $Text
        $sheet.Cells[$Row, 1].Style.Font.Bold = $true
        $sheet.Cells[$Row, 1].Style.Font.Size = 12
        $sheet.Cells[$Row, 1].Style.Font.Color.SetColor((ConvertTo-TcWorkbookColor $theme['Accent']))
    }

    & $heading 5 'Project'
    $row = 6
    foreach ($line in @(
            , @('Project', (Get-TcProperty $Book['Project'] 'name'))
            , @('Target state', (Get-TcProperty $meta 'targetState'))
            , @('Sources', [int](Get-TcProperty $meta 'sourceCount' 0))
            , @('Snapshot started', (Get-TcProperty $meta 'snapshotStarted'))
            , @('Snapshot finished', (Get-TcProperty $meta 'snapshotFinished'))
            , @('Module version', (Get-TcProperty $meta 'moduleVersion')))) {
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 1 -Value $line[0]
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 2 -Value $line[1]
        $sheet.Cells[$row, 2].Style.HorizontalAlignment = 'Left'
        $row++
    }

    $row++
    & $heading $row 'Tenants'
    $row++
    $headers = 'Role', 'Tenant', 'Primary domain', 'Wave'
    for ($c = 0; $c -lt $headers.Count; $c++) { Write-TcWorkbookValue -Sheet $sheet -Row $row -Column ($c + 1) -Value $headers[$c] }
    Add-TcWorkbookHeaderStyle -Book $Book -Sheet $sheet -Row $row -LastColumn $headers.Count
    foreach ($tenant in $tenants) {
        $row++
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 1 -Value $tenant['role']
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 2 -Value $tenant['displayName']
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 3 -Value (Get-TcProperty $tenant 'primaryDomain')
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column 4 -Value (Get-TcProperty $tenant 'wave')
        $swatch = $sheet.Cells[$row, 1]
        $swatch.Style.Fill.PatternType = 'Solid'
        $swatch.Style.Fill.BackgroundColor.SetColor((ConvertTo-TcWorkbookColor $theme['Roles'][$tenant['role']]))
        $swatch.Style.Font.Color.SetColor([System.Drawing.Color]::White)
        $swatch.Style.Font.Bold = $true
    }

    $moments = @(Get-TcProperty $meta 'moments' @('Now', 'Preparation', 'Before cutover', 'Cutover', 'After cutover', 'Closure'))
    $statuses = 'To do', 'In progress', 'Blocked', 'Done', 'Not applicable'
    $lists = [ordered]@{
        TcStatus         = $statuses
        TcStepStatus     = @($statuses) + 'To read'
        TcYesNo          = 'Yes', 'No'
        TcDecisionStatus = 'Open', 'Decided', 'Postponed'
        TcMatrixDecision = 'Create', 'Duplicate', 'Exclude', 'To review'
        TcViewTenant     = @('All') + @($tenants | ForEach-Object { $_['displayName'] }) + 'All tenants'
        TcViewMoment     = @('All') + $moments
        TcViewOwner      = 'All', 'Migration team', 'Customer', 'Migration team and Customer'
        TcViewState      = @('All', 'Open') + $statuses
        TcViewBlocking   = 'All', 'Blocking'
    }
    $team = @(Get-TcProperty $Book['Project'] 'team' @() | Where-Object { $_ })
    if ($team.Count) { $lists['TcTeam'] = $team }

    $row += 2
    & $heading $row 'Lists'
    $row++
    $column = 0
    foreach ($name in $lists.Keys) {
        $column++
        Write-TcWorkbookValue -Sheet $sheet -Row $row -Column $column -Value $name
        $values = @($lists[$name])
        for ($i = 0; $i -lt $values.Count; $i++) { Write-TcWorkbookValue -Sheet $sheet -Row ($row + 1 + $i) -Column $column -Value $values[$i] }
        [void]$Book['Package'].Workbook.Names.Add($name, $sheet.Cells[($row + 1), $column, ($row + $values.Count), $column])
    }
    Add-TcWorkbookHeaderStyle -Book $Book -Sheet $sheet -Row $row -LastColumn $column

    $Book['Lists'] = $lists
    for ($c = 1; $c -le [math]::Max($column, 4); $c++) { $sheet.Column($c).Width = if ($c -eq 2) { 32 } else { 20 } }
}