Заявление на увольнение (#15)
Tests / frontend-test (push) Successful in 1m17s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/15
This commit was merged in pull request #15.
This commit is contained in:
2026-08-26 07:07:03 +00:00
parent f751f03060
commit df29d080ed
39 changed files with 2460 additions and 46 deletions
+35 -16
View File
@@ -4,11 +4,14 @@
по манифестам provisioning.json (единый источник правды по колонкам).
.DESCRIPTION
Обходит ВСЕ манифесты forms/**/provisioning.json (в т.ч. подпапки approval/) и для
каждого:
1) создаёт список (если его ещё нет);
2) при необходимости переименовывает колонку Title;
3) обеспечивает колонки.
Обходит ВСЕ манифесты forms/**/provisioning.json (в т.ч. подпапки approval/)
ДВУМЯ проходами:
1) создаёт ВСЕ списки (которых ещё нет);
2) по каждому манифесту: при необходимости переименовывает колонку Title и
обеспечивает колонки.
Проходы разделены из-за Lookup'ов между формами: список-источник должен
существовать раньше колонки, а при перекрёстных ссылках (две формы ссылаются
друг на друга) одним проходом это недостижимо ни при каком порядке обхода.
Имена списков НУМЕРОВАННЫЕ: «<Форма> <N> — данные» / «<Форма> <N> — согласование».
Номер собирает сам скрипт из имени в манифесте (см. Get-NumberedListTitle) — в
@@ -170,6 +173,7 @@ function Ensure-SiteColumn {
}
'Choice' { Add-PnPField -InternalName $Col.internalName -DisplayName $Col.title -Type Choice -Choices $Col.choices -Group $g | Out-Null }
'Number' { Add-PnPField -InternalName $Col.internalName -DisplayName $Col.title -Type Number -Group $g | Out-Null }
'Url' { Add-PnPField -InternalName $Col.internalName -DisplayName $Col.title -Type URL -Group $g | Out-Null }
default { throw "Неизвестный тип столбца сайта '$($Col.type)'" }
}
Write-Host " [+эталон] $($Col.internalName) — «$($Col.title)» [$($Col.type)]" -ForegroundColor Green
@@ -214,6 +218,7 @@ function Add-ListColumn {
}
}
'Choice' { Add-PnPField -List $List -InternalName $Col.internalName -DisplayName $Col.title -Type Choice -Choices $Col.choices -AddToDefaultView | Out-Null }
'Url' { Add-PnPField -List $List -InternalName $Col.internalName -DisplayName $Col.title -Type URL -AddToDefaultView | Out-Null }
'Number' {
if ($null -ne $Col.decimals) {
$xml = "<Field Type='Number' DisplayName='$(ConvertTo-XmlSafe $Col.title)' Name='$($Col.internalName)' Decimals='$($Col.decimals)' />"
@@ -325,21 +330,35 @@ if ($ListNumber -eq 1 -and -not $SkipRename) {
}
}
# Проход 1: САМИ СПИСКИ — все до единого, ДО колонок.
#
# Раньше список и его колонки создавались одним проходом по манифесту, и Lookup на
# список ДРУГОЙ формы (WorkplaceSetup.SourceHire → «Прием на работу … — данные»)
# резолвился только если та форма попадалась в обходе раньше — то есть держался на
# алфавитном везении, а для взаимных ссылок был бы невозможен в принципе. Поэтому
# сначала все списки, потом все колонки: к моменту разрешения любого Lookup'а
# список-источник уже существует.
Write-Host "`n=== Списки ===" -ForegroundColor Cyan
foreach ($manifest in $manifests) {
$def = Get-Content -Path $manifest.FullName -Raw -Encoding UTF8 | ConvertFrom-Json
$listTitle = Get-NumberedListTitle -Title $def.dataListTitle -Number $ListNumber
if (-not (Get-PnPList -Identity $listTitle -ErrorAction SilentlyContinue)) {
New-PnPList -Title $listTitle -Template GenericList -EnableVersioning | Out-Null
Write-Host " [+] создан список «$listTitle»" -ForegroundColor Green
}
else {
Write-Host " [=] список уже существует: «$listTitle»" -ForegroundColor DarkGray
}
}
# Проход 2: колонки (и переименование Title) — по одному манифесту за раз.
foreach ($manifest in $manifests) {
$def = Get-Content -Path $manifest.FullName -Raw -Encoding UTF8 | ConvertFrom-Json
$listTitle = Get-NumberedListTitle -Title $def.dataListTitle -Number $ListNumber
Write-Host "`n=== Форма: $($manifest.Directory.Name) → список «$listTitle» ===" -ForegroundColor Cyan
# 1) Список (идемпотентно)
if (-not (Get-PnPList -Identity $listTitle -ErrorAction SilentlyContinue)) {
New-PnPList -Title $listTitle -Template GenericList -EnableVersioning | Out-Null
Write-Host " [+] создан список" -ForegroundColor Green
}
else {
Write-Host " [=] список уже существует" -ForegroundColor DarkGray
}
# 2) Переименование Title (если задано)
# 1) Переименование Title (если задано)
if ($def.titleColumnName) {
try {
Set-PnPField -List $listTitle -Identity 'Title' -Values @{ Title = $def.titleColumnName } | Out-Null
@@ -350,7 +369,7 @@ foreach ($manifest in $manifests) {
}
}
# 3) Колонки (идемпотентно): не-Lookup — через эталоны (столбцы сайта), Lookup — на список.
# 2) Колонки (идемпотентно): не-Lookup — через эталоны (столбцы сайта), Lookup — на список.
foreach ($col in $def.columns) {
Add-ColumnToList -List $listTitle -Col $col
}
+4 -1
View File
@@ -25,12 +25,15 @@
| `DateTime` | дата/время | — |
| `Boolean` | да/нет | — |
| `User` | пользователь | — |
| `Url` | гиперссылка (адрес + подпись) | — |
| `Lookup` | подстановка | `lookupList` (заголовок источника), `lookupShowField` (по умолч. `Title`) |
Плюс на уровне формы: `titleColumnName` — переименовать стандартную колонку `Title`.
> **Порядок для Lookup:** список-источник должен существовать раньше, чем колонка,
> которая на него ссылается. Если источник в другой форме — сначала прогоните её манифест.
> которая на него ссылается — но следить за этим руками не нужно: скрипт сначала
> создаёт ВСЕ списки, и только потом колонки, поэтому порядок обхода манифестов
> не важен (и взаимные ссылки тоже разрешимы).
## Разовая подготовка