@if (!ShowForm) {

Training Need Register

All training demands · Submit, review and approve
{{ filteredNeeds().length }} records
@for (need of pagedNeeds(); track need.TrainingNeedId) { } @if (pagedNeeds().length === 0) { }
Need Code Title Domain Source Priority Audience Raised By Raised On Status Actions
{{ need.NeedCode }} {{ need.NeedTitle }} @if (getSubtitle(need)) { {{ getSubtitle(need) }} } {{ need.DomainName }} {{ SOURCE_LABELS[need.NeedSourceType] ?? '—' }} • {{ PRIORITY_LABELS[need.Priority] ?? '—' }} {{ getAudienceDisplay(need) }} {{ getRaisedBy(need) }} {{ formatDate(need.RaisedOn) }} {{ STATUS_LABELS[need.NeedStatus] ?? '—' }} @if (rejectingId() === need.TrainingNeedId) { } @else if (need.NeedStatus === 0) { } @else if (need.NeedStatus === 1) { } @else if (need.NeedStatus === 2) { } @else if (need.NeedStatus === 3) { } @else { }
No training needs found
} @if (ShowForm) {
@if (form.bFormReady) {

{{ raisedByCode }}

}
} @if (showBulkImport()) {
Bulk Import Training Needs
clear

Domain is matched by name against the Training Domain master automatically — no need to look up a numeric id. Employee Id / Raised By still need the actual numeric employee id (the Employee master is too large to match by name here) — leave blank if not applicable.

@if (bulkLookupsLoading()) {
Loading Training Domain master list…
} @if (bulkLookupsError()) {
Couldn't load the Training Domain master list needed to match names. Retry
}
@if (bulkFileName()) { {{ bulkFileName() }} }
@if (bulkRows().length === 0) {

Expected columns:

    @for (col of bulkColumns; track col.key) {
  • {{ col.label }} @if (col.required) { * } @if (col.hint) { — {{ col.hint }} }
  • }
} @if (bulkRows().length > 0) {
{{ bulkRows().length }} rows @if (bulkInvalidCount() > 0) { {{ bulkInvalidCount() }} invalid } @if (bulkSuccessCount() > 0) { {{ bulkSuccessCount() }} imported } @if (bulkErrorCount() > 0) { {{ bulkErrorCount() }} failed } @if (bulkImporting()) { Importing… {{ bulkProcessedCount() }} / {{ bulkValidCount() }} }
@for (col of bulkColumns; track col.key) { } @for (row of bulkRows(); track row._rowNum) { @for (col of bulkColumns; track col.key) { } }
#{{ col.label }}Status
{{ row._rowNum }}{{ row[col.key] }} {{ row._status }} @if (row._errors.length) {
{{ row._errors.join(', ') }}
} @if (row._message) {
{{ row._message }}
}
}
}