@kth/om-kursen-ladok-client 2.5.6 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attributVardenConstants.d.ts +3 -0
- package/dist/attributVardenConstants.js +32 -1
- package/dist/attributVardenConstants.js.map +1 -1
- package/dist/createApiClient.js +2 -0
- package/dist/createApiClient.js.map +1 -1
- package/dist/groupSearchResults.d.ts +16 -5
- package/dist/groupSearchResults.js +46 -34
- package/dist/groupSearchResults.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/kth/KTHPeriod/KTHPeriod.d.ts +2 -0
- package/dist/kth/KTHPeriod/KTHPeriod.js +5 -1
- package/dist/kth/KTHPeriod/KTHPeriod.js.map +1 -1
- package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.d.ts +2 -2
- package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.js +2 -13
- package/dist/kth/KTHPeriod/calculateKTHPeriodSemesterFromTillfallesperiod.js.map +1 -1
- package/dist/kth/KTHPeriod/createKTHPeriodSemester.d.ts +9 -0
- package/dist/kth/KTHPeriod/createKTHPeriodSemester.js +26 -0
- package/dist/kth/KTHPeriod/createKTHPeriodSemester.js.map +1 -0
- package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.d.ts +1 -1
- package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.js +5 -10
- package/dist/kth/KTHPeriod/extractKTHPeriodSemesterFromLasperiodsfordelning.js.map +1 -1
- package/dist/kth/KTHPeriod/getKTHPeriodSemesters.d.ts +2 -2
- package/dist/kth/index.d.ts +1 -0
- package/dist/kth/index.js +18 -0
- package/dist/kth/index.js.map +1 -0
- package/dist/mapCourseInstance.js +1 -1
- package/dist/mapCourseInstance.js.map +1 -1
- package/dist/{mapSearchResult.d.ts → mapCourseInstanceResult.d.ts} +7 -5
- package/dist/{mapSearchResult.js → mapCourseInstanceResult.js} +11 -20
- package/dist/mapCourseInstanceResult.js.map +1 -0
- package/dist/report/createReportApi.d.ts +3 -0
- package/dist/report/createReportApi.js +22 -0
- package/dist/report/createReportApi.js.map +1 -0
- package/dist/report/getSchedulingReport.d.ts +4 -0
- package/dist/report/getSchedulingReport.js +228 -0
- package/dist/report/getSchedulingReport.js.map +1 -0
- package/dist/report/index.d.ts +4 -0
- package/dist/report/index.js +10 -0
- package/dist/report/index.js.map +1 -0
- package/dist/report/mapCourseInstanceToSchedulingReportCourse.d.ts +14 -0
- package/dist/report/mapCourseInstanceToSchedulingReportCourse.js +111 -0
- package/dist/report/mapCourseInstanceToSchedulingReportCourse.js.map +1 -0
- package/dist/report/types.d.ts +33 -0
- package/dist/report/types.js +3 -0
- package/dist/report/types.js.map +1 -0
- package/dist/search/createSearchApi.js +1 -35
- package/dist/search/createSearchApi.js.map +1 -1
- package/dist/search/searchService.d.ts +9 -0
- package/dist/search/searchService.js +39 -0
- package/dist/search/searchService.js.map +1 -1
- package/dist/search/types.d.ts +13 -9
- package/dist/search/utils/createLadokPeriodsAndKthPeriods.d.ts +16 -0
- package/dist/search/utils/createLadokPeriodsAndKthPeriods.js +62 -0
- package/dist/search/utils/createLadokPeriodsAndKthPeriods.js.map +1 -0
- package/dist/search/utils/mapCourseInstanceSearchDTO.js +30 -17
- package/dist/search/utils/mapCourseInstanceSearchDTO.js.map +1 -1
- package/dist/search/utils/searchUtils.d.ts +13 -5
- package/dist/search/utils/searchUtils.js +36 -19
- package/dist/search/utils/searchUtils.js.map +1 -1
- package/dist/types/OmKursenLadokApiClient.d.ts +2 -0
- package/dist/utils/SearchError.d.ts +5 -5
- package/dist/utils/SearchError.js +5 -6
- package/dist/utils/SearchError.js.map +1 -1
- package/dist/utils/collectionUtils.d.ts +9 -0
- package/dist/utils/collectionUtils.js +24 -1
- package/dist/utils/collectionUtils.js.map +1 -1
- package/dist/utils/concurrentTasks.js +13 -7
- package/dist/utils/concurrentTasks.js.map +1 -1
- package/dist/utils/getAllEntitiesByUseOfContinuation.js +3 -3
- package/dist/utils/getAllEntitiesByUseOfContinuation.js.map +1 -1
- package/dist/utils/partOfProgrammeUtil.d.ts +1 -1
- package/dist/utils/partOfProgrammeUtil.js +13 -4
- package/dist/utils/partOfProgrammeUtil.js.map +1 -1
- package/dist/utils/periodUtil.d.ts +1 -1
- package/dist/utils/periodUtil.js +3 -3
- package/dist/utils/periodUtil.js.map +1 -1
- package/dist/utils/programmeStructureUtil.d.ts +7 -0
- package/dist/utils/programmeStructureUtil.js +4 -3
- package/dist/utils/programmeStructureUtil.js.map +1 -1
- package/package.json +2 -2
- package/dist/mapSearchResult.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LadokStatus } from '@kth/ladok-attributvarde-utils';
|
|
2
|
-
import { SokUtbildningsTillfalleItem, SokUtbildningsTillfalleSlimItem } from '@kth/ladok-mellanlager-client';
|
|
2
|
+
import { PeriodItem, SokUtbildningsTillfalleItem, SokUtbildningsTillfalleSlimItem } from '@kth/ladok-mellanlager-client';
|
|
3
3
|
import { Language, TranslatedGrunddata, TranslatedOrganisation, TranslatedUtbildningstyp } from './utils/languageUtil';
|
|
4
|
+
import { KTHPeriodSemester } from './kth/KTHPeriod/KTHPeriod';
|
|
4
5
|
export type SearchResultPeriod = {
|
|
5
6
|
startperiod: string;
|
|
6
7
|
forstaUndervisningsdatum?: {
|
|
@@ -17,7 +18,7 @@ export type SearchResultPeriod = {
|
|
|
17
18
|
};
|
|
18
19
|
tillfallesperioderNummer: number;
|
|
19
20
|
};
|
|
20
|
-
export type
|
|
21
|
+
export type CourseInstanceResult = {
|
|
21
22
|
versionsnummer: number;
|
|
22
23
|
kod: string;
|
|
23
24
|
benamning: string;
|
|
@@ -36,8 +37,9 @@ export type CourseSearchResult = {
|
|
|
36
37
|
code: string;
|
|
37
38
|
inDigits: string | null;
|
|
38
39
|
};
|
|
39
|
-
period?: SearchResultPeriod;
|
|
40
|
-
isMiljo?: boolean;
|
|
41
40
|
status?: LadokStatus;
|
|
41
|
+
isMiljo?: boolean;
|
|
42
|
+
kthPeriods: KTHPeriodSemester[];
|
|
43
|
+
startingKTHPeriod: KTHPeriodSemester | undefined;
|
|
42
44
|
};
|
|
43
|
-
export declare const
|
|
45
|
+
export declare const mapCourseInstanceResult: (courseInstance: SokUtbildningsTillfalleItem | SokUtbildningsTillfalleSlimItem, periodItems: PeriodItem[], language: Language) => CourseInstanceResult;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.mapCourseInstanceResult = void 0;
|
|
4
4
|
const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
|
|
5
5
|
const languageUtil_1 = require("./utils/languageUtil");
|
|
6
6
|
const utils_1 = require("./utils");
|
|
7
7
|
const creditsUtil_1 = require("./utils/creditsUtil");
|
|
8
8
|
const schoolUtil_1 = require("./utils/schoolUtil");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const getKTHPeriodSemesters_1 = require("./kth/KTHPeriod/getKTHPeriodSemesters");
|
|
10
|
+
// TODO this should be refactored together with mapCourseInstance
|
|
11
|
+
const mapCourseInstanceResult = (courseInstance, periodItems, language) => {
|
|
12
|
+
var _a, _b, _c;
|
|
12
13
|
const benamning = {
|
|
13
14
|
sv: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.svensk.benamning'),
|
|
14
15
|
en: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.engelsk.benamning'),
|
|
@@ -26,6 +27,8 @@ const mapKursTillfalleResult = (courseInstance, language) => {
|
|
|
26
27
|
const schoolCode = (0, schoolUtil_1.extractSchoolCodeFromOrganisation)(organisation, language);
|
|
27
28
|
const omfattning = (_b = (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.omfattning', 'omfattning')) !== null && _b !== void 0 ? _b : '';
|
|
28
29
|
const isMiljo = (0, ladok_attributvarde_utils_1.extractIsMiljo)(courseInstance.instans.Attributvarden);
|
|
30
|
+
const kthPeriods = (0, getKTHPeriodSemesters_1.getKTHPeriodSemesters)(courseInstance.Tillfallesperioder, periodItems);
|
|
31
|
+
const startingKTHPeriod = kthPeriods.at(0);
|
|
29
32
|
return {
|
|
30
33
|
versionsnummer: (0, ladok_attributvarde_utils_1.extractVersionNumber)(courseInstance.instans.Attributvarden),
|
|
31
34
|
kod: (0, ladok_attributvarde_utils_1.extractString)(courseInstance.instans.Attributvarden, 'utbildning.attribut.kod'),
|
|
@@ -44,24 +47,12 @@ const mapKursTillfalleResult = (courseInstance, language) => {
|
|
|
44
47
|
code: startperiod.code,
|
|
45
48
|
inDigits: (0, utils_1.transformPeriodInDigits)(startperiod.code),
|
|
46
49
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
forstaUndervisningsdatum: Object.assign({ date: (_d = courseInstance.Tillfallesperioder.at(0)) === null || _d === void 0 ? void 0 : _d.ForstaUndervisningsdatum, period: (0, utils_1.getKthStudyPeriod)(new Date((_e = courseInstance.Tillfallesperioder.at(0)) === null || _e === void 0 ? void 0 : _e.ForstaUndervisningsdatum), {
|
|
50
|
-
code: startperiod === null || startperiod === void 0 ? void 0 : startperiod.code,
|
|
51
|
-
startDate: startperiod && new Date(startperiod.startDay),
|
|
52
|
-
endDate: startperiod && new Date(startperiod.lastDay),
|
|
53
|
-
}, 'start') }, (0, utils_1.getYearAndWeek)((_f = courseInstance.Tillfallesperioder.at(0)) === null || _f === void 0 ? void 0 : _f.ForstaUndervisningsdatum)),
|
|
54
|
-
sistaUndervisningsdatum: Object.assign({ date: (_g = courseInstance.Tillfallesperioder.at(-1)) === null || _g === void 0 ? void 0 : _g.SistaUndervisningsdatum, period: (0, utils_1.getKthStudyPeriod)(new Date((_h = courseInstance.Tillfallesperioder.at(-1)) === null || _h === void 0 ? void 0 : _h.SistaUndervisningsdatum), {
|
|
55
|
-
code: startperiod === null || startperiod === void 0 ? void 0 : startperiod.code,
|
|
56
|
-
startDate: startperiod && new Date(startperiod.startDay),
|
|
57
|
-
endDate: startperiod && new Date(startperiod.lastDay),
|
|
58
|
-
}, 'end') }, (0, utils_1.getYearAndWeek)((_j = courseInstance.Tillfallesperioder.at(-1)) === null || _j === void 0 ? void 0 : _j.SistaUndervisningsdatum)),
|
|
59
|
-
tillfallesperioderNummer: courseInstance.Tillfallesperioder.length,
|
|
60
|
-
},
|
|
50
|
+
kthPeriods,
|
|
51
|
+
startingKTHPeriod,
|
|
61
52
|
schoolCode,
|
|
62
53
|
isMiljo,
|
|
63
54
|
status: (0, ladok_attributvarde_utils_1.extractLadokStatus)(courseInstance.Attributvarden),
|
|
64
55
|
};
|
|
65
56
|
};
|
|
66
|
-
exports.
|
|
67
|
-
//# sourceMappingURL=
|
|
57
|
+
exports.mapCourseInstanceResult = mapCourseInstanceResult;
|
|
58
|
+
//# sourceMappingURL=mapCourseInstanceResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapCourseInstanceResult.js","sourceRoot":"","sources":["../src/mapCourseInstanceResult.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createReportApi = void 0;
|
|
13
|
+
const getSchedulingReport_1 = require("./getSchedulingReport");
|
|
14
|
+
const createReportApi = (ladokClient) => {
|
|
15
|
+
return {
|
|
16
|
+
getSemesterCoursesGroupedByProgramme: (semester, language) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
return (0, getSchedulingReport_1.getSemesterCoursesGroupedByProgramme)(ladokClient, semester, language);
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
exports.createReportApi = createReportApi;
|
|
22
|
+
//# sourceMappingURL=createReportApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createReportApi.js","sourceRoot":"","sources":["../../src/report/createReportApi.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,+DAA4E;AAErE,MAAM,eAAe,GAAG,CAAC,WAAsC,EAAa,EAAE;IACnF,OAAO;QACL,oCAAoC,EAAE,CAAO,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACjE,OAAO,IAAA,0DAAoC,EAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC9E,CAAC,CAAA;KACF,CAAA;AACH,CAAC,CAAA;AANY,QAAA,eAAe,mBAM3B"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LadokMellanlagerApiClient } from '@kth/ladok-mellanlager-client';
|
|
2
|
+
import { Language } from '../utils/languageUtil';
|
|
3
|
+
import { SchedulingReport } from './types';
|
|
4
|
+
export declare const getSemesterCoursesGroupedByProgramme: (ladokClient: LadokMellanlagerApiClient, semester: string, language: Language) => Promise<SchedulingReport>;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getSemesterCoursesGroupedByProgramme = void 0;
|
|
13
|
+
const getAllEntitiesByUseOfContinuation_1 = require("../utils/getAllEntitiesByUseOfContinuation");
|
|
14
|
+
const responseUtils_1 = require("../utils/responseUtils");
|
|
15
|
+
const partOfProgrammeUtil_1 = require("../utils/partOfProgrammeUtil");
|
|
16
|
+
const attributVardenConstants_1 = require("../attributVardenConstants");
|
|
17
|
+
const queryConstants_1 = require("../queryConstants");
|
|
18
|
+
const mapCourseInstanceToSchedulingReportCourse_1 = require("./mapCourseInstanceToSchedulingReportCourse");
|
|
19
|
+
const periodUtil_1 = require("../utils/periodUtil");
|
|
20
|
+
const programmeStructureUtil_1 = require("../utils/programmeStructureUtil");
|
|
21
|
+
const COURSE_UTBILDNINGSTYP_IDS = '52,101955,101382,101994,102008';
|
|
22
|
+
/*
|
|
23
|
+
** 2007KTF – 52
|
|
24
|
+
** 2007FKTF – 101955
|
|
25
|
+
** FUPKTF – 101382
|
|
26
|
+
** UPHPKTF – 101994
|
|
27
|
+
** UPVKTF – 102008
|
|
28
|
+
*/
|
|
29
|
+
// Common base query parameters for all search phases
|
|
30
|
+
const BASE_SEARCH_QUERY = {
|
|
31
|
+
kodEllerBenamning: '*',
|
|
32
|
+
attributVarden: attributVardenConstants_1.ATTRIBUT_VARDEN_FOR_COURSE_INSTANCES_SCHEDULING,
|
|
33
|
+
instansAttributVarden: attributVardenConstants_1.INSTANS_ATTRIBUT_VARDEN_FOR_COURSE_INSTANCES_SCHEDULING,
|
|
34
|
+
antalTraffar: queryConstants_1.MAX_ANTAL_TRAFFAR,
|
|
35
|
+
utbildningstypgrundtyp: 'KURS',
|
|
36
|
+
utbildningstypid: COURSE_UTBILDNINGSTYP_IDS,
|
|
37
|
+
};
|
|
38
|
+
// Common continuation options for all search phases
|
|
39
|
+
const SEARCH_CONTINUATION_OPTIONS = {
|
|
40
|
+
maxSearchResultsToReturn: 10000,
|
|
41
|
+
maxContinuationIterations: 500,
|
|
42
|
+
};
|
|
43
|
+
const getSemesterDates = (semesterCode, periods) => {
|
|
44
|
+
const period = (0, periodUtil_1.findPeriodByKod)(semesterCode, periods);
|
|
45
|
+
if (!period) {
|
|
46
|
+
throw new Error(`Period not found for semester code: ${semesterCode}`);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
startDate: period.Giltighetsperiod.Startdatum,
|
|
50
|
+
endDate: period.Giltighetsperiod.Slutdatum,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const getSemesterCoursesGroupedByProgramme = (ladokClient, semester, language) => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
const overallStartTime = Date.now();
|
|
55
|
+
const periods = yield ladokClient.period();
|
|
56
|
+
const periodsData = (0, responseUtils_1.throwIfError)(periods);
|
|
57
|
+
const { startDate, endDate } = getSemesterDates(semester, periodsData.Period);
|
|
58
|
+
// Map to deduplicate course instances by tillfalle_uid
|
|
59
|
+
const entityMap = new Map();
|
|
60
|
+
// PHASE 1 – PRIMARY SEARCH (STARTPERIOD-BASED)
|
|
61
|
+
console.log(`Phase 1: Primary search with startPeriod=${semester}`);
|
|
62
|
+
const phase1StartTime = Date.now();
|
|
63
|
+
const phase1Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { startPeriod: semester }), SEARCH_CONTINUATION_OPTIONS);
|
|
64
|
+
const phase1Entities = (0, responseUtils_1.throwIfContinuationError)(phase1Result);
|
|
65
|
+
phase1Entities.forEach(entity => {
|
|
66
|
+
entityMap.set(entity.tillfalle_uid, entity);
|
|
67
|
+
});
|
|
68
|
+
const phase1Duration = ((Date.now() - phase1StartTime) / 1000).toFixed(2);
|
|
69
|
+
console.log(`Phase 1: Found ${phase1Entities.length} course instances (${phase1Duration}s)`);
|
|
70
|
+
// PHASE 2 – SAFETY NET SEARCH (ONGOING AT SEMESTER START)
|
|
71
|
+
console.log(`Phase 2: Safety net search at semester start (${startDate})`);
|
|
72
|
+
const phase2StartTime = Date.now();
|
|
73
|
+
const phase2Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { pagaendeDatum: startDate }), SEARCH_CONTINUATION_OPTIONS);
|
|
74
|
+
const phase2Entities = (0, responseUtils_1.throwIfContinuationError)(phase2Result);
|
|
75
|
+
let phase2NewCount = 0;
|
|
76
|
+
phase2Entities.forEach(entity => {
|
|
77
|
+
if (!entityMap.has(entity.tillfalle_uid)) {
|
|
78
|
+
entityMap.set(entity.tillfalle_uid, entity);
|
|
79
|
+
phase2NewCount++;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const phase2Duration = ((Date.now() - phase2StartTime) / 1000).toFixed(2);
|
|
83
|
+
console.log(`Phase 2: Found ${phase2Entities.length} total, ${phase2NewCount} new course instances (${phase2Duration}s)`);
|
|
84
|
+
// PHASE 3 – SAFETY NET SEARCH (ONGOING AT SEMESTER END)
|
|
85
|
+
console.log(`Phase 3: Safety net search at semester end (${endDate})`);
|
|
86
|
+
const phase3StartTime = Date.now();
|
|
87
|
+
const phase3Result = yield (0, getAllEntitiesByUseOfContinuation_1.getAllEntitiesByUseOfContinuation)(ladokClient.sokKursTillfalleSlim, Object.assign(Object.assign({}, BASE_SEARCH_QUERY), { pagaendeDatum: endDate }), SEARCH_CONTINUATION_OPTIONS);
|
|
88
|
+
const phase3Entities = (0, responseUtils_1.throwIfContinuationError)(phase3Result);
|
|
89
|
+
let phase3NewCount = 0;
|
|
90
|
+
phase3Entities.forEach(entity => {
|
|
91
|
+
if (!entityMap.has(entity.tillfalle_uid)) {
|
|
92
|
+
entityMap.set(entity.tillfalle_uid, entity);
|
|
93
|
+
phase3NewCount++;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
const phase3Duration = ((Date.now() - phase3StartTime) / 1000).toFixed(2);
|
|
97
|
+
console.log(`Phase 3: Found ${phase3Entities.length} total, ${phase3NewCount} new course instances (${phase3Duration}s)`);
|
|
98
|
+
// AFTER ALL THREE PHASES - Convert to array
|
|
99
|
+
const allEntities = Array.from(entityMap.values());
|
|
100
|
+
const totalSearchDuration = ((Date.now() - overallStartTime) / 1000).toFixed(2);
|
|
101
|
+
console.log(`Total unique course instances after deduplication: ${allEntities.length} (Total search time: ${totalSearchDuration}s)`);
|
|
102
|
+
// Get programme associations
|
|
103
|
+
console.log('Fetching programme associations...');
|
|
104
|
+
const partOfProgrammesStartTime = Date.now();
|
|
105
|
+
const partOfProgrammes = yield (0, partOfProgrammeUtil_1.getPartOfProgrammes)(allEntities, periodsData.Period, ladokClient, true);
|
|
106
|
+
const partOfProgrammesDuration = ((Date.now() - partOfProgrammesStartTime) / 1000).toFixed(2);
|
|
107
|
+
console.log(`Programme associations fetched in ${partOfProgrammesDuration}s`);
|
|
108
|
+
const coursesWithProgrammes = allEntities.map(entity => (0, mapCourseInstanceToSchedulingReportCourse_1.mapCourseInstanceToSchedulingReportCourse)(entity, language, partOfProgrammes[entity.tillfalle_uid] || [], periodsData.Period));
|
|
109
|
+
// Categorize courses by programme
|
|
110
|
+
const { programmes, standaloneCourses } = categorizeCoursesByProgramme(coursesWithProgrammes);
|
|
111
|
+
return {
|
|
112
|
+
programmes,
|
|
113
|
+
standaloneCourses,
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
exports.getSemesterCoursesGroupedByProgramme = getSemesterCoursesGroupedByProgramme;
|
|
117
|
+
/**
|
|
118
|
+
* Categorize courses by programme or as standalone courses.
|
|
119
|
+
* Courses are grouped by programme code, and courses without programmes are kept separate.
|
|
120
|
+
*/
|
|
121
|
+
const categorizeCoursesByProgramme = (courses) => {
|
|
122
|
+
const programmeMap = new Map();
|
|
123
|
+
const standaloneCourses = [];
|
|
124
|
+
courses.forEach(course => {
|
|
125
|
+
if (!course.partOfProgrammes || course.partOfProgrammes.length === 0) {
|
|
126
|
+
// Course is not part of any programme - "Fristående kurs"
|
|
127
|
+
standaloneCourses.push(course);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Course is part of one or more programmes
|
|
131
|
+
course.partOfProgrammes.forEach((programme) => {
|
|
132
|
+
if (!programmeMap.has(programme.kod)) {
|
|
133
|
+
programmeMap.set(programme.kod, {
|
|
134
|
+
programmeCode: programme.kod,
|
|
135
|
+
programmeName: programme.benamning,
|
|
136
|
+
courses: [],
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const programmeGroup = programmeMap.get(programme.kod);
|
|
140
|
+
// Create course entry for this programme with only the programme-specific partOfProgrammes
|
|
141
|
+
const courseInProgramme = {
|
|
142
|
+
kod: course.kod,
|
|
143
|
+
benamning: course.benamning,
|
|
144
|
+
omfattning: course.omfattning,
|
|
145
|
+
tillfalleskod: course.tillfalleskod,
|
|
146
|
+
startperiod: course.startperiod,
|
|
147
|
+
organisation: course.organisation,
|
|
148
|
+
finansieringsform: course.finansieringsform,
|
|
149
|
+
utbildningsplatser: course.utbildningsplatser,
|
|
150
|
+
status: course.status,
|
|
151
|
+
connectedProgrammes: course.connectedProgrammes,
|
|
152
|
+
weeks: course.weeks,
|
|
153
|
+
kthPeriods: course.kthPeriods,
|
|
154
|
+
studietakt: course.studietakt,
|
|
155
|
+
utbildningstyp: course.utbildningstyp,
|
|
156
|
+
// Include only this specific programme's context
|
|
157
|
+
partOfProgrammes: [programme],
|
|
158
|
+
};
|
|
159
|
+
programmeGroup.courses.push(courseInProgramme);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// Convert map to array and sort courses within each programme
|
|
164
|
+
const programmes = Array.from(programmeMap.values()).map(group => (Object.assign(Object.assign({}, group), { courses: sortCoursesForProgramme(group.courses) })));
|
|
165
|
+
// Sort programme groups by programme code
|
|
166
|
+
programmes.sort((a, b) => a.programmeCode.localeCompare(b.programmeCode));
|
|
167
|
+
return {
|
|
168
|
+
programmes,
|
|
169
|
+
standaloneCourses,
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Sort courses within a programme by:
|
|
174
|
+
* 1. Study year (ascending)
|
|
175
|
+
* 2. Common (shared) courses first, then specialisation-specific courses
|
|
176
|
+
* 3. Course-type priority: Compulsory -> Conditionally elective -> Elective -> Recommended
|
|
177
|
+
* 4. Course code (alphabetically)
|
|
178
|
+
*/
|
|
179
|
+
const sortCoursesForProgramme = (courses) => {
|
|
180
|
+
const valinfoRank = (part) => {
|
|
181
|
+
if (!part)
|
|
182
|
+
return 0;
|
|
183
|
+
const desc = part.sv && part.sv.trim().length > 0 ? part.sv : part.en;
|
|
184
|
+
const category = (0, programmeStructureUtil_1.getCategory)(desc);
|
|
185
|
+
switch (category) {
|
|
186
|
+
case programmeStructureUtil_1.ValvillkorCategory.O:
|
|
187
|
+
return 0;
|
|
188
|
+
case programmeStructureUtil_1.ValvillkorCategory.VV:
|
|
189
|
+
return 1;
|
|
190
|
+
case programmeStructureUtil_1.ValvillkorCategory.V:
|
|
191
|
+
return 2;
|
|
192
|
+
case programmeStructureUtil_1.ValvillkorCategory.R:
|
|
193
|
+
return 3;
|
|
194
|
+
default:
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
return courses.sort((a, b) => {
|
|
199
|
+
var _a, _b, _c, _d, _e, _f;
|
|
200
|
+
const aPart = (_a = a.partOfProgrammes) === null || _a === void 0 ? void 0 : _a[0];
|
|
201
|
+
const bPart = (_b = b.partOfProgrammes) === null || _b === void 0 ? void 0 : _b[0];
|
|
202
|
+
const aStudyYear = (_c = aPart === null || aPart === void 0 ? void 0 : aPart.arskurs) !== null && _c !== void 0 ? _c : 0;
|
|
203
|
+
const bStudyYear = (_d = bPart === null || bPart === void 0 ? void 0 : bPart.arskurs) !== null && _d !== void 0 ? _d : 0;
|
|
204
|
+
// 1) Study year ascending
|
|
205
|
+
if (aStudyYear !== bStudyYear)
|
|
206
|
+
return aStudyYear - bStudyYear;
|
|
207
|
+
// 2) Common (shared) courses first (no inriktning)
|
|
208
|
+
const aIsShared = !(aPart === null || aPart === void 0 ? void 0 : aPart.inriktning);
|
|
209
|
+
const bIsShared = !(bPart === null || bPart === void 0 ? void 0 : bPart.inriktning);
|
|
210
|
+
if (aIsShared !== bIsShared)
|
|
211
|
+
return aIsShared ? -1 : 1;
|
|
212
|
+
// If both are specialisation courses, group by inriktning code
|
|
213
|
+
if (!aIsShared && !bIsShared) {
|
|
214
|
+
const aInr = (_e = aPart === null || aPart === void 0 ? void 0 : aPart.inriktning) !== null && _e !== void 0 ? _e : '';
|
|
215
|
+
const bInr = (_f = bPart === null || bPart === void 0 ? void 0 : bPart.inriktning) !== null && _f !== void 0 ? _f : '';
|
|
216
|
+
if (aInr !== bInr)
|
|
217
|
+
return aInr.localeCompare(bInr);
|
|
218
|
+
}
|
|
219
|
+
// 3) Course-type priority
|
|
220
|
+
const aValRank = valinfoRank(aPart === null || aPart === void 0 ? void 0 : aPart.valinformation);
|
|
221
|
+
const bValRank = valinfoRank(bPart === null || bPart === void 0 ? void 0 : bPart.valinformation);
|
|
222
|
+
if (aValRank !== bValRank)
|
|
223
|
+
return aValRank - bValRank;
|
|
224
|
+
// 4) Finally, sort alphabetically by course code
|
|
225
|
+
return a.kod.localeCompare(b.kod);
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
//# sourceMappingURL=getSchedulingReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSchedulingReport.js","sourceRoot":"","sources":["../../src/report/getSchedulingReport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { getSemesterCoursesGroupedByProgramme } from './getSchedulingReport';
|
|
2
|
+
export { mapCourseInstanceToSchedulingReportCourse } from './mapCourseInstanceToSchedulingReportCourse';
|
|
3
|
+
export { createReportApi } from './createReportApi';
|
|
4
|
+
export type { ReportApi, SchedulingReport, SchedulingReportProgramme, SchedulingReportCourse } from './types';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createReportApi = exports.mapCourseInstanceToSchedulingReportCourse = exports.getSemesterCoursesGroupedByProgramme = void 0;
|
|
4
|
+
var getSchedulingReport_1 = require("./getSchedulingReport");
|
|
5
|
+
Object.defineProperty(exports, "getSemesterCoursesGroupedByProgramme", { enumerable: true, get: function () { return getSchedulingReport_1.getSemesterCoursesGroupedByProgramme; } });
|
|
6
|
+
var mapCourseInstanceToSchedulingReportCourse_1 = require("./mapCourseInstanceToSchedulingReportCourse");
|
|
7
|
+
Object.defineProperty(exports, "mapCourseInstanceToSchedulingReportCourse", { enumerable: true, get: function () { return mapCourseInstanceToSchedulingReportCourse_1.mapCourseInstanceToSchedulingReportCourse; } });
|
|
8
|
+
var createReportApi_1 = require("./createReportApi");
|
|
9
|
+
Object.defineProperty(exports, "createReportApi", { enumerable: true, get: function () { return createReportApi_1.createReportApi; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":";;;AAAA,6DAA4E;AAAnE,2IAAA,oCAAoC,OAAA;AAC7C,yGAAuG;AAA9F,sKAAA,yCAAyC,OAAA;AAClD,qDAAmD;AAA1C,kHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SokUtbildningsTillfalleSlimItem, PeriodItem } from '@kth/ladok-mellanlager-client';
|
|
2
|
+
import { Language } from '../utils/languageUtil';
|
|
3
|
+
import { PartOfProgramme } from '../mapPartOfProgramme';
|
|
4
|
+
import { SchedulingReportCourse } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Map a course instance entity to CourseInstanceWithProgrammes with scheduling information.
|
|
7
|
+
*
|
|
8
|
+
* @param entity - The course instance entity from Ladok
|
|
9
|
+
* @param language - Language for text fields ('sv' or 'en')
|
|
10
|
+
* @param partOfProgrammes - Programme associations for this course instance
|
|
11
|
+
* @param periodItems - Period definitions for KTH period calculation (optional)
|
|
12
|
+
* @returns Mapped course instance with extended scheduling information
|
|
13
|
+
*/
|
|
14
|
+
export declare const mapCourseInstanceToSchedulingReportCourse: (entity: SokUtbildningsTillfalleSlimItem, language: Language, partOfProgrammes: PartOfProgramme[], periodItems?: PeriodItem[]) => SchedulingReportCourse;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapCourseInstanceToSchedulingReportCourse = void 0;
|
|
4
|
+
const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const creditsUtil_1 = require("../utils/creditsUtil");
|
|
7
|
+
const getKTHPeriodSemesters_1 = require("../kth/KTHPeriod/getKTHPeriodSemesters");
|
|
8
|
+
/**
|
|
9
|
+
* Map a course instance entity to CourseInstanceWithProgrammes with scheduling information.
|
|
10
|
+
*
|
|
11
|
+
* @param entity - The course instance entity from Ladok
|
|
12
|
+
* @param language - Language for text fields ('sv' or 'en')
|
|
13
|
+
* @param partOfProgrammes - Programme associations for this course instance
|
|
14
|
+
* @param periodItems - Period definitions for KTH period calculation (optional)
|
|
15
|
+
* @returns Mapped course instance with extended scheduling information
|
|
16
|
+
*/
|
|
17
|
+
const mapCourseInstanceToSchedulingReportCourse = (entity, language, partOfProgrammes, periodItems) => {
|
|
18
|
+
var _a, _b, _c, _d;
|
|
19
|
+
const attributeValues = entity.Attributvarden;
|
|
20
|
+
const instansAttributeValues = entity.instans.Attributvarden;
|
|
21
|
+
// Extract basic course information
|
|
22
|
+
const kod = (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.kod');
|
|
23
|
+
const benamning = {
|
|
24
|
+
sv: (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.svensk.benamning'),
|
|
25
|
+
en: (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.engelsk.benamning'),
|
|
26
|
+
};
|
|
27
|
+
const omfattningValue = (_a = (0, ladok_attributvarde_utils_1.extractString)(instansAttributeValues, 'utbildning.attribut.omfattning', 'omfattning')) !== null && _a !== void 0 ? _a : '';
|
|
28
|
+
const utbildningstyp = (0, ladok_attributvarde_utils_1.extractUtbildningstyp)(instansAttributeValues);
|
|
29
|
+
const studietakt = (0, ladok_attributvarde_utils_1.extractStudietakt)(attributeValues);
|
|
30
|
+
// Extract scheduling-specific fields
|
|
31
|
+
const organisation = (0, ladok_attributvarde_utils_1.extractOrganisation)(attributeValues);
|
|
32
|
+
const finansieringsform = (0, ladok_attributvarde_utils_1.extractGrunddata)(attributeValues, 'utbildning.attribut.finansieringsform');
|
|
33
|
+
const tillfalleskod = (0, ladok_attributvarde_utils_1.extractString)(attributeValues, 'utbildning.attribut.utbildningstillfalleskod');
|
|
34
|
+
const utbildningsplatser = (0, ladok_attributvarde_utils_1.extractUtbildningsplatser)(attributeValues);
|
|
35
|
+
const status = (0, ladok_attributvarde_utils_1.extractLadokStatus)(attributeValues);
|
|
36
|
+
const startperiod = (0, ladok_attributvarde_utils_1.extractStartPeriod)(attributeValues);
|
|
37
|
+
// Extract teaching dates
|
|
38
|
+
const forstaUndervisningsdatum = (_b = entity.Tillfallesperioder.at(0)) === null || _b === void 0 ? void 0 : _b.ForstaUndervisningsdatum;
|
|
39
|
+
const sistaUndervisningsdatum = (_c = entity.Tillfallesperioder.at(-1)) === null || _c === void 0 ? void 0 : _c.SistaUndervisningsdatum;
|
|
40
|
+
const forstaDate = forstaUndervisningsdatum
|
|
41
|
+
? Object.assign({ date: forstaUndervisningsdatum }, (0, utils_1.getYearAndWeek)(forstaUndervisningsdatum)) : undefined;
|
|
42
|
+
const sistaDate = sistaUndervisningsdatum
|
|
43
|
+
? Object.assign({ date: sistaUndervisningsdatum }, (0, utils_1.getYearAndWeek)(sistaUndervisningsdatum)) : undefined;
|
|
44
|
+
const weeks = forstaDate && sistaDate
|
|
45
|
+
? forstaDate.year === sistaDate.year
|
|
46
|
+
? `${forstaDate.year} week ${forstaDate.week} - week ${sistaDate.week}`
|
|
47
|
+
: `${forstaDate.year} week ${forstaDate.week} - ${sistaDate.year} week ${sistaDate.week}`
|
|
48
|
+
: undefined;
|
|
49
|
+
const kthPeriods = periodItems && entity.Tillfallesperioder ? (0, getKTHPeriodSemesters_1.getKTHPeriodSemesters)(entity.Tillfallesperioder, periodItems) : [];
|
|
50
|
+
// Build formatted connected programmes string from `partOfProgrammes`.
|
|
51
|
+
// Group by programme code AND year, collect specialisations (inriktning) for each combination.
|
|
52
|
+
const connectedProgrammes = (() => {
|
|
53
|
+
if (!partOfProgrammes || partOfProgrammes.length === 0)
|
|
54
|
+
return undefined;
|
|
55
|
+
// Map key: "CODE_YEAR" -> { hasMain, specialisations }
|
|
56
|
+
const map = new Map();
|
|
57
|
+
partOfProgrammes.forEach(p => {
|
|
58
|
+
const year = p.arskurs || 0;
|
|
59
|
+
const key = `${p.kod}_${year}`;
|
|
60
|
+
const entry = map.get(key) || { kod: p.kod, arskurs: year, hasMain: false, specialisations: [] };
|
|
61
|
+
if (p.inriktning) {
|
|
62
|
+
if (!entry.specialisations.includes(p.inriktning))
|
|
63
|
+
entry.specialisations.push(p.inriktning);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
entry.hasMain = true;
|
|
67
|
+
}
|
|
68
|
+
map.set(key, entry);
|
|
69
|
+
});
|
|
70
|
+
const parts = [];
|
|
71
|
+
for (const info of map.values()) {
|
|
72
|
+
const yearSuffix = info.arskurs ? `${info.arskurs}` : '';
|
|
73
|
+
const specials = info.hasMain ? ['-'].concat(info.specialisations) : info.specialisations;
|
|
74
|
+
const bracket = specials.length > 0 ? ` [${specials.join(', ')}]` : '';
|
|
75
|
+
// Format: CODE{YEAR} [BRACKET]
|
|
76
|
+
parts.push(`${info.kod}${yearSuffix}${bracket}`);
|
|
77
|
+
}
|
|
78
|
+
const result = parts.join(', ');
|
|
79
|
+
return result.length > 0 ? result : undefined;
|
|
80
|
+
})();
|
|
81
|
+
return {
|
|
82
|
+
kod,
|
|
83
|
+
benamning: (_d = benamning[language]) !== null && _d !== void 0 ? _d : '',
|
|
84
|
+
omfattning: (0, creditsUtil_1.formatCreditsWithUnitLabel)(omfattningValue, utbildningstyp, language),
|
|
85
|
+
utbildningstyp: utbildningstyp ? (0, utils_1.translateUtbildningstyp)(utbildningstyp, language).name : '',
|
|
86
|
+
studietakt: studietakt ? (0, utils_1.translateStudietakt)(studietakt, language) : undefined,
|
|
87
|
+
partOfProgrammes,
|
|
88
|
+
tillfalleskod,
|
|
89
|
+
startperiod: startperiod
|
|
90
|
+
? {
|
|
91
|
+
code: startperiod.code,
|
|
92
|
+
inDigits: (0, utils_1.transformPeriodInDigits)(startperiod.code),
|
|
93
|
+
}
|
|
94
|
+
: undefined,
|
|
95
|
+
organisation: organisation
|
|
96
|
+
? {
|
|
97
|
+
kod: (0, utils_1.translateOrganisation)(organisation, language).code,
|
|
98
|
+
benamning: (0, utils_1.translateOrganisation)(organisation, language).name,
|
|
99
|
+
organisationType: (0, utils_1.translateOrganisation)(organisation, language).organisationTypeName,
|
|
100
|
+
}
|
|
101
|
+
: undefined,
|
|
102
|
+
finansieringsform: finansieringsform ? (0, utils_1.translateGrunddata)(finansieringsform, language) : undefined,
|
|
103
|
+
utbildningsplatser,
|
|
104
|
+
status,
|
|
105
|
+
connectedProgrammes,
|
|
106
|
+
weeks,
|
|
107
|
+
kthPeriods: kthPeriods.length > 0 ? kthPeriods : undefined,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
exports.mapCourseInstanceToSchedulingReportCourse = mapCourseInstanceToSchedulingReportCourse;
|
|
111
|
+
//# sourceMappingURL=mapCourseInstanceToSchedulingReportCourse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapCourseInstanceToSchedulingReportCourse.js","sourceRoot":"","sources":["../../src/report/mapCourseInstanceToSchedulingReportCourse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Language } from '../utils';
|
|
2
|
+
import { PartOfProgramme } from '../mapPartOfProgramme';
|
|
3
|
+
import { CourseInstance } from '../mapCourseInstance';
|
|
4
|
+
import { KTHPeriodSemester } from '../kth/KTHPeriod/KTHPeriod';
|
|
5
|
+
export type ReportApi = {
|
|
6
|
+
getSemesterCoursesGroupedByProgramme: (semester: string, language: Language) => Promise<SchedulingReport>;
|
|
7
|
+
};
|
|
8
|
+
export type SchedulingReportCourse = Pick<CourseInstance, 'tillfalleskod' | 'startperiod' | 'finansieringsform' | 'utbildningsplatser' | 'status' | 'studietakt' | 'utbildningstyp'> & {
|
|
9
|
+
kod: string;
|
|
10
|
+
benamning: string;
|
|
11
|
+
omfattning: string;
|
|
12
|
+
organisation?: {
|
|
13
|
+
kod: string;
|
|
14
|
+
benamning: string;
|
|
15
|
+
organisationType?: string;
|
|
16
|
+
};
|
|
17
|
+
weeks?: string;
|
|
18
|
+
kthPeriods?: KTHPeriodSemester[];
|
|
19
|
+
partOfProgrammes?: PartOfProgramme[];
|
|
20
|
+
connectedProgrammes?: string;
|
|
21
|
+
};
|
|
22
|
+
export type SchedulingReportProgramme = {
|
|
23
|
+
programmeCode: string;
|
|
24
|
+
programmeName: {
|
|
25
|
+
sv: string;
|
|
26
|
+
en: string;
|
|
27
|
+
};
|
|
28
|
+
courses: SchedulingReportCourse[];
|
|
29
|
+
};
|
|
30
|
+
export type SchedulingReport = {
|
|
31
|
+
programmes: SchedulingReportProgramme[];
|
|
32
|
+
standaloneCourses: SchedulingReportCourse[];
|
|
33
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/report/types.ts"],"names":[],"mappings":""}
|