@royalschedule/maps 4.0.30 → 4.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Additio/from/courses.js.map +1 -1
- package/dist/Additio/from/events.js.map +1 -1
- package/dist/Additio/from/groups.js.map +1 -1
- package/dist/Additio/from/index.js.map +1 -1
- package/dist/Additio/from/locations.js.map +1 -1
- package/dist/Additio/from/persons.js.map +1 -1
- package/dist/Additio/from/schedules.d.ts +0 -1
- package/dist/Additio/from/schedules.js +4 -2
- package/dist/Additio/from/schedules.js.map +1 -1
- package/dist/Additio/from/teachers.js.map +1 -1
- package/dist/Additio/to/index.d.ts +2 -4
- package/dist/Additio/to/schedules.js +4 -2
- package/dist/Additio/to/schedules.js.map +1 -1
- package/dist/Admentum/from/courses.js.map +1 -1
- package/dist/Admentum/from/events.js.map +1 -1
- package/dist/Admentum/from/groups.js.map +1 -1
- package/dist/Admentum/from/index.js.map +1 -1
- package/dist/Admentum/from/locations.js.map +1 -1
- package/dist/Admentum/from/persons.js.map +1 -1
- package/dist/Admentum/from/schedules.d.ts +0 -1
- package/dist/Admentum/from/schedules.js +6 -3
- package/dist/Admentum/from/schedules.js.map +1 -1
- package/dist/Admentum/from/teachers.js.map +1 -1
- package/dist/Admentum/to/index.d.ts +0 -1
- package/dist/Admentum/to/schedules.js +7 -4
- package/dist/Admentum/to/schedules.js.map +1 -1
- package/dist/Excel/index.d.ts +4 -4
- package/dist/Excel/v1/from/index.js +1 -1
- package/dist/Excel/v1/from/index.js.map +1 -1
- package/dist/Excel/v1/index.d.ts +1 -1
- package/dist/Excel/v2/from/index.js +54 -45
- package/dist/Excel/v2/from/index.js.map +1 -1
- package/dist/Excel/v2/index.d.ts +4 -4
- package/dist/IdunSoft/from/courses.js.map +1 -1
- package/dist/IdunSoft/from/events.js +2 -1
- package/dist/IdunSoft/from/events.js.map +1 -1
- package/dist/IdunSoft/from/groups.js.map +1 -1
- package/dist/IdunSoft/from/index.js.map +1 -1
- package/dist/IdunSoft/from/locations.js.map +1 -1
- package/dist/IdunSoft/from/schedules.d.ts +0 -1
- package/dist/IdunSoft/from/schedules.js.map +1 -1
- package/dist/IdunSoft/from/teachers.js.map +1 -1
- package/dist/IdunSoft/to/index.d.ts +0 -1
- package/dist/IdunSoft/to/schedules.js +6 -3
- package/dist/IdunSoft/to/schedules.js.map +1 -1
- package/dist/InfoMentor/to/index.d.ts +0 -1
- package/dist/InfoMentor/to/schedules.js +2 -1
- package/dist/InfoMentor/to/schedules.js.map +1 -1
- package/dist/PlanDigital/from/index.js.map +1 -1
- package/dist/PlanDigital/from/schedules.js +11 -9
- package/dist/PlanDigital/from/schedules.js.map +1 -1
- package/dist/PlanDigital/index.d.ts +0 -1
- package/dist/Quiculum/file/to/index.d.ts +0 -1
- package/dist/Quiculum/file/to/schedules.js +9 -5
- package/dist/Quiculum/file/to/schedules.js.map +1 -1
- package/dist/RS/from/division.d.ts +0 -1
- package/dist/RS/from/division.js +2 -1
- package/dist/RS/from/division.js.map +1 -1
- package/dist/RS/from/index.js.map +1 -1
- package/dist/RS/from/schedules.d.ts +0 -1
- package/dist/RS/from/schedules.js.map +1 -1
- package/dist/RS/make-connected.d.ts +1 -3
- package/dist/RS/make-connected.js +42 -33
- package/dist/RS/make-connected.js.map +1 -1
- package/dist/RS/to/index.js.map +1 -1
- package/dist/RS/to/initial-configuration.js +6 -4
- package/dist/RS/to/initial-configuration.js.map +1 -1
- package/dist/RS/to/input/collections.js.map +1 -1
- package/dist/RS/to/input/default.js +2 -1
- package/dist/RS/to/input/default.js.map +1 -1
- package/dist/RS/to/input/dependencies.js +2 -1
- package/dist/RS/to/input/dependencies.js.map +1 -1
- package/dist/RS/to/input/dynamic-locked-times.js +2 -1
- package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
- package/dist/RS/to/input/events.js.map +1 -1
- package/dist/RS/to/input/groups.js.map +1 -1
- package/dist/RS/to/input/individuals.js +2 -1
- package/dist/RS/to/input/individuals.js.map +1 -1
- package/dist/RS/to/input/input.js +2 -1
- package/dist/RS/to/input/input.js.map +1 -1
- package/dist/RS/to/input/intervals.js +4 -2
- package/dist/RS/to/input/intervals.js.map +1 -1
- package/dist/RS/to/input/periods.js +4 -2
- package/dist/RS/to/input/periods.js.map +1 -1
- package/dist/RS/to/input/settings.js.map +1 -1
- package/dist/RS/to/input/teachers.js.map +1 -1
- package/dist/RS/to/input/util/attach-locked-times.js.map +1 -1
- package/dist/RS/to/input/util/parse-days.js.map +1 -1
- package/dist/RS/to/input/util/parse-group-references.js.map +1 -1
- package/dist/RS/to/input/util/parse-intervals.js +4 -2
- package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
- package/dist/RS/to/input/util/parse-location-references.js +2 -1
- package/dist/RS/to/input/util/parse-location-references.js.map +1 -1
- package/dist/RS/to/input/util/parse-max-working-hours.js.map +1 -1
- package/dist/RS/to/input/util/parse-minimum-break-length.js.map +1 -1
- package/dist/RS/to/input/util/util.js +2 -1
- package/dist/RS/to/input/util/util.js.map +1 -1
- package/dist/RS/to/schedules.js.map +1 -1
- package/dist/RS/types/to.d.ts +0 -1
- package/dist/SS12000/from/activities.js +2 -1
- package/dist/SS12000/from/activities.js.map +1 -1
- package/dist/SS12000/from/calendar-events.js.map +1 -1
- package/dist/SS12000/from/duties.js.map +1 -1
- package/dist/SS12000/from/groups.js.map +1 -1
- package/dist/SS12000/from/index.js.map +1 -1
- package/dist/SS12000/from/persons.js.map +1 -1
- package/dist/SS12000/from/resources.js.map +1 -1
- package/dist/SS12000/from/rooms.js.map +1 -1
- package/dist/SS12000/from/syllabuses.js.map +1 -1
- package/dist/SS12000/index.d.ts +374 -194
- package/dist/SS12000/to/activities.js.map +1 -1
- package/dist/SS12000/to/calendar-events.js.map +1 -1
- package/dist/SS12000/to/common.js.map +1 -1
- package/dist/SS12000/to/duties.js.map +1 -1
- package/dist/SS12000/to/groups.js.map +1 -1
- package/dist/SS12000/to/index.d.ts +0 -1
- package/dist/SS12000/to/persons.js.map +1 -1
- package/dist/SS12000/to/resources.js.map +1 -1
- package/dist/SS12000/to/rooms.js.map +1 -1
- package/dist/SS12000/to/syllabuses.js.map +1 -1
- package/dist/SchoolSoft/api/from/index.js.map +1 -1
- package/dist/SchoolSoft/api/from/schedules.js +12 -8
- package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/api/index.d.ts +7 -6
- package/dist/SchoolSoft/file/from/index.js.map +1 -1
- package/dist/SchoolSoft/file/from/schedules.js +87 -83
- package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
- package/dist/SchoolSoft/file/index.d.ts +0 -1
- package/dist/SchoolSoft/file/to/index.d.ts +2 -3
- package/dist/SchoolSoft/file/to/schedules.js +2 -1
- package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
- package/dist/SchoolSoft/index.d.ts +0 -1
- package/dist/Schoolity/txt/to/index.d.ts +0 -1
- package/dist/Schoolity/txt/to/schedules.js +12 -5
- package/dist/Schoolity/txt/to/schedules.js.map +1 -1
- package/dist/Skola24/mdb/from/course-and-events.js +5 -3
- package/dist/Skola24/mdb/from/course-and-events.js.map +1 -1
- package/dist/Skola24/mdb/from/groups.js.map +1 -1
- package/dist/Skola24/mdb/from/index.js.map +1 -1
- package/dist/Skola24/mdb/from/locations.js.map +1 -1
- package/dist/Skola24/mdb/from/schedule.d.ts +0 -1
- package/dist/Skola24/mdb/from/schedule.js.map +1 -1
- package/dist/Skola24/mdb/from/teachers.js.map +1 -1
- package/dist/Skola24/txt/from/calendar-exceptions.js +2 -1
- package/dist/Skola24/txt/from/calendar-exceptions.js.map +1 -1
- package/dist/Skola24/txt/from/division.js.map +1 -1
- package/dist/Skola24/txt/from/index.js.map +1 -1
- package/dist/Skola24/txt/from/period.js +34 -31
- package/dist/Skola24/txt/from/period.js.map +1 -1
- package/dist/Skola24/txt/from/schedules.d.ts +0 -1
- package/dist/Skola24/txt/from/schedules.js +10 -6
- package/dist/Skola24/txt/from/schedules.js.map +1 -1
- package/dist/Skola24/txt/from/util.js.map +1 -1
- package/dist/Skola24/txt/index.d.ts +0 -1
- package/dist/Skola24/txt/to/index.d.ts +0 -1
- package/dist/Skola24/txt/to/schedules.js +12 -5
- package/dist/Skola24/txt/to/schedules.js.map +1 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/functions.js.map +1 -1
- package/dist/common/get-date.js.map +1 -1
- package/dist/common/make-chainable/index.js.map +1 -1
- package/dist/common/types.d.ts +3 -1
- package/dist/core/from/configurations.js.map +1 -1
- package/dist/core/from/courses.js.map +1 -1
- package/dist/core/from/events.js.map +1 -1
- package/dist/core/from/exceptions.js.map +1 -1
- package/dist/core/from/groups.js.map +1 -1
- package/dist/core/from/index.js.map +1 -1
- package/dist/core/from/locations.js.map +1 -1
- package/dist/core/from/locked-times.js.map +1 -1
- package/dist/core/from/overlap-groups.js.map +1 -1
- package/dist/core/from/periods.js.map +1 -1
- package/dist/core/from/persons.js.map +1 -1
- package/dist/core/from/root-intervals.js.map +1 -1
- package/dist/core/from/schedules.js.map +1 -1
- package/dist/core/from/settings.js.map +1 -1
- package/dist/core/from/syllabuses.js.map +1 -1
- package/dist/core/from/teachers.js.map +1 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/interfaces/other/companies.js.map +1 -1
- package/dist/core/interfaces/other/operations.d.ts +0 -1
- package/dist/core/interfaces/vertices/companies.d.ts +0 -1
- package/dist/core/interfaces/vertices/configurations.d.ts +1 -2
- package/dist/core/interfaces/vertices/courses.d.ts +0 -1
- package/dist/core/interfaces/vertices/division-settings.d.ts +0 -1
- package/dist/core/interfaces/vertices/divisions.d.ts +0 -1
- package/dist/core/interfaces/vertices/events.d.ts +2 -1
- package/dist/core/interfaces/vertices/exceptions.d.ts +0 -1
- package/dist/core/interfaces/vertices/generations.d.ts +0 -2
- package/dist/core/interfaces/vertices/groups.d.ts +0 -1
- package/dist/core/interfaces/vertices/index.d.ts +14 -1
- package/dist/core/interfaces/vertices/locations.d.ts +0 -1
- package/dist/core/interfaces/vertices/locked-times.d.ts +0 -2
- package/dist/core/interfaces/vertices/overlap-groups.d.ts +0 -1
- package/dist/core/interfaces/vertices/periods.d.ts +0 -2
- package/dist/core/interfaces/vertices/persons.d.ts +0 -1
- package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +0 -1
- package/dist/core/interfaces/vertices/properties/coalesced.d.ts +0 -1
- package/dist/core/interfaces/vertices/root-intervals.d.ts +0 -2
- package/dist/core/interfaces/vertices/syllabuses.d.ts +0 -1
- package/dist/core/interfaces/vertices/teachers.d.ts +0 -1
- package/dist/core/interfaces/vertices/threads.d.ts +31 -0
- package/dist/core/interfaces/vertices/users.d.ts +4 -2
- package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +9 -8
- package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +4 -4
- package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +9 -8
- package/dist/core/interfaces/vertices/util/edges.d.ts +26 -8
- package/dist/core/interfaces/vertices/util/util.d.ts +24 -20
- package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +16 -11
- package/dist/core/interfaces/vertices/util/vertex.d.ts +2 -2
- package/dist/core/interfaces/vertices/vertex-query.d.ts +29 -26
- package/dist/core/interfaces/vertices/vertex-query.js +8 -0
- package/dist/core/interfaces/vertices/vertex-query.js.map +1 -1
- package/dist/core/to/configurations.js +2 -1
- package/dist/core/to/configurations.js.map +1 -1
- package/dist/core/to/courses.js +2 -1
- package/dist/core/to/courses.js.map +1 -1
- package/dist/core/to/division.js.map +1 -1
- package/dist/core/to/events.js +4 -2
- package/dist/core/to/events.js.map +1 -1
- package/dist/core/to/exceptions.js +2 -1
- package/dist/core/to/exceptions.js.map +1 -1
- package/dist/core/to/groups.js +2 -1
- package/dist/core/to/groups.js.map +1 -1
- package/dist/core/to/locations.js +2 -1
- package/dist/core/to/locations.js.map +1 -1
- package/dist/core/to/locked-times.js +2 -1
- package/dist/core/to/locked-times.js.map +1 -1
- package/dist/core/to/overlap-groups.js +2 -1
- package/dist/core/to/overlap-groups.js.map +1 -1
- package/dist/core/to/periods.js +2 -1
- package/dist/core/to/periods.js.map +1 -1
- package/dist/core/to/persons.js +2 -1
- package/dist/core/to/persons.js.map +1 -1
- package/dist/core/to/root-intervals.js +2 -1
- package/dist/core/to/root-intervals.js.map +1 -1
- package/dist/core/to/schedules.d.ts +0 -1
- package/dist/core/to/schedules.js.map +1 -1
- package/dist/core/to/settings.js +2 -1
- package/dist/core/to/settings.js.map +1 -1
- package/dist/core/to/syllabuses.js +2 -1
- package/dist/core/to/syllabuses.js.map +1 -1
- package/dist/core/to/teachers.js +2 -1
- package/dist/core/to/teachers.js.map +1 -1
- package/dist/core/to/util.d.ts +0 -2
- package/dist/core/to/util.js +2 -1
- package/dist/core/to/util.js.map +1 -1
- package/dist/core/types/index.d.ts +5 -1
- package/dist/core/util.js +2 -1
- package/dist/core/util.js.map +1 -1
- package/dist/identify/constants/index.js.map +1 -1
- package/dist/identify/index.js +2 -1
- package/dist/identify/index.js.map +1 -1
- package/dist/sdui/from/classes.js.map +1 -1
- package/dist/sdui/from/courses.js.map +1 -1
- package/dist/sdui/from/holidays.js.map +1 -1
- package/dist/sdui/from/index.js.map +1 -1
- package/dist/sdui/from/lessons.js.map +1 -1
- package/dist/sdui/from/rooms.js.map +1 -1
- package/dist/sdui/from/schedules.d.ts +0 -2
- package/dist/sdui/from/schedules.js.map +1 -1
- package/dist/sdui/from/school-years.js.map +1 -1
- package/dist/sdui/from/substitution-plans.js.map +1 -1
- package/dist/sdui/from/teachers.js.map +1 -1
- package/dist/sdui/to/classes.js.map +1 -1
- package/dist/sdui/to/courses.js.map +1 -1
- package/dist/sdui/to/holidays.js.map +1 -1
- package/dist/sdui/to/hours.js.map +1 -1
- package/dist/sdui/to/index.d.ts +0 -2
- package/dist/sdui/to/lessons.js.map +1 -1
- package/dist/sdui/to/rooms.js.map +1 -1
- package/dist/sdui/to/schedules.js.map +1 -1
- package/dist/sdui/to/school-years.js.map +1 -1
- package/dist/sdui/to/substitution-plans.js +6 -3
- package/dist/sdui/to/substitution-plans.js.map +1 -1
- package/dist/sdui/to/teachers.js.map +1 -1
- package/dist/vKlass/from/index.js.map +1 -1
- package/dist/vKlass/from/schedule.d.ts +0 -1
- package/dist/vKlass/from/schedule.js.map +1 -1
- package/dist/vKlass/to/schedules.js +17 -6
- package/dist/vKlass/to/schedules.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/interfaces/index.d.ts +0 -23
- package/dist/core/interfaces/other/index.d.ts +0 -6
- package/dist/core/interfaces/vertices/util/index.d.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":[],"sources":["../../../src/IdunSoft/to/schedules.ts"],"sourcesContent":["import type { ParserOptions } from '@json2csv/plainjs';\nimport { Parser } from '@json2csv/plainjs';\nimport moment from 'moment';\nimport type { Types as IdunSoftTypes } from '../types';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex } from '../../core/util';\nimport { isMongooseObjectId } from '../../common/functions';\n\nconst days = ['måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag'];\nconst fields = ['Veckodag', 'Starttid', 'Sluttid', 'Klass', 'Ämne', 'Kommentar', 'Lärare', 'Klassrum', 'Halvklass'];\nconst delimiter = '\\t';\nconst quote = '';\n\nexport default (courseEvents: CoreTypes.Mixed.Event[]): string => {\n const events = courseEvents\n .map(event => {\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n const day = days.at(getDayIndex(event.start));\n if (!day) throw new Error('Invalid event day');\n\n const course = event.course;\n if (!course || typeof course == 'string' || isMongooseObjectId(course))\n throw new Error('Event course not found or invalid');\n\n const teachers = (event.teachers ?? course.teachers)?.map(x => x.to);\n const groups = (event.groups ?? course.groups )?.map(x => x.to);\n\n const doc: IdunSoftTypes.toEvent = {\n Ämne: course.ids,\n Veckodag: day,\n Starttid: moment.utc(event.start).format('HH.mm:ss'),\n Sluttid: moment.utc(event.end ).format('HH.mm:ss'),\n Lärare: (teachers ?? []).map(x => typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Klass: (groups ?? []).map(x => typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Klassrum: (event.inLocations ?? []).map(x => x && typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Halvklass: 'Nej'\n };\n return doc;\n })\n .filter(x => x != null);\n\n const opts: ParserOptions<IdunSoftTypes.toEvent> = { fields, delimiter/* , quote */ };\n const parser = new Parser(opts);\n return parser.parse(events);\n};\n"],"mappings":";;;;;;AAQA,MAAM,OAAY;CAAC;CAAU;CAAU;CAAU;CAAW
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["doc: IdunSoftTypes.toEvent","opts: ParserOptions<IdunSoftTypes.toEvent>"],"sources":["../../../src/IdunSoft/to/schedules.ts"],"sourcesContent":["import type { ParserOptions } from '@json2csv/plainjs';\nimport { Parser } from '@json2csv/plainjs';\nimport moment from 'moment';\nimport type { Types as IdunSoftTypes } from '../types';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex } from '../../core/util';\nimport { isMongooseObjectId } from '../../common/functions';\n\nconst days = ['måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag'];\nconst fields = ['Veckodag', 'Starttid', 'Sluttid', 'Klass', 'Ämne', 'Kommentar', 'Lärare', 'Klassrum', 'Halvklass'];\nconst delimiter = '\\t';\nconst quote = '';\n\nexport default (courseEvents: CoreTypes.Mixed.Event[]): string => {\n const events = courseEvents\n .map(event => {\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n const day = days.at(getDayIndex(event.start));\n if (!day) throw new Error('Invalid event day');\n\n const course = event.course;\n if (!course || typeof course == 'string' || isMongooseObjectId(course))\n throw new Error('Event course not found or invalid');\n\n const teachers = (event.teachers ?? course.teachers)?.map(x => x.to);\n const groups = (event.groups ?? course.groups )?.map(x => x.to);\n\n const doc: IdunSoftTypes.toEvent = {\n Ämne: course.ids,\n Veckodag: day,\n Starttid: moment.utc(event.start).format('HH.mm:ss'),\n Sluttid: moment.utc(event.end ).format('HH.mm:ss'),\n Lärare: (teachers ?? []).map(x => typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Klass: (groups ?? []).map(x => typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Klassrum: (event.inLocations ?? []).map(x => x && typeof x == 'object' && 'ids' in x ? x.ids : null).filter(x => x != null).join(','),\n Halvklass: 'Nej'\n };\n return doc;\n })\n .filter(x => x != null);\n\n const opts: ParserOptions<IdunSoftTypes.toEvent> = { fields, delimiter/* , quote */ };\n const parser = new Parser(opts);\n return parser.parse(events);\n};\n"],"mappings":";;;;;;AAQA,MAAM,OAAY;CAAC;CAAU;CAAU;CAAU;CAAW;;AAC5D,MAAM,SAAY;CAAC;CAAY;CAAY;CAAW;CAAS;CAAQ;CAAa;CAAU;CAAY;;AAC1G,MAAM,YAAY;AAGlB,yBAAgB,iBAAkD;CAChE,MAAM,SAAS,aACZ,KAAI,UAAS;AACZ,MAAI,MAAM,OAAQ;AAClB,MAAI,CAAC,MAAM,SAAS,CAAC,MAAM,IAAK;EAEhC,MAAM,MAAM,KAAK,GAAG,YAAY,MAAM;AACtC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM;EAE1B,MAAM,SAAS,MAAM;AACrB,MAAI,CAAC,UAAU,OAAO,UAAU,YAAY,mBAAmB,QAC7D,OAAM,IAAI,MAAM;EAElB,MAAM,YAAY,MAAM,YAAY,OAAO,WAAW,KAAI,MAAK,EAAE;EACjE,MAAM,UAAY,MAAM,UAAY,OAAO,SAAW,KAAI,MAAK,EAAE;EAEjE,MAAMA,MAA6B;GACjC,MAAW,OAAO;GAClB,UAAW;GACX,UAAW,OAAO,IAAI,MAAM,OAAO,OAAO;GAC1C,SAAW,OAAO,IAAI,MAAM,KAAO,OAAO;GAC1C,SAAY,YAAqB,IAAI,KAAI,MAAU,OAAO,KAAK,YAAY,SAAS,IAAI,EAAE,MAAM,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;GAClI,QAAY,UAAqB,IAAI,KAAI,MAAU,OAAO,KAAK,YAAY,SAAS,IAAI,EAAE,MAAM,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;GAClI,WAAY,MAAM,eAAe,IAAI,KAAI,MAAK,KAAK,OAAO,KAAK,YAAY,SAAS,IAAI,EAAE,MAAM,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;GAClI,WAAW;;AAEb,SAAO;IAER,QAAO,MAAK,KAAK;CAEpB,MAAMC,OAA6C;EAAE;EAAQ;;CAC7D,MAAM,SAAS,IAAI,OAAO;AAC1B,QAAO,OAAO,MAAM"}
|
|
@@ -34,7 +34,7 @@ var schedules_default = (courseEvents) => {
|
|
|
34
34
|
const Personal = (event.teachers ?? course.teachers ?? []).map(({ to: x }) => typeof x == "object" && "displayName" in x ? x.displayName : null).filter((x) => x != null).join(",");
|
|
35
35
|
const Klasser = (event.groups ?? course.groups ?? []).map(({ to: x }) => typeof x == "object" && "displayName" in x ? x.displayName : null).filter((x) => x != null).join(",");
|
|
36
36
|
const Salar = (event.inLocations ?? []).map((x) => x && typeof x == "object" && "displayName" in x ? x.displayName : null).filter((x) => x != null).join(",");
|
|
37
|
-
|
|
37
|
+
const doc = {
|
|
38
38
|
Ämne: course.displayName,
|
|
39
39
|
Dag: day,
|
|
40
40
|
Starttid: moment.utc(event.start).format("HH.mm"),
|
|
@@ -43,6 +43,7 @@ var schedules_default = (courseEvents) => {
|
|
|
43
43
|
Klasser,
|
|
44
44
|
Salar
|
|
45
45
|
};
|
|
46
|
+
return doc;
|
|
46
47
|
});
|
|
47
48
|
const opts = {
|
|
48
49
|
columns,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedules.js","names":[],"sources":["../../../src/InfoMentor/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport iconv from 'iconv-lite';\nimport Papa from 'papaparse';\nimport type { Types as InfoMentorTypes } from '../types';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex } from '../../core/util';\nimport { isMongooseObjectId } from '../../common/functions';\n\nconst days = ['MÅN', 'TIS', 'ONS', 'TOR', 'FRE'];\nconst columns = ['Ämne', 'Dag', 'Starttid', 'Längd', 'Personal', 'Klasser', 'Salar'];\nconst delimiter = '\\t';\nconst encoding = 'windows-1252';\n\nexport default (courseEvents: CoreTypes.Mixed.Event[]): Buffer => {\n const events = courseEvents\n .map(event => {\n if (event.parked || !event.start || !event.end) return;\n\n const course = event.course;\n if (!course) return;\n\n const day = days.at(getDayIndex(event.start));\n if (!day) throw new Error('Invalid event day');\n\n if (typeof course == 'string' || isMongooseObjectId(course))\n throw new Error('(InfoMentor::To::Schedules) Event course is not an deserialized object');\n\n const Personal = (event.teachers ?? course.teachers ?? []).map(({ to: x }) => typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n const Klasser = (event.groups ?? course.groups ?? []).map(({ to: x }) => typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n const Salar = (event.inLocations ?? []).map(x => x && typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n\n const doc: InfoMentorTypes.event ={\n Ämne: course.displayName,\n Dag: day,\n Starttid: moment.utc(event.start).format('HH.mm'),\n Längd: moment.utc(event.end).diff(moment.utc(event.start), 'minutes'),\n Personal,\n Klasser,\n Salar,\n };\n return doc;\n });\n\n const opts = { columns, delimiter };\n const csv = Papa.unparse(events, opts);\n return iconv.encode(csv, encoding);\n};\n"],"mappings":";;;;;;;AAQA,MAAM,OAAY;CAAC;CAAO;CAAO;CAAO;CAAO
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["doc: InfoMentorTypes.event"],"sources":["../../../src/InfoMentor/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport iconv from 'iconv-lite';\nimport Papa from 'papaparse';\nimport type { Types as InfoMentorTypes } from '../types';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex } from '../../core/util';\nimport { isMongooseObjectId } from '../../common/functions';\n\nconst days = ['MÅN', 'TIS', 'ONS', 'TOR', 'FRE'];\nconst columns = ['Ämne', 'Dag', 'Starttid', 'Längd', 'Personal', 'Klasser', 'Salar'];\nconst delimiter = '\\t';\nconst encoding = 'windows-1252';\n\nexport default (courseEvents: CoreTypes.Mixed.Event[]): Buffer => {\n const events = courseEvents\n .map(event => {\n if (event.parked || !event.start || !event.end) return;\n\n const course = event.course;\n if (!course) return;\n\n const day = days.at(getDayIndex(event.start));\n if (!day) throw new Error('Invalid event day');\n\n if (typeof course == 'string' || isMongooseObjectId(course))\n throw new Error('(InfoMentor::To::Schedules) Event course is not an deserialized object');\n\n const Personal = (event.teachers ?? course.teachers ?? []).map(({ to: x }) => typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n const Klasser = (event.groups ?? course.groups ?? []).map(({ to: x }) => typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n const Salar = (event.inLocations ?? []).map(x => x && typeof x == 'object' && 'displayName' in x ? x.displayName : null).filter(x => x != null).join(',');\n\n const doc: InfoMentorTypes.event ={\n Ämne: course.displayName,\n Dag: day,\n Starttid: moment.utc(event.start).format('HH.mm'),\n Längd: moment.utc(event.end).diff(moment.utc(event.start), 'minutes'),\n Personal,\n Klasser,\n Salar,\n };\n return doc;\n });\n\n const opts = { columns, delimiter };\n const csv = Papa.unparse(events, opts);\n return iconv.encode(csv, encoding);\n};\n"],"mappings":";;;;;;;AAQA,MAAM,OAAY;CAAC;CAAO;CAAO;CAAO;CAAO;;AAC/C,MAAM,UAAY;CAAC;CAAQ;CAAO;CAAY;CAAS;CAAY;CAAW;;AAC9E,MAAM,YAAY;AAClB,MAAM,WAAY;AAElB,yBAAgB,iBAAkD;CAChE,MAAM,SAAS,aACZ,KAAI,UAAS;AACZ,MAAI,MAAM,UAAU,CAAC,MAAM,SAAS,CAAC,MAAM,IAAK;EAEhD,MAAM,SAAS,MAAM;AACrB,MAAI,CAAC,OAAQ;EAEb,MAAM,MAAM,KAAK,GAAG,YAAY,MAAM;AACtC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM;AAE1B,MAAI,OAAO,UAAU,YAAY,mBAAmB,QAClD,OAAM,IAAI,MAAM;EAElB,MAAM,YAAY,MAAM,YAAY,OAAO,YAAY,IAAI,KAAK,EAAE,IAAI,QAAa,OAAO,KAAK,YAAY,iBAAiB,IAAI,EAAE,cAAc,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;EAClL,MAAM,WAAY,MAAM,UAAY,OAAO,UAAY,IAAI,KAAK,EAAE,IAAI,QAAa,OAAO,KAAK,YAAY,iBAAiB,IAAI,EAAE,cAAc,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;EAClL,MAAM,SAAY,MAAM,eAA+B,IAAI,KAAI,MAAe,KAAK,OAAO,KAAK,YAAY,iBAAiB,IAAI,EAAE,cAAc,MAAM,QAAO,MAAK,KAAK,MAAM,KAAK;EAElL,MAAMA,MAA4B;GAChC,MAAU,OAAO;GACjB,KAAU;GACV,UAAU,OAAO,IAAI,MAAM,OAAO,OAAO;GACzC,OAAU,OAAO,IAAI,MAAM,KAAK,KAAK,OAAO,IAAI,MAAM,QAAQ;GAC9D;GACA;GACA;;AAEF,SAAO;;CAGX,MAAM,OAAO;EAAE;EAAS;;CACxB,MAAM,MAAM,KAAK,QAAQ,QAAQ;AACjC,QAAO,MAAM,OAAO,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/PlanDigital/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA
|
|
1
|
+
{"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/PlanDigital/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA"}
|
|
@@ -17,7 +17,8 @@ var schedules_default = (input, options) => {
|
|
|
17
17
|
errors.push(`The selected period ${x} does not exist.`);
|
|
18
18
|
return { meta: { errors } };
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
const numUnits = size(countBy(input["Perioder"].map((x) => x.Tidsenhet)));
|
|
21
|
+
if (numUnits > 1) {
|
|
21
22
|
errors.push("Different time periods used for different periods.");
|
|
22
23
|
return { meta: { errors } };
|
|
23
24
|
}
|
|
@@ -30,18 +31,18 @@ var schedules_default = (input, options) => {
|
|
|
30
31
|
if (sum(periodTimes) == 0) return;
|
|
31
32
|
const displayName = c[options.displayName ?? "Gruppnamn"];
|
|
32
33
|
const subject = c["Kurskod"];
|
|
33
|
-
const groups = c["Klass"]?.split(",").map((x) => x.trim());
|
|
34
|
+
const groups$1 = c["Klass"]?.split(",").map((x) => x.trim());
|
|
34
35
|
const teachers$1 = c["Sign"]?.split(",").map((x) => x.trim());
|
|
35
36
|
const periodTime = size(countBy(periodTimes)) == 1 ? periodTimes[0] : void 0;
|
|
36
37
|
const minutesPerWeek = timeUnit == "Minuter/Vecka" ? periodTime : void 0;
|
|
37
38
|
const expectedTotalHours = timeUnit == "Timmar/Period" ? periodTime : void 0;
|
|
38
39
|
teachers$1.forEach((x) => teacherSet.add(x));
|
|
39
|
-
groups.forEach((x) => groupSet.add(x));
|
|
40
|
+
groups$1.forEach((x) => groupSet.add(x));
|
|
40
41
|
courses.push({
|
|
41
42
|
displayName,
|
|
42
43
|
subject,
|
|
43
44
|
teachers: teachers$1.map((to) => ({ to })),
|
|
44
|
-
groups: groups.map((to) => ({ to })),
|
|
45
|
+
groups: groups$1.map((to) => ({ to })),
|
|
45
46
|
...minutesPerWeek != void 0 && { minutesPerWeek },
|
|
46
47
|
...expectedTotalHours != void 0 && { expectedTotalHours }
|
|
47
48
|
});
|
|
@@ -50,12 +51,13 @@ var schedules_default = (input, options) => {
|
|
|
50
51
|
ids,
|
|
51
52
|
displayName: ids
|
|
52
53
|
}));
|
|
54
|
+
const groups = [...groupSet].map((ids) => ({
|
|
55
|
+
ids,
|
|
56
|
+
displayName: ids,
|
|
57
|
+
species: "class"
|
|
58
|
+
}));
|
|
53
59
|
return {
|
|
54
|
-
groups
|
|
55
|
-
ids,
|
|
56
|
-
displayName: ids,
|
|
57
|
-
species: "class"
|
|
58
|
-
})),
|
|
60
|
+
groups,
|
|
59
61
|
teachers,
|
|
60
62
|
courses,
|
|
61
63
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
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
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["warnings: string[]","errors: string[]","groups","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;CAC3B,MAAMC,SAAqB;AAG3B,KAAI,CAAC,MAAM,YAAY,QAAQ;AAC7B,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;CAInB,MAAM,kBAAkB,QAAQ;AAChC,KAAI,CAAC,iBAAiB,QAAQ;AAC5B,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;AAInB,MAAK,MAAM,KAAK,QAAQ,mBAAmB,GACzC,KAAI,CAAC,MAAM,YAAY,MAAK,MAAK,EAAE,QAAQ,IAAI;AAC7C,SAAO,KAAK,uBAAuB,EAAE;AACrC,SAAO,EAAE,MAAM,EAAE;;CAKrB,MAAM,WAAW,KAAK,QAAQ,MAAM,YAAY,KAAI,MAAK,EAAE;AAC3D,KAAI,WAAW,GAAG;AAChB,SAAO,KAAK;AACZ,SAAO,EAAE,MAAM,EAAE;;CAEnB,MAAM,WAAW,MAAM,YAAY,GAAG;CAMtC,MAAM,UAAa,IAAI;CACvB,MAAM,6BAAa,IAAI;CACvB,MAAM,2BAAa,IAAI;AACvB,OAAM,4BAA4B,SAAQ,MAAK;EAG7C,MAAM,cAAc,gBAAgB,KAAI,MAAK,EAAE,OAAO,QAAQ;AAC9D,MAAI,IAAI,gBAAgB,EAAG;EAE3B,MAAM,cAAc,EAAE,QAAQ,eAAe;EAC7C,MAAM,UAAc,EAAE;EACtB,MAAMC,WAAc,EAAE,UAAU,MAAM,KAAK,KAAI,MAAK,EAAE;EACtD,MAAMC,aAAc,EAAE,SAAU,MAAM,KAAK,KAAI,MAAK,EAAE;EAGtD,MAAM,aAAqB,KAAK,QAAQ,iBAAiB,IAAI,YAAY,KAAK;EAC9E,MAAM,iBAAqB,YAAY,kBAA0B,aAAiB;EAClF,MAAM,qBAAqB,YAAY,kBAA0B,aAAiB;AAGlF,aAAS,SAAQ,MAAK,WAAW,IAAI;AACrC,WAAO,SAAQ,MAAO,SAAS,IAAI;AAGnC,UAAQ,KAAK;GACX;GACA;GACA,UAAUA,WAAS,KAAI,QAAO,EAAE;GAChC,QAAUD,SAAS,KAAI,QAAO,EAAE;GAEhC,GAAI,kBAAsB,UAAa,EAAE;GACzC,GAAI,sBAAsB,UAAa,EAAE;;;CAM7C,MAAM,WAAW,CAAC,GAAG,YAAY,KAAI,SAAQ;EAAE;EAAK,aAAa;;CACjE,MAAM,SAAW,CAAC,GAAG,UAAY,KAAI,SAAQ;EAAE;EAAK,aAAa;EAAK,SAAS;;AAC/E,QAAO;EAAE;EAAQ;EAAU;EACzB,MAAM;GACJ,GAAK,OAAO,UAAY,EAAY;GACpC,GAAK,SAAS,UAAU,EAAY"}
|
|
@@ -5,7 +5,6 @@ import { MaximumScheduleSpan } from "../core/interfaces/vertices/properties/maxi
|
|
|
5
5
|
import { PlannedScheduledDuration } from "../core/interfaces/vertices/properties/planned-scheduled-duration.js";
|
|
6
6
|
import { MinBreakLength } from "../core/interfaces/vertices/properties/min-break-length.js";
|
|
7
7
|
import { Types } from "./types/index.js";
|
|
8
|
-
import "../index.js";
|
|
9
8
|
|
|
10
9
|
//#region src/PlanDigital/index.d.ts
|
|
11
10
|
declare class PlanDigitalMap {
|
|
@@ -5,7 +5,8 @@ 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
|
-
|
|
8
|
+
const did = getVertexId(schedule.division, options);
|
|
9
|
+
if (!did) throw new Error("division id is undefined");
|
|
9
10
|
const periodsMap = new Map(schedule.periods?.map((p) => [getVertexId(p, options), p]));
|
|
10
11
|
const defaultPeriod = { ranges: [{
|
|
11
12
|
start: schedule.division.start,
|
|
@@ -35,9 +36,11 @@ var schedules_default = (schedule) => {
|
|
|
35
36
|
if (!course) return null;
|
|
36
37
|
const courseName = course.displayName ?? "";
|
|
37
38
|
const inLocation = e.inLocations?.at(0);
|
|
38
|
-
const
|
|
39
|
+
const location = inLocation ? locationsMap.get(getVertexId(inLocation, options)) : void 0;
|
|
40
|
+
const locationName = location?.displayName;
|
|
39
41
|
const _period = e.period ?? course.period ?? schedule.settings.period;
|
|
40
|
-
const
|
|
42
|
+
const period = periodsMap.get(_period ? getVertexId(_period, options) : void 0);
|
|
43
|
+
const weeksInPeriod = period?.ranges.map((x) => {
|
|
41
44
|
const start$1 = moment.utc(x.start);
|
|
42
45
|
const end$1 = moment.utc(x.end);
|
|
43
46
|
const weeks = new Array();
|
|
@@ -47,7 +50,7 @@ var schedules_default = (schedule) => {
|
|
|
47
50
|
}
|
|
48
51
|
return weeks;
|
|
49
52
|
}).flat();
|
|
50
|
-
const
|
|
53
|
+
const allWeeks = defaultPeriod?.ranges.map((x) => {
|
|
51
54
|
const start$1 = moment.utc(x.start);
|
|
52
55
|
const end$1 = moment.utc(x.end);
|
|
53
56
|
const weeks = new Array();
|
|
@@ -56,7 +59,8 @@ var schedules_default = (schedule) => {
|
|
|
56
59
|
start$1.add(1, "week");
|
|
57
60
|
}
|
|
58
61
|
return weeks;
|
|
59
|
-
}).flat()
|
|
62
|
+
}).flat();
|
|
63
|
+
const excludedWeeks = allWeeks.filter((x) => !weeksInPeriod?.includes(x)).join(", ");
|
|
60
64
|
const holidaysInPeriod = holidaysInDays.filter((x) => {
|
|
61
65
|
return weeksInPeriod?.includes(x.week());
|
|
62
66
|
}).map((x) => x.format("YYYY-MM-DD")).join(", ");
|
|
@@ -1 +1 @@
|
|
|
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":";;;;;AAoBA,yBACE,aACkB;CAClB,MAAMA,UAAuB,EAAE,OAAO,MAAM
|
|
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":";;;;;AAoBA,yBACE,aACkB;CAClB,MAAMA,UAAuB,EAAE,OAAO;CAEtC,MAAM,MAAM,YAAY,SAAS,UAAU;AAC3C,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM;CAG1B,MAAM,aAAa,IAAI,IAAI,SAAS,SAAS,KAAK,MAAM,CAAC,YAAY,GAAG,UAAgC;CACxG,MAAMC,gBAAuD,EAC3D,QAAQ,CAAC;EAAE,OAAO,SAAS,SAAS;EAAO,KAAK,SAAS,SAAS;;AAEpE,YAAW,IAAI,QAAW;CAG1B,MAAM,aAAa,IAAI,IAAI,SAAS,SAAS,KAAK,MAAM,CAAC,YAAY,GAAG,UAAU;CAGlF,MAAM,eAAe,IAAI,IAAI,SAAS,WAAW,KAAK,MAAM,CAAC,YAAY,GAAG,UAAU;CAGtF,MAAM,YAAY,OAAO,IAAI,SAAS,SAAS,OAAO,OAAO;CAC7D,MAAM,UAAU,OAAO,IAAI,SAAS,SAAS,KAAK,OAAO;CAEzD,MAAM,aAAa,OAAO,IAAI,SAAS,SAAS,OAAO,OAAO,QAAQ,MACpE,OAAO,IAAI,SAAS,SAAS,OAAO,IAAI,GAAG,QAAQ,OAAO;CAE5D,MAAM,WAAW,SAAS,UAAU,oBAChC,QAAQ,MAAM,EAAE,SAAS,EAAE;CAG/B,MAAMC,iBAAkC;AAExC,KAAI,SACF,MAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,QAAQ,OAAO,IAAI,QAAQ;EACjC,MAAM,MAAM,OAAO,IAAI,QAAQ;AAC/B,SAAO,MAAM,SAAS,MAAM;AAE1B,OAAI,MAAM,eAAe,EACvB,gBAAe,KAAK,MAAM;AAE5B,SAAM,IAAI,GAAG;;;CAQnB,MAAM,aAAa,SAAS,QACxB,KAAK,MAAM;AAEX,MAAI,CAAC,EAAE,SAAS,CAAC,EAAE,IAAK,QAAO;EAC/B,MAAM,QAAQ,OAAO,IAAI,EAAE;EAC3B,MAAM,MAAM,OAAO,IAAI,EAAE;EAGzB,MAAM,SAAS,EAAE,SAAS,WAAW,IAAI,YAAY,EAAE,QAAQ,YAAY;AAC3E,MAAI,CAAC,OAAQ,QAAO;EACpB,MAAM,aAAa,OAAO,eAAe;EAGzC,MAAM,aAAa,EAAE,aAAa,GAAG;EACrC,MAAM,WAAW,aAAa,aAAa,IAAI,YAAY,YAAY,YAAY;EACnF,MAAM,eAAe,UAAU;EAE/B,MAAM,UAAU,EAAE,UAAU,OAAO,UAAU,SAAS,SAAS;EAC/D,MAAM,SAAS,WAAW,IAAI,UAAU,YAAY,SAAS,WAAW;EAExE,MAAM,gBAAgB,QAAQ,OAC3B,KAAK,MAAM;GAEV,MAAMC,UAAQ,OAAO,IAAI,EAAE;GAC3B,MAAMC,QAAM,OAAO,IAAI,EAAE;GACzB,MAAM,QAAQ,IAAI;AAClB,UAAOD,QAAM,SAASC,QAAM;AAC1B,UAAM,KAAKD,QAAM;AACjB,YAAM,IAAI,GAAG;;AAEf,UAAO;KAER;EAEH,MAAM,WAAW,eAAe,OAC7B,KAAK,MAAM;GAEV,MAAMA,UAAQ,OAAO,IAAI,EAAE;GAC3B,MAAMC,QAAM,OAAO,IAAI,EAAE;GACzB,MAAM,QAAQ,IAAI;AAClB,UAAOD,QAAM,SAASC,QAAM;AAC1B,UAAM,KAAKD,QAAM;AACjB,YAAM,IAAI,GAAG;;AAEf,UAAO;KAER;EAEH,MAAM,gBAAgB,SACnB,QAAQ,MAAM,CAAC,eAAe,SAAS,IACvC,KAAK;EAGR,MAAM,mBAAmB,eACtB,QAAQ,MAAM;AACb,UAAO,eAAe,SAAS,EAAE;KAElC,KAAK,MAAM,EAAE,OAAO,eACpB,KAAK;AAER,SAAO;GACL,YAA0B,MAAM,QAAQ,KAAK;GAC7C,UAAyB,IAAI,KAAK,OAAO;GACzC,SAAyB;GACzB,MAAyB;GACzB,WAAyB;GACzB,WAAyB,MAAM,OAAO;GACtC,cAAyB;GACzB,cAAyB;GACzB,oBAAyB,EAAE;GAC3B,oBAAyB;GACzB,yBAAyB;GACzB,UAAyB;GACzB,YAAyB;GACzB,UAAyB;;IAG5B,QAAQ,MAAkC,CAAC,CAAC;CAK/C,MAAM,KAAK,KAAK,MAAM;AACtB,MAAK,MAAM,kBAAkB,IAAI,KAAK,MAAM,cAAc,aAAa;AAEvE,QAAO"}
|
package/dist/RS/from/division.js
CHANGED
|
@@ -5,11 +5,12 @@ function division(input) {
|
|
|
5
5
|
if (!("displayName" in d && typeof d.displayName == "string")) return;
|
|
6
6
|
if (!("start" in d && typeof d.start == "string")) return;
|
|
7
7
|
if (!("end" in d && typeof d.end == "string")) return;
|
|
8
|
-
|
|
8
|
+
const division$1 = {
|
|
9
9
|
displayName: d.displayName,
|
|
10
10
|
start: d.start,
|
|
11
11
|
end: d.end
|
|
12
12
|
};
|
|
13
|
+
return division$1;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"division.js","names":["division: Pick<CoreTypes.Deep.Division, 'displayName' | 'start' | 'end'>","division"],"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;CAE/D,MAAMA,aAA2E;EAC/E,aAAa,EAAE;EACf,OAAa,EAAE;EACf,KAAa,EAAE;;AAEjB,QAAOC"}
|
|
@@ -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"}
|
|
@@ -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'> = {}\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,
|
|
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,IACY;AAEtD,KAAI,CAAC,QAAQ,MAAO,SAAQ,QAAQ;CAEpC,MAAMA,WAAqB;CAE3B,MAAM,WAAsB,MAAM;CAClC,MAAM,sBAAsB,MAAM,QAAQ,GAAG,IAAI;AAEjD,KAAI,CAAC,SAAqB,OAAM,IAAI,MAAM;AAC1C,KAAI,CAAC,oBAAqB,OAAM,IAAI,MAAM;CAG1C,MAAM,iBAAiB,IAAI,IAAI,SAAS,QAAQ,KAAI,MAAK,YAAY,GAAG;AAExE,qBAAoB,SAAS,EAAE,IAAI,gBAAiB,GAAG,gBAAgB;EAErE,MAAM,aAAa,gBAAgB,MAAM,KAAK,MAAM,cAAc,SAAS,WAAW;EACtF,MAAM,KAAa,gBAAgB,MAAM,KAAK;EAC9C,MAAM,QAAQ,SAAS,aAAa,MAAK,MAAK,YAAY,GAAG,YAAY;AAEzE,MAAI,CAAC,OAAO;AACV,YAAS,KAAK,kBAAkB,GAAG,IAAI,gBAAgB,OAAO,WAAW;AACzE;;AAGF,QAAM,SAAW;AACjB,QAAM,QAAW,OAAO,IAAI,oBAAoB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,OAAO,WAAW;AAC3G,QAAM,MAAW,OAAO,IAAI,oBAAoB,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAO,WAAW;AAC3G,QAAM,WAAW,UAAU,MAAM,UAAU;AAE3C,MAAI,cAAc,UAAU;AAC1B,GAAC,MAAqC,cAAc,UAAU,cAAc,OAAO,YAAY;AAG/F,kBAAe,OAAO;;;AAK1B,KAAI,eAAe,KACjB,UAAS,KAAK,0CAA0C,CAAC,GAAG,gBAAgB,KAAK;AAInF,QAAO,OAAO,OAAO,UAAU,EAC7B,MAAM,EACJ,GAAG,SAAS,UAAU,EAAY"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import "../core/types/common/index.js";
|
|
2
1
|
import { Mixed } from "../core/interfaces/vertices/index.js";
|
|
3
|
-
import "../core/index.js";
|
|
4
|
-
import "./types/index.js";
|
|
5
2
|
|
|
6
3
|
//#region src/RS/make-connected.d.ts
|
|
4
|
+
|
|
7
5
|
type _Schedule = {
|
|
8
6
|
division: Mixed.Division;
|
|
9
7
|
divisions: Mixed.Division;
|
|
@@ -84,10 +84,12 @@ function makeConnected(schedule, options = {}) {
|
|
|
84
84
|
return Object.assign(x, edges);
|
|
85
85
|
});
|
|
86
86
|
const periods = (schedule.periods ?? []).map((x) => {
|
|
87
|
-
|
|
87
|
+
const edges = {};
|
|
88
|
+
return Object.assign(x, edges);
|
|
88
89
|
});
|
|
89
90
|
const rootIntervals = (schedule.rootIntervals ?? []).map((x) => {
|
|
90
|
-
|
|
91
|
+
const edges = {};
|
|
92
|
+
return Object.assign(x, edges);
|
|
91
93
|
});
|
|
92
94
|
const makeCoalesced = (map$1, id, toModel, extra) => {
|
|
93
95
|
const to = map$1.get(id);
|
|
@@ -136,10 +138,11 @@ function makeConnected(schedule, options = {}) {
|
|
|
136
138
|
return x.map((x$1) => {
|
|
137
139
|
const to = personsMap.get(getVertexId(x$1.to, idKey));
|
|
138
140
|
if (!to) return;
|
|
139
|
-
|
|
141
|
+
const participant = {
|
|
140
142
|
...x$1,
|
|
141
143
|
to
|
|
142
144
|
};
|
|
145
|
+
return participant;
|
|
143
146
|
}).filter(nonNullable);
|
|
144
147
|
};
|
|
145
148
|
const getTeachers = (x) => {
|
|
@@ -147,10 +150,11 @@ function makeConnected(schedule, options = {}) {
|
|
|
147
150
|
return x.map((x$1) => {
|
|
148
151
|
const to = teachersMap.get(getVertexId(x$1.to, idKey));
|
|
149
152
|
if (!to) return;
|
|
150
|
-
|
|
153
|
+
const participant = {
|
|
151
154
|
...x$1,
|
|
152
155
|
to
|
|
153
156
|
};
|
|
157
|
+
return participant;
|
|
154
158
|
}).filter(nonNullable);
|
|
155
159
|
};
|
|
156
160
|
const getLocations = (x) => {
|
|
@@ -158,10 +162,11 @@ function makeConnected(schedule, options = {}) {
|
|
|
158
162
|
return x.map((x$1) => {
|
|
159
163
|
const locations$1 = x$1.locations.map((x$2) => locationsMap.get(getVertexId(x$2, idKey))).filter(nonNullable);
|
|
160
164
|
if (locations$1.length != 1) throw new Error(`(RS::MakeConnected) Expected exactly one location in available locations, got ${locations$1.length} and before filtering: ${x$1.locations.map((x$2) => getVertexId(x$2, idKey)).join(", ")}`);
|
|
161
|
-
|
|
165
|
+
const availableLocation = {
|
|
162
166
|
...x$1,
|
|
163
167
|
locations: locations$1
|
|
164
168
|
};
|
|
169
|
+
return availableLocation;
|
|
165
170
|
}).filter(nonNullable);
|
|
166
171
|
};
|
|
167
172
|
const getGroups = (x) => {
|
|
@@ -170,13 +175,42 @@ function makeConnected(schedule, options = {}) {
|
|
|
170
175
|
const to = groupsMap.get(getVertexId(x$1.to, idKey));
|
|
171
176
|
if (!to) return;
|
|
172
177
|
const exclude = x$1.exclude ? x$1.exclude.map((x$2) => personsMap.get(getVertexId(x$2, idKey))).filter(nonNullable) : void 0;
|
|
173
|
-
|
|
178
|
+
const group = {
|
|
174
179
|
...x$1,
|
|
175
180
|
to,
|
|
176
181
|
exclude
|
|
177
182
|
};
|
|
183
|
+
return group;
|
|
178
184
|
}).filter(nonNullable);
|
|
179
185
|
};
|
|
186
|
+
const courses = (schedule.courses ?? []).map((x) => {
|
|
187
|
+
const edges = {
|
|
188
|
+
groups: getGroups(x.groups),
|
|
189
|
+
teachers: getTeachers(x.teachers),
|
|
190
|
+
locations: getLocations(x.locations),
|
|
191
|
+
participants: getParticipants(x.participants),
|
|
192
|
+
lockedTimes: getLockedTimes(x.lockedTimes),
|
|
193
|
+
events: x.events ? x.events.map((x$1) => eventsMap.get(getVertexId(x$1, idKey))).filter(nonNullable) : x.events,
|
|
194
|
+
period: x.period != null ? periodsMap.get(getVertexId(x.period, idKey)) : x.period,
|
|
195
|
+
overlapGroup: x.overlapGroup != null ? overlapGroupsMap.get(getVertexId(x.overlapGroup, idKey)) : x.overlapGroup
|
|
196
|
+
};
|
|
197
|
+
return Object.assign(x, edges);
|
|
198
|
+
});
|
|
199
|
+
const events = (schedule.events ?? []).map((x) => {
|
|
200
|
+
const edges = {
|
|
201
|
+
groups: getGroups(x.groups),
|
|
202
|
+
teachers: getTeachers(x.teachers),
|
|
203
|
+
locations: getLocations(x.locations),
|
|
204
|
+
participants: getParticipants(x.participants),
|
|
205
|
+
lockedTimes: getLockedTimes(x.lockedTimes),
|
|
206
|
+
inLocations: x.inLocations ? x.inLocations.map((x$1) => x$1 === null ? null : locationsMap.get(getVertexId(x$1, idKey))).filter((x$1) => x$1 !== void 0) : x.inLocations,
|
|
207
|
+
course: x.course != null ? coursesMap.get(getVertexId(x.course, idKey)) : x.course,
|
|
208
|
+
period: x.period != null ? periodsMap.get(getVertexId(x.period, idKey)) : x.period,
|
|
209
|
+
overlapSpecies: x.overlapSpecies != null ? overlapGroupsMap.get(getVertexId(x.overlapSpecies, idKey)) : x.overlapSpecies,
|
|
210
|
+
threads: void 0
|
|
211
|
+
};
|
|
212
|
+
return Object.assign(x, edges);
|
|
213
|
+
});
|
|
180
214
|
return {
|
|
181
215
|
division,
|
|
182
216
|
settings,
|
|
@@ -188,33 +222,8 @@ function makeConnected(schedule, options = {}) {
|
|
|
188
222
|
rootIntervals,
|
|
189
223
|
lockedTimes,
|
|
190
224
|
overlapGroups,
|
|
191
|
-
courses
|
|
192
|
-
|
|
193
|
-
groups: getGroups(x.groups),
|
|
194
|
-
teachers: getTeachers(x.teachers),
|
|
195
|
-
locations: getLocations(x.locations),
|
|
196
|
-
participants: getParticipants(x.participants),
|
|
197
|
-
lockedTimes: getLockedTimes(x.lockedTimes),
|
|
198
|
-
events: x.events ? x.events.map((x$1) => eventsMap.get(getVertexId(x$1, idKey))).filter(nonNullable) : x.events,
|
|
199
|
-
period: x.period != null ? periodsMap.get(getVertexId(x.period, idKey)) : x.period,
|
|
200
|
-
overlapGroup: x.overlapGroup != null ? overlapGroupsMap.get(getVertexId(x.overlapGroup, idKey)) : x.overlapGroup
|
|
201
|
-
};
|
|
202
|
-
return Object.assign(x, edges);
|
|
203
|
-
}),
|
|
204
|
-
events: (schedule.events ?? []).map((x) => {
|
|
205
|
-
const edges = {
|
|
206
|
-
groups: getGroups(x.groups),
|
|
207
|
-
teachers: getTeachers(x.teachers),
|
|
208
|
-
locations: getLocations(x.locations),
|
|
209
|
-
participants: getParticipants(x.participants),
|
|
210
|
-
lockedTimes: getLockedTimes(x.lockedTimes),
|
|
211
|
-
inLocations: x.inLocations ? x.inLocations.map((x$1) => x$1 === null ? null : locationsMap.get(getVertexId(x$1, idKey))).filter((x$1) => x$1 !== void 0) : x.inLocations,
|
|
212
|
-
course: x.course != null ? coursesMap.get(getVertexId(x.course, idKey)) : x.course,
|
|
213
|
-
period: x.period != null ? periodsMap.get(getVertexId(x.period, idKey)) : x.period,
|
|
214
|
-
overlapSpecies: x.overlapSpecies != null ? overlapGroupsMap.get(getVertexId(x.overlapSpecies, idKey)) : x.overlapSpecies
|
|
215
|
-
};
|
|
216
|
-
return Object.assign(x, edges);
|
|
217
|
-
})
|
|
225
|
+
courses,
|
|
226
|
+
events
|
|
218
227
|
};
|
|
219
228
|
}
|
|
220
229
|
|