Много разных изменений
This commit is contained in:
51
frontend/admin/js/academic-period.js
Normal file
51
frontend/admin/js/academic-period.js
Normal file
@@ -0,0 +1,51 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user