@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
package/dist/Excel/index.d.ts
CHANGED
|
@@ -1,55 +1,292 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IDType, PrivateIDType } from "../core/interfaces/vertices/util/vertex.js";
|
|
2
|
+
import { Day } from "../core/interfaces/vertices/properties/days.js";
|
|
3
|
+
import { Interval } from "../core/interfaces/vertices/properties/intervals.js";
|
|
4
|
+
import { Tag } from "../core/interfaces/vertices/properties/tags.js";
|
|
5
|
+
import { MaximumScheduleSpan } from "../core/interfaces/vertices/properties/maximum-schedule-span.js";
|
|
6
|
+
import { PlannedScheduledDuration } from "../core/interfaces/vertices/properties/planned-scheduled-duration.js";
|
|
7
|
+
import { MinBreakLength } from "../core/interfaces/vertices/properties/min-break-length.js";
|
|
2
8
|
import { Types } from "./v1/types/index.js";
|
|
3
9
|
import { Map } from "./v1/index.js";
|
|
4
10
|
import { Types as Types$1 } from "./v2/types/index.js";
|
|
5
11
|
import { Map as Map$1 } from "./v2/index.js";
|
|
12
|
+
import "../index.js";
|
|
13
|
+
import * as moment191 from "moment";
|
|
6
14
|
|
|
7
15
|
//#region src/Excel/index.d.ts
|
|
8
16
|
declare class ExcelMap {
|
|
9
17
|
static from: {
|
|
10
18
|
schedules: (source: Types$1.Source) => {
|
|
11
19
|
settings: {
|
|
12
|
-
discretization: number;
|
|
13
20
|
numDays: number;
|
|
14
21
|
dayStart: string;
|
|
15
22
|
dayEnd: string;
|
|
23
|
+
discretization: number;
|
|
16
24
|
};
|
|
17
|
-
locations: (
|
|
18
|
-
id:
|
|
19
|
-
|
|
25
|
+
locations: (Omit<{
|
|
26
|
+
id: IDType;
|
|
27
|
+
_id: PrivateIDType;
|
|
28
|
+
ids?: string | undefined;
|
|
29
|
+
is?: "location" | undefined;
|
|
30
|
+
displayName?: string | undefined;
|
|
31
|
+
createdAt?: string | undefined;
|
|
32
|
+
updatedAt?: string | undefined;
|
|
33
|
+
lastModifiedBy?: string | undefined;
|
|
34
|
+
tags?: Tag[] | undefined;
|
|
35
|
+
minBreakLength?: number | undefined;
|
|
36
|
+
days?: Day[] | undefined;
|
|
37
|
+
maximumCapacity?: number | undefined;
|
|
38
|
+
belongsTo?: string | undefined;
|
|
39
|
+
lockedTimes?: string[] | undefined;
|
|
40
|
+
lunch?: string[] | undefined;
|
|
41
|
+
exceptions?: string[] | undefined;
|
|
42
|
+
}, "_id"> & {
|
|
20
43
|
__raw: Types$1.Location;
|
|
21
44
|
})[];
|
|
22
|
-
teachers: (
|
|
23
|
-
id:
|
|
24
|
-
|
|
45
|
+
teachers: (Omit<{
|
|
46
|
+
id: IDType;
|
|
47
|
+
_id: PrivateIDType;
|
|
48
|
+
ids?: string | undefined;
|
|
49
|
+
is?: "teacher" | undefined;
|
|
50
|
+
displayName?: string | undefined;
|
|
51
|
+
createdAt?: string | undefined;
|
|
52
|
+
updatedAt?: string | undefined;
|
|
53
|
+
lastModifiedBy?: string | undefined;
|
|
54
|
+
tags?: Tag[] | undefined;
|
|
55
|
+
minBreakLength?: number | undefined;
|
|
56
|
+
maxNumWorkingHours?: number | false | undefined;
|
|
57
|
+
maxNumDailyWorkingHours?: number | number[] | false | undefined;
|
|
58
|
+
maximumScheduleSpan?: MaximumScheduleSpan | undefined;
|
|
59
|
+
forbidOverlappingEvents?: boolean | undefined;
|
|
60
|
+
disableDayLengthPunishment?: boolean | undefined;
|
|
61
|
+
weight?: number | undefined;
|
|
62
|
+
intervals?: Interval[] | undefined;
|
|
63
|
+
days?: Day[] | undefined;
|
|
64
|
+
signature?: string | undefined;
|
|
65
|
+
plannedScheduledDuration?: PlannedScheduledDuration | undefined;
|
|
66
|
+
belongsTo?: string | undefined;
|
|
67
|
+
rootInterval?: string | undefined;
|
|
68
|
+
lockedTimes?: string[] | undefined;
|
|
69
|
+
lunch?: string[] | undefined;
|
|
70
|
+
complementaryTimes?: string[] | undefined;
|
|
71
|
+
exceptions?: string[] | undefined;
|
|
72
|
+
person?: string | undefined;
|
|
73
|
+
}, "_id"> & {
|
|
25
74
|
__raw: Types$1.Teacher;
|
|
26
75
|
})[];
|
|
27
|
-
persons: (
|
|
28
|
-
id:
|
|
29
|
-
|
|
76
|
+
persons: (Omit<{
|
|
77
|
+
id: IDType;
|
|
78
|
+
_id: PrivateIDType;
|
|
79
|
+
ids?: string | undefined;
|
|
80
|
+
is?: "person" | undefined;
|
|
81
|
+
displayName?: string | undefined;
|
|
82
|
+
createdAt?: string | undefined;
|
|
83
|
+
updatedAt?: string | undefined;
|
|
84
|
+
lastModifiedBy?: string | undefined;
|
|
85
|
+
type?: "Student" | "Teacher" | "Other" | undefined;
|
|
86
|
+
tags?: Tag[] | undefined;
|
|
87
|
+
lastName?: string | undefined;
|
|
88
|
+
firstName?: string | undefined;
|
|
89
|
+
birthDate?: Date | undefined;
|
|
90
|
+
sex?: "Man" | "Woman" | undefined;
|
|
91
|
+
SSN?: {
|
|
92
|
+
value: string;
|
|
93
|
+
nationality?: string;
|
|
94
|
+
} | undefined;
|
|
95
|
+
emails?: {
|
|
96
|
+
value: string;
|
|
97
|
+
type?: string;
|
|
98
|
+
}[] | undefined;
|
|
99
|
+
phoneNumbers?: {
|
|
100
|
+
value: string;
|
|
101
|
+
type: string;
|
|
102
|
+
}[] | undefined;
|
|
103
|
+
belongsTo?: string | undefined;
|
|
104
|
+
group?: string | undefined;
|
|
105
|
+
}, "_id"> & {
|
|
30
106
|
__raw: Types$1.Person;
|
|
31
107
|
})[];
|
|
32
|
-
groups: (
|
|
33
|
-
id:
|
|
34
|
-
|
|
108
|
+
groups: (Omit<{
|
|
109
|
+
id: IDType;
|
|
110
|
+
_id: PrivateIDType;
|
|
111
|
+
ids?: string | undefined;
|
|
112
|
+
is?: "group" | undefined;
|
|
113
|
+
displayName?: string | undefined;
|
|
114
|
+
createdAt?: string | undefined;
|
|
115
|
+
updatedAt?: string | undefined;
|
|
116
|
+
lastModifiedBy?: string | undefined;
|
|
117
|
+
tags?: Tag[] | undefined;
|
|
118
|
+
minBreakLength?: number | undefined;
|
|
119
|
+
maxNumWorkingHours?: number | false | undefined;
|
|
120
|
+
maxNumDailyWorkingHours?: number | number[] | false | undefined;
|
|
121
|
+
maximumScheduleSpan?: MaximumScheduleSpan | undefined;
|
|
122
|
+
forbidOverlappingEvents?: boolean | undefined;
|
|
123
|
+
disableDayLengthPunishment?: boolean | undefined;
|
|
124
|
+
weight?: number | undefined;
|
|
125
|
+
species?: "class" | undefined;
|
|
126
|
+
intervals?: Interval[] | undefined;
|
|
127
|
+
days?: Day[] | undefined;
|
|
128
|
+
belongsTo?: string | undefined;
|
|
129
|
+
parentGroups?: string[] | undefined;
|
|
130
|
+
subGroups?: string[] | undefined;
|
|
131
|
+
lockedTimes?: string[] | undefined;
|
|
132
|
+
lunch?: string[] | undefined;
|
|
133
|
+
exceptions?: string[] | undefined;
|
|
134
|
+
members?: string[] | undefined;
|
|
135
|
+
rootInterval?: string | undefined;
|
|
136
|
+
derivedParentGroups?: {
|
|
137
|
+
implicit?: boolean | undefined;
|
|
138
|
+
explicit?: boolean | undefined;
|
|
139
|
+
group: string;
|
|
140
|
+
}[] | undefined;
|
|
141
|
+
}, "_id"> & {
|
|
35
142
|
__raw: Types$1.Group;
|
|
36
143
|
})[];
|
|
37
|
-
courses: (
|
|
38
|
-
id:
|
|
39
|
-
|
|
144
|
+
courses: (Omit<{
|
|
145
|
+
id: IDType;
|
|
146
|
+
_id: PrivateIDType;
|
|
147
|
+
ids?: string | undefined;
|
|
148
|
+
is?: "course" | undefined;
|
|
149
|
+
displayName?: string | undefined;
|
|
150
|
+
createdAt?: string | undefined;
|
|
151
|
+
updatedAt?: string | undefined;
|
|
152
|
+
lastModifiedBy?: string | undefined;
|
|
153
|
+
type?: string | undefined;
|
|
154
|
+
tags?: Tag[] | undefined;
|
|
155
|
+
minBreakLength?: MinBreakLength | undefined;
|
|
156
|
+
weight?: number | undefined;
|
|
157
|
+
intervals?: Interval[] | undefined;
|
|
158
|
+
days?: Day[] | undefined;
|
|
159
|
+
subject?: string | undefined;
|
|
160
|
+
color?: string | undefined;
|
|
161
|
+
eventDurationVariance?: number | undefined;
|
|
162
|
+
centerOfAttraction?: string | null | undefined;
|
|
163
|
+
density?: number | undefined;
|
|
164
|
+
plannedDuration?: string | undefined;
|
|
165
|
+
minutesPerWeek?: number | undefined;
|
|
166
|
+
expectedTotalHours?: number | undefined;
|
|
167
|
+
belongsTo?: string | undefined;
|
|
168
|
+
period?: string | undefined;
|
|
169
|
+
overlapGroup?: string | undefined;
|
|
170
|
+
syllabus?: string | undefined;
|
|
171
|
+
lockedTimes?: string[] | undefined;
|
|
172
|
+
exceptions?: string[] | undefined;
|
|
173
|
+
events?: string[] | undefined;
|
|
174
|
+
participants?: {
|
|
175
|
+
groupIndex?: number | undefined;
|
|
176
|
+
to: string;
|
|
177
|
+
}[] | undefined;
|
|
178
|
+
teachers?: {
|
|
179
|
+
groupIndex?: number | undefined;
|
|
180
|
+
to: string;
|
|
181
|
+
}[] | undefined;
|
|
182
|
+
groups?: {
|
|
183
|
+
groupIndex?: number | undefined;
|
|
184
|
+
to: string;
|
|
185
|
+
exclude?: string[] | undefined;
|
|
186
|
+
}[] | undefined;
|
|
187
|
+
locations?: {
|
|
188
|
+
groupIndex?: number | undefined;
|
|
189
|
+
rank?: number | undefined;
|
|
190
|
+
locations: [string];
|
|
191
|
+
}[] | undefined;
|
|
192
|
+
}, "_id"> & {
|
|
40
193
|
__raw: Types$1.Course;
|
|
41
194
|
})[];
|
|
42
|
-
events: (
|
|
43
|
-
id:
|
|
44
|
-
|
|
195
|
+
events: (Omit<{
|
|
196
|
+
id: IDType;
|
|
197
|
+
_id: PrivateIDType;
|
|
198
|
+
ids?: string | undefined;
|
|
199
|
+
is?: "event" | undefined;
|
|
200
|
+
displayName?: string | undefined;
|
|
201
|
+
createdAt?: string | undefined;
|
|
202
|
+
updatedAt?: string | undefined;
|
|
203
|
+
lastModifiedBy?: string | undefined;
|
|
204
|
+
start?: (moment191.Moment | string) | undefined;
|
|
205
|
+
end?: (moment191.Moment | string) | undefined;
|
|
206
|
+
potentialCenter?: string | undefined;
|
|
207
|
+
type?: string | undefined;
|
|
208
|
+
tags?: Tag[] | undefined;
|
|
209
|
+
minBreakLength?: (MinBreakLength | null) | undefined;
|
|
210
|
+
weight?: number | undefined;
|
|
211
|
+
intervals?: Interval[] | null | undefined;
|
|
212
|
+
days?: Day[] | null | undefined;
|
|
213
|
+
color?: string | null | undefined;
|
|
214
|
+
centerOfAttraction?: string | null | undefined;
|
|
215
|
+
density?: number | undefined;
|
|
216
|
+
fixedStart?: boolean | undefined;
|
|
217
|
+
visible?: boolean | undefined;
|
|
218
|
+
parked?: boolean | undefined;
|
|
219
|
+
preferredDuration: number;
|
|
220
|
+
durationVariance?: number | undefined;
|
|
221
|
+
duration?: number | undefined;
|
|
222
|
+
weeks?: number[] | undefined;
|
|
223
|
+
belongsTo?: string | undefined;
|
|
224
|
+
course?: string | undefined;
|
|
225
|
+
period?: string | undefined;
|
|
226
|
+
overlapSpecies?: string | undefined;
|
|
227
|
+
lockedTimes?: string[] | undefined;
|
|
228
|
+
exceptions?: string[] | undefined;
|
|
229
|
+
inLocations?: (string | null)[] | undefined;
|
|
230
|
+
participants?: {
|
|
231
|
+
groupIndex?: number | undefined;
|
|
232
|
+
to: string;
|
|
233
|
+
}[] | undefined;
|
|
234
|
+
teachers?: {
|
|
235
|
+
groupIndex?: number | undefined;
|
|
236
|
+
to: string;
|
|
237
|
+
}[] | undefined;
|
|
238
|
+
groups?: {
|
|
239
|
+
groupIndex?: number | undefined;
|
|
240
|
+
to: string;
|
|
241
|
+
exclude?: string[] | undefined;
|
|
242
|
+
}[] | undefined;
|
|
243
|
+
locations?: {
|
|
244
|
+
groupIndex?: number | undefined;
|
|
245
|
+
rank?: number | undefined;
|
|
246
|
+
locations: [string];
|
|
247
|
+
}[] | undefined;
|
|
248
|
+
}, "_id"> & {
|
|
45
249
|
__raw?: Types$1.Course;
|
|
46
250
|
})[];
|
|
47
|
-
overlapGroups:
|
|
48
|
-
id:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
251
|
+
overlapGroups: Omit<{
|
|
252
|
+
id: IDType;
|
|
253
|
+
_id: PrivateIDType;
|
|
254
|
+
ids?: string | undefined;
|
|
255
|
+
is?: "overlapGroup" | undefined;
|
|
256
|
+
displayName?: string | undefined;
|
|
257
|
+
createdAt?: string | undefined;
|
|
258
|
+
updatedAt?: string | undefined;
|
|
259
|
+
lastModifiedBy?: string | undefined;
|
|
260
|
+
belongsTo?: string | undefined;
|
|
261
|
+
coalesced?: {
|
|
262
|
+
to: string;
|
|
263
|
+
toModel: "courses";
|
|
264
|
+
}[] | undefined;
|
|
265
|
+
species?: {
|
|
266
|
+
id: string;
|
|
267
|
+
to: string;
|
|
268
|
+
toModel: "events" | "courseevents";
|
|
269
|
+
}[] | undefined;
|
|
270
|
+
}, "_id">[];
|
|
271
|
+
syllabuses: (Omit<{
|
|
272
|
+
id: IDType;
|
|
273
|
+
_id: PrivateIDType;
|
|
274
|
+
ids?: string | undefined;
|
|
275
|
+
is?: "syllabus" | undefined;
|
|
276
|
+
displayName?: string | undefined;
|
|
277
|
+
createdAt?: string | undefined;
|
|
278
|
+
updatedAt?: string | undefined;
|
|
279
|
+
lastModifiedBy?: string | undefined;
|
|
280
|
+
schoolType: string;
|
|
281
|
+
subjectCode?: string | undefined;
|
|
282
|
+
subjectName: string;
|
|
283
|
+
subjectDesignation?: string | undefined;
|
|
284
|
+
courseCode?: string | undefined;
|
|
285
|
+
courseName?: string | undefined;
|
|
286
|
+
points?: number | undefined;
|
|
287
|
+
official: boolean;
|
|
288
|
+
belongsTo?: string | undefined;
|
|
289
|
+
}, "_id"> & {
|
|
53
290
|
__raw?: Types$1.Syllabus;
|
|
54
291
|
})[];
|
|
55
292
|
meta: {
|
|
@@ -192,7 +192,7 @@ function _schedules(source) {
|
|
|
192
192
|
return toMultipleOf5(x$1);
|
|
193
193
|
} catch {
|
|
194
194
|
warnings.push(`The lesson duration "${x$1}" for the course "${displayName}" is not an integer.`);
|
|
195
|
-
return
|
|
195
|
+
return;
|
|
196
196
|
}
|
|
197
197
|
}).filter((x$1) => {
|
|
198
198
|
if (!x$1) {
|
|
@@ -264,6 +264,7 @@ function _schedules(source) {
|
|
|
264
264
|
locations: [x$1.to]
|
|
265
265
|
})),
|
|
266
266
|
expectedTotalHours: totalHours,
|
|
267
|
+
plannedDuration: totalHours ? `${totalHours} hrs` : void 0,
|
|
267
268
|
displayName,
|
|
268
269
|
subject,
|
|
269
270
|
minutesPerWeek
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["id: string","map","warnings: string[]","locationKeys: UnionToAllPossibleTuples<keyof Types.Location>","teacherKeys: UnionToAllPossibleTuples<keyof Types.Teacher>","studentKeys: UnionToAllPossibleTuples<keyof Types.Student>","groupKeys: UnionToAllPossibleTuples<keyof Types.Group>","courseKeys: UnionToAllPossibleTuples<keyof Types.Course>","settings: C_Settings","location: C_Location","group: C_Group","teacher: C_Teacher","groupReference: string | undefined","sex: C_Person['sex']","person: C_Person","totalHours: number | undefined","minutesPerWeek: number | undefined","durations: number[]","x","event: C_Event","locationReferences: { groupIndex: number; to: string }[]","groupReferences: { to: string }[]","teacherReferences: { to: string }[]","course: C_Course"],"sources":["../../../../src/Excel/v1/from/index.ts"],"sourcesContent":["import { isString, pick, isNumber } from 'lodash-es';\nimport { nanoid } from 'nanoid';\nimport type { CoreTypes } from '../../../core';\nimport type { Types, UnionToAllPossibleTuples } from '../types';\nimport type { FromInterface } from '../../../common/types';\n\n\ntype C_Settings = Pick<CoreTypes.serialized.divisionSettings, 'discretization' | 'numDays' | 'dayStart' | 'dayEnd'>;\ntype C_Location = CoreTypes.serialized.location & { id: string };\ntype C_Group = CoreTypes.serialized.group & { id: string };\ntype C_Teacher = CoreTypes.serialized.teacher & { id: string };\ntype C_Course = CoreTypes.serialized.course & { id: string };\ntype C_Person = CoreTypes.serialized.person & { id: string };\ntype C_Event = CoreTypes.serialized.event & { id: string };\n\ntype Out = {\n settings: C_Settings;\n locations: C_Location[];\n teachers: C_Teacher[];\n persons: C_Person[];\n groups: C_Group[];\n courses: C_Course[];\n events: C_Event[];\n meta?: {\n warnings?: string[];\n // errors?: string[]; // TODO: implement error handling\n };\n};\n\nfunction generateId<T> (map: Map<string, T>) {\n // generate a unique id\n let id: string;\n do {\n id = nanoid();\n } while (map.has(id));\n\n return id;\n}\n\nfunction toMultipleOf5 (val: number | string) {\n const num = isString(val) ? parseInt(val) : val;\n\n // throw error if nan\n if (isNaN(num)) throw new Error(`toMultipleOf5: ${val} is not a number`);\n\n return Math.floor(num / 5) * 5;\n}\n\nfunction toInteger (val: number | string) {\n const num = isString(val) ? parseInt(val) : val;\n\n // throw error if nan\n if (isNaN(num)) throw new Error(`toInteger: ${val} is not a number`);\n\n return num;\n}\n\nfunction toString<T extends string | number | undefined, R = T extends undefined ? (string | undefined) : string> (x: T): R {\n if (x == undefined) return undefined as R;\n if (typeof x == 'string' && !x.length) return undefined as R;\n if (isNumber(x)) return x.toString() as R;\n return x.trim() as R;\n}\n\n\nfunction _schedules (\n source: Types.Source\n): Out {\n // gather all import related warnings/errors\n const warnings: string[] = [];\n // let errors: string[] = [];\n\n\n ////\n //// filter to only the fields we need and remove empty rows\n ////\n const locationKeys: UnionToAllPossibleTuples<keyof Types.Location> = ['name'];\n const teacherKeys: UnionToAllPossibleTuples<keyof Types.Teacher> = ['name'];\n const studentKeys: UnionToAllPossibleTuples<keyof Types.Student> = ['first_name', 'last_name', 'SSN', 'sex', 'group'];\n const groupKeys: UnionToAllPossibleTuples<keyof Types.Group> = ['name'];\n const courseKeys: UnionToAllPossibleTuples<keyof Types.Course> = ['name', 'subject', 'groups', 'teachers', 'locations', 'total_hours', 'minutes_per_week', 'lesson_durations'];\n source.locations = source.locations?.map(x => pick(x, locationKeys)).filter(x => Object.values(x).some(y => y !== undefined));\n source.teachers = source.teachers ?.map(x => pick(x, teacherKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.students = source.students ?.map(x => pick(x, studentKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.groups = source.groups ?.map(x => pick(x, groupKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.courses = source.courses ?.map(x => pick(x, courseKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n\n\n ////\n //// settings\n ////\n const settings: C_Settings = {\n discretization: 5,\n numDays: 5,\n dayStart: '08:00',\n dayEnd: '17:00',\n };\n if (!source.settings) {\n warnings.push('Could not find the settings tab.');\n }\n if (source.settings?.[0]?.number_of_days) {\n const numDays = source.settings?.[0]?.number_of_days;\n try {\n if (isNumber(numDays)) settings.numDays = numDays;\n else if (isString(numDays)) settings.numDays = parseInt(numDays);\n\n // must be 5 or 7\n if (settings.numDays !== 5 && settings.numDays !== 7) {\n warnings.push(`The number of days \"${numDays}\" is not 5 or 7.`);\n settings.numDays = 5;\n }\n } catch {\n warnings.push(`Could not parse the number of days \"${numDays}\" for the settings.`);\n }\n }\n\n\n ////\n //// locations\n ////\n const locationsIdMap = new Map<string, C_Location>();\n const locationsNameMap = new Map<string, C_Location>();\n if (!source.locations) {\n warnings.push('Could not find the locations tab.');\n }\n source.locations?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a location without a name.');\n return;\n }\n\n if (locationsNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The location \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(locationsIdMap);\n const location: C_Location = { id, displayName };\n locationsNameMap.set(displayName.toLowerCase(), location);\n locationsIdMap .set(id, location);\n });\n\n\n ////\n //// groups\n ////\n const groupsIdMap = new Map<string, C_Group>();\n const groupsNameMap = new Map<string, C_Group>();\n if (!source.groups) {\n warnings.push('Could not find the groups tab.');\n }\n source.groups?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a group without a name.');\n return;\n }\n\n if (groupsNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The group \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(groupsIdMap);\n const group: C_Group = { id, displayName, species: 'class' };\n groupsNameMap.set(displayName.toLowerCase(), group);\n groupsIdMap .set(id, group);\n });\n\n\n ////\n //// teachers\n ////\n const teachersIdMap = new Map<string, C_Teacher>();\n const teachersNameMap = new Map<string, C_Teacher>();\n if (!source.teachers) {\n warnings.push('Could not find the teachers tab.');\n }\n source.teachers?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a teacher without a name.');\n return;\n }\n\n if (teachersNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The teacher \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(teachersIdMap);\n const teacher: C_Teacher = { id, displayName };\n teachersNameMap.set(displayName.toLowerCase(), teacher);\n teachersIdMap .set(id, teacher);\n });\n\n\n ////\n //// students\n ////\n const personsIdMap = new Map<string, C_Person>();\n if (!source.students) {\n warnings.push('Could not find the students tab.');\n }\n source.students?.forEach(x => {\n const firstName = toString(x.first_name);\n const lastName = toString(x.last_name );\n const SSN = toString(x.SSN );\n\n let groupReference: string | undefined = undefined;\n if (x.group) {\n const key = toString(x.group).toLowerCase();\n const ref = groupsNameMap.get(key); /// to lower case only!\n if (!ref) {\n warnings.push(`The group ${x.group} referenced from the student \"${firstName} ${lastName}\" does not exist.`);\n } else {\n groupReference = ref.id;\n }\n }\n\n let sex: C_Person['sex'];\n if (x.sex) {\n if (isString(x.sex) && x.sex.toLowerCase() == 'man') sex = 'Man';\n else if (isString(x.sex) && x.sex.toLowerCase() == 'woman') sex = 'Woman';\n else {\n warnings.push(`Unknown sex \"${ x.sex }\" for the student \"${firstName} ${lastName}\".`);\n }\n }\n\n const id = generateId(personsIdMap);\n const person: C_Person = { id, firstName, lastName, sex, group: groupReference, ...SSN && { SSN: { value: SSN } } };\n personsIdMap.set(id, person);\n });\n\n\n ////\n //// courses\n ////\n const coursesIdMap = new Map<string, C_Course>();\n const eventsIdMap = new Map<string, C_Event>();\n if (!source.courses) {\n warnings.push('Could not find the courses tab.');\n }\n source.courses?.forEach(x => {\n const courseId = generateId(coursesIdMap);\n const displayName = toString(x.name)?.trim();\n const subject = toString(x.subject);\n\n // try to parse the total hours as an integer\n let totalHours: number | undefined = undefined;\n if (x.total_hours) {\n try {\n totalHours = toInteger(x.total_hours);\n } catch {\n warnings.push(`The total hours \"${x.total_hours}\" for the course \"${displayName}\" is not an integer.`);\n }\n }\n\n // try to parse the minutes per week as an multiple of 5\n let minutesPerWeek: number | undefined = undefined;\n if (x.minutes_per_week) {\n try {\n minutesPerWeek = toMultipleOf5(x.minutes_per_week);\n } catch {\n warnings.push(`The minutes per week \"${x.minutes_per_week}\" for the course \"${displayName}\" is not an integer.`);\n }\n }\n\n // try to parse the lesson durations as an array of integers from which we will generate events\n if (x.lesson_durations) {\n try {\n let durations: number[] = [];\n if (isNumber(x.lesson_durations)) durations = [x.lesson_durations];\n else if (isString(x.lesson_durations)) durations = x.lesson_durations.split(',').map(x => x.trim())\n .map(x => parseInt(x));\n\n // truncate to multiple of 5 and filter out zero duration events\n durations = durations\n .map(x => {\n try {\n return toMultipleOf5(x);\n } catch {\n warnings.push(`The lesson duration \"${x}\" for the course \"${displayName}\" is not an integer.`);\n return undefined;\n }\n })\n .filter((x): x is number => {\n if (!x) {\n warnings.push(`The lesson duration for the course \"${displayName}\" becomes 0 when truncated to the nearest multiple of 5.`);\n return false;\n }\n return true;\n });\n\n durations.forEach(x => {\n const id = generateId(eventsIdMap);\n const event: C_Event = { id, course: courseId, preferredDuration: x };\n eventsIdMap.set(id, event);\n });\n } catch {\n warnings.push(`Could not parse the lesson durations \"${x.lesson_durations}\" for the course \"${displayName}\".`);\n }\n }\n\n // locations\n const locationReferences: { groupIndex: number; to: string }[] = [];\n\n toString(x.locations)?.split('+')\n .flatMap((x, i) => x.split(',').map(x => [i, x.trim().toLowerCase()] as [number, string]))\n .forEach(([i, x]) => {\n const ref = locationsNameMap.get(x);\n if (!ref) {\n warnings.push(`The location \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (locationReferences.some(y => y.to == ref.id)) {\n warnings.push(`The location \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n locationReferences.push({ groupIndex: i, to: ref.id });\n });\n\n // groups\n const groupReferences: { to: string }[] = [];\n toString(x.groups)?.split(',')\n .map(x => x.trim().toLowerCase())\n .forEach(x => {\n const ref = groupsNameMap.get(x);\n if (!ref) {\n warnings.push(`The group \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (groupReferences.some(y => y.to == ref.id)) {\n warnings.push(`The group \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n groupReferences.push({ to: ref.id });\n });\n\n // teachers\n const teacherReferences: { to: string }[] = [];\n toString(x.teachers)?.split(',')\n .map(x => x.trim().toLowerCase())\n .forEach(x => {\n const ref = teachersNameMap.get(x);\n if (!ref) {\n warnings.push(`The teacher \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (teacherReferences.some(y => y.to == ref.id)) {\n warnings.push(`The teacher \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n teacherReferences.push({ to: ref.id });\n });\n\n const course: C_Course = {\n id: courseId,\n groups: groupReferences,\n teachers: teacherReferences,\n locations: locationReferences.map(x => ({ groupIndex: x.groupIndex, locations: [x.to] })),\n expectedTotalHours: totalHours,\n displayName, subject, minutesPerWeek,\n };\n coursesIdMap.set(courseId, course);\n });\n\n\n ////\n //// return\n ////\n return {\n settings,\n locations: [...locationsIdMap.values()],\n teachers: [...teachersIdMap .values()],\n persons: [...personsIdMap .values()],\n groups: [...groupsIdMap .values()],\n courses: [...coursesIdMap .values()],\n events: [...eventsIdMap .values()],\n meta: {\n // ...errors .length && { errors: errors },\n ...warnings.length && { warnings: warnings }\n }\n };\n}\n\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["id: string","map","warnings: string[]","locationKeys: UnionToAllPossibleTuples<keyof Types.Location>","teacherKeys: UnionToAllPossibleTuples<keyof Types.Teacher>","studentKeys: UnionToAllPossibleTuples<keyof Types.Student>","groupKeys: UnionToAllPossibleTuples<keyof Types.Group>","courseKeys: UnionToAllPossibleTuples<keyof Types.Course>","settings: C_Settings","location: C_Location","teacher: C_Teacher","groupReference: string | undefined","sex: C_Person['sex']","person: C_Person","totalHours: number | undefined","minutesPerWeek: number | undefined","durations: number[]","x","event: C_Event","locationReferences: { groupIndex: number; to: string }[]","groupReferences: { to: string }[]","teacherReferences: { to: string }[]","course: C_Course"],"sources":["../../../../src/Excel/v1/from/index.ts"],"sourcesContent":["import { isString, pick, isNumber } from 'lodash-es';\nimport { nanoid } from 'nanoid';\nimport type { CoreTypes } from '../../../core';\nimport type { Types, UnionToAllPossibleTuples } from '../types';\nimport type { FromInterface } from '../../../common/types';\n\n\ntype C_Settings = Pick<CoreTypes.Serialized.Settings, 'discretization' | 'numDays' | 'dayStart' | 'dayEnd'>;\ntype C_Location = Omit<CoreTypes.Serialized.Location, '_id'>;\ntype C_Group = Omit<CoreTypes.Serialized.Group, '_id'>;\ntype C_Teacher = Omit<CoreTypes.Serialized.Teacher, '_id'>;\ntype C_Course = Omit<CoreTypes.Serialized.Course, '_id'>;\ntype C_Person = Omit<CoreTypes.Serialized.Person, '_id'>;\ntype C_Event = Omit<CoreTypes.Serialized.Event, '_id'>;\n\ntype Out = {\n settings: C_Settings;\n locations: C_Location[];\n teachers: C_Teacher[];\n persons: C_Person[];\n groups: C_Group[];\n courses: C_Course[];\n events: C_Event[];\n meta?: {\n warnings?: string[];\n // errors?: string[]; // TODO: implement error handling\n };\n};\n\nfunction generateId<T> (map: Map<string, T>) {\n // generate a unique id\n let id: string;\n do {\n id = nanoid();\n } while (map.has(id));\n\n return id;\n}\n\nfunction toMultipleOf5 (val: number | string) {\n const num = isString(val) ? parseInt(val) : val;\n\n // throw error if nan\n if (isNaN(num)) throw new Error(`toMultipleOf5: ${val} is not a number`);\n\n return Math.floor(num / 5) * 5;\n}\n\nfunction toInteger (val: number | string) {\n const num = isString(val) ? parseInt(val) : val;\n\n // throw error if nan\n if (isNaN(num)) throw new Error(`toInteger: ${val} is not a number`);\n\n return num;\n}\n\nfunction toString<T extends string | number | undefined, R = T extends undefined ? (string | undefined) : string> (x: T): R {\n if (x == undefined) return undefined as R;\n if (typeof x == 'string' && !x.length) return undefined as R;\n if (isNumber(x)) return x.toString() as R;\n return x.trim() as R;\n}\n\n\nfunction _schedules (\n source: Types.Source\n): Out {\n // gather all import related warnings/errors\n const warnings: string[] = [];\n // let errors: string[] = [];\n\n\n ////\n //// filter to only the fields we need and remove empty rows\n ////\n const locationKeys: UnionToAllPossibleTuples<keyof Types.Location> = ['name'];\n const teacherKeys: UnionToAllPossibleTuples<keyof Types.Teacher> = ['name'];\n const studentKeys: UnionToAllPossibleTuples<keyof Types.Student> = ['first_name', 'last_name', 'SSN', 'sex', 'group'];\n const groupKeys: UnionToAllPossibleTuples<keyof Types.Group> = ['name'];\n const courseKeys: UnionToAllPossibleTuples<keyof Types.Course> = ['name', 'subject', 'groups', 'teachers', 'locations', 'total_hours', 'minutes_per_week', 'lesson_durations'];\n source.locations = source.locations?.map(x => pick(x, locationKeys)).filter(x => Object.values(x).some(y => y !== undefined));\n source.teachers = source.teachers ?.map(x => pick(x, teacherKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.students = source.students ?.map(x => pick(x, studentKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.groups = source.groups ?.map(x => pick(x, groupKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n source.courses = source.courses ?.map(x => pick(x, courseKeys )).filter(x => Object.values(x).some(y => y !== undefined));\n\n\n ////\n //// settings\n ////\n const settings: C_Settings = {\n discretization: 5,\n numDays: 5,\n dayStart: '08:00',\n dayEnd: '17:00',\n };\n if (!source.settings) {\n warnings.push('Could not find the settings tab.');\n }\n if (source.settings?.[0]?.number_of_days) {\n const numDays = source.settings?.[0]?.number_of_days;\n try {\n if (isNumber(numDays)) settings.numDays = numDays;\n else if (isString(numDays)) settings.numDays = parseInt(numDays);\n\n // must be 5 or 7\n if (settings.numDays !== 5 && settings.numDays !== 7) {\n warnings.push(`The number of days \"${numDays}\" is not 5 or 7.`);\n settings.numDays = 5;\n }\n } catch {\n warnings.push(`Could not parse the number of days \"${numDays}\" for the settings.`);\n }\n }\n\n\n ////\n //// locations\n ////\n const locationsIdMap = new Map<string, C_Location>();\n const locationsNameMap = new Map<string, C_Location>();\n if (!source.locations) {\n warnings.push('Could not find the locations tab.');\n }\n source.locations?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a location without a name.');\n return;\n }\n\n if (locationsNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The location \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(locationsIdMap);\n const location: C_Location = { id, displayName };\n locationsNameMap.set(displayName.toLowerCase(), location);\n locationsIdMap .set(id, location);\n });\n\n\n ////\n //// groups\n ////\n const groupsIdMap = new Map<string, C_Group>();\n const groupsNameMap = new Map<string, C_Group>();\n if (!source.groups) {\n warnings.push('Could not find the groups tab.');\n }\n source.groups?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a group without a name.');\n return;\n }\n\n if (groupsNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The group \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(groupsIdMap);\n const group = { id, displayName, species: 'class' } as C_Group;\n groupsNameMap.set(displayName.toLowerCase(), group);\n groupsIdMap .set(id, group);\n });\n\n\n ////\n //// teachers\n ////\n const teachersIdMap = new Map<string, C_Teacher>();\n const teachersNameMap = new Map<string, C_Teacher>();\n if (!source.teachers) {\n warnings.push('Could not find the teachers tab.');\n }\n source.teachers?.forEach(x => {\n const displayName = toString(x.name);\n if (!displayName) {\n warnings.push('Skipping a teacher without a name.');\n return;\n }\n\n if (teachersNameMap.has(displayName.toLowerCase())) {\n warnings.push(`The teacher \"${displayName}\" is defined multiple times.`);\n return;\n }\n\n const id = generateId(teachersIdMap);\n const teacher: C_Teacher = { id, displayName };\n teachersNameMap.set(displayName.toLowerCase(), teacher);\n teachersIdMap .set(id, teacher);\n });\n\n\n ////\n //// students\n ////\n const personsIdMap = new Map<string, C_Person>();\n if (!source.students) {\n warnings.push('Could not find the students tab.');\n }\n source.students?.forEach(x => {\n const firstName = toString(x.first_name);\n const lastName = toString(x.last_name );\n const SSN = toString(x.SSN );\n\n let groupReference: string | undefined = undefined;\n if (x.group) {\n const key = toString(x.group).toLowerCase();\n const ref = groupsNameMap.get(key); /// to lower case only!\n if (!ref) {\n warnings.push(`The group ${x.group} referenced from the student \"${firstName} ${lastName}\" does not exist.`);\n } else {\n groupReference = ref.id;\n }\n }\n\n let sex: C_Person['sex'];\n if (x.sex) {\n if (isString(x.sex) && x.sex.toLowerCase() == 'man') sex = 'Man';\n else if (isString(x.sex) && x.sex.toLowerCase() == 'woman') sex = 'Woman';\n else {\n warnings.push(`Unknown sex \"${ x.sex }\" for the student \"${firstName} ${lastName}\".`);\n }\n }\n\n const id = generateId(personsIdMap);\n const person: C_Person = { id, firstName, lastName, sex, group: groupReference, ...SSN && { SSN: { value: SSN } } };\n personsIdMap.set(id, person);\n });\n\n\n ////\n //// courses\n ////\n const coursesIdMap = new Map<string, C_Course>();\n const eventsIdMap = new Map<string, C_Event>();\n if (!source.courses) {\n warnings.push('Could not find the courses tab.');\n }\n source.courses?.forEach(x => {\n const courseId = generateId(coursesIdMap);\n const displayName = toString(x.name)?.trim();\n const subject = toString(x.subject);\n\n // try to parse the total hours as an integer\n let totalHours: number | undefined = undefined;\n if (x.total_hours) {\n try {\n totalHours = toInteger(x.total_hours);\n } catch {\n warnings.push(`The total hours \"${x.total_hours}\" for the course \"${displayName}\" is not an integer.`);\n }\n }\n\n // try to parse the minutes per week as an multiple of 5\n let minutesPerWeek: number | undefined = undefined;\n if (x.minutes_per_week) {\n try {\n minutesPerWeek = toMultipleOf5(x.minutes_per_week);\n } catch {\n warnings.push(`The minutes per week \"${x.minutes_per_week}\" for the course \"${displayName}\" is not an integer.`);\n }\n }\n\n // try to parse the lesson durations as an array of integers from which we will generate events\n if (x.lesson_durations) {\n try {\n let durations: number[] = [];\n if (isNumber(x.lesson_durations)) durations = [x.lesson_durations];\n else if (isString(x.lesson_durations)) durations = x.lesson_durations.split(',').map(x => x.trim())\n .map(x => parseInt(x));\n\n // truncate to multiple of 5 and filter out zero duration events\n durations = durations\n .map(x => {\n try {\n return toMultipleOf5(x);\n } catch {\n warnings.push(`The lesson duration \"${x}\" for the course \"${displayName}\" is not an integer.`);\n return undefined;\n }\n })\n .filter((x): x is number => {\n if (!x) {\n warnings.push(`The lesson duration for the course \"${displayName}\" becomes 0 when truncated to the nearest multiple of 5.`);\n return false;\n }\n return true;\n });\n\n durations.forEach(x => {\n const id = generateId(eventsIdMap);\n const event: C_Event = { id, course: courseId, preferredDuration: x };\n eventsIdMap.set(id, event);\n });\n } catch {\n warnings.push(`Could not parse the lesson durations \"${x.lesson_durations}\" for the course \"${displayName}\".`);\n }\n }\n\n // locations\n const locationReferences: { groupIndex: number; to: string }[] = [];\n\n toString(x.locations)?.split('+')\n .flatMap((x, i) => x.split(',').map(x => [i, x.trim().toLowerCase()] as [number, string]))\n .forEach(([i, x]) => {\n const ref = locationsNameMap.get(x);\n if (!ref) {\n warnings.push(`The location \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (locationReferences.some(y => y.to == ref.id)) {\n warnings.push(`The location \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n locationReferences.push({ groupIndex: i, to: ref.id });\n });\n\n // groups\n const groupReferences: { to: string }[] = [];\n toString(x.groups)?.split(',')\n .map(x => x.trim().toLowerCase())\n .forEach(x => {\n const ref = groupsNameMap.get(x);\n if (!ref) {\n warnings.push(`The group \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (groupReferences.some(y => y.to == ref.id)) {\n warnings.push(`The group \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n groupReferences.push({ to: ref.id });\n });\n\n // teachers\n const teacherReferences: { to: string }[] = [];\n toString(x.teachers)?.split(',')\n .map(x => x.trim().toLowerCase())\n .forEach(x => {\n const ref = teachersNameMap.get(x);\n if (!ref) {\n warnings.push(`The teacher \"${x}\" referenced from the course \"${displayName}\" does not exist.`);\n return;\n }\n\n if (teacherReferences.some(y => y.to == ref.id)) {\n warnings.push(`The teacher \"${x}\" is referenced multiple times from the course \"${displayName}\".`);\n return;\n }\n\n teacherReferences.push({ to: ref.id });\n });\n\n const course: C_Course = {\n id: courseId,\n groups: groupReferences,\n teachers: teacherReferences,\n locations: locationReferences.map(x => ({ groupIndex: x.groupIndex, locations: [x.to] })),\n expectedTotalHours: totalHours,\n plannedDuration: totalHours ? `${totalHours} hrs` : undefined,\n displayName, subject, minutesPerWeek,\n };\n coursesIdMap.set(courseId, course);\n });\n\n\n ////\n //// return\n ////\n return {\n settings,\n locations: [...locationsIdMap.values()],\n teachers: [...teachersIdMap .values()],\n persons: [...personsIdMap .values()],\n groups: [...groupsIdMap .values()],\n courses: [...coursesIdMap .values()],\n events: [...eventsIdMap .values()],\n meta: {\n // ...errors .length && { errors: errors },\n ...warnings.length && { warnings: warnings }\n }\n };\n}\n\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":"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"}
|