@royalschedule/maps 4.0.14 → 4.0.16
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 +7 -6
- package/dist/Additio/from/schedules.js +2 -4
- 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 +11 -9
- package/dist/Additio/to/schedules.js +2 -4
- 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 +7 -6
- package/dist/Admentum/from/schedules.js +2 -4
- 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 +9 -8
- package/dist/Admentum/to/schedules.js +4 -7
- package/dist/Admentum/to/schedules.js.map +1 -1
- package/dist/Excel/index.d.ts +263 -26
- package/dist/Excel/v1/from/index.js +2 -1
- package/dist/Excel/v1/from/index.js.map +1 -1
- package/dist/Excel/v1/index.d.ts +218 -20
- package/dist/Excel/v2/from/index.js +49 -57
- package/dist/Excel/v2/from/index.js.map +1 -1
- package/dist/Excel/v2/index.d.ts +263 -26
- package/dist/IdunSoft/from/courses.js.map +1 -1
- package/dist/IdunSoft/from/events.js +1 -2
- 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 +6 -5
- 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 +2 -1
- package/dist/IdunSoft/to/schedules.js +5 -8
- package/dist/IdunSoft/to/schedules.js.map +1 -1
- package/dist/InfoMentor/to/index.d.ts +2 -1
- package/dist/InfoMentor/to/schedules.js +3 -4
- package/dist/InfoMentor/to/schedules.js.map +1 -1
- package/dist/PlanDigital/from/index.js.map +1 -1
- package/dist/PlanDigital/from/schedules.js +9 -11
- package/dist/PlanDigital/from/schedules.js.map +1 -1
- package/dist/PlanDigital/index.d.ts +74 -59
- package/dist/Quiculum/file/to/index.d.ts +10 -9
- package/dist/Quiculum/file/to/schedules.js +5 -9
- package/dist/Quiculum/file/to/schedules.js.map +1 -1
- package/dist/RS/from/division.d.ts +2 -1
- package/dist/RS/from/division.js +9 -6
- 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 +2 -1
- package/dist/RS/from/schedules.js +2 -1
- package/dist/RS/from/schedules.js.map +1 -1
- package/dist/RS/make-connected.d.ts +17 -16
- package/dist/RS/make-connected.js +63 -96
- 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 +4 -6
- 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 +1 -2
- package/dist/RS/to/input/default.js.map +1 -1
- package/dist/RS/to/input/dependencies.js +1 -3
- package/dist/RS/to/input/dependencies.js.map +1 -1
- package/dist/RS/to/input/dynamic-locked-times.js +1 -2
- package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
- package/dist/RS/to/input/events.js +5 -3
- 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 -3
- package/dist/RS/to/input/individuals.js.map +1 -1
- package/dist/RS/to/input/input.js +1 -3
- package/dist/RS/to/input/input.js.map +1 -1
- package/dist/RS/to/input/intervals.js +2 -4
- package/dist/RS/to/input/intervals.js.map +1 -1
- package/dist/RS/to/input/periods.js +6 -8
- 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 +2 -4
- package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
- package/dist/RS/to/input/util/parse-location-references.js +1 -2
- 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 +1 -2
- package/dist/RS/to/input/util/util.js.map +1 -1
- package/dist/RS/to/schedules.js +3 -2
- package/dist/RS/to/schedules.js.map +1 -1
- package/dist/RS/types/to.d.ts +13 -3
- package/dist/RS/types/to.js +6 -0
- package/dist/RS/types/to.js.map +1 -0
- package/dist/SS12000/from/activities.js +1 -2
- 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 +12567 -9
- 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 +17 -16
- 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 +8 -12
- package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/api/index.d.ts +444 -9
- package/dist/SchoolSoft/file/from/index.js.map +1 -1
- package/dist/SchoolSoft/file/from/schedules.js +83 -87
- package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/file/index.d.ts +2 -1
- package/dist/SchoolSoft/file/to/index.d.ts +3 -2
- package/dist/SchoolSoft/file/to/schedules.js +1 -2
- package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
- package/dist/SchoolSoft/index.d.ts +2 -1
- package/dist/Schoolity/txt/to/index.d.ts +2 -1
- package/dist/Schoolity/txt/to/schedules.js +5 -12
- package/dist/Schoolity/txt/to/schedules.js.map +1 -1
- package/dist/Skola24/mdb/from/course-and-events.js +3 -5
- 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 +6 -5
- 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 +1 -2
- 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 +31 -34
- package/dist/Skola24/txt/from/period.js.map +1 -1
- package/dist/Skola24/txt/from/schedules.d.ts +9 -8
- package/dist/Skola24/txt/from/schedules.js +10 -12
- 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 +2 -1
- package/dist/Skola24/txt/to/index.d.ts +2 -1
- package/dist/Skola24/txt/to/schedules.js +5 -12
- package/dist/Skola24/txt/to/schedules.js.map +1 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/functions.js +46 -10
- 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 -6
- package/dist/core/from/configurations.js.map +1 -1
- package/dist/core/from/courses.js.map +1 -1
- package/dist/core/from/events.js +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 +9 -6
- 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/syllabuses.js.map +1 -1
- package/dist/core/from/teachers.js.map +1 -1
- package/dist/core/index.d.ts +24 -1
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/interfaces/index.d.ts +23 -0
- package/dist/core/interfaces/index.js +6 -0
- package/dist/core/interfaces/other/companies.d.ts +132 -0
- package/dist/core/interfaces/other/companies.js +9 -0
- package/dist/core/interfaces/other/companies.js.map +1 -0
- package/dist/core/interfaces/other/etc.d.ts +19 -0
- package/dist/core/interfaces/other/index.d.ts +6 -0
- package/dist/core/interfaces/other/integrations.d.ts +17 -0
- package/dist/core/interfaces/other/operations.d.ts +36 -0
- package/dist/core/interfaces/other/policies.d.ts +31 -0
- package/dist/core/interfaces/other/sync-logs.d.ts +21 -0
- package/dist/core/interfaces/other/users.d.ts +35 -0
- package/dist/core/interfaces/vertices/companies.d.ts +8 -0
- package/dist/core/interfaces/vertices/configurations.d.ts +58 -0
- package/dist/core/interfaces/vertices/courses.d.ts +68 -0
- package/dist/core/{types → interfaces/vertices}/division-settings.d.ts +31 -29
- package/dist/core/interfaces/vertices/divisions.d.ts +31 -0
- package/dist/core/interfaces/vertices/events.d.ts +100 -0
- package/dist/core/interfaces/vertices/exceptions.d.ts +74 -0
- package/dist/core/interfaces/vertices/generations.d.ts +23 -0
- package/dist/core/interfaces/vertices/groups.d.ts +53 -0
- package/dist/core/interfaces/vertices/index.d.ts +209 -0
- package/dist/core/interfaces/vertices/index.js +3 -0
- package/dist/core/interfaces/vertices/locations.d.ts +22 -0
- package/dist/core/interfaces/vertices/locked-times.d.ts +37 -0
- package/dist/core/interfaces/vertices/overlap-groups.d.ts +17 -0
- package/dist/core/interfaces/vertices/periods.d.ts +15 -0
- package/dist/core/interfaces/vertices/persons.d.ts +32 -0
- package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +11 -0
- package/dist/core/interfaces/vertices/properties/coalesced.d.ts +8 -0
- package/dist/core/interfaces/vertices/properties/days.d.ts +9 -0
- package/dist/core/interfaces/vertices/properties/index.d.ts +15 -0
- package/dist/core/interfaces/vertices/properties/intervals.d.ts +10 -0
- package/dist/core/{types/common → interfaces/vertices/properties}/maximum-schedule-span.d.ts +1 -1
- package/dist/core/interfaces/vertices/properties/min-break-length.d.ts +5 -0
- package/dist/core/{types/common/planned-schedule-duration.d.ts → interfaces/vertices/properties/planned-scheduled-duration.d.ts} +2 -2
- package/dist/core/interfaces/vertices/properties/species.d.ts +9 -0
- package/dist/core/interfaces/vertices/properties/tags.d.ts +9 -0
- package/dist/core/interfaces/vertices/properties/week.d.ts +22 -0
- package/dist/core/interfaces/vertices/properties/week.js +6 -0
- package/dist/core/interfaces/vertices/properties/week.js.map +1 -0
- package/dist/core/interfaces/vertices/root-intervals.d.ts +14 -0
- package/dist/core/interfaces/vertices/syllabuses.d.ts +18 -0
- package/dist/core/interfaces/vertices/teachers.d.ts +43 -0
- package/dist/core/interfaces/vertices/users.d.ts +8 -0
- package/dist/core/interfaces/vertices/util/common.d.ts +28 -0
- package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +31 -0
- package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +51 -0
- package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +64 -0
- package/dist/core/interfaces/vertices/util/edges.d.ts +105 -0
- package/dist/core/interfaces/vertices/util/index.d.ts +5 -0
- package/dist/core/interfaces/vertices/util/keys-of.d.ts +27 -0
- package/dist/core/interfaces/vertices/util/serialized-vertex-export.d.ts +12 -0
- package/dist/core/interfaces/vertices/util/util.d.ts +76 -0
- package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +44 -0
- package/dist/core/interfaces/vertices/util/vertex-query/util.d.ts +13 -0
- package/dist/core/interfaces/vertices/util/vertex.d.ts +70 -0
- package/dist/core/interfaces/vertices/vertex-query.d.ts +102 -0
- package/dist/core/interfaces/vertices/vertex-query.js +94 -0
- package/dist/core/interfaces/vertices/vertex-query.js.map +1 -0
- package/dist/core/to/configurations.js +2 -3
- package/dist/core/to/configurations.js.map +1 -1
- package/dist/core/to/courses.js +2 -3
- package/dist/core/to/courses.js.map +1 -1
- package/dist/core/to/division.js.map +1 -1
- package/dist/core/to/events.js +2 -3
- package/dist/core/to/events.js.map +1 -1
- package/dist/core/to/exceptions.js +4 -4
- package/dist/core/to/exceptions.js.map +1 -1
- package/dist/core/to/groups.js +2 -3
- package/dist/core/to/groups.js.map +1 -1
- package/dist/core/to/locations.js +2 -3
- package/dist/core/to/locations.js.map +1 -1
- package/dist/core/to/locked-times.js +2 -3
- package/dist/core/to/locked-times.js.map +1 -1
- package/dist/core/to/overlap-groups.js +2 -3
- package/dist/core/to/overlap-groups.js.map +1 -1
- package/dist/core/to/periods.js +2 -3
- package/dist/core/to/periods.js.map +1 -1
- package/dist/core/to/persons.js +3 -9
- package/dist/core/to/persons.js.map +1 -1
- package/dist/core/to/root-intervals.js +2 -3
- package/dist/core/to/root-intervals.js.map +1 -1
- package/dist/core/to/schedules.d.ts +17 -18
- package/dist/core/to/schedules.js.map +1 -1
- package/dist/core/to/settings.js +2 -3
- package/dist/core/to/settings.js.map +1 -1
- package/dist/core/to/syllabuses.js +2 -3
- package/dist/core/to/syllabuses.js.map +1 -1
- package/dist/core/to/teachers.js +4 -4
- package/dist/core/to/teachers.js.map +1 -1
- package/dist/core/to/util.d.ts +4 -8
- package/dist/core/to/util.js +7 -5
- package/dist/core/to/util.js.map +1 -1
- package/dist/core/types/common/index.d.ts +4 -41
- package/dist/core/types/index.d.ts +108 -112
- package/dist/core/util.js +4 -5
- package/dist/core/util.js.map +1 -1
- package/dist/identify/constants/index.d.ts +1 -1
- package/dist/identify/constants/index.js +2 -1
- package/dist/identify/constants/index.js.map +1 -1
- package/dist/identify/index.js +9 -3
- package/dist/identify/index.js.map +1 -1
- package/dist/index.d.ts +23 -1
- package/dist/index.js +4 -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 +4 -0
- 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 +10 -8
- package/dist/sdui/from/schedules.js.map +1 -1
- package/dist/sdui/from/school-years.js +0 -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/index.d.ts +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 +12 -10
- 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 +3 -6
- 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 +4 -3
- package/dist/vKlass/from/schedule.js +2 -2
- package/dist/vKlass/from/schedule.js.map +1 -1
- package/dist/vKlass/to/schedules.d.ts +4 -4
- package/dist/vKlass/to/schedules.js +6 -17
- package/dist/vKlass/to/schedules.js.map +1 -1
- package/package.json +24 -22
- package/dist/core/types/areas.d.ts +0 -10
- package/dist/core/types/common/break-lengths.d.ts +0 -5
- package/dist/core/types/common/days.d.ts +0 -8
- package/dist/core/types/common/intervals.d.ts +0 -20
- package/dist/core/types/common/tag.d.ts +0 -9
- package/dist/core/types/configurations.d.ts +0 -31
- package/dist/core/types/courses.d.ts +0 -60
- package/dist/core/types/divisions.d.ts +0 -24
- package/dist/core/types/events.d.ts +0 -56
- package/dist/core/types/exceptions.d.ts +0 -35
- package/dist/core/types/groups.d.ts +0 -44
- package/dist/core/types/locations.d.ts +0 -27
- package/dist/core/types/locked-times.d.ts +0 -33
- package/dist/core/types/overlap-groups.d.ts +0 -14
- package/dist/core/types/periods.d.ts +0 -14
- package/dist/core/types/persons.d.ts +0 -38
- package/dist/core/types/root-intervals.d.ts +0 -13
- package/dist/core/types/schedules.d.ts +0 -44
- package/dist/core/types/syllabus.d.ts +0 -18
- package/dist/core/types/teachers.d.ts +0 -44
- package/dist/core/vertex-mapping.d.ts +0 -69
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["warnings: string[]","errors: string[]","
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["warnings: string[]","errors: string[]","teachers"],"sources":["../../../src/PlanDigital/from/schedules.ts"],"sourcesContent":["import { size, countBy, sum } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Types as PlanDigitalTypes } from '../types';\nimport type { InternalIdKey } from '../../core/types/common';\n\nnamespace OutTypes {\n export type group = Omit<CoreTypes.Serialized.Group, InternalIdKey>;\n export type teacher = Omit<CoreTypes.Serialized.Teacher, InternalIdKey>;\n export type course = Omit<CoreTypes.Serialized.Course, InternalIdKey>;\n}\n\ntype Out = {\n groups?: OutTypes.group[];\n teachers?: OutTypes.teacher[];\n courses?: OutTypes.course[];\n meta?: {\n errors?: string[];\n warnings?: string[];\n };\n};\n\nexport default (\n input: PlanDigitalTypes.schedule,\n options: PlanDigitalTypes.options\n): Out => {\n // gather all import related warnings/errors\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // there must be at least a single period\n if (!input['Perioder'].length) {\n errors.push('The schedule data does not contain any periods.');\n return { meta: { errors } };\n }\n\n // ensure that at least one period is selected\n const selectedPeriods = options.selectedPeriods;\n if (!selectedPeriods?.length) {\n errors.push('No periods were selected.');\n return { meta: { errors } };\n }\n\n // ensure that the selected periods exist\n for (const x of options.selectedPeriods ?? []) {\n if (!input['Perioder'].some(p => p.Namn == x)) {\n errors.push(`The selected period ${x} does not exist.`);\n return { meta: { errors } };\n }\n }\n\n // ensure that all periods use the same time unit\n const numUnits = size(countBy(input['Perioder'].map(x => x.Tidsenhet)));\n if (numUnits > 1) {\n errors.push('Different time periods used for different periods.');\n return { meta: { errors } };\n }\n const timeUnit = input['Perioder'][0].Tidsenhet;\n\n\n ////\n //// fetch courses, groups, and teachers\n ////\n const courses = new Array<OutTypes.course>();\n const teacherSet = new Set<string>();\n const groupSet = new Set<string>();\n input['Tabell Tjänstefördelning'].forEach(c => {\n // check if the course should be taken into account\n // (the course must then have some scheduled time during the selected periods)\n const periodTimes = selectedPeriods.map(x => c[`Tid ${x}`] ?? 0);\n if (sum(periodTimes) == 0) return;\n\n const displayName = c[options.displayName ?? 'Gruppnamn'];\n const subject = c['Kurskod'];\n const groups = c['Klass']?.split(',').map(x => x.trim());\n const teachers = c['Sign'] ?.split(',').map(x => x.trim());\n\n // fetch the expected schedule time in whatever units\n const periodTime = size(countBy(periodTimes)) == 1 ? periodTimes[0] : undefined;\n const minutesPerWeek = timeUnit == 'Minuter/Vecka' ? periodTime : undefined;\n const expectedTotalHours = timeUnit == 'Timmar/Period' ? periodTime : undefined;\n\n // add groups and teachers\n teachers.forEach(x => teacherSet.add(x));\n groups.forEach(x => groupSet.add(x));\n\n // add course\n courses.push({\n displayName,\n subject,\n teachers: teachers.map(to => ({ to })),\n groups: groups .map(to => ({ to })),\n\n ...(minutesPerWeek != undefined && { minutesPerWeek }),\n ...(expectedTotalHours != undefined && { expectedTotalHours })\n });\n\n });\n\n\n const teachers = [...teacherSet].map(ids => ({ ids, displayName: ids }));\n const groups = [...groupSet ].map(ids => ({ ids, displayName: ids, species: 'class' as const }));\n return { groups, teachers, courses,\n meta: {\n ...( errors.length && { errors: errors } ),\n ...( warnings.length && { warnings: warnings } )\n }\n };\n};"],"mappings":";;;AAqBA,yBACE,OACA,YACQ;CAER,MAAMA,WAAqB,EAAE;CAC7B,MAAMC,SAAqB,EAAE;AAG7B,KAAI,CAAC,MAAM,YAAY,QAAQ;AAC7B,SAAO,KAAK,kDAAkD;AAC9D,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;CAI7B,MAAM,kBAAkB,QAAQ;AAChC,KAAI,CAAC,iBAAiB,QAAQ;AAC5B,SAAO,KAAK,4BAA4B;AACxC,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;AAI7B,MAAK,MAAM,KAAK,QAAQ,mBAAmB,EAAE,CAC3C,KAAI,CAAC,MAAM,YAAY,MAAK,MAAK,EAAE,QAAQ,EAAE,EAAE;AAC7C,SAAO,KAAK,uBAAuB,EAAE,kBAAkB;AACvD,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;AAM/B,KADiB,KAAK,QAAQ,MAAM,YAAY,KAAI,MAAK,EAAE,UAAU,CAAC,CAAC,GACxD,GAAG;AAChB,SAAO,KAAK,qDAAqD;AACjE,SAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;;CAE7B,MAAM,WAAW,MAAM,YAAY,GAAG;CAMtC,MAAM,UAAa,IAAI,OAAwB;CAC/C,MAAM,6BAAa,IAAI,KAAa;CACpC,MAAM,2BAAa,IAAI,KAAa;AACpC,OAAM,4BAA4B,SAAQ,MAAK;EAG7C,MAAM,cAAc,gBAAgB,KAAI,MAAK,EAAE,OAAO,QAAQ,EAAE;AAChE,MAAI,IAAI,YAAY,IAAI,EAAG;EAE3B,MAAM,cAAc,EAAE,QAAQ,eAAe;EAC7C,MAAM,UAAc,EAAE;EACtB,MAAM,SAAc,EAAE,UAAU,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC;EAC7D,MAAMC,aAAc,EAAE,SAAU,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC;EAG7D,MAAM,aAAqB,KAAK,QAAQ,YAAY,CAAC,IAAI,IAAI,YAAY,KAAK;EAC9E,MAAM,iBAAqB,YAAY,kBAA0B,aAAiB;EAClF,MAAM,qBAAqB,YAAY,kBAA0B,aAAiB;AAGlF,aAAS,SAAQ,MAAK,WAAW,IAAI,EAAE,CAAC;AACxC,SAAO,SAAQ,MAAO,SAAS,IAAI,EAAE,CAAC;AAGtC,UAAQ,KAAK;GACX;GACA;GACA,UAAUA,WAAS,KAAI,QAAO,EAAE,IAAI,EAAE;GACtC,QAAU,OAAS,KAAI,QAAO,EAAE,IAAI,EAAE;GAEtC,GAAI,kBAAsB,UAAa,EAAE,gBAAoB;GAC7D,GAAI,sBAAsB,UAAa,EAAE,oBAAoB;GAC9D,CAAC;GAEF;CAGF,MAAM,WAAW,CAAC,GAAG,WAAW,CAAC,KAAI,SAAQ;EAAE;EAAK,aAAa;EAAK,EAAE;AAExE,QAAO;EAAE,QADQ,CAAC,GAAG,SAAW,CAAC,KAAI,SAAQ;GAAE;GAAK,aAAa;GAAK,SAAS;GAAkB,EAAE;EAClF;EAAU;EACzB,MAAM;GACJ,GAAK,OAAO,UAAY,EAAY,QAAU;GAC9C,GAAK,SAAS,UAAU,EAAY,UAAU;GAC/C;EACF"}
|
|
@@ -1,106 +1,121 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { Tag } from "../core/types/common/tag.js";
|
|
8
|
-
import { PlannedScheduledDuration } from "../core/types/common/planned-schedule-duration.js";
|
|
1
|
+
import { Day } from "../core/interfaces/vertices/properties/days.js";
|
|
2
|
+
import { Interval } from "../core/interfaces/vertices/properties/intervals.js";
|
|
3
|
+
import { Tag } from "../core/interfaces/vertices/properties/tags.js";
|
|
4
|
+
import { MaximumScheduleSpan } from "../core/interfaces/vertices/properties/maximum-schedule-span.js";
|
|
5
|
+
import { PlannedScheduledDuration } from "../core/interfaces/vertices/properties/planned-scheduled-duration.js";
|
|
6
|
+
import { MinBreakLength } from "../core/interfaces/vertices/properties/min-break-length.js";
|
|
9
7
|
import { Types } from "./types/index.js";
|
|
8
|
+
import "../index.js";
|
|
10
9
|
|
|
11
10
|
//#region src/PlanDigital/index.d.ts
|
|
12
11
|
declare class PlanDigitalMap {
|
|
13
12
|
static from: {
|
|
14
13
|
schedules: (input: Types.schedule, options: Types.options) => {
|
|
15
14
|
groups?: {
|
|
15
|
+
ids?: string | undefined;
|
|
16
16
|
exceptions?: string[] | undefined;
|
|
17
17
|
lockedTimes?: string[] | undefined;
|
|
18
|
-
|
|
19
|
-
updatedAt?: DateType | undefined;
|
|
20
|
-
lastModifiedBy?: unknown;
|
|
21
|
-
ids?: ID | undefined;
|
|
22
|
-
belongsTo?: string | undefined;
|
|
23
|
-
rank?: number | undefined;
|
|
24
|
-
days?: Day[] | undefined;
|
|
18
|
+
is?: "group" | undefined;
|
|
25
19
|
displayName?: string | undefined;
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
createdAt?: string | undefined;
|
|
21
|
+
updatedAt?: string | undefined;
|
|
22
|
+
lastModifiedBy?: string | undefined;
|
|
23
|
+
rootInterval?: string | undefined;
|
|
24
|
+
belongsTo?: string | undefined;
|
|
25
|
+
tags?: Tag[] | undefined;
|
|
26
|
+
minBreakLength?: number | undefined;
|
|
27
|
+
maxNumWorkingHours?: number | false | undefined;
|
|
28
|
+
maxNumDailyWorkingHours?: number | number[] | false | undefined;
|
|
28
29
|
maximumScheduleSpan?: MaximumScheduleSpan | undefined;
|
|
29
30
|
forbidOverlappingEvents?: boolean | undefined;
|
|
30
31
|
disableDayLengthPunishment?: boolean | undefined;
|
|
31
32
|
weight?: number | undefined;
|
|
32
33
|
species?: "class" | undefined;
|
|
34
|
+
intervals?: Interval[] | undefined;
|
|
35
|
+
days?: Day[] | undefined;
|
|
33
36
|
parentGroups?: string[] | undefined;
|
|
34
37
|
subGroups?: string[] | undefined;
|
|
35
38
|
lunch?: string[] | undefined;
|
|
36
39
|
members?: string[] | undefined;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
derivedParentGroups?: {
|
|
41
|
+
implicit?: boolean | undefined;
|
|
42
|
+
explicit?: boolean | undefined;
|
|
43
|
+
group: string;
|
|
44
|
+
}[] | undefined;
|
|
41
45
|
}[];
|
|
42
46
|
teachers?: {
|
|
47
|
+
ids?: string | undefined;
|
|
43
48
|
exceptions?: string[] | undefined;
|
|
44
49
|
lockedTimes?: string[] | undefined;
|
|
45
|
-
|
|
46
|
-
updatedAt?: DateType | undefined;
|
|
47
|
-
lastModifiedBy?: unknown;
|
|
48
|
-
ids?: ID | undefined;
|
|
49
|
-
belongsTo?: string | undefined;
|
|
50
|
-
rank?: number | undefined;
|
|
51
|
-
days?: Day[] | undefined;
|
|
50
|
+
is?: "teacher" | undefined;
|
|
52
51
|
displayName?: string | undefined;
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
createdAt?: string | undefined;
|
|
53
|
+
updatedAt?: string | undefined;
|
|
54
|
+
lastModifiedBy?: string | undefined;
|
|
55
|
+
rootInterval?: string | undefined;
|
|
56
|
+
person?: string | undefined;
|
|
57
|
+
belongsTo?: string | undefined;
|
|
58
|
+
tags?: Tag[] | undefined;
|
|
59
|
+
minBreakLength?: number | undefined;
|
|
60
|
+
maxNumWorkingHours?: number | false | undefined;
|
|
61
|
+
maxNumDailyWorkingHours?: number | number[] | false | undefined;
|
|
55
62
|
maximumScheduleSpan?: MaximumScheduleSpan | undefined;
|
|
56
63
|
forbidOverlappingEvents?: boolean | undefined;
|
|
57
64
|
disableDayLengthPunishment?: boolean | undefined;
|
|
58
65
|
weight?: number | undefined;
|
|
66
|
+
intervals?: Interval[] | undefined;
|
|
67
|
+
days?: Day[] | undefined;
|
|
59
68
|
lunch?: string[] | undefined;
|
|
60
|
-
rootInterval?: string | undefined;
|
|
61
|
-
tags?: Tag[] | undefined;
|
|
62
|
-
maxNumWorkingHours?: number | boolean | undefined;
|
|
63
|
-
maxNumDailyWorkingHours?: number | number[] | boolean | undefined;
|
|
64
|
-
plannedScheduledDuration?: PlannedScheduledDuration | undefined;
|
|
65
|
-
person?: string | undefined;
|
|
66
69
|
signature?: string | undefined;
|
|
70
|
+
plannedScheduledDuration?: PlannedScheduledDuration | undefined;
|
|
71
|
+
complementaryTimes?: string[] | undefined;
|
|
67
72
|
}[];
|
|
68
73
|
courses?: {
|
|
74
|
+
ids?: string | undefined;
|
|
69
75
|
exceptions?: string[] | undefined;
|
|
70
|
-
groups?:
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
groups?: {
|
|
77
|
+
groupIndex?: number | undefined;
|
|
78
|
+
to: string;
|
|
79
|
+
exclude?: string[] | undefined;
|
|
80
|
+
}[] | undefined;
|
|
81
|
+
teachers?: {
|
|
82
|
+
groupIndex?: number | undefined;
|
|
83
|
+
to: string;
|
|
84
|
+
}[] | undefined;
|
|
85
|
+
locations?: {
|
|
86
|
+
groupIndex?: number | undefined;
|
|
87
|
+
rank?: number | undefined;
|
|
88
|
+
locations: [string];
|
|
89
|
+
}[] | undefined;
|
|
73
90
|
events?: string[] | undefined;
|
|
74
91
|
lockedTimes?: string[] | undefined;
|
|
75
|
-
|
|
76
|
-
updatedAt?: DateType | undefined;
|
|
77
|
-
lastModifiedBy?: unknown;
|
|
78
|
-
ids?: ID | undefined;
|
|
79
|
-
belongsTo?: string | undefined;
|
|
80
|
-
type?: string | undefined;
|
|
81
|
-
days?: Day[] | undefined;
|
|
82
|
-
weeks?: number[] | undefined;
|
|
92
|
+
is?: "course" | undefined;
|
|
83
93
|
displayName?: string | undefined;
|
|
94
|
+
createdAt?: string | undefined;
|
|
95
|
+
updatedAt?: string | undefined;
|
|
96
|
+
lastModifiedBy?: string | undefined;
|
|
97
|
+
overlapGroup?: string | undefined;
|
|
84
98
|
period?: string | undefined;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
99
|
+
syllabus?: string | undefined;
|
|
100
|
+
belongsTo?: string | undefined;
|
|
101
|
+
type?: string | undefined;
|
|
88
102
|
tags?: Tag[] | undefined;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
minBreakLength?: MinBreakLength | undefined;
|
|
104
|
+
weight?: number | undefined;
|
|
105
|
+
intervals?: Interval[] | undefined;
|
|
106
|
+
days?: Day[] | undefined;
|
|
92
107
|
subject?: string | undefined;
|
|
108
|
+
color?: string | undefined;
|
|
93
109
|
eventDurationVariance?: number | undefined;
|
|
94
|
-
totalTime?: string | undefined;
|
|
95
|
-
comment?: string | undefined;
|
|
96
|
-
startDate?: DateType | undefined;
|
|
97
|
-
endDate?: DateType | undefined;
|
|
98
110
|
centerOfAttraction?: string | null | undefined;
|
|
99
|
-
|
|
100
|
-
overlapGroup?: string | null | undefined;
|
|
111
|
+
density?: number | undefined;
|
|
101
112
|
plannedDuration?: string | undefined;
|
|
102
113
|
minutesPerWeek?: number | undefined;
|
|
103
114
|
expectedTotalHours?: number | undefined;
|
|
115
|
+
participants?: {
|
|
116
|
+
groupIndex?: number | undefined;
|
|
117
|
+
to: string;
|
|
118
|
+
}[] | undefined;
|
|
104
119
|
}[];
|
|
105
120
|
meta?: {
|
|
106
121
|
errors?: string[];
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { Types } from "../../../core/types/index.js";
|
|
2
|
+
import "../../../index.js";
|
|
2
3
|
import * as xlsx0 from "xlsx";
|
|
3
4
|
|
|
4
5
|
//#region src/Quiculum/file/to/index.d.ts
|
|
5
6
|
declare class export_default {
|
|
6
7
|
static schedules: (schedule: {
|
|
7
|
-
division: Types.
|
|
8
|
-
settings: Types.
|
|
9
|
-
groups: Types.
|
|
10
|
-
teachers: Types.
|
|
11
|
-
locations: Types.
|
|
12
|
-
courses: Types.
|
|
13
|
-
events: Types.
|
|
14
|
-
periods: Types.
|
|
15
|
-
persons: Types.
|
|
8
|
+
division: Types.Deep.Division;
|
|
9
|
+
settings: Types.Deep.Settings;
|
|
10
|
+
groups: Types.Deep.Group[];
|
|
11
|
+
teachers: Types.Deep.Teacher[];
|
|
12
|
+
locations: Types.Deep.Location[];
|
|
13
|
+
courses: Types.Deep.Course[];
|
|
14
|
+
events: Types.Deep.Event[];
|
|
15
|
+
periods: Types.Deep.Period[];
|
|
16
|
+
persons: Types.Deep.Person[];
|
|
16
17
|
}) => xlsx0.WorkBook;
|
|
17
18
|
}
|
|
18
19
|
//#endregion
|
|
@@ -5,8 +5,7 @@ import XLSX from "xlsx";
|
|
|
5
5
|
//#region src/Quiculum/file/to/schedules.ts
|
|
6
6
|
var schedules_default = (schedule) => {
|
|
7
7
|
const options = { idKey: "id" };
|
|
8
|
-
|
|
9
|
-
if (!did) throw new Error("division id is undefined");
|
|
8
|
+
if (!getVertexId(schedule.division, options)) throw new Error("division id is undefined");
|
|
10
9
|
const periodsMap = new Map(schedule.periods?.map((p) => [getVertexId(p, options), p]));
|
|
11
10
|
const defaultPeriod = { ranges: [{
|
|
12
11
|
start: schedule.division.start,
|
|
@@ -36,11 +35,9 @@ var schedules_default = (schedule) => {
|
|
|
36
35
|
if (!course) return null;
|
|
37
36
|
const courseName = course.displayName ?? "";
|
|
38
37
|
const inLocation = e.inLocations?.at(0);
|
|
39
|
-
const
|
|
40
|
-
const locationName = location?.displayName;
|
|
38
|
+
const locationName = (inLocation ? locationsMap.get(getVertexId(inLocation, options)) : void 0)?.displayName;
|
|
41
39
|
const _period = e.period ?? course.period ?? schedule.settings.period;
|
|
42
|
-
const
|
|
43
|
-
const weeksInPeriod = period?.ranges.map((x) => {
|
|
40
|
+
const weeksInPeriod = periodsMap.get(_period ? getVertexId(_period, options) : void 0)?.ranges.map((x) => {
|
|
44
41
|
const start$1 = moment.utc(x.start);
|
|
45
42
|
const end$1 = moment.utc(x.end);
|
|
46
43
|
const weeks = new Array();
|
|
@@ -50,7 +47,7 @@ var schedules_default = (schedule) => {
|
|
|
50
47
|
}
|
|
51
48
|
return weeks;
|
|
52
49
|
}).flat();
|
|
53
|
-
const
|
|
50
|
+
const excludedWeeks = (defaultPeriod?.ranges.map((x) => {
|
|
54
51
|
const start$1 = moment.utc(x.start);
|
|
55
52
|
const end$1 = moment.utc(x.end);
|
|
56
53
|
const weeks = new Array();
|
|
@@ -59,8 +56,7 @@ var schedules_default = (schedule) => {
|
|
|
59
56
|
start$1.add(1, "week");
|
|
60
57
|
}
|
|
61
58
|
return weeks;
|
|
62
|
-
}).flat();
|
|
63
|
-
const excludedWeeks = allWeeks.filter((x) => !weeksInPeriod?.includes(x)).join(", ");
|
|
59
|
+
}).flat()).filter((x) => !weeksInPeriod?.includes(x)).join(", ");
|
|
64
60
|
const holidaysInPeriod = holidaysInDays.filter((x) => {
|
|
65
61
|
return weeksInPeriod?.includes(x.week());
|
|
66
62
|
}).map((x) => x.format("YYYY-MM-DD")).join(", ");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["options: BaseOptions","defaultPeriod: Pick<CoreTypes.
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["options: BaseOptions","defaultPeriod: Pick<CoreTypes.Deep.Period, 'ranges'>","holidaysInDays: moment.Moment[]","start","end"],"sources":["../../../../src/Quiculum/file/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport XLSX from 'xlsx';\nimport type { Types as CoreTypes } from '../../../core/types';\nimport type { BaseOptions } from '../../../common/types';\nimport { getVertexId } from '../../../core/util';\n\ntype Schedule = {\n division: CoreTypes.Deep.Division;\n settings: CoreTypes.Deep.Settings;\n groups: CoreTypes.Deep.Group[];\n teachers: CoreTypes.Deep.Teacher[];\n locations: CoreTypes.Deep.Location[];\n courses: CoreTypes.Deep.Course[];\n events: CoreTypes.Deep.Event[];\n periods: CoreTypes.Deep.Period[];\n persons: CoreTypes.Deep.Person[];\n};\n\n\n\nexport default (\n schedule: Schedule,\n): XLSX.WorkBook => {\n const options: BaseOptions = { idKey: 'id' };\n // must have a division id\n const did = getVertexId(schedule.division, options);\n if (!did) throw new Error('division id is undefined');\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.Deep.Period, 'ranges'>]));\n const defaultPeriod: Pick<CoreTypes.Deep.Period, 'ranges'> = {\n ranges: [{ start: schedule.division.start, end: schedule.division.end }]\n };\n periodsMap.set(undefined, defaultPeriod);\n\n // a map of course id -> course\n const coursesMap = new Map(schedule.courses?.map((c) => [getVertexId(c, options), c]));\n\n // a map of location id -> location\n const locationsMap = new Map(schedule.locations?.map((l) => [getVertexId(l, options), l]));\n\n // get start and end dates from division in YYYY-MM-DD format\n const startDate = moment.utc(schedule.division.start).format('YYYY-MM-DD');\n const endDate = moment.utc(schedule.division.end).format('YYYY-MM-DD');\n // get schoolyear from division start date in format YY/YY (only considers the start year, for example 2023-01-01 becomes 23/24)\n const schoolYear = moment.utc(schedule.division.start).format('YY') + '/' +\n moment.utc(schedule.division.start).add(1, 'year').format('YY');\n\n const holidays = schedule.settings?.calendarExceptions\n ?.filter((x) => x.start && x.end);\n\n\n const holidaysInDays: moment.Moment[] = [];\n\n if (holidays) {\n for (const holiday of holidays) {\n const start = moment.utc(holiday.start);\n const end = moment.utc(holiday.end);\n while (start.isBefore(end)) {\n // Only push weekdays (Monday to Friday)\n if (start.isoWeekday() < 6) {\n holidaysInDays.push(start.clone());\n }\n start.add(1, 'day');\n }\n }\n }\n\n ////\n //// Activities (events)\n ////\n const activities = 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 const courseName = course.displayName ?? '';\n\n // Location\n const inLocation = e.inLocations?.at(0);\n const location = inLocation ? locationsMap.get(getVertexId(inLocation, options)) : undefined;\n const locationName = location?.displayName;\n\n const _period = e.period ?? course.period ?? schedule.settings.period;\n const period = periodsMap.get(_period ? getVertexId(_period, options) : undefined);\n\n const weeksInPeriod = period?.ranges\n .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 })\n .flat();\n\n const allWeeks = defaultPeriod?.ranges\n .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 })\n .flat();\n\n const excludedWeeks = allWeeks\n .filter((x) => !weeksInPeriod?.includes(x))\n .join(', ');\n\n // Get the holidays in the period (don't include holidays that are not in the period)\n const holidaysInPeriod = holidaysInDays\n .filter((x) => {\n return weeksInPeriod?.includes(x.week());\n })\n .map((x) => x.format('YYYY-MM-DD'))\n .join(', ');\n\n return {\n DayOfWeek: (start.day() + 6) % 7,\n Duration: end.diff(start, 'minutes'),\n EndDate: endDate,\n Name: courseName,\n StartDate: startDate,\n StartTime: start.format('HH:mm'),\n ExcludeDates: holidaysInPeriod,\n ExcludeWeeks: excludedWeeks,\n ExternalActivityID: e.ids,\n ExternalLocationID: '',\n ExternalTeachingGroupID: '',\n Location: locationName,\n SchoolYear: schoolYear,\n Teachers: ''\n };\n })\n .filter((x): x is NonNullable<typeof x> => !!x);\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(activities), 'Activities');\n\n return wb;\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Types } from "../../core/types/index.js";
|
|
2
|
+
import "../../core/index.js";
|
|
2
3
|
|
|
3
4
|
//#region src/RS/from/division.d.ts
|
|
4
|
-
declare function division(input: unknown): Pick<Types.
|
|
5
|
+
declare function division(input: unknown): undefined | Pick<Types.Deep.Division, 'displayName' | 'start' | 'end'>;
|
|
5
6
|
//#endregion
|
|
6
7
|
export { division };
|
|
7
8
|
//# sourceMappingURL=division.d.ts.map
|
package/dist/RS/from/division.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
//#region src/RS/from/division.ts
|
|
2
2
|
function division(input) {
|
|
3
|
-
|
|
4
|
-
if (!input || typeof input != "object" || !("meta" in input) || !input.meta || typeof input.meta != "object" || !("division" in input.meta) || !input.meta.division || typeof input.meta.division != "object") return division$1;
|
|
3
|
+
if (!input || typeof input != "object" || !("meta" in input) || !input.meta || typeof input.meta != "object" || !("division" in input.meta) || !input.meta.division || typeof input.meta.division != "object") return;
|
|
5
4
|
const d = input.meta.division;
|
|
6
|
-
if ("displayName" in d && typeof d.displayName == "string")
|
|
7
|
-
if ("start" in d && typeof d.start == "string")
|
|
8
|
-
if ("end" in d && typeof d.end == "string")
|
|
9
|
-
return
|
|
5
|
+
if (!("displayName" in d && typeof d.displayName == "string")) return;
|
|
6
|
+
if (!("start" in d && typeof d.start == "string")) return;
|
|
7
|
+
if (!("end" in d && typeof d.end == "string")) return;
|
|
8
|
+
return {
|
|
9
|
+
displayName: d.displayName,
|
|
10
|
+
start: d.start,
|
|
11
|
+
end: d.end
|
|
12
|
+
};
|
|
10
13
|
}
|
|
11
14
|
|
|
12
15
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"division.js","names":[
|
|
1
|
+
{"version":3,"file":"division.js","names":[],"sources":["../../../src/RS/from/division.ts"],"sourcesContent":["import type { CoreTypes } from '../../core';\n\nexport function division (input: unknown): undefined | Pick<CoreTypes.Deep.Division, 'displayName' | 'start' | 'end'> {\n\n if ( !input || typeof input != 'object'\n || !('meta' in input ) || !input.meta || typeof input.meta != 'object'\n || !('division' in input.meta) || !input.meta.division || typeof input.meta.division != 'object'\n ) return;\n\n const d = input.meta.division;\n\n if (!('displayName' in d && typeof d.displayName == 'string')) return;\n if (!('start' in d && typeof d.start == 'string')) return;\n if (!('end' in d && typeof d.end == 'string')) return;\n\n const division: Pick<CoreTypes.Deep.Division, 'displayName' | 'start' | 'end'> = {\n displayName: d.displayName,\n start: d.start,\n end: d.end,\n };\n return division;\n};"],"mappings":";AAEA,SAAgB,SAAU,OAA4F;AAEpH,KAAoC,CAAC,SAAuB,OAAO,SAAuB,YACrF,EAAE,UAAc,UAAe,CAAC,MAAM,QAAiB,OAAO,MAAM,QAAiB,YACrF,EAAE,cAAc,MAAM,SAAS,CAAC,MAAM,KAAK,YAAY,OAAO,MAAM,KAAK,YAAY,SACxF;CAEF,MAAM,IAAI,MAAM,KAAK;AAErB,KAAI,EAAE,iBAAiB,KAAK,OAAO,EAAE,eAAe,UAAW;AAC/D,KAAI,EAAE,WAAiB,KAAK,OAAO,EAAE,SAAe,UAAW;AAC/D,KAAI,EAAE,SAAiB,KAAK,OAAO,EAAE,OAAe,UAAW;AAO/D,QALiF;EAC/E,aAAa,EAAE;EACf,OAAa,EAAE;EACf,KAAa,EAAE;EAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/RS/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport { division } from './division';\nimport { schedules } from './schedules';\n\nexport default {\n division: division,\n schedules: schedules,\n} satisfies FromInterface;"],"mappings":";;;;AAIA,mBAAe;CACF;CACA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/RS/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport { division } from './division';\nimport { schedules } from './schedules';\n\nexport default {\n division: division,\n schedules: schedules,\n} satisfies FromInterface;"],"mappings":";;;;AAIA,mBAAe;CACF;CACA;CACZ"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Types as Types$1 } from "../../core/types/index.js";
|
|
2
|
+
import "../../core/index.js";
|
|
2
3
|
import { Types } from "../types/index.js";
|
|
3
4
|
|
|
4
5
|
//#region src/RS/from/schedules.d.ts
|
|
5
|
-
declare function schedules(input: Partial<Types.toOutput>, options
|
|
6
|
+
declare function schedules(input: Partial<Types.toOutput>, options?: Pick<Types.toOptions, 'idKey'>): Partial<Types$1.SerializedWithOptionalId.Schedule>;
|
|
6
7
|
//#endregion
|
|
7
8
|
export { schedules };
|
|
8
9
|
//# sourceMappingURL=schedules.d.ts.map
|
|
@@ -3,7 +3,8 @@ import { COLLECTION_ID } from "../to/input/util/util.js";
|
|
|
3
3
|
import moment from "moment";
|
|
4
4
|
|
|
5
5
|
//#region src/RS/from/schedules.ts
|
|
6
|
-
function schedules(input, options) {
|
|
6
|
+
function schedules(input, options = {}) {
|
|
7
|
+
if (!options.idKey) options.idKey = "id";
|
|
7
8
|
const warnings = [];
|
|
8
9
|
const schedule = input.coreData;
|
|
9
10
|
const eventConfigurations = input.output?.at(0)?.events;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":["warnings: string[]"],"sources":["../../../src/RS/from/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from '../types';\nimport { COLLECTION_ID } from '../to/input/util/util';\nimport { getVertexId } from '../../core/util';\nimport type { CoreTypes } from '../../core';\n\nexport function schedules (\n input: Partial<Types.toOutput>,\n options: Pick<Types.toOptions, 'idKey'
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["warnings: string[]"],"sources":["../../../src/RS/from/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from '../types';\nimport { COLLECTION_ID } from '../to/input/util/util';\nimport { getVertexId } from '../../core/util';\nimport type { CoreTypes } from '../../core';\n\nexport function schedules (\n input: Partial<Types.toOutput>,\n options: Pick<Types.toOptions, 'idKey'> = {}\n): Partial<CoreTypes.SerializedWithOptionalId.Schedule> {\n // set default idKey if not provided\n if (!options.idKey) options.idKey = 'id';\n\n const warnings: string[] = [];\n\n const schedule = input.coreData;\n const eventConfigurations = input.output?.at(0)?.events;\n\n if (!schedule ) throw new Error('Missing `coreData` in input.');\n if (!eventConfigurations) throw new Error('Missing `output.events` in input.');\n\n // check on later to ensure that all events are updated\n const eventsToUpdate = new Set(schedule.events?.map(x => getVertexId(x, options)));\n\n eventConfigurations.forEach(({ id: collectionAndId, ...placement }) => {\n // locate the corresponding event/locked time\n const collection = collectionAndId.split('.')[0] == COLLECTION_ID.events ? 'events' : 'lockedTimes';\n const id = collectionAndId.split('.')[1];\n const event = schedule[collection]?.find(x => getVertexId(x, options) == id);\n\n if (!event) {\n warnings.push(`Could not find ${id} (${collectionAndId}) in ${collection} collection.`);\n return;\n }\n\n event.parked = false;\n event.start = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.start, 'minutes').toISOString();\n event.end = moment.utc('1970-01-05T00:00').add(placement.day, 'days').add(placement.end, 'minutes').toISOString();\n event.duration = placement.end - placement.start;\n\n if (collection == 'events') {\n (event as CoreTypes.Serialized.Event).inLocations = placement.dependencies?.filter(Boolean) ?? [];\n\n // remove from events to be updates\n eventsToUpdate.delete(id);\n }\n });\n\n // check if there are events that were not updated\n if (eventsToUpdate.size) {\n warnings.push(`The following events were not updated: ${[...eventsToUpdate].join(', ')}`);\n }\n\n\n return Object.assign(schedule, {\n meta: {\n ...warnings.length && { warnings: warnings }\n }\n });\n};"],"mappings":";;;;;AAMA,SAAgB,UACd,OACA,UAA0C,EAAE,EACU;AAEtD,KAAI,CAAC,QAAQ,MAAO,SAAQ,QAAQ;CAEpC,MAAMA,WAAqB,EAAE;CAE7B,MAAM,WAAsB,MAAM;CAClC,MAAM,sBAAsB,MAAM,QAAQ,GAAG,EAAE,EAAE;AAEjD,KAAI,CAAC,SAAqB,OAAM,IAAI,MAAM,+BAA+B;AACzE,KAAI,CAAC,oBAAqB,OAAM,IAAI,MAAM,oCAAoC;CAG9E,MAAM,iBAAiB,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,YAAY,GAAG,QAAQ,CAAC,CAAC;AAElF,qBAAoB,SAAS,EAAE,IAAI,gBAAiB,GAAG,gBAAgB;EAErE,MAAM,aAAa,gBAAgB,MAAM,IAAI,CAAC,MAAM,cAAc,SAAS,WAAW;EACtF,MAAM,KAAa,gBAAgB,MAAM,IAAI,CAAC;EAC9C,MAAM,QAAQ,SAAS,aAAa,MAAK,MAAK,YAAY,GAAG,QAAQ,IAAI,GAAG;AAE5E,MAAI,CAAC,OAAO;AACV,YAAS,KAAK,kBAAkB,GAAG,IAAI,gBAAgB,OAAO,WAAW,cAAc;AACvF;;AAGF,QAAM,SAAW;AACjB,QAAM,QAAW,OAAO,IAAI,mBAAmB,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,IAAI,UAAU,OAAO,UAAU,CAAC,aAAa;AACxH,QAAM,MAAW,OAAO,IAAI,mBAAmB,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,IAAI,UAAU,KAAO,UAAU,CAAC,aAAa;AACxH,QAAM,WAAW,UAAU,MAAM,UAAU;AAE3C,MAAI,cAAc,UAAU;AAC1B,GAAC,MAAqC,cAAc,UAAU,cAAc,OAAO,QAAQ,IAAI,EAAE;AAGjG,kBAAe,OAAO,GAAG;;GAE3B;AAGF,KAAI,eAAe,KACjB,UAAS,KAAK,0CAA0C,CAAC,GAAG,eAAe,CAAC,KAAK,KAAK,GAAG;AAI3F,QAAO,OAAO,OAAO,UAAU,EAC7B,MAAM,EACJ,GAAG,SAAS,UAAU,EAAY,UAAU,EAC7C,EACF,CAAC"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import "../core/types/common/index.js";
|
|
2
|
+
import { Mixed } from "../core/interfaces/vertices/index.js";
|
|
3
|
+
import "../core/index.js";
|
|
4
|
+
import "./types/index.js";
|
|
3
5
|
|
|
4
6
|
//#region src/RS/make-connected.d.ts
|
|
5
|
-
|
|
6
7
|
type _Schedule = {
|
|
7
|
-
division: Mixed
|
|
8
|
-
divisions: Mixed
|
|
9
|
-
settings: Mixed
|
|
10
|
-
groups: Mixed
|
|
11
|
-
teachers: Mixed
|
|
12
|
-
locations: Mixed
|
|
13
|
-
periods: Mixed
|
|
14
|
-
persons: Mixed
|
|
15
|
-
rootIntervals: Mixed
|
|
16
|
-
lockedTimes: Mixed
|
|
17
|
-
overlapGroups: Mixed
|
|
18
|
-
courses: Mixed
|
|
19
|
-
events: Mixed
|
|
8
|
+
division: Mixed.Division;
|
|
9
|
+
divisions: Mixed.Division;
|
|
10
|
+
settings: Mixed.Settings;
|
|
11
|
+
groups: Mixed.Group[];
|
|
12
|
+
teachers: Mixed.Teacher[];
|
|
13
|
+
locations: Mixed.Location[];
|
|
14
|
+
periods: Mixed.Period[];
|
|
15
|
+
persons: Mixed.Person[];
|
|
16
|
+
rootIntervals: Mixed.RootInterval[];
|
|
17
|
+
lockedTimes: Mixed.LockedTime[];
|
|
18
|
+
overlapGroups: Mixed.OverlapGroup[];
|
|
19
|
+
courses: Mixed.Course[];
|
|
20
|
+
events: Mixed.Event[];
|
|
20
21
|
};
|
|
21
22
|
type MixedScheduleData = Partial<_Schedule>;
|
|
22
23
|
//#endregion
|