@royalschedule/maps 4.0.30 → 4.0.32
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/Additio/from/courses.js.map +1 -1
- package/dist/Additio/from/events.js.map +1 -1
- package/dist/Additio/from/groups.js.map +1 -1
- package/dist/Additio/from/index.js.map +1 -1
- package/dist/Additio/from/locations.js.map +1 -1
- package/dist/Additio/from/persons.js.map +1 -1
- package/dist/Additio/from/schedules.d.ts +0 -1
- package/dist/Additio/from/schedules.js +4 -2
- package/dist/Additio/from/schedules.js.map +1 -1
- package/dist/Additio/from/teachers.js.map +1 -1
- package/dist/Additio/to/index.d.ts +0 -2
- package/dist/Additio/to/schedules.js +4 -2
- package/dist/Additio/to/schedules.js.map +1 -1
- package/dist/Admentum/from/courses.js.map +1 -1
- package/dist/Admentum/from/events.js.map +1 -1
- package/dist/Admentum/from/groups.js.map +1 -1
- package/dist/Admentum/from/index.js.map +1 -1
- package/dist/Admentum/from/locations.js.map +1 -1
- package/dist/Admentum/from/persons.js.map +1 -1
- package/dist/Admentum/from/schedules.d.ts +0 -1
- package/dist/Admentum/from/schedules.js +6 -3
- package/dist/Admentum/from/schedules.js.map +1 -1
- package/dist/Admentum/from/teachers.js.map +1 -1
- package/dist/Admentum/to/index.d.ts +0 -1
- package/dist/Admentum/to/schedules.js +7 -4
- package/dist/Admentum/to/schedules.js.map +1 -1
- package/dist/Excel/index.d.ts +4 -4
- package/dist/Excel/v1/from/index.js +1 -1
- package/dist/Excel/v1/from/index.js.map +1 -1
- package/dist/Excel/v1/index.d.ts +4 -4
- package/dist/Excel/v2/from/index.js +54 -45
- package/dist/Excel/v2/from/index.js.map +1 -1
- package/dist/Excel/v2/index.d.ts +4 -4
- package/dist/IdunSoft/from/courses.js.map +1 -1
- package/dist/IdunSoft/from/events.js +2 -1
- package/dist/IdunSoft/from/events.js.map +1 -1
- package/dist/IdunSoft/from/groups.js.map +1 -1
- package/dist/IdunSoft/from/index.js.map +1 -1
- package/dist/IdunSoft/from/locations.js.map +1 -1
- package/dist/IdunSoft/from/schedules.d.ts +0 -1
- package/dist/IdunSoft/from/schedules.js.map +1 -1
- package/dist/IdunSoft/from/teachers.js.map +1 -1
- package/dist/IdunSoft/to/index.d.ts +0 -1
- package/dist/IdunSoft/to/schedules.js +6 -3
- package/dist/IdunSoft/to/schedules.js.map +1 -1
- package/dist/InfoMentor/to/index.d.ts +0 -1
- package/dist/InfoMentor/to/schedules.js +2 -1
- package/dist/InfoMentor/to/schedules.js.map +1 -1
- package/dist/PlanDigital/from/index.js.map +1 -1
- package/dist/PlanDigital/from/schedules.js +11 -9
- package/dist/PlanDigital/from/schedules.js.map +1 -1
- package/dist/PlanDigital/index.d.ts +0 -1
- package/dist/Quiculum/file/to/index.d.ts +0 -1
- package/dist/Quiculum/file/to/schedules.js +9 -5
- package/dist/Quiculum/file/to/schedules.js.map +1 -1
- package/dist/RS/from/division.d.ts +0 -1
- package/dist/RS/from/division.js +2 -1
- package/dist/RS/from/division.js.map +1 -1
- package/dist/RS/from/index.js.map +1 -1
- package/dist/RS/from/schedules.d.ts +0 -1
- package/dist/RS/from/schedules.js.map +1 -1
- package/dist/RS/make-connected.d.ts +1 -3
- package/dist/RS/make-connected.js +42 -33
- package/dist/RS/make-connected.js.map +1 -1
- package/dist/RS/to/index.js.map +1 -1
- package/dist/RS/to/initial-configuration.js +6 -4
- package/dist/RS/to/initial-configuration.js.map +1 -1
- package/dist/RS/to/input/collections.js.map +1 -1
- package/dist/RS/to/input/default.js +2 -1
- package/dist/RS/to/input/default.js.map +1 -1
- package/dist/RS/to/input/dependencies.js +2 -1
- package/dist/RS/to/input/dependencies.js.map +1 -1
- package/dist/RS/to/input/dynamic-locked-times.js +2 -1
- package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
- package/dist/RS/to/input/events.js.map +1 -1
- package/dist/RS/to/input/groups.js.map +1 -1
- package/dist/RS/to/input/individuals.js +2 -1
- package/dist/RS/to/input/individuals.js.map +1 -1
- package/dist/RS/to/input/input.js +2 -1
- package/dist/RS/to/input/input.js.map +1 -1
- package/dist/RS/to/input/intervals.js +4 -2
- package/dist/RS/to/input/intervals.js.map +1 -1
- package/dist/RS/to/input/periods.js +4 -2
- package/dist/RS/to/input/periods.js.map +1 -1
- package/dist/RS/to/input/settings.js.map +1 -1
- package/dist/RS/to/input/teachers.js.map +1 -1
- package/dist/RS/to/input/util/attach-locked-times.js.map +1 -1
- package/dist/RS/to/input/util/parse-days.js.map +1 -1
- package/dist/RS/to/input/util/parse-group-references.js.map +1 -1
- package/dist/RS/to/input/util/parse-intervals.js +4 -2
- package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
- package/dist/RS/to/input/util/parse-location-references.js +2 -1
- package/dist/RS/to/input/util/parse-location-references.js.map +1 -1
- package/dist/RS/to/input/util/parse-max-working-hours.js.map +1 -1
- package/dist/RS/to/input/util/parse-minimum-break-length.js.map +1 -1
- package/dist/RS/to/input/util/util.js +2 -1
- package/dist/RS/to/input/util/util.js.map +1 -1
- package/dist/RS/to/schedules.js.map +1 -1
- package/dist/RS/types/to.d.ts +0 -1
- package/dist/SS12000/from/activities.js +2 -1
- package/dist/SS12000/from/activities.js.map +1 -1
- package/dist/SS12000/from/calendar-events.js.map +1 -1
- package/dist/SS12000/from/duties.js.map +1 -1
- package/dist/SS12000/from/groups.js.map +1 -1
- package/dist/SS12000/from/index.js.map +1 -1
- package/dist/SS12000/from/persons.js.map +1 -1
- package/dist/SS12000/from/resources.js.map +1 -1
- package/dist/SS12000/from/rooms.js.map +1 -1
- package/dist/SS12000/from/syllabuses.js.map +1 -1
- package/dist/SS12000/index.d.ts +181 -1
- package/dist/SS12000/to/activities.js.map +1 -1
- package/dist/SS12000/to/calendar-events.js.map +1 -1
- package/dist/SS12000/to/common.js.map +1 -1
- package/dist/SS12000/to/duties.js.map +1 -1
- package/dist/SS12000/to/groups.js.map +1 -1
- package/dist/SS12000/to/index.d.ts +0 -1
- package/dist/SS12000/to/persons.js.map +1 -1
- package/dist/SS12000/to/resources.js.map +1 -1
- package/dist/SS12000/to/rooms.js.map +1 -1
- package/dist/SS12000/to/syllabuses.js.map +1 -1
- package/dist/SchoolSoft/api/from/index.js.map +1 -1
- package/dist/SchoolSoft/api/from/schedules.js +12 -8
- package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/api/index.d.ts +7 -6
- package/dist/SchoolSoft/file/from/index.js.map +1 -1
- package/dist/SchoolSoft/file/from/schedules.js +87 -83
- package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/file/index.d.ts +0 -1
- package/dist/SchoolSoft/file/to/index.d.ts +0 -1
- package/dist/SchoolSoft/file/to/schedules.js +2 -1
- package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
- package/dist/SchoolSoft/index.d.ts +0 -1
- package/dist/Schoolity/txt/to/index.d.ts +0 -1
- package/dist/Schoolity/txt/to/schedules.js +12 -5
- package/dist/Schoolity/txt/to/schedules.js.map +1 -1
- package/dist/Skola24/mdb/from/course-and-events.js +5 -3
- package/dist/Skola24/mdb/from/course-and-events.js.map +1 -1
- package/dist/Skola24/mdb/from/groups.js.map +1 -1
- package/dist/Skola24/mdb/from/index.js.map +1 -1
- package/dist/Skola24/mdb/from/locations.js.map +1 -1
- package/dist/Skola24/mdb/from/schedule.d.ts +0 -1
- package/dist/Skola24/mdb/from/schedule.js.map +1 -1
- package/dist/Skola24/mdb/from/teachers.js.map +1 -1
- package/dist/Skola24/txt/from/calendar-exceptions.js +2 -1
- package/dist/Skola24/txt/from/calendar-exceptions.js.map +1 -1
- package/dist/Skola24/txt/from/division.js.map +1 -1
- package/dist/Skola24/txt/from/index.js.map +1 -1
- package/dist/Skola24/txt/from/period.js +34 -31
- package/dist/Skola24/txt/from/period.js.map +1 -1
- package/dist/Skola24/txt/from/schedules.d.ts +0 -1
- package/dist/Skola24/txt/from/schedules.js +10 -6
- package/dist/Skola24/txt/from/schedules.js.map +1 -1
- package/dist/Skola24/txt/from/util.js.map +1 -1
- package/dist/Skola24/txt/index.d.ts +0 -1
- package/dist/Skola24/txt/to/index.d.ts +0 -1
- package/dist/Skola24/txt/to/schedules.js +12 -5
- package/dist/Skola24/txt/to/schedules.js.map +1 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/functions.js.map +1 -1
- package/dist/common/get-date.js.map +1 -1
- package/dist/common/make-chainable/index.js.map +1 -1
- package/dist/common/types.d.ts +3 -1
- package/dist/core/from/configurations.js.map +1 -1
- package/dist/core/from/courses.js.map +1 -1
- package/dist/core/from/events.js.map +1 -1
- package/dist/core/from/exceptions.js.map +1 -1
- package/dist/core/from/groups.js.map +1 -1
- package/dist/core/from/index.js.map +1 -1
- package/dist/core/from/locations.js.map +1 -1
- package/dist/core/from/locked-times.js.map +1 -1
- package/dist/core/from/overlap-groups.js.map +1 -1
- package/dist/core/from/periods.js.map +1 -1
- package/dist/core/from/persons.js.map +1 -1
- package/dist/core/from/root-intervals.js.map +1 -1
- package/dist/core/from/schedules.js.map +1 -1
- package/dist/core/from/settings.js.map +1 -1
- package/dist/core/from/syllabuses.js.map +1 -1
- package/dist/core/from/teachers.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/interfaces/other/companies.js.map +1 -1
- package/dist/core/interfaces/other/operations.d.ts +0 -1
- package/dist/core/interfaces/vertices/companies.d.ts +0 -1
- package/dist/core/interfaces/vertices/configurations.d.ts +1 -2
- package/dist/core/interfaces/vertices/courses.d.ts +0 -1
- package/dist/core/interfaces/vertices/division-settings.d.ts +0 -1
- package/dist/core/interfaces/vertices/divisions.d.ts +0 -1
- package/dist/core/interfaces/vertices/events.d.ts +2 -1
- package/dist/core/interfaces/vertices/exceptions.d.ts +0 -1
- package/dist/core/interfaces/vertices/generations.d.ts +0 -2
- package/dist/core/interfaces/vertices/groups.d.ts +0 -1
- package/dist/core/interfaces/vertices/index.d.ts +14 -1
- package/dist/core/interfaces/vertices/locations.d.ts +0 -1
- package/dist/core/interfaces/vertices/locked-times.d.ts +0 -2
- package/dist/core/interfaces/vertices/overlap-groups.d.ts +0 -1
- package/dist/core/interfaces/vertices/periods.d.ts +0 -2
- package/dist/core/interfaces/vertices/persons.d.ts +0 -1
- package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +0 -1
- package/dist/core/interfaces/vertices/properties/coalesced.d.ts +0 -1
- package/dist/core/interfaces/vertices/root-intervals.d.ts +0 -2
- package/dist/core/interfaces/vertices/syllabuses.d.ts +0 -1
- package/dist/core/interfaces/vertices/teachers.d.ts +0 -1
- package/dist/core/interfaces/vertices/threads.d.ts +31 -0
- package/dist/core/interfaces/vertices/users.d.ts +4 -2
- package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +9 -8
- package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +4 -4
- package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +9 -8
- package/dist/core/interfaces/vertices/util/edges.d.ts +26 -8
- package/dist/core/interfaces/vertices/util/util.d.ts +24 -20
- package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +16 -11
- package/dist/core/interfaces/vertices/util/vertex.d.ts +2 -2
- package/dist/core/interfaces/vertices/vertex-query.d.ts +29 -26
- package/dist/core/interfaces/vertices/vertex-query.js +8 -0
- package/dist/core/interfaces/vertices/vertex-query.js.map +1 -1
- package/dist/core/to/configurations.js +2 -1
- package/dist/core/to/configurations.js.map +1 -1
- package/dist/core/to/courses.js +2 -1
- package/dist/core/to/courses.js.map +1 -1
- package/dist/core/to/division.js.map +1 -1
- package/dist/core/to/events.js +4 -2
- package/dist/core/to/events.js.map +1 -1
- package/dist/core/to/exceptions.js +2 -1
- package/dist/core/to/exceptions.js.map +1 -1
- package/dist/core/to/groups.js +2 -1
- package/dist/core/to/groups.js.map +1 -1
- package/dist/core/to/locations.js +2 -1
- package/dist/core/to/locations.js.map +1 -1
- package/dist/core/to/locked-times.js +2 -1
- package/dist/core/to/locked-times.js.map +1 -1
- package/dist/core/to/overlap-groups.js +2 -1
- package/dist/core/to/overlap-groups.js.map +1 -1
- package/dist/core/to/periods.js +2 -1
- package/dist/core/to/periods.js.map +1 -1
- package/dist/core/to/persons.js +2 -1
- package/dist/core/to/persons.js.map +1 -1
- package/dist/core/to/root-intervals.js +2 -1
- package/dist/core/to/root-intervals.js.map +1 -1
- package/dist/core/to/schedules.d.ts +0 -1
- package/dist/core/to/schedules.js.map +1 -1
- package/dist/core/to/settings.js +2 -1
- package/dist/core/to/settings.js.map +1 -1
- package/dist/core/to/syllabuses.js +2 -1
- package/dist/core/to/syllabuses.js.map +1 -1
- package/dist/core/to/teachers.js +2 -1
- package/dist/core/to/teachers.js.map +1 -1
- package/dist/core/to/util.d.ts +0 -2
- package/dist/core/to/util.js +2 -1
- package/dist/core/to/util.js.map +1 -1
- package/dist/core/types/index.d.ts +10 -1
- package/dist/core/util.js +2 -1
- package/dist/core/util.js.map +1 -1
- package/dist/identify/constants/index.js.map +1 -1
- package/dist/identify/index.js +2 -1
- package/dist/identify/index.js.map +1 -1
- package/dist/sdui/from/classes.js.map +1 -1
- package/dist/sdui/from/courses.js.map +1 -1
- package/dist/sdui/from/holidays.js.map +1 -1
- package/dist/sdui/from/index.js.map +1 -1
- package/dist/sdui/from/lessons.js.map +1 -1
- package/dist/sdui/from/rooms.js.map +1 -1
- package/dist/sdui/from/schedules.d.ts +0 -2
- package/dist/sdui/from/schedules.js.map +1 -1
- package/dist/sdui/from/school-years.js.map +1 -1
- package/dist/sdui/from/substitution-plans.js.map +1 -1
- package/dist/sdui/from/teachers.js.map +1 -1
- package/dist/sdui/to/classes.js.map +1 -1
- package/dist/sdui/to/courses.js.map +1 -1
- package/dist/sdui/to/holidays.js.map +1 -1
- package/dist/sdui/to/hours.js.map +1 -1
- package/dist/sdui/to/index.d.ts +0 -2
- package/dist/sdui/to/lessons.js.map +1 -1
- package/dist/sdui/to/rooms.js.map +1 -1
- package/dist/sdui/to/schedules.js.map +1 -1
- package/dist/sdui/to/school-years.js.map +1 -1
- package/dist/sdui/to/substitution-plans.js +6 -3
- package/dist/sdui/to/substitution-plans.js.map +1 -1
- package/dist/sdui/to/teachers.js.map +1 -1
- package/dist/vKlass/from/index.js.map +1 -1
- package/dist/vKlass/from/schedule.d.ts +0 -1
- package/dist/vKlass/from/schedule.js.map +1 -1
- package/dist/vKlass/to/schedules.js +17 -6
- package/dist/vKlass/to/schedules.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/interfaces/index.d.ts +0 -23
- package/dist/core/interfaces/other/index.d.ts +0 -6
- package/dist/core/interfaces/vertices/util/index.d.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","x","course: OutTypes.course","scheduledGroupIds: string[]"],"sources":["../../../../src/SchoolSoft/api/from/schedules.ts"],"sourcesContent":["import type { CoreTypes } from '../../../core';\nimport type { PUBLIC_ID_KEY } from '../../../core/interfaces/vertices/util/vertex';\nimport type { Schedule } from '../types/schedule';\n\nconst sep = ',';\nfunction split (val: string): string[] {\n return val.split(sep)\n .map(x => x.trim())\n .filter(x => x.length);\n}\n\nfunction courseMapKey (\n subject: string | undefined,\n groups: string[],\n teachers: string[]\n): string {\n return JSON.stringify({ s: subject, g: groups.sort(), t: teachers.sort() });\n}\n\nnamespace OutTypes {\n export type event = CoreTypes.SerializedWithOptionalId.Event & { [PUBLIC_ID_KEY]: string };\n export type course = CoreTypes.SerializedWithOptionalId.Course & { [PUBLIC_ID_KEY]: string };\n export type location = CoreTypes.SerializedWithOptionalId.Location & { [PUBLIC_ID_KEY]: string };\n export type group = CoreTypes.SerializedWithOptionalId.Group & { [PUBLIC_ID_KEY]: string };\n export type person = CoreTypes.SerializedWithOptionalId.Person & { [PUBLIC_ID_KEY]: string };\n export type teacher = CoreTypes.SerializedWithOptionalId.Teacher & { [PUBLIC_ID_KEY]: string };\n}\ntype Out = {\n locations: OutTypes.location[];\n teachers: OutTypes.teacher[];\n groups: OutTypes.group[];\n courses: OutTypes.course[];\n events: OutTypes.event[];\n persons: OutTypes.person[];\n\n meta: {\n errors?: string[];\n warnings?: string[];\n };\n};\n\nexport default (\n data: Schedule\n): Out => {\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n ////\n //// persons\n ////\n const persons = data.persons\n .map((x): OutTypes.person => ({\n ids: x.id,\n //group: x.class, only name of class\n firstName: x.fname,\n lastName: x.lname,\n sex: ['m', 'p'].includes(x.sex) ? 'Man' : (['f', 'w'].includes(x.sex) ? 'Woman' : undefined),\n ...x.socialnumber && {\n SSN: {\n value: x.socialnumber,\n nationality: 'SE'\n }\n },\n ...x.email && {\n emails: [\n {\n value: x.email,\n type: 'organization'\n }\n ]\n }\n }));\n\n ////\n //// locations\n ////\n const locations = data.locations\n .map((x): OutTypes.location => ({\n ids: x.id,\n displayName: x.name\n }));\n\n\n ////\n //// teachers\n ////\n const initialTeacherMap = new Map(data.teachers\n .map((x): undefined | [string, OutTypes.teacher] => {\n // must be active\n if (x.active != '1') return;\n\n // ensure the initials to be unique\n if (initialTeacherMap.has(x.initial)) {\n warnings.push(`There already exists an active teacher with the initial \"${x.initial}\".`);\n return;\n }\n\n return [x.initial, {\n ids: x.id,\n displayName: x.fname + ' ' + x.lname\n }];\n })\n .filter(x => x != null)\n );\n\n\n\n ////\n //// groups\n ////\n const studentGroupMap = new Map<string, string>();\n const nameGroupMap = new Map<string, OutTypes.group>();\n data.groups.forEach(x => {\n const name = x.name.trim();\n\n // must be active\n if (x.active != '1') return;\n\n // must be a class type\n if (x.classtype != '1') return;\n\n // ensure the name to be unique\n if (nameGroupMap.has(name)) {\n warnings.push(`There already exists an active group with the name \"${name}\".`);\n return;\n }\n\n // add to student group map\n const members = split(x.studentid).filter(x => x);\n\n members.forEach(id => {\n if (studentGroupMap.has(id)) {\n errors.push(`The student with id \"${id}\" does already belong to a different group.`);\n return;\n }\n\n studentGroupMap.set(id, x.id);\n });\n\n // add group\n nameGroupMap.set(name, {\n ids: x.id,\n displayName: name,\n species: 'class',\n members\n });\n });\n\n\n ////\n //// create \"scheduled group\" to subject map\n ////\n const groupSubjectMap = new Map<string, string>();\n data.lessons.forEach(x => {\n if (x.subject) {\n groupSubjectMap.set(x.group.trim(), x.subject);\n }\n });\n\n\n ////\n //// courses\n ////\n const courseMap = new Map<string, OutTypes.course>();\n const nameCourseMap = new Map<string, OutTypes.course>();\n data.groups.forEach(x => {\n const name = x.name.trim();\n\n // must be active\n if (x.active != '1') return;\n\n // must be a course type\n if (x.classtype == '1') return;\n\n // find all groups connected to the course\n const groupSet = new Set<string>();\n split(x.studentid)\n .filter(x => x)\n .map(id => {\n const group = studentGroupMap.get(id);\n if (!group) {\n errors.push(`The student with id \"${id}\" does not belong to a group.`);\n return;\n }\n groupSet.add(group);\n });\n\n // find all teachers\n const teacherSet = new Set<string>();\n split(x.teacher)\n .filter(x => x)\n .map(initial => {\n const teacher = initialTeacherMap.get(initial);\n if (!teacher) {\n errors.push(`The teacher with initial \"${initial}\" does not exist.`);\n return;\n }\n\n teacherSet.add(teacher.ids);\n });\n\n // try to figure out the subject from the group name via its lessons\n const subject = groupSubjectMap.get(name);\n if (!subject) {\n warnings.push(`Could not determine the subject of the course \"${name}\" (${x.id}).`);\n }\n\n\n // ensure the name to be unique\n if (nameGroupMap.has(name)) {\n warnings.push(`There already exists an active group with the name \"${name}\".`);\n return;\n }\n\n // add course\n const course: OutTypes.course = {\n ids: x.id,\n displayName: name,\n // groups: [...groupSet].map(to => ({ to })),\n // teachers: [...teacherSet].map(to => ({ to })),\n ...(subject && { subject })\n };\n nameCourseMap.set(name, course);\n courseMap.set(courseMapKey(course.subject, [...groupSet], [...teacherSet]), course);\n });\n\n\n ////\n //// load further courses from lessons\n ////\n data.lessons.forEach(x => {\n\n // fetch its teachers\n const teacherSet = new Set<string>();\n split(x.teacher)\n .forEach(y => {\n const id = initialTeacherMap.get(y)?.ids;\n if (id) teacherSet.add(id);\n });\n const teachers = [...teacherSet].map(to => ({ to }));\n\n // fetch its groups\n const scheduledGroupIds: string[] = [];\n const groupSet = new Set<string>();\n split(x.group)\n .forEach(y => {\n // is group\n const id = nameGroupMap.get(y)?.ids;\n if (id) {\n scheduledGroupIds.push(id);\n groupSet.add(id);\n return;\n }\n\n // is course\n const course = nameCourseMap.get(y);\n if (course) {\n scheduledGroupIds.push(course.ids);\n course.groups?.forEach(z => groupSet.add(z.to.toString()));\n }\n });\n const groups = [...groupSet].map(to => ({ to }));\n\n // add as course if at least a single groups or teacher is connected\n const key = courseMapKey(x.subject, groups.map(({ to }) => to), teachers.map(({ to }) => to));\n if (groups.length && teachers.length && !courseMap.has(key)) {\n const ids = scheduledGroupIds.join(sep);\n courseMap.set(key, {\n ids: ids,\n displayName: x.subject + ( x.group.length ? ' - ' + x.group : '') + ( x.teacher.length ? ' - ' + x.teacher : ''),\n subject: x.subject,\n groups: [], // Don't assign to course\n teachers: [], // Don't assign to course\n });\n }\n\n });\n\n\n const teachers = [...initialTeacherMap.values()];\n const groups = [...nameGroupMap.values()];\n const courses = [...courseMap.values()];\n const events: OutTypes.event[] = [];\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors: errors } : { } ),\n ...( warnings.length ? { warnings: warnings } : { } )\n }\n };\n};"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","x","course: OutTypes.course","teachers","scheduledGroupIds: string[]","groups","events: OutTypes.event[]"],"sources":["../../../../src/SchoolSoft/api/from/schedules.ts"],"sourcesContent":["import type { CoreTypes } from '../../../core';\nimport type { PUBLIC_ID_KEY } from '../../../core/interfaces/vertices/util/vertex';\nimport type { Schedule } from '../types/schedule';\n\nconst sep = ',';\nfunction split (val: string): string[] {\n return val.split(sep)\n .map(x => x.trim())\n .filter(x => x.length);\n}\n\nfunction courseMapKey (\n subject: string | undefined,\n groups: string[],\n teachers: string[]\n): string {\n return JSON.stringify({ s: subject, g: groups.sort(), t: teachers.sort() });\n}\n\nnamespace OutTypes {\n export type event = CoreTypes.SerializedWithOptionalId.Event & { [PUBLIC_ID_KEY]: string };\n export type course = CoreTypes.SerializedWithOptionalId.Course & { [PUBLIC_ID_KEY]: string };\n export type location = CoreTypes.SerializedWithOptionalId.Location & { [PUBLIC_ID_KEY]: string };\n export type group = CoreTypes.SerializedWithOptionalId.Group & { [PUBLIC_ID_KEY]: string };\n export type person = CoreTypes.SerializedWithOptionalId.Person & { [PUBLIC_ID_KEY]: string };\n export type teacher = CoreTypes.SerializedWithOptionalId.Teacher & { [PUBLIC_ID_KEY]: string };\n}\ntype Out = {\n locations: OutTypes.location[];\n teachers: OutTypes.teacher[];\n groups: OutTypes.group[];\n courses: OutTypes.course[];\n events: OutTypes.event[];\n persons: OutTypes.person[];\n\n meta: {\n errors?: string[];\n warnings?: string[];\n };\n};\n\nexport default (\n data: Schedule\n): Out => {\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n ////\n //// persons\n ////\n const persons = data.persons\n .map((x): OutTypes.person => ({\n ids: x.id,\n //group: x.class, only name of class\n firstName: x.fname,\n lastName: x.lname,\n sex: ['m', 'p'].includes(x.sex) ? 'Man' : (['f', 'w'].includes(x.sex) ? 'Woman' : undefined),\n ...x.socialnumber && {\n SSN: {\n value: x.socialnumber,\n nationality: 'SE'\n }\n },\n ...x.email && {\n emails: [\n {\n value: x.email,\n type: 'organization'\n }\n ]\n }\n }));\n\n ////\n //// locations\n ////\n const locations = data.locations\n .map((x): OutTypes.location => ({\n ids: x.id,\n displayName: x.name\n }));\n\n\n ////\n //// teachers\n ////\n const initialTeacherMap = new Map(data.teachers\n .map((x): undefined | [string, OutTypes.teacher] => {\n // must be active\n if (x.active != '1') return;\n\n // ensure the initials to be unique\n if (initialTeacherMap.has(x.initial)) {\n warnings.push(`There already exists an active teacher with the initial \"${x.initial}\".`);\n return;\n }\n\n return [x.initial, {\n ids: x.id,\n displayName: x.fname + ' ' + x.lname\n }];\n })\n .filter(x => x != null)\n );\n\n\n\n ////\n //// groups\n ////\n const studentGroupMap = new Map<string, string>();\n const nameGroupMap = new Map<string, OutTypes.group>();\n data.groups.forEach(x => {\n const name = x.name.trim();\n\n // must be active\n if (x.active != '1') return;\n\n // must be a class type\n if (x.classtype != '1') return;\n\n // ensure the name to be unique\n if (nameGroupMap.has(name)) {\n warnings.push(`There already exists an active group with the name \"${name}\".`);\n return;\n }\n\n // add to student group map\n const members = split(x.studentid).filter(x => x);\n\n members.forEach(id => {\n if (studentGroupMap.has(id)) {\n errors.push(`The student with id \"${id}\" does already belong to a different group.`);\n return;\n }\n\n studentGroupMap.set(id, x.id);\n });\n\n // add group\n nameGroupMap.set(name, {\n ids: x.id,\n displayName: name,\n species: 'class',\n members\n });\n });\n\n\n ////\n //// create \"scheduled group\" to subject map\n ////\n const groupSubjectMap = new Map<string, string>();\n data.lessons.forEach(x => {\n if (x.subject) {\n groupSubjectMap.set(x.group.trim(), x.subject);\n }\n });\n\n\n ////\n //// courses\n ////\n const courseMap = new Map<string, OutTypes.course>();\n const nameCourseMap = new Map<string, OutTypes.course>();\n data.groups.forEach(x => {\n const name = x.name.trim();\n\n // must be active\n if (x.active != '1') return;\n\n // must be a course type\n if (x.classtype == '1') return;\n\n // find all groups connected to the course\n const groupSet = new Set<string>();\n split(x.studentid)\n .filter(x => x)\n .map(id => {\n const group = studentGroupMap.get(id);\n if (!group) {\n errors.push(`The student with id \"${id}\" does not belong to a group.`);\n return;\n }\n groupSet.add(group);\n });\n\n // find all teachers\n const teacherSet = new Set<string>();\n split(x.teacher)\n .filter(x => x)\n .map(initial => {\n const teacher = initialTeacherMap.get(initial);\n if (!teacher) {\n errors.push(`The teacher with initial \"${initial}\" does not exist.`);\n return;\n }\n\n teacherSet.add(teacher.ids);\n });\n\n // try to figure out the subject from the group name via its lessons\n const subject = groupSubjectMap.get(name);\n if (!subject) {\n warnings.push(`Could not determine the subject of the course \"${name}\" (${x.id}).`);\n }\n\n\n // ensure the name to be unique\n if (nameGroupMap.has(name)) {\n warnings.push(`There already exists an active group with the name \"${name}\".`);\n return;\n }\n\n // add course\n const course: OutTypes.course = {\n ids: x.id,\n displayName: name,\n // groups: [...groupSet].map(to => ({ to })),\n // teachers: [...teacherSet].map(to => ({ to })),\n ...(subject && { subject })\n };\n nameCourseMap.set(name, course);\n courseMap.set(courseMapKey(course.subject, [...groupSet], [...teacherSet]), course);\n });\n\n\n ////\n //// load further courses from lessons\n ////\n data.lessons.forEach(x => {\n\n // fetch its teachers\n const teacherSet = new Set<string>();\n split(x.teacher)\n .forEach(y => {\n const id = initialTeacherMap.get(y)?.ids;\n if (id) teacherSet.add(id);\n });\n const teachers = [...teacherSet].map(to => ({ to }));\n\n // fetch its groups\n const scheduledGroupIds: string[] = [];\n const groupSet = new Set<string>();\n split(x.group)\n .forEach(y => {\n // is group\n const id = nameGroupMap.get(y)?.ids;\n if (id) {\n scheduledGroupIds.push(id);\n groupSet.add(id);\n return;\n }\n\n // is course\n const course = nameCourseMap.get(y);\n if (course) {\n scheduledGroupIds.push(course.ids);\n course.groups?.forEach(z => groupSet.add(z.to.toString()));\n }\n });\n const groups = [...groupSet].map(to => ({ to }));\n\n // add as course if at least a single groups or teacher is connected\n const key = courseMapKey(x.subject, groups.map(({ to }) => to), teachers.map(({ to }) => to));\n if (groups.length && teachers.length && !courseMap.has(key)) {\n const ids = scheduledGroupIds.join(sep);\n courseMap.set(key, {\n ids: ids,\n displayName: x.subject + ( x.group.length ? ' - ' + x.group : '') + ( x.teacher.length ? ' - ' + x.teacher : ''),\n subject: x.subject,\n groups: [], // Don't assign to course\n teachers: [], // Don't assign to course\n });\n }\n\n });\n\n\n const teachers = [...initialTeacherMap.values()];\n const groups = [...nameGroupMap.values()];\n const courses = [...courseMap.values()];\n const events: OutTypes.event[] = [];\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors: errors } : { } ),\n ...( warnings.length ? { warnings: warnings } : { } )\n }\n };\n};"],"mappings":"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"}
|
|
@@ -7,8 +7,7 @@ import { PlannedScheduledDuration } from "../../core/interfaces/vertices/propert
|
|
|
7
7
|
import { MinBreakLength } from "../../core/interfaces/vertices/properties/min-break-length.js";
|
|
8
8
|
import { Schedule } from "./types/schedule.js";
|
|
9
9
|
import { Types } from "./types/index.js";
|
|
10
|
-
import "
|
|
11
|
-
import * as moment193 from "moment";
|
|
10
|
+
import * as moment195 from "moment";
|
|
12
11
|
|
|
13
12
|
//#region src/SchoolSoft/api/index.d.ts
|
|
14
13
|
declare class Map {
|
|
@@ -287,8 +286,8 @@ declare class Map {
|
|
|
287
286
|
createdAt?: string | undefined;
|
|
288
287
|
updatedAt?: string | undefined;
|
|
289
288
|
lastModifiedBy?: string | undefined;
|
|
290
|
-
start?: (
|
|
291
|
-
end?: (
|
|
289
|
+
start?: (moment195.Moment | string) | undefined;
|
|
290
|
+
end?: (moment195.Moment | string) | undefined;
|
|
292
291
|
potentialCenter?: string | undefined;
|
|
293
292
|
type?: string | undefined;
|
|
294
293
|
tags?: Tag[] | undefined;
|
|
@@ -331,6 +330,7 @@ declare class Map {
|
|
|
331
330
|
rank?: number | undefined;
|
|
332
331
|
locations: [string];
|
|
333
332
|
}[] | undefined;
|
|
333
|
+
threads?: string[] | undefined;
|
|
334
334
|
}, "id" | "_id" | "ids"> & Partial<Pick<{
|
|
335
335
|
id: IDType;
|
|
336
336
|
_id: PrivateIDType;
|
|
@@ -340,8 +340,8 @@ declare class Map {
|
|
|
340
340
|
createdAt?: string | undefined;
|
|
341
341
|
updatedAt?: string | undefined;
|
|
342
342
|
lastModifiedBy?: string | undefined;
|
|
343
|
-
start?: (
|
|
344
|
-
end?: (
|
|
343
|
+
start?: (moment195.Moment | string) | undefined;
|
|
344
|
+
end?: (moment195.Moment | string) | undefined;
|
|
345
345
|
potentialCenter?: string | undefined;
|
|
346
346
|
type?: string | undefined;
|
|
347
347
|
tags?: Tag[] | undefined;
|
|
@@ -384,6 +384,7 @@ declare class Map {
|
|
|
384
384
|
rank?: number | undefined;
|
|
385
385
|
locations: [string];
|
|
386
386
|
}[] | undefined;
|
|
387
|
+
threads?: string[] | undefined;
|
|
387
388
|
}, "id" | "_id" | "ids">> & {
|
|
388
389
|
ids: string;
|
|
389
390
|
})[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../../src/SchoolSoft/file/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA
|
|
1
|
+
{"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../../src/SchoolSoft/file/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA"}
|
|
@@ -14,7 +14,8 @@ const days = [
|
|
|
14
14
|
];
|
|
15
15
|
function _parseWeeks(weeks, set, method = "add") {
|
|
16
16
|
if (!weeks) return;
|
|
17
|
-
weeks.split(",").map((x) => trim(x))
|
|
17
|
+
const intervals = weeks.split(",").map((x) => trim(x));
|
|
18
|
+
intervals.forEach((interval) => {
|
|
18
19
|
if (!interval.includes("-")) {
|
|
19
20
|
set[method](Number(interval));
|
|
20
21
|
return;
|
|
@@ -27,89 +28,92 @@ var schedules_default = (input, options) => {
|
|
|
27
28
|
const teachers = /* @__PURE__ */ new Set();
|
|
28
29
|
const groups = /* @__PURE__ */ new Set();
|
|
29
30
|
const locations = /* @__PURE__ */ new Set();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (start$1
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
locations:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}))
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
}).filter((x) => x != null)).chain((x) => x.filter((e) => !!e.ids), (x) => groupBy(x, (e) => e.subject + ".g." + e.groups?.map((x$1) => x$1.to).join(",") + (e.groups?.length ? "" : ".t." + e.teachers?.map((x$1) => x$1.to).join(","))), (x) => Object.values(x).map((events) => {
|
|
93
|
-
const { subject, groups: groups$1, teachers: teachers$1 } = events[0];
|
|
94
|
-
for (const e of events) {
|
|
95
|
-
delete e.subject;
|
|
96
|
-
delete e.groups;
|
|
97
|
-
}
|
|
98
|
-
const course = {
|
|
99
|
-
displayName: `${subject}-${(groups$1 ?? teachers$1)?.map((x$1) => x$1.to).join(" ")}`,
|
|
100
|
-
events: events.map((e) => e.ids),
|
|
101
|
-
...groups$1
|
|
102
|
-
};
|
|
103
|
-
if (size(countBy(events, (e) => e.teachers?.map((x$1) => x$1.to).sort().join(","))) == 1) {
|
|
104
|
-
course.teachers = events[0].teachers ?? void 0;
|
|
105
|
-
events.forEach((e) => delete e.teachers);
|
|
106
|
-
}
|
|
107
|
-
if (size(countBy(events, (e) => e.locations?.map((x$1) => x$1.locations[0]).sort().join(","))) == 1) {
|
|
108
|
-
course.locations = events[0].locations ?? void 0;
|
|
109
|
-
events.forEach((e) => delete e.locations);
|
|
31
|
+
const events = input.map((event) => {
|
|
32
|
+
if (!event.length) return;
|
|
33
|
+
const weeks = /* @__PURE__ */ new Set();
|
|
34
|
+
const { inweek, exweek, realweeks } = event;
|
|
35
|
+
try {
|
|
36
|
+
_parseWeeks(inweek, weeks, "add");
|
|
37
|
+
_parseWeeks(realweeks, weeks, "add");
|
|
38
|
+
if (weeks.size == 0) Array.from({ length: 51 }, (_, index) => index + 1).forEach((x) => weeks.add(x));
|
|
39
|
+
_parseWeeks(exweek, weeks, "delete");
|
|
40
|
+
} catch (err) {
|
|
41
|
+
console.error(err);
|
|
42
|
+
}
|
|
43
|
+
if (options?.interval) {
|
|
44
|
+
const { start: start$1, end: end$1 } = options.interval;
|
|
45
|
+
if (start$1 > 52 || start$1 <= 0) throw new Error(`(SchoolSoft::From::Schedules) Interval::start is invalid. value ${start$1}`);
|
|
46
|
+
if (end$1 > 52 || end$1 <= 0) throw new Error(`(SchoolSoft::From::Schedules) Interval::end is invalid. value ${end$1}`);
|
|
47
|
+
if (start$1 > end$1) {
|
|
48
|
+
if (!Array.from(weeks).some((week) => week >= start$1 && week <= 52 || week <= end$1)) return;
|
|
49
|
+
} else if (!Array.from(weeks).some((week) => week >= start$1 && week <= end$1)) return;
|
|
50
|
+
}
|
|
51
|
+
let start;
|
|
52
|
+
let end;
|
|
53
|
+
const { starttime, subject, day, length, teacher, group, room } = event;
|
|
54
|
+
if (day && starttime) {
|
|
55
|
+
const _day = days.indexOf(day);
|
|
56
|
+
if (_day > 4) return;
|
|
57
|
+
start = get_date_default(_day, `${starttime.substring(0, 2)}:${starttime.substring(2, 4)}`);
|
|
58
|
+
end = start.clone().add(length, "m");
|
|
59
|
+
}
|
|
60
|
+
let _teachers;
|
|
61
|
+
let _groups;
|
|
62
|
+
let _locations;
|
|
63
|
+
if (teacher) {
|
|
64
|
+
_teachers = teacher.split(",").map((x) => x.trim());
|
|
65
|
+
_teachers?.forEach((x) => teachers.add(x));
|
|
66
|
+
}
|
|
67
|
+
if (group) {
|
|
68
|
+
_groups = group.split(",").map((x) => x.trim());
|
|
69
|
+
_groups?.forEach((x) => groups.add(x));
|
|
70
|
+
}
|
|
71
|
+
if (room) {
|
|
72
|
+
_locations = sortBy(room.split(",").map((x) => x.trim()));
|
|
73
|
+
_locations?.forEach((x) => locations.add(x));
|
|
74
|
+
}
|
|
75
|
+
const doc = {
|
|
76
|
+
ids: event.id,
|
|
77
|
+
preferredDuration: event.length,
|
|
78
|
+
weeks: sortBy(Array.from(weeks)),
|
|
79
|
+
...subject && { subject },
|
|
80
|
+
...start && { start },
|
|
81
|
+
...end && { end },
|
|
82
|
+
...event.group && { groups: _groups?.map((to) => ({ to })) },
|
|
83
|
+
...event.teacher && { teachers: _teachers?.map((to) => ({ to })) },
|
|
84
|
+
...event.room && {
|
|
85
|
+
inLocations: _locations,
|
|
86
|
+
locations: _locations?.map((_location, index) => ({
|
|
87
|
+
locations: [_location],
|
|
88
|
+
groupIndex: index
|
|
89
|
+
}))
|
|
110
90
|
}
|
|
111
|
-
|
|
112
|
-
|
|
91
|
+
};
|
|
92
|
+
return doc;
|
|
93
|
+
}).filter((x) => x != null);
|
|
94
|
+
const courses = makeChainable(events).chain((x) => x.filter((e) => !!e.ids), (x) => groupBy(x, (e) => e.subject + ".g." + e.groups?.map((x$1) => x$1.to).join(",") + (e.groups?.length ? "" : ".t." + e.teachers?.map((x$1) => x$1.to).join(","))), (x) => Object.values(x).map((events$1) => {
|
|
95
|
+
const { subject, groups: groups$1, teachers: teachers$1 } = events$1[0];
|
|
96
|
+
for (const e of events$1) {
|
|
97
|
+
delete e.subject;
|
|
98
|
+
delete e.groups;
|
|
99
|
+
}
|
|
100
|
+
const course = {
|
|
101
|
+
displayName: `${subject}-${(groups$1 ?? teachers$1)?.map((x$1) => x$1.to).join(" ")}`,
|
|
102
|
+
events: events$1.map((e) => e.ids),
|
|
103
|
+
...groups$1
|
|
104
|
+
};
|
|
105
|
+
if (size(countBy(events$1, (e) => e.teachers?.map((x$1) => x$1.to).sort().join(","))) == 1) {
|
|
106
|
+
course.teachers = events$1[0].teachers ?? void 0;
|
|
107
|
+
events$1.forEach((e) => delete e.teachers);
|
|
108
|
+
}
|
|
109
|
+
if (size(countBy(events$1, (e) => e.locations?.map((x$1) => x$1.locations[0]).sort().join(","))) == 1) {
|
|
110
|
+
course.locations = events$1[0].locations ?? void 0;
|
|
111
|
+
events$1.forEach((e) => delete e.locations);
|
|
112
|
+
}
|
|
113
|
+
return course;
|
|
114
|
+
})).value;
|
|
115
|
+
return {
|
|
116
|
+
courses,
|
|
113
117
|
teachers: Array.from(teachers).map((ids) => ({
|
|
114
118
|
ids,
|
|
115
119
|
displayName: ids
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["days: Day[]","start","end","start: moment.Moment | undefined","end: moment.Moment | undefined","_day: number","getDate","_teachers: string[] | undefined","_groups: string[] | undefined","_locations: string[] | undefined","x","course: CoreTypes.SerializedWithOptionalId.Course","groups","teachers"],"sources":["../../../../src/SchoolSoft/file/from/schedules.ts"],"sourcesContent":["import type moment from 'moment';\nimport { trim, sortBy, countBy, size, groupBy } from 'lodash-es';\nimport type { Day, Event } from '../types/events';\nimport type { CoreTypes } from '../../../core';\nimport getDate from '../../../common/get-date';\nimport type { Options } from '../types';\nimport { makeChainable } from '../../../common/make-chainable';\n\nconst days: Day[] = ['Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör', 'Sön'];\n\nfunction _parseWeeks (\n weeks: string | undefined,\n set: Set<number>,\n method: ('add' | 'delete') = 'add'\n): void {\n if (!weeks) return;\n const intervals = weeks.split(',').map(x => trim(x)) as (`${number}-${number}` | `${number}${number}`)[];\n intervals.forEach(interval => {\n if (!interval.includes('-')) {\n set[method](Number(interval));\n return;\n }\n const [start, end] = interval.split('-').map(Number);\n Array.from({ length: end - start + 1 }, (_, index) => start + index)\n .forEach(x => set[method](x));\n });\n}\n\n\nexport default (\n input: Event[],\n options?: Options\n): Partial<CoreTypes.SerializedWithOptionalId.Schedule> => {\n const teachers = new Set<string>();\n const groups = new Set<string>();\n const locations = new Set<string>();\n\n const events = input\n .map(event => {\n if (!event.length) return;\n\n const weeks = new Set<number>();\n const {\n inweek,\n exweek,\n realweeks\n } = event;\n\n try {\n _parseWeeks(inweek, weeks, 'add');\n _parseWeeks(realweeks, weeks, 'add');\n\n if (weeks.size == 0)\n Array.from({ length: 51 }, (_, index) => index + 1).forEach(x => weeks.add(x));\n _parseWeeks(exweek, weeks, 'delete');\n } catch (err) {\n console.error(err);\n }\n\n if (options?.interval) {\n const { start, end } = options.interval;\n\n if (start > 52 || start <= 0)\n throw new Error(`(SchoolSoft::From::Schedules) Interval::start is invalid. value ${ start }`);\n\n if (end > 52 || end <= 0)\n throw new Error(`(SchoolSoft::From::Schedules) Interval::end is invalid. value ${ end }`);\n\n if (start > end) {\n if (!Array.from(weeks).some(week => (week >= start && week <= 52) || week <= end))\n return;\n } else {\n if (!Array.from(weeks).some(week => week >= start && week <= end))\n return;\n }\n }\n\n let start: moment.Moment | undefined;\n let end: moment.Moment | undefined;\n\n const {\n starttime,\n subject,\n day,\n length,\n teacher,\n group,\n room\n } = event;\n\n if (day && starttime) {\n const _day: number = days.indexOf(day);\n\n if (_day > 4) return;\n\n start = getDate(_day, `${ starttime.substring(0, 2) }:${ starttime.substring(2, 4) }`);\n end = start.clone().add(length, 'm');\n }\n\n let _teachers: string[] | undefined;\n let _groups: string[] | undefined;\n let _locations: string[] | undefined;\n\n if (teacher) {\n _teachers = teacher.split(',').map(x => x.trim());\n _teachers?.forEach(x => teachers.add(x));\n }\n\n if (group) {\n _groups = group.split(',').map(x => x.trim());\n _groups?.forEach(x => groups.add(x));\n }\n\n if (room) {\n _locations = sortBy(room.split(',').map(x => x.trim()));\n _locations?.forEach(x => locations.add(x));\n }\n\n const doc: CoreTypes.SerializedWithOptionalId.Event & { subject?: string } ={\n ids: event.id,\n preferredDuration: event.length,\n weeks: sortBy(Array.from(weeks)),\n ...subject && { subject },\n ...start && { start },\n ...end && { end },\n ...event.group && { groups: _groups ?.map(to => ({ to })) },\n ...event.teacher && { teachers: _teachers?.map(to => ({ to })) },\n ...event.room && {\n inLocations: _locations,\n locations: _locations?.map((_location, index: number) => (\n {\n locations: [_location],\n groupIndex: index\n })\n )\n }\n };\n\n return doc;\n })\n .filter(x => x != null);\n\n // construct courses from events with same subject, groups and teachers\n const courses = makeChainable(events)\n .chain(\n x => x.filter((e): e is typeof e & { ids: string } => !!e.ids),\n x => groupBy(x, e =>\n e.subject\n + '.g.' + e.groups?.map(x => x.to).join(',')\n // Subject Lunch only have teacher and no groups\n + (e.groups?.length ? '' : ('.t.' + e.teachers?.map(x => x.to).join(',') ))\n ),\n x => Object.values(x)\n .map(events => {\n // promote shared properties to course\n const { subject, groups, teachers } = events[0];\n for (const e of events) {\n delete e.subject;\n delete e.groups;\n }\n\n const course: CoreTypes.SerializedWithOptionalId.Course = {\n displayName: `${ subject }-${ (groups ?? teachers)?.map(x => x.to).join(' ') }`,\n events: events.map(e => e.ids),\n ...groups,\n };\n\n // try to also promote teachers and locations\n if (size(countBy(events, e => e.teachers?.map(x => x.to).sort().join(','))) == 1) {\n course.teachers = events[0].teachers ?? undefined;\n events.forEach(e => delete e.teachers);\n }\n if (size(countBy(events, e => e.locations?.map(x => x.locations[0]).sort().join(','))) == 1) {\n course.locations = events[0].locations ?? undefined;\n events.forEach(e => delete e.locations);\n }\n\n return course;\n })\n )\n .value;\n\n return {\n courses: courses,\n teachers: Array.from(teachers) .map(ids => ({ ids, displayName: ids })),\n groups: Array.from(groups) .map(ids => ({ ids, displayName: ids })),\n locations: Array.from(locations).map(ids => ({ ids, displayName: ids }))\n };\n};"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["days: Day[]","start","end","start: moment.Moment | undefined","end: moment.Moment | undefined","_day: number","getDate","_teachers: string[] | undefined","_groups: string[] | undefined","_locations: string[] | undefined","doc: CoreTypes.SerializedWithOptionalId.Event & { subject?: string }","x","events","course: CoreTypes.SerializedWithOptionalId.Course","groups","teachers"],"sources":["../../../../src/SchoolSoft/file/from/schedules.ts"],"sourcesContent":["import type moment from 'moment';\nimport { trim, sortBy, countBy, size, groupBy } from 'lodash-es';\nimport type { Day, Event } from '../types/events';\nimport type { CoreTypes } from '../../../core';\nimport getDate from '../../../common/get-date';\nimport type { Options } from '../types';\nimport { makeChainable } from '../../../common/make-chainable';\n\nconst days: Day[] = ['Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör', 'Sön'];\n\nfunction _parseWeeks (\n weeks: string | undefined,\n set: Set<number>,\n method: ('add' | 'delete') = 'add'\n): void {\n if (!weeks) return;\n const intervals = weeks.split(',').map(x => trim(x)) as (`${number}-${number}` | `${number}${number}`)[];\n intervals.forEach(interval => {\n if (!interval.includes('-')) {\n set[method](Number(interval));\n return;\n }\n const [start, end] = interval.split('-').map(Number);\n Array.from({ length: end - start + 1 }, (_, index) => start + index)\n .forEach(x => set[method](x));\n });\n}\n\n\nexport default (\n input: Event[],\n options?: Options\n): Partial<CoreTypes.SerializedWithOptionalId.Schedule> => {\n const teachers = new Set<string>();\n const groups = new Set<string>();\n const locations = new Set<string>();\n\n const events = input\n .map(event => {\n if (!event.length) return;\n\n const weeks = new Set<number>();\n const {\n inweek,\n exweek,\n realweeks\n } = event;\n\n try {\n _parseWeeks(inweek, weeks, 'add');\n _parseWeeks(realweeks, weeks, 'add');\n\n if (weeks.size == 0)\n Array.from({ length: 51 }, (_, index) => index + 1).forEach(x => weeks.add(x));\n _parseWeeks(exweek, weeks, 'delete');\n } catch (err) {\n console.error(err);\n }\n\n if (options?.interval) {\n const { start, end } = options.interval;\n\n if (start > 52 || start <= 0)\n throw new Error(`(SchoolSoft::From::Schedules) Interval::start is invalid. value ${ start }`);\n\n if (end > 52 || end <= 0)\n throw new Error(`(SchoolSoft::From::Schedules) Interval::end is invalid. value ${ end }`);\n\n if (start > end) {\n if (!Array.from(weeks).some(week => (week >= start && week <= 52) || week <= end))\n return;\n } else {\n if (!Array.from(weeks).some(week => week >= start && week <= end))\n return;\n }\n }\n\n let start: moment.Moment | undefined;\n let end: moment.Moment | undefined;\n\n const {\n starttime,\n subject,\n day,\n length,\n teacher,\n group,\n room\n } = event;\n\n if (day && starttime) {\n const _day: number = days.indexOf(day);\n\n if (_day > 4) return;\n\n start = getDate(_day, `${ starttime.substring(0, 2) }:${ starttime.substring(2, 4) }`);\n end = start.clone().add(length, 'm');\n }\n\n let _teachers: string[] | undefined;\n let _groups: string[] | undefined;\n let _locations: string[] | undefined;\n\n if (teacher) {\n _teachers = teacher.split(',').map(x => x.trim());\n _teachers?.forEach(x => teachers.add(x));\n }\n\n if (group) {\n _groups = group.split(',').map(x => x.trim());\n _groups?.forEach(x => groups.add(x));\n }\n\n if (room) {\n _locations = sortBy(room.split(',').map(x => x.trim()));\n _locations?.forEach(x => locations.add(x));\n }\n\n const doc: CoreTypes.SerializedWithOptionalId.Event & { subject?: string } ={\n ids: event.id,\n preferredDuration: event.length,\n weeks: sortBy(Array.from(weeks)),\n ...subject && { subject },\n ...start && { start },\n ...end && { end },\n ...event.group && { groups: _groups ?.map(to => ({ to })) },\n ...event.teacher && { teachers: _teachers?.map(to => ({ to })) },\n ...event.room && {\n inLocations: _locations,\n locations: _locations?.map((_location, index: number) => (\n {\n locations: [_location],\n groupIndex: index\n })\n )\n }\n };\n\n return doc;\n })\n .filter(x => x != null);\n\n // construct courses from events with same subject, groups and teachers\n const courses = makeChainable(events)\n .chain(\n x => x.filter((e): e is typeof e & { ids: string } => !!e.ids),\n x => groupBy(x, e =>\n e.subject\n + '.g.' + e.groups?.map(x => x.to).join(',')\n // Subject Lunch only have teacher and no groups\n + (e.groups?.length ? '' : ('.t.' + e.teachers?.map(x => x.to).join(',') ))\n ),\n x => Object.values(x)\n .map(events => {\n // promote shared properties to course\n const { subject, groups, teachers } = events[0];\n for (const e of events) {\n delete e.subject;\n delete e.groups;\n }\n\n const course: CoreTypes.SerializedWithOptionalId.Course = {\n displayName: `${ subject }-${ (groups ?? teachers)?.map(x => x.to).join(' ') }`,\n events: events.map(e => e.ids),\n ...groups,\n };\n\n // try to also promote teachers and locations\n if (size(countBy(events, e => e.teachers?.map(x => x.to).sort().join(','))) == 1) {\n course.teachers = events[0].teachers ?? undefined;\n events.forEach(e => delete e.teachers);\n }\n if (size(countBy(events, e => e.locations?.map(x => x.locations[0]).sort().join(','))) == 1) {\n course.locations = events[0].locations ?? undefined;\n events.forEach(e => delete e.locations);\n }\n\n return course;\n })\n )\n .value;\n\n return {\n courses: courses,\n teachers: Array.from(teachers) .map(ids => ({ ids, displayName: ids })),\n groups: Array.from(groups) .map(ids => ({ ids, displayName: ids })),\n locations: Array.from(locations).map(ids => ({ ids, displayName: ids }))\n };\n};"],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { Types } from "../../core/types/index.js";
|
|
|
2
2
|
import { Event } from "./types/events.js";
|
|
3
3
|
import { export_default } from "./to/index.js";
|
|
4
4
|
import { Options, Types as Types$1 } from "./types/index.js";
|
|
5
|
-
import "../../index.js";
|
|
6
5
|
|
|
7
6
|
//#region src/SchoolSoft/file/index.d.ts
|
|
8
7
|
declare class Map {
|
|
@@ -68,7 +68,8 @@ var schedules_default = (schedule, options = {}) => {
|
|
|
68
68
|
}
|
|
69
69
|
const subject = course.subject;
|
|
70
70
|
const _period = e.period ?? course.period ?? schedule.settings.period;
|
|
71
|
-
const
|
|
71
|
+
const period = periodsMap.get(_period ? getVertexId(_period, options) : void 0);
|
|
72
|
+
const weeks = period?.ranges.map((x) => {
|
|
72
73
|
const start$1 = moment.utc(x.start);
|
|
73
74
|
const end$1 = moment.utc(x.end);
|
|
74
75
|
const weeks$1 = new Array();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["x","start","end","weeks"],"sources":["../../../../src/SchoolSoft/file/to/schedules.ts"],"sourcesContent":["import XLSX from 'xlsx';\nimport moment from 'moment';\nimport { orderBy, uniq } from 'lodash-es';\nimport type { CoreTypes } from '../../../core';\nimport { getDayIndex, getVertexId } from '../../../core/util';\nimport type { BaseOptions } from '../../../common/types';\nimport { makeChainable } from '../../../common/make-chainable';\n\n\ntype Undervisningsgrupp = {\n name?: string;\n socialnumber: string;\n externalid: string;\n classtype: 1 | 0;\n};\n\nfunction createUndervisningsgrupp (\n collection: 'courses' | 'events',\n entity: CoreTypes.Mixed.Course | CoreTypes.Mixed.Event,\n fallbackName: string | undefined,\n did: string,\n groupPersonsMap: Map<string, CoreTypes.Mixed.Person[]>,\n personsMap: Map<string, CoreTypes.Mixed.Person>,\n options: BaseOptions\n): Undervisningsgrupp {\n const SSNs = makeChainable(entity.groups ?? [])\n .chain(\n x => x\n .map(x => {\n const include = groupPersonsMap.get(getVertexId(x.to, options))?.map(x => x.SSN?.value)\n .filter((x): x is string => !!x) ?? [];\n const exclude = x.exclude?.map(x => personsMap.get(getVertexId(x, options))?.SSN?.value).filter((x): x is string => !!x) ?? [];\n return include.filter(x => !exclude.includes(x));\n })\n .concat(entity.participants?.map(({ to }) => personsMap.get(getVertexId(to, options))?.SSN?.value).filter((x): x is string => !!x) ?? [])\n .flat(),\n x => uniq(x).join(', ')\n )\n .value;\n\n return {\n name: entity.displayName ?? fallbackName,\n socialnumber: SSNs,\n externalid: `${did}.${getVertexId(entity, options)}${collection == 'courses' ? 'C' : 'E'}`,\n classtype: 0\n };\n};\n\nexport default (\n schedule: CoreTypes.Mixed.Schedule & { division?: CoreTypes.Mixed.Division },\n options: BaseOptions = {}\n): XLSX.WorkBook => {\n const division = schedule.division ?? schedule.divisions;\n\n // must have a division id\n const did = getVertexId(division, options);\n\n // a map of period id -> period\n const periodsMap = new Map(schedule.periods.map(p => [getVertexId(p, options) as string | undefined, p as Pick<CoreTypes.Mixed.Period, 'ranges'>]));\n periodsMap.set(undefined, { ranges: [{ start: division.start, end: division.end }] });\n\n // a map of group id -> persons\n const groupPersonsMap = new Map<string, CoreTypes.Mixed.Person[]>();\n schedule.persons.forEach(p => {\n if (!p.group) return;\n const gid = getVertexId(p.group, options);\n if (!groupPersonsMap.has(gid)) groupPersonsMap.set(gid, []);\n groupPersonsMap.get(gid)?.push(p);\n });\n\n // a map of person id -> person\n const personsMap = new Map(schedule.persons.map(p => [getVertexId(p, options), p]));\n\n // a map of teacher id -> teacher\n const teachersMap = new Map(schedule.teachers.map(t => [getVertexId(t, options), t]));\n\n // a map of course id -> course\n const coursesMap = new Map(schedule.courses.map(c => [getVertexId(c, options), c]));\n\n\n ////\n //// kurser, grupper -> undervisningsgrupper\n ////\n let undervisningsgrupper = new Array<Undervisningsgrupp>();\n schedule.courses.forEach(c => {\n undervisningsgrupper.push(createUndervisningsgrupp('courses', c, '', did, groupPersonsMap, personsMap, options));\n });\n schedule.groups.forEach(g => {\n const SSNs = (groupPersonsMap.get(getVertexId(g, options))?? [])\n .map(x => x.SSN?.value)\n .filter((x): x is string => !!x)\n .join(', ');\n\n undervisningsgrupper.push({\n name: g.displayName,\n socialnumber: SSNs,\n externalid: `${did}.${getVertexId(g, options)}G`,\n classtype: 1\n });\n });\n\n // for convenience, sort first by classtype in descending order, then by name\n undervisningsgrupper = orderBy(undervisningsgrupper, ['classtype', 'name'], ['desc', 'asc']);\n\n\n ////\n //// salar\n ////\n const salar = schedule.locations\n .map(l => ({\n name: l.displayName,\n externalid: `${did}.${getVertexId(l, options)}`\n }));\n\n\n ////\n //// lektioner\n ////\n const lektioner = schedule.events\n .map(e => {\n // must have start and end\n if (!e.start || !e.end) return null;\n const start = moment.utc(e.start);\n const end = moment.utc(e.end);\n\n // must have course\n const course = e.course ? coursesMap.get(getVertexId(e.course, options)) : undefined;\n if (!course) return null;\n let groupexternalid = `${did}.${getVertexId(course, options)}C`;\n\n // if the event overrides the course's groups or participants, create a new overlap group from the event\n if (e.groups || e.participants) {\n const UG = createUndervisningsgrupp('events', e, course.displayName, did, groupPersonsMap, personsMap, options);\n undervisningsgrupper.push(UG);\n groupexternalid = UG.externalid;\n }\n\n const subject = course.subject;\n const _period = e.period ?? course.period ?? schedule.settings.period;\n const period = periodsMap.get(_period ? getVertexId(_period, options) : undefined);\n\n const weeks = period?.ranges.map(x => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n }).flat()\n .join(', ');\n\n const teachers = (e.teachers ?? course.teachers ?? [])\n .map(x => teachersMap.get(getVertexId(x.to, options))?.ids)\n .filter((x): x is string => !!x)\n .join(', ');\n\n const rooms = (e.inLocations as CoreTypes.Deep.Location[] ?? [])\n .filter(Boolean)\n .map(x => `${did}.${getVertexId(x, options)}`)\n .join(', ');\n\n return {\n dayid: getDayIndex(start),\n starttime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n roomexternalid: rooms,\n subject: subject,\n exweek: '',\n inweek: weeks,\n period: '',\n groupexternalid: groupexternalid,\n teacherid: teachers,\n externalref: `${did}.${getVertexId(e, options)}`,\n };\n })\n .filter(x => x != null);\n\n\n ////\n //// store in workbook\n ////\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(undervisningsgrupper), '1. Undervisningsgrupper');\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(salar), '2. Salar');\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(lektioner), '3. Lektioner');\n\n return wb;\n};\n"],"mappings":";;;;;;;AAgBA,SAAS,yBACP,YACA,QACA,cACA,KACA,iBACA,YACA,SACoB;CACpB,MAAM,OAAO,cAAc,OAAO,UAAU,EAAE,CAAC,CAC5C,OACC,MAAK,EACF,KAAI,QAAK;EACR,MAAM,UAAU,gBAAgB,IAAI,YAAYA,IAAE,IAAI,QAAQ,CAAC,EAAE,KAAI,QAAKA,IAAE,KAAK,MAAM,CACpF,QAAQ,QAAmB,CAAC,CAACA,IAAE,IAAI,EAAE;EACxC,MAAM,UAAUA,IAAE,SAAS,KAAI,QAAK,WAAW,IAAI,YAAYA,KAAG,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,QAAmB,CAAC,CAACA,IAAE,IAAI,EAAE;AAC9H,SAAO,QAAQ,QAAO,QAAK,CAAC,QAAQ,SAASA,IAAE,CAAC;GAChD,CACD,OAAO,OAAO,cAAc,KAAK,EAAE,SAAS,WAAW,IAAI,YAAY,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,QAAmB,CAAC,CAACA,IAAE,IAAI,EAAE,CAAC,CACxI,MAAM,GACT,MAAK,KAAK,EAAE,CAAC,KAAK,KAAK,CACxB,CACA;AAEH,QAAO;EACL,MAAc,OAAO,eAAe;EACpC,cAAc;EACd,YAAc,GAAG,IAAI,GAAG,YAAY,QAAQ,QAAQ,GAAG,cAAc,YAAY,MAAM;EACvF,WAAc;EACf;;AAGH,yBACE,UACA,UAAwB,EAAE,KACR;CAClB,MAAM,WAAW,SAAS,YAAY,SAAS;CAG/C,MAAM,MAAM,YAAY,UAAU,QAAQ;CAG1C,MAAM,aAAa,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,CAAC,YAAY,GAAG,QAAQ,EAAwB,EAA4C,CAAC,CAAC;AACnJ,YAAW,IAAI,QAAW,EAAE,QAAQ,CAAC;EAAE,OAAO,SAAS;EAAO,KAAK,SAAS;EAAK,CAAC,EAAE,CAAC;CAGrF,MAAM,kCAAkB,IAAI,KAAuC;AACnE,UAAS,QAAQ,SAAQ,MAAK;AAC5B,MAAI,CAAC,EAAE,MAAO;EACd,MAAM,MAAM,YAAY,EAAE,OAAO,QAAQ;AACzC,MAAI,CAAC,gBAAgB,IAAI,IAAI,CAAE,iBAAgB,IAAI,KAAK,EAAE,CAAC;AAC3D,kBAAgB,IAAI,IAAI,EAAE,KAAK,EAAE;GACjC;CAGF,MAAM,aAAa,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,CAAC,YAAY,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;CAGnF,MAAM,cAAc,IAAI,IAAI,SAAS,SAAS,KAAI,MAAK,CAAC,YAAY,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;CAGrF,MAAM,aAAa,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,CAAC,YAAY,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC;CAMnF,IAAI,uBAAuB,IAAI,OAA2B;AAC1D,UAAS,QAAQ,SAAQ,MAAK;AAC5B,uBAAqB,KAAK,yBAAyB,WAAW,GAAG,IAAI,KAAK,iBAAiB,YAAY,QAAQ,CAAC;GAChH;AACF,UAAS,OAAO,SAAQ,MAAK;EAC3B,MAAM,QAAQ,gBAAgB,IAAI,YAAY,GAAG,QAAQ,CAAC,IAAG,EAAE,EAC5D,KAAI,MAAK,EAAE,KAAK,MAAM,CACtB,QAAQ,MAAmB,CAAC,CAAC,EAAE,CAC/B,KAAK,KAAK;AAEb,uBAAqB,KAAK;GACxB,MAAc,EAAE;GAChB,cAAc;GACd,YAAc,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,CAAC;GAChD,WAAc;GACf,CAAC;GACF;AAGF,wBAAuB,QAAQ,sBAAsB,CAAC,aAAa,OAAO,EAAE,CAAC,QAAQ,MAAM,CAAC;CAM5F,MAAM,QAAQ,SAAS,UACpB,KAAI,OAAM;EACT,MAAY,EAAE;EACd,YAAY,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ;EAC9C,EAAE;CAML,MAAM,YAAY,SAAS,OACxB,KAAI,MAAK;AAER,MAAI,CAAC,EAAE,SAAS,CAAC,EAAE,IAAK,QAAO;EAC/B,MAAM,QAAQ,OAAO,IAAI,EAAE,MAAM;EACjC,MAAM,MAAQ,OAAO,IAAI,EAAE,IAAI;EAG/B,MAAM,SAAS,EAAE,SAAS,WAAW,IAAI,YAAY,EAAE,QAAQ,QAAQ,CAAC,GAAG;AAC3E,MAAI,CAAC,OAAQ,QAAO;EACpB,IAAI,kBAAkB,GAAG,IAAI,GAAG,YAAY,QAAQ,QAAQ,CAAC;AAG7D,MAAI,EAAE,UAAU,EAAE,cAAc;GAC9B,MAAM,KAAK,yBAAyB,UAAU,GAAG,OAAO,aAAa,KAAK,iBAAiB,YAAY,QAAQ;AAC/G,wBAAqB,KAAK,GAAG;AAC7B,qBAAkB,GAAG;;EAGvB,MAAM,UAAU,OAAO;EACvB,MAAM,UAAW,EAAE,UAAU,OAAO,UAAU,SAAS,SAAS;EAGhE,MAAM,QAFS,WAAW,IAAI,UAAU,YAAY,SAAS,QAAQ,GAAG,OAAU,EAE5D,OAAO,KAAI,MAAK;GAEpC,MAAMC,UAAQ,OAAO,IAAI,EAAE,MAAM;GACjC,MAAMC,QAAQ,OAAO,IAAI,EAAE,IAAI;GAC/B,MAAMC,UAAQ,IAAI,OAAe;AACjC,UAAOF,QAAM,SAASC,MAAI,EAAE;AAC1B,YAAM,KAAKD,QAAM,MAAM,CAAC;AACxB,YAAM,IAAI,GAAG,OAAO;;AAEtB,UAAOE;IACP,CAAC,MAAM,CACN,KAAK,KAAK;EAEb,MAAM,YAAY,EAAE,YAAY,OAAO,YAAY,EAAE,EAClD,KAAI,MAAK,YAAY,IAAI,YAAY,EAAE,IAAI,QAAQ,CAAC,EAAE,IAAI,CAC1D,QAAQ,MAAmB,CAAC,CAAC,EAAE,CAC/B,KAAK,KAAK;EAEb,MAAM,SAAS,EAAE,eAA4C,EAAE,EAC5D,OAAO,QAAQ,CACf,KAAI,MAAK,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ,GAAG,CAC7C,KAAK,KAAK;AAEb,SAAO;GACL,OAAiB,YAAY,MAAM;GACnC,WAAiB,MAAM,OAAO,OAAO;GACrC,QAAiB,IAAI,KAAK,OAAO,UAAU;GAC3C,gBAAiB;GACA;GACjB,QAAiB;GACjB,QAAiB;GACjB,QAAiB;GACA;GACjB,WAAiB;GACjB,aAAiB,GAAG,IAAI,GAAG,YAAY,GAAG,QAAQ;GACnD;GACD,CACD,QAAO,MAAK,KAAK,KAAK;CAMzB,MAAM,KAAK,KAAK,MAAM,UAAU;AAChC,MAAK,MAAM,kBAAkB,IAAI,KAAK,MAAM,cAAc,qBAAqB,EAAE,0BAA0B;AAC3G,MAAK,MAAM,kBAAkB,IAAI,KAAK,MAAM,cAAc,MAAM,EAAiB,WAAW;AAC5F,MAAK,MAAM,kBAAkB,IAAI,KAAK,MAAM,cAAc,UAAU,EAAa,eAAe;AAEhG,QAAO"}
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["x","start","end","weeks"],"sources":["../../../../src/SchoolSoft/file/to/schedules.ts"],"sourcesContent":["import XLSX from 'xlsx';\nimport moment from 'moment';\nimport { orderBy, uniq } from 'lodash-es';\nimport type { CoreTypes } from '../../../core';\nimport { getDayIndex, getVertexId } from '../../../core/util';\nimport type { BaseOptions } from '../../../common/types';\nimport { makeChainable } from '../../../common/make-chainable';\n\n\ntype Undervisningsgrupp = {\n name?: string;\n socialnumber: string;\n externalid: string;\n classtype: 1 | 0;\n};\n\nfunction createUndervisningsgrupp (\n collection: 'courses' | 'events',\n entity: CoreTypes.Mixed.Course | CoreTypes.Mixed.Event,\n fallbackName: string | undefined,\n did: string,\n groupPersonsMap: Map<string, CoreTypes.Mixed.Person[]>,\n personsMap: Map<string, CoreTypes.Mixed.Person>,\n options: BaseOptions\n): Undervisningsgrupp {\n const SSNs = makeChainable(entity.groups ?? [])\n .chain(\n x => x\n .map(x => {\n const include = groupPersonsMap.get(getVertexId(x.to, options))?.map(x => x.SSN?.value)\n .filter((x): x is string => !!x) ?? [];\n const exclude = x.exclude?.map(x => personsMap.get(getVertexId(x, options))?.SSN?.value).filter((x): x is string => !!x) ?? [];\n return include.filter(x => !exclude.includes(x));\n })\n .concat(entity.participants?.map(({ to }) => personsMap.get(getVertexId(to, options))?.SSN?.value).filter((x): x is string => !!x) ?? [])\n .flat(),\n x => uniq(x).join(', ')\n )\n .value;\n\n return {\n name: entity.displayName ?? fallbackName,\n socialnumber: SSNs,\n externalid: `${did}.${getVertexId(entity, options)}${collection == 'courses' ? 'C' : 'E'}`,\n classtype: 0\n };\n};\n\nexport default (\n schedule: CoreTypes.Mixed.Schedule & { division?: CoreTypes.Mixed.Division },\n options: BaseOptions = {}\n): XLSX.WorkBook => {\n const division = schedule.division ?? schedule.divisions;\n\n // must have a division id\n const did = getVertexId(division, options);\n\n // a map of period id -> period\n const periodsMap = new Map(schedule.periods.map(p => [getVertexId(p, options) as string | undefined, p as Pick<CoreTypes.Mixed.Period, 'ranges'>]));\n periodsMap.set(undefined, { ranges: [{ start: division.start, end: division.end }] });\n\n // a map of group id -> persons\n const groupPersonsMap = new Map<string, CoreTypes.Mixed.Person[]>();\n schedule.persons.forEach(p => {\n if (!p.group) return;\n const gid = getVertexId(p.group, options);\n if (!groupPersonsMap.has(gid)) groupPersonsMap.set(gid, []);\n groupPersonsMap.get(gid)?.push(p);\n });\n\n // a map of person id -> person\n const personsMap = new Map(schedule.persons.map(p => [getVertexId(p, options), p]));\n\n // a map of teacher id -> teacher\n const teachersMap = new Map(schedule.teachers.map(t => [getVertexId(t, options), t]));\n\n // a map of course id -> course\n const coursesMap = new Map(schedule.courses.map(c => [getVertexId(c, options), c]));\n\n\n ////\n //// kurser, grupper -> undervisningsgrupper\n ////\n let undervisningsgrupper = new Array<Undervisningsgrupp>();\n schedule.courses.forEach(c => {\n undervisningsgrupper.push(createUndervisningsgrupp('courses', c, '', did, groupPersonsMap, personsMap, options));\n });\n schedule.groups.forEach(g => {\n const SSNs = (groupPersonsMap.get(getVertexId(g, options))?? [])\n .map(x => x.SSN?.value)\n .filter((x): x is string => !!x)\n .join(', ');\n\n undervisningsgrupper.push({\n name: g.displayName,\n socialnumber: SSNs,\n externalid: `${did}.${getVertexId(g, options)}G`,\n classtype: 1\n });\n });\n\n // for convenience, sort first by classtype in descending order, then by name\n undervisningsgrupper = orderBy(undervisningsgrupper, ['classtype', 'name'], ['desc', 'asc']);\n\n\n ////\n //// salar\n ////\n const salar = schedule.locations\n .map(l => ({\n name: l.displayName,\n externalid: `${did}.${getVertexId(l, options)}`\n }));\n\n\n ////\n //// lektioner\n ////\n const lektioner = schedule.events\n .map(e => {\n // must have start and end\n if (!e.start || !e.end) return null;\n const start = moment.utc(e.start);\n const end = moment.utc(e.end);\n\n // must have course\n const course = e.course ? coursesMap.get(getVertexId(e.course, options)) : undefined;\n if (!course) return null;\n let groupexternalid = `${did}.${getVertexId(course, options)}C`;\n\n // if the event overrides the course's groups or participants, create a new overlap group from the event\n if (e.groups || e.participants) {\n const UG = createUndervisningsgrupp('events', e, course.displayName, did, groupPersonsMap, personsMap, options);\n undervisningsgrupper.push(UG);\n groupexternalid = UG.externalid;\n }\n\n const subject = course.subject;\n const _period = e.period ?? course.period ?? schedule.settings.period;\n const period = periodsMap.get(_period ? getVertexId(_period, options) : undefined);\n\n const weeks = period?.ranges.map(x => {\n // fetch all weeks between start and end\n const start = moment.utc(x.start);\n const end = moment.utc(x.end);\n const weeks = new Array<number>();\n while (start.isBefore(end)) {\n weeks.push(start.week());\n start.add(1, 'week');\n }\n return weeks;\n }).flat()\n .join(', ');\n\n const teachers = (e.teachers ?? course.teachers ?? [])\n .map(x => teachersMap.get(getVertexId(x.to, options))?.ids)\n .filter((x): x is string => !!x)\n .join(', ');\n\n const rooms = (e.inLocations as CoreTypes.Deep.Location[] ?? [])\n .filter(Boolean)\n .map(x => `${did}.${getVertexId(x, options)}`)\n .join(', ');\n\n return {\n dayid: getDayIndex(start),\n starttime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n roomexternalid: rooms,\n subject: subject,\n exweek: '',\n inweek: weeks,\n period: '',\n groupexternalid: groupexternalid,\n teacherid: teachers,\n externalref: `${did}.${getVertexId(e, options)}`,\n };\n })\n .filter(x => x != null);\n\n\n ////\n //// store in workbook\n ////\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(undervisningsgrupper), '1. Undervisningsgrupper');\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(salar), '2. Salar');\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(lektioner), '3. Lektioner');\n\n return wb;\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import { Options, Types } from "./file/types/index.js";
|
|
|
5
5
|
import { Map } from "./file/index.js";
|
|
6
6
|
import { Types as Types$1 } from "./api/types/index.js";
|
|
7
7
|
import { Map as Map$1 } from "./api/index.js";
|
|
8
|
-
import "../index.js";
|
|
9
8
|
|
|
10
9
|
//#region src/SchoolSoft/index.d.ts
|
|
11
10
|
declare class SchoolSoftMap {
|
|
@@ -218,8 +218,10 @@ var schedules_default = (data, options = {}) => {
|
|
|
218
218
|
const totalHoursRegex = /(\d+) hrs/;
|
|
219
219
|
const weekTimeRegex = /(\d+) min\/week/;
|
|
220
220
|
const c = courses?.map((course) => {
|
|
221
|
-
const
|
|
222
|
-
const
|
|
221
|
+
const teacherIds = course.teachers?.map((x) => getVertexId(x.to, options));
|
|
222
|
+
const teachers$1 = teacherIds?.map((id) => teacherMap.get(id)).filter((x) => x != null) ?? [];
|
|
223
|
+
const groupIds = course.groups?.map((x) => getVertexId(x.to, options));
|
|
224
|
+
const groups$1 = groupIds?.map((id) => groupMap.get(id)).filter((x) => x != null) ?? [];
|
|
223
225
|
const syllabus = course.syllabus;
|
|
224
226
|
const subject = syllabus && typeof syllabus == "object" ? "courseCode" in syllabus ? syllabus.subjectCode ?? course.subject : course.subject ?? ("subjectName" in syllabus ? syllabus.subjectName : void 0) : course.subject;
|
|
225
227
|
return {
|
|
@@ -264,9 +266,14 @@ var schedules_default = (data, options = {}) => {
|
|
|
264
266
|
let period = event.period == null ? course?.period : event.period;
|
|
265
267
|
if (isString(period)) period = periodMap.get(period);
|
|
266
268
|
if (period && !("ranges" in period)) period = void 0;
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
const
|
|
269
|
+
const t$1 = event.teachers == null ? course?.teachers : event.teachers;
|
|
270
|
+
const teacherIds = t$1?.map((x) => getVertexId(x.to, options));
|
|
271
|
+
const teachers$1 = teacherIds?.map((id) => teacherMap.get(id)).filter(Boolean) ?? [];
|
|
272
|
+
const g$1 = event.groups == null ? course?.groups : event.groups;
|
|
273
|
+
const groupIds = g$1?.map((x) => getVertexId(x.to, options));
|
|
274
|
+
const groups$1 = groupIds?.map((id) => groupMap.get(id)).filter(Boolean) ?? [];
|
|
275
|
+
const locationIds = event.inLocations?.map((x) => x ? getVertexId(x, options) : null).filter((x) => x != null);
|
|
276
|
+
const locations$1 = locationIds?.map((id) => locationMap.get(id)).filter(Boolean) ?? [];
|
|
270
277
|
const dayOfWeek = moment.utc(event.start).toDate().toLocaleDateString("sv-SE", {
|
|
271
278
|
weekday: "long",
|
|
272
279
|
timeZone: "UTC"
|