Files
magistr/frontend/admin/js/academic-period.js
2026-08-20 00:55:27 +03:00

52 lines
2.0 KiB
JavaScript

import { preferredScheduleSemester } from './schedule-period.js';
export function academicYearsFromSemesters(semesters = []) {
const years = new Map();
semesters.forEach(semester => {
const id = String(semester?.academicYearId ?? '');
if (!id || years.has(id)) return;
years.set(id, {
id,
title: semester.academicYearTitle || `Учебный год ${id}`
});
});
return [...years.values()];
}
export function semestersForAcademicYear(semesters = [], academicYearId = '') {
return semesters.filter(semester =>
String(semester?.academicYearId ?? '') === String(academicYearId)
);
}
export function resolveAcademicPeriod(semesters = [], options = {}) {
if (!semesters.length) return { academicYearId: '', semesterId: '' };
const requestedSemester = semesters.find(semester =>
String(semester.id) === String(options.semesterId || '')
);
const availableYearIds = new Set(academicYearsFromSemesters(semesters).map(year => year.id));
const requestedYearId = availableYearIds.has(String(options.academicYearId || ''))
? String(options.academicYearId)
: '';
const preferred = preferredScheduleSemester(semesters, options.date || isoToday()) || semesters[0];
const academicYearId = requestedSemester
? String(requestedSemester.academicYearId)
: (requestedYearId || String(preferred?.academicYearId || semesters[0].academicYearId));
const yearSemesters = semestersForAcademicYear(semesters, academicYearId);
const semester = requestedSemester && String(requestedSemester.academicYearId) === academicYearId
? requestedSemester
: (preferredScheduleSemester(yearSemesters, options.date || isoToday()) || yearSemesters[0]);
return {
academicYearId,
semesterId: String(semester?.id || '')
};
}
function isoToday() {
const date = new Date();
const offset = date.getTimezoneOffset() * 60_000;
return new Date(date.getTime() - offset).toISOString().slice(0, 10);
}