@royalschedule/maps 4.0.15 → 4.0.17

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.
Files changed (346) hide show
  1. package/dist/Additio/from/courses.js.map +1 -1
  2. package/dist/Additio/from/events.js.map +1 -1
  3. package/dist/Additio/from/groups.js.map +1 -1
  4. package/dist/Additio/from/index.js.map +1 -1
  5. package/dist/Additio/from/locations.js.map +1 -1
  6. package/dist/Additio/from/persons.js.map +1 -1
  7. package/dist/Additio/from/schedules.d.ts +7 -6
  8. package/dist/Additio/from/schedules.js +2 -4
  9. package/dist/Additio/from/schedules.js.map +1 -1
  10. package/dist/Additio/from/teachers.js.map +1 -1
  11. package/dist/Additio/to/index.d.ts +13 -11
  12. package/dist/Additio/to/schedules.js +2 -4
  13. package/dist/Additio/to/schedules.js.map +1 -1
  14. package/dist/Admentum/from/courses.js.map +1 -1
  15. package/dist/Admentum/from/events.js.map +1 -1
  16. package/dist/Admentum/from/groups.js.map +1 -1
  17. package/dist/Admentum/from/index.js.map +1 -1
  18. package/dist/Admentum/from/locations.js.map +1 -1
  19. package/dist/Admentum/from/persons.js.map +1 -1
  20. package/dist/Admentum/from/schedules.d.ts +7 -6
  21. package/dist/Admentum/from/schedules.js +2 -4
  22. package/dist/Admentum/from/schedules.js.map +1 -1
  23. package/dist/Admentum/from/teachers.js.map +1 -1
  24. package/dist/Admentum/to/index.d.ts +9 -8
  25. package/dist/Admentum/to/schedules.js +4 -7
  26. package/dist/Admentum/to/schedules.js.map +1 -1
  27. package/dist/Excel/index.d.ts +263 -26
  28. package/dist/Excel/v1/from/index.js +2 -1
  29. package/dist/Excel/v1/from/index.js.map +1 -1
  30. package/dist/Excel/v1/index.d.ts +218 -20
  31. package/dist/Excel/v2/from/index.js +99 -94
  32. package/dist/Excel/v2/from/index.js.map +1 -1
  33. package/dist/Excel/v2/index.d.ts +263 -26
  34. package/dist/IdunSoft/from/courses.js.map +1 -1
  35. package/dist/IdunSoft/from/events.js +1 -2
  36. package/dist/IdunSoft/from/events.js.map +1 -1
  37. package/dist/IdunSoft/from/groups.js.map +1 -1
  38. package/dist/IdunSoft/from/index.js.map +1 -1
  39. package/dist/IdunSoft/from/locations.js.map +1 -1
  40. package/dist/IdunSoft/from/schedules.d.ts +6 -5
  41. package/dist/IdunSoft/from/schedules.js.map +1 -1
  42. package/dist/IdunSoft/from/teachers.js.map +1 -1
  43. package/dist/IdunSoft/to/index.d.ts +2 -1
  44. package/dist/IdunSoft/to/schedules.js +5 -8
  45. package/dist/IdunSoft/to/schedules.js.map +1 -1
  46. package/dist/InfoMentor/to/index.d.ts +2 -1
  47. package/dist/InfoMentor/to/schedules.js +3 -4
  48. package/dist/InfoMentor/to/schedules.js.map +1 -1
  49. package/dist/PlanDigital/from/index.js.map +1 -1
  50. package/dist/PlanDigital/from/schedules.js +9 -11
  51. package/dist/PlanDigital/from/schedules.js.map +1 -1
  52. package/dist/PlanDigital/index.d.ts +73 -58
  53. package/dist/Quiculum/file/to/index.d.ts +10 -9
  54. package/dist/Quiculum/file/to/schedules.js +5 -9
  55. package/dist/Quiculum/file/to/schedules.js.map +1 -1
  56. package/dist/RS/from/division.d.ts +2 -1
  57. package/dist/RS/from/division.js +9 -6
  58. package/dist/RS/from/division.js.map +1 -1
  59. package/dist/RS/from/index.js.map +1 -1
  60. package/dist/RS/from/schedules.d.ts +2 -1
  61. package/dist/RS/from/schedules.js.map +1 -1
  62. package/dist/RS/make-connected.d.ts +17 -16
  63. package/dist/RS/make-connected.js +63 -96
  64. package/dist/RS/make-connected.js.map +1 -1
  65. package/dist/RS/to/index.js.map +1 -1
  66. package/dist/RS/to/initial-configuration.js +4 -6
  67. package/dist/RS/to/initial-configuration.js.map +1 -1
  68. package/dist/RS/to/input/collections.js.map +1 -1
  69. package/dist/RS/to/input/default.js +1 -2
  70. package/dist/RS/to/input/default.js.map +1 -1
  71. package/dist/RS/to/input/dependencies.js +1 -3
  72. package/dist/RS/to/input/dependencies.js.map +1 -1
  73. package/dist/RS/to/input/dynamic-locked-times.js +1 -2
  74. package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
  75. package/dist/RS/to/input/events.js +5 -3
  76. package/dist/RS/to/input/events.js.map +1 -1
  77. package/dist/RS/to/input/groups.js.map +1 -1
  78. package/dist/RS/to/input/individuals.js +2 -3
  79. package/dist/RS/to/input/individuals.js.map +1 -1
  80. package/dist/RS/to/input/input.js +1 -3
  81. package/dist/RS/to/input/input.js.map +1 -1
  82. package/dist/RS/to/input/intervals.js +2 -4
  83. package/dist/RS/to/input/intervals.js.map +1 -1
  84. package/dist/RS/to/input/periods.js +6 -8
  85. package/dist/RS/to/input/periods.js.map +1 -1
  86. package/dist/RS/to/input/settings.js.map +1 -1
  87. package/dist/RS/to/input/teachers.js.map +1 -1
  88. package/dist/RS/to/input/util/attach-locked-times.js.map +1 -1
  89. package/dist/RS/to/input/util/parse-days.js.map +1 -1
  90. package/dist/RS/to/input/util/parse-group-references.js.map +1 -1
  91. package/dist/RS/to/input/util/parse-intervals.js +2 -4
  92. package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
  93. package/dist/RS/to/input/util/parse-location-references.js +1 -2
  94. package/dist/RS/to/input/util/parse-location-references.js.map +1 -1
  95. package/dist/RS/to/input/util/parse-max-working-hours.js.map +1 -1
  96. package/dist/RS/to/input/util/parse-minimum-break-length.js.map +1 -1
  97. package/dist/RS/to/input/util/util.js +1 -2
  98. package/dist/RS/to/input/util/util.js.map +1 -1
  99. package/dist/RS/to/schedules.js +1 -1
  100. package/dist/RS/to/schedules.js.map +1 -1
  101. package/dist/RS/types/to.d.ts +15 -5
  102. package/dist/RS/types/to.js +1 -1
  103. package/dist/RS/types/to.js.map +1 -1
  104. package/dist/SS12000/from/activities.js +1 -2
  105. package/dist/SS12000/from/activities.js.map +1 -1
  106. package/dist/SS12000/from/calendar-events.js.map +1 -1
  107. package/dist/SS12000/from/duties.js.map +1 -1
  108. package/dist/SS12000/from/groups.js.map +1 -1
  109. package/dist/SS12000/from/index.js.map +1 -1
  110. package/dist/SS12000/from/persons.js.map +1 -1
  111. package/dist/SS12000/from/resources.js.map +1 -1
  112. package/dist/SS12000/from/rooms.js.map +1 -1
  113. package/dist/SS12000/from/syllabuses.js.map +1 -1
  114. package/dist/SS12000/index.d.ts +12567 -9
  115. package/dist/SS12000/to/activities.js.map +1 -1
  116. package/dist/SS12000/to/calendar-events.js.map +1 -1
  117. package/dist/SS12000/to/common.js.map +1 -1
  118. package/dist/SS12000/to/duties.js.map +1 -1
  119. package/dist/SS12000/to/groups.js.map +1 -1
  120. package/dist/SS12000/to/index.d.ts +17 -16
  121. package/dist/SS12000/to/persons.js.map +1 -1
  122. package/dist/SS12000/to/resources.js.map +1 -1
  123. package/dist/SS12000/to/rooms.js.map +1 -1
  124. package/dist/SS12000/to/syllabuses.js.map +1 -1
  125. package/dist/SchoolSoft/api/from/index.js.map +1 -1
  126. package/dist/SchoolSoft/api/from/schedules.js +8 -12
  127. package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
  128. package/dist/SchoolSoft/api/index.d.ts +444 -9
  129. package/dist/SchoolSoft/file/from/index.js.map +1 -1
  130. package/dist/SchoolSoft/file/from/schedules.js +83 -87
  131. package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
  132. package/dist/SchoolSoft/file/index.d.ts +2 -1
  133. package/dist/SchoolSoft/file/to/index.d.ts +5 -4
  134. package/dist/SchoolSoft/file/to/schedules.js +1 -2
  135. package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
  136. package/dist/SchoolSoft/index.d.ts +2 -1
  137. package/dist/Schoolity/txt/to/index.d.ts +2 -1
  138. package/dist/Schoolity/txt/to/schedules.js +5 -12
  139. package/dist/Schoolity/txt/to/schedules.js.map +1 -1
  140. package/dist/Skola24/mdb/from/course-and-events.js +3 -5
  141. package/dist/Skola24/mdb/from/course-and-events.js.map +1 -1
  142. package/dist/Skola24/mdb/from/groups.js.map +1 -1
  143. package/dist/Skola24/mdb/from/index.js.map +1 -1
  144. package/dist/Skola24/mdb/from/locations.js.map +1 -1
  145. package/dist/Skola24/mdb/from/schedule.d.ts +6 -5
  146. package/dist/Skola24/mdb/from/schedule.js.map +1 -1
  147. package/dist/Skola24/mdb/from/teachers.js.map +1 -1
  148. package/dist/Skola24/txt/from/calendar-exceptions.js +1 -2
  149. package/dist/Skola24/txt/from/calendar-exceptions.js.map +1 -1
  150. package/dist/Skola24/txt/from/division.js.map +1 -1
  151. package/dist/Skola24/txt/from/index.js.map +1 -1
  152. package/dist/Skola24/txt/from/period.js +31 -34
  153. package/dist/Skola24/txt/from/period.js.map +1 -1
  154. package/dist/Skola24/txt/from/schedules.d.ts +9 -8
  155. package/dist/Skola24/txt/from/schedules.js +10 -12
  156. package/dist/Skola24/txt/from/schedules.js.map +1 -1
  157. package/dist/Skola24/txt/from/util.js.map +1 -1
  158. package/dist/Skola24/txt/index.d.ts +2 -1
  159. package/dist/Skola24/txt/to/index.d.ts +2 -1
  160. package/dist/Skola24/txt/to/schedules.js +5 -12
  161. package/dist/Skola24/txt/to/schedules.js.map +1 -1
  162. package/dist/common/constants.js.map +1 -1
  163. package/dist/common/functions.js +46 -10
  164. package/dist/common/functions.js.map +1 -1
  165. package/dist/common/get-date.js.map +1 -1
  166. package/dist/common/make-chainable/index.js.map +1 -1
  167. package/dist/common/types.d.ts +3 -6
  168. package/dist/core/from/configurations.js.map +1 -1
  169. package/dist/core/from/courses.js.map +1 -1
  170. package/dist/core/from/events.js +1 -1
  171. package/dist/core/from/events.js.map +1 -1
  172. package/dist/core/from/exceptions.js.map +1 -1
  173. package/dist/core/from/groups.js.map +1 -1
  174. package/dist/core/from/index.js +9 -6
  175. package/dist/core/from/index.js.map +1 -1
  176. package/dist/core/from/locations.js.map +1 -1
  177. package/dist/core/from/locked-times.js.map +1 -1
  178. package/dist/core/from/overlap-groups.js.map +1 -1
  179. package/dist/core/from/periods.js.map +1 -1
  180. package/dist/core/from/persons.js.map +1 -1
  181. package/dist/core/from/root-intervals.js.map +1 -1
  182. package/dist/core/from/schedules.js.map +1 -1
  183. package/dist/core/from/syllabuses.js.map +1 -1
  184. package/dist/core/from/teachers.js.map +1 -1
  185. package/dist/core/index.d.ts +24 -1
  186. package/dist/core/index.js +4 -0
  187. package/dist/core/index.js.map +1 -1
  188. package/dist/core/interfaces/index.d.ts +23 -0
  189. package/dist/core/interfaces/index.js +6 -0
  190. package/dist/core/interfaces/other/companies.d.ts +132 -0
  191. package/dist/core/interfaces/other/companies.js +9 -0
  192. package/dist/core/interfaces/other/companies.js.map +1 -0
  193. package/dist/core/interfaces/other/etc.d.ts +19 -0
  194. package/dist/core/interfaces/other/index.d.ts +6 -0
  195. package/dist/core/interfaces/other/integrations.d.ts +17 -0
  196. package/dist/core/interfaces/other/operations.d.ts +36 -0
  197. package/dist/core/interfaces/other/policies.d.ts +31 -0
  198. package/dist/core/interfaces/other/sync-logs.d.ts +21 -0
  199. package/dist/core/interfaces/other/users.d.ts +35 -0
  200. package/dist/core/interfaces/vertices/companies.d.ts +8 -0
  201. package/dist/core/interfaces/vertices/configurations.d.ts +58 -0
  202. package/dist/core/interfaces/vertices/courses.d.ts +68 -0
  203. package/dist/core/{types → interfaces/vertices}/division-settings.d.ts +31 -29
  204. package/dist/core/interfaces/vertices/divisions.d.ts +31 -0
  205. package/dist/core/interfaces/vertices/events.d.ts +100 -0
  206. package/dist/core/interfaces/vertices/exceptions.d.ts +74 -0
  207. package/dist/core/interfaces/vertices/generations.d.ts +23 -0
  208. package/dist/core/interfaces/vertices/groups.d.ts +53 -0
  209. package/dist/core/interfaces/vertices/index.d.ts +209 -0
  210. package/dist/core/interfaces/vertices/index.js +3 -0
  211. package/dist/core/interfaces/vertices/locations.d.ts +22 -0
  212. package/dist/core/interfaces/vertices/locked-times.d.ts +37 -0
  213. package/dist/core/interfaces/vertices/overlap-groups.d.ts +17 -0
  214. package/dist/core/interfaces/vertices/periods.d.ts +15 -0
  215. package/dist/core/interfaces/vertices/persons.d.ts +32 -0
  216. package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +11 -0
  217. package/dist/core/interfaces/vertices/properties/coalesced.d.ts +8 -0
  218. package/dist/core/interfaces/vertices/properties/days.d.ts +9 -0
  219. package/dist/core/interfaces/vertices/properties/index.d.ts +15 -0
  220. package/dist/core/interfaces/vertices/properties/intervals.d.ts +10 -0
  221. package/dist/core/{types/common → interfaces/vertices/properties}/maximum-schedule-span.d.ts +1 -1
  222. package/dist/core/interfaces/vertices/properties/min-break-length.d.ts +5 -0
  223. package/dist/core/{types/common/planned-schedule-duration.d.ts → interfaces/vertices/properties/planned-scheduled-duration.d.ts} +2 -2
  224. package/dist/core/interfaces/vertices/properties/species.d.ts +9 -0
  225. package/dist/core/interfaces/vertices/properties/tags.d.ts +9 -0
  226. package/dist/core/interfaces/vertices/properties/week.d.ts +22 -0
  227. package/dist/core/interfaces/vertices/properties/week.js +6 -0
  228. package/dist/core/interfaces/vertices/properties/week.js.map +1 -0
  229. package/dist/core/interfaces/vertices/root-intervals.d.ts +14 -0
  230. package/dist/core/interfaces/vertices/syllabuses.d.ts +18 -0
  231. package/dist/core/interfaces/vertices/teachers.d.ts +43 -0
  232. package/dist/core/interfaces/vertices/users.d.ts +8 -0
  233. package/dist/core/interfaces/vertices/util/common.d.ts +28 -0
  234. package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +31 -0
  235. package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +51 -0
  236. package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +64 -0
  237. package/dist/core/interfaces/vertices/util/edges.d.ts +105 -0
  238. package/dist/core/interfaces/vertices/util/index.d.ts +5 -0
  239. package/dist/core/interfaces/vertices/util/keys-of.d.ts +27 -0
  240. package/dist/core/interfaces/vertices/util/serialized-vertex-export.d.ts +12 -0
  241. package/dist/core/interfaces/vertices/util/util.d.ts +76 -0
  242. package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +44 -0
  243. package/dist/core/interfaces/vertices/util/vertex-query/util.d.ts +13 -0
  244. package/dist/core/interfaces/vertices/util/vertex.d.ts +70 -0
  245. package/dist/core/interfaces/vertices/vertex-query.d.ts +102 -0
  246. package/dist/core/interfaces/vertices/vertex-query.js +94 -0
  247. package/dist/core/interfaces/vertices/vertex-query.js.map +1 -0
  248. package/dist/core/to/configurations.js +2 -3
  249. package/dist/core/to/configurations.js.map +1 -1
  250. package/dist/core/to/courses.js +2 -3
  251. package/dist/core/to/courses.js.map +1 -1
  252. package/dist/core/to/division.js.map +1 -1
  253. package/dist/core/to/events.js +2 -3
  254. package/dist/core/to/events.js.map +1 -1
  255. package/dist/core/to/exceptions.js +4 -4
  256. package/dist/core/to/exceptions.js.map +1 -1
  257. package/dist/core/to/groups.js +2 -3
  258. package/dist/core/to/groups.js.map +1 -1
  259. package/dist/core/to/locations.js +2 -3
  260. package/dist/core/to/locations.js.map +1 -1
  261. package/dist/core/to/locked-times.js +2 -3
  262. package/dist/core/to/locked-times.js.map +1 -1
  263. package/dist/core/to/overlap-groups.js +2 -3
  264. package/dist/core/to/overlap-groups.js.map +1 -1
  265. package/dist/core/to/periods.js +2 -3
  266. package/dist/core/to/periods.js.map +1 -1
  267. package/dist/core/to/persons.js +3 -9
  268. package/dist/core/to/persons.js.map +1 -1
  269. package/dist/core/to/root-intervals.js +2 -3
  270. package/dist/core/to/root-intervals.js.map +1 -1
  271. package/dist/core/to/schedules.d.ts +17 -18
  272. package/dist/core/to/schedules.js.map +1 -1
  273. package/dist/core/to/settings.js +2 -3
  274. package/dist/core/to/settings.js.map +1 -1
  275. package/dist/core/to/syllabuses.js +2 -3
  276. package/dist/core/to/syllabuses.js.map +1 -1
  277. package/dist/core/to/teachers.js +4 -4
  278. package/dist/core/to/teachers.js.map +1 -1
  279. package/dist/core/to/util.d.ts +4 -8
  280. package/dist/core/to/util.js +7 -5
  281. package/dist/core/to/util.js.map +1 -1
  282. package/dist/core/types/common/index.d.ts +4 -41
  283. package/dist/core/types/index.d.ts +108 -112
  284. package/dist/core/util.js +4 -5
  285. package/dist/core/util.js.map +1 -1
  286. package/dist/identify/constants/index.d.ts +1 -1
  287. package/dist/identify/constants/index.js.map +1 -1
  288. package/dist/identify/index.js +1 -2
  289. package/dist/identify/index.js.map +1 -1
  290. package/dist/index.d.ts +23 -1
  291. package/dist/index.js +4 -1
  292. package/dist/sdui/from/classes.js.map +1 -1
  293. package/dist/sdui/from/courses.js.map +1 -1
  294. package/dist/sdui/from/holidays.js.map +1 -1
  295. package/dist/sdui/from/index.js.map +1 -1
  296. package/dist/sdui/from/lessons.js +4 -0
  297. package/dist/sdui/from/lessons.js.map +1 -1
  298. package/dist/sdui/from/rooms.js.map +1 -1
  299. package/dist/sdui/from/schedules.d.ts +10 -8
  300. package/dist/sdui/from/schedules.js.map +1 -1
  301. package/dist/sdui/from/school-years.js +0 -1
  302. package/dist/sdui/from/school-years.js.map +1 -1
  303. package/dist/sdui/from/substitution-plans.js.map +1 -1
  304. package/dist/sdui/from/teachers.js.map +1 -1
  305. package/dist/sdui/index.d.ts +1 -1
  306. package/dist/sdui/to/classes.js.map +1 -1
  307. package/dist/sdui/to/courses.js.map +1 -1
  308. package/dist/sdui/to/holidays.js.map +1 -1
  309. package/dist/sdui/to/hours.js.map +1 -1
  310. package/dist/sdui/to/index.d.ts +12 -10
  311. package/dist/sdui/to/lessons.js.map +1 -1
  312. package/dist/sdui/to/rooms.js.map +1 -1
  313. package/dist/sdui/to/schedules.js.map +1 -1
  314. package/dist/sdui/to/school-years.js.map +1 -1
  315. package/dist/sdui/to/substitution-plans.js +3 -6
  316. package/dist/sdui/to/substitution-plans.js.map +1 -1
  317. package/dist/sdui/to/teachers.js.map +1 -1
  318. package/dist/vKlass/from/index.js.map +1 -1
  319. package/dist/vKlass/from/schedule.d.ts +4 -3
  320. package/dist/vKlass/from/schedule.js +2 -2
  321. package/dist/vKlass/from/schedule.js.map +1 -1
  322. package/dist/vKlass/to/schedules.d.ts +4 -4
  323. package/dist/vKlass/to/schedules.js +6 -17
  324. package/dist/vKlass/to/schedules.js.map +1 -1
  325. package/package.json +24 -22
  326. package/dist/core/types/areas.d.ts +0 -10
  327. package/dist/core/types/common/break-lengths.d.ts +0 -5
  328. package/dist/core/types/common/days.d.ts +0 -8
  329. package/dist/core/types/common/intervals.d.ts +0 -20
  330. package/dist/core/types/common/tag.d.ts +0 -9
  331. package/dist/core/types/configurations.d.ts +0 -31
  332. package/dist/core/types/courses.d.ts +0 -60
  333. package/dist/core/types/divisions.d.ts +0 -24
  334. package/dist/core/types/events.d.ts +0 -56
  335. package/dist/core/types/exceptions.d.ts +0 -35
  336. package/dist/core/types/groups.d.ts +0 -44
  337. package/dist/core/types/locations.d.ts +0 -27
  338. package/dist/core/types/locked-times.d.ts +0 -33
  339. package/dist/core/types/overlap-groups.d.ts +0 -14
  340. package/dist/core/types/periods.d.ts +0 -14
  341. package/dist/core/types/persons.d.ts +0 -38
  342. package/dist/core/types/root-intervals.d.ts +0 -13
  343. package/dist/core/types/schedules.d.ts +0 -44
  344. package/dist/core/types/syllabus.d.ts +0 -18
  345. package/dist/core/types/teachers.d.ts +0 -44
  346. package/dist/core/vertex-mapping.d.ts +0 -69
@@ -1 +1 @@
1
- {"version":3,"file":"courses.js","names":["courses: OutTypes.course[]"],"sources":["../../../src/Additio/from/courses.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { School } from '../types/schools';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n scheduledGroups: ScheduleGroup[] | undefined,\n school: School,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.course[] {\n\n const courses: OutTypes.course[] = [];\n\n scheduledGroups?.forEach(scheduledGroup => {\n\n ////\n //// check number of subjects/courses\n ////\n const subjects = school.school_type == 'GR' ? scheduledGroup.subjects : scheduledGroup.courses;\n if (subjects.length != 1) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" contained ${subjects.length} number of ${school.school_type == 'GR' ? 'subjects' : 'courses'} and was therefore omitted: a schedule group shall contain only a single ${school.school_type == 'GR' ? 'subject' : 'course'}.`;\n importWarnings.push(warn);\n return;\n }\n\n\n ////\n //// check number of teachers\n ////\n if (scheduledGroup.teachers?.length == 0) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" did not contain any teachers.`;\n importWarnings.push(warn);\n }\n\n\n courses.push({\n ids: scheduledGroup.id.toString(),\n displayName: scheduledGroup.name,\n subject: subjects.map(x => x.name).join(', '),\n groups: scheduledGroup.users_primary_groups.map(x => ({ to: x.toString() })),\n teachers: scheduledGroup.teachers?.map(x => ({ to: x.id.toString() }))\n } satisfies OutTypes.course);\n\n });\n\n return courses;\n}\n"],"mappings":";AAKA,yBACE,iBACA,QACA,cACA,gBACmB;CAEnB,MAAMA,UAA6B;AAEnC,kBAAiB,SAAQ,mBAAkB;EAKzC,MAAM,WAAW,OAAO,eAAe,OAAO,eAAe,WAAW,eAAe;AACvF,MAAI,SAAS,UAAU,GAAG;GACxB,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG,cAAc,SAAS,OAAO,aAAa,OAAO,eAAe,OAAO,aAAa,UAAU,2EAA2E,OAAO,eAAe,OAAO,YAAY,SAAS;AACnT,kBAAe,KAAK;AACpB;;AAOF,MAAI,eAAe,UAAU,UAAU,GAAG;GACxC,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG;AACvF,kBAAe,KAAK;;AAItB,UAAQ,KAAK;GACX,KAAa,eAAe,GAAG;GAC/B,aAAa,eAAe;GAC5B,SAAa,SAAS,KAAI,MAAK,EAAE,MAAM,KAAK;GAC5C,QAAa,eAAe,qBAAqB,KAAI,OAAM,EAAE,IAAI,EAAE;GACnE,UAAa,eAAe,UAAU,KAAI,OAAM,EAAE,IAAI,EAAE,GAAG;;;AAK/D,QAAO"}
1
+ {"version":3,"file":"courses.js","names":["courses: OutTypes.course[]"],"sources":["../../../src/Additio/from/courses.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { School } from '../types/schools';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n scheduledGroups: ScheduleGroup[] | undefined,\n school: School,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.course[] {\n\n const courses: OutTypes.course[] = [];\n\n scheduledGroups?.forEach(scheduledGroup => {\n\n ////\n //// check number of subjects/courses\n ////\n const subjects = school.school_type == 'GR' ? scheduledGroup.subjects : scheduledGroup.courses;\n if (subjects.length != 1) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" contained ${subjects.length} number of ${school.school_type == 'GR' ? 'subjects' : 'courses'} and was therefore omitted: a schedule group shall contain only a single ${school.school_type == 'GR' ? 'subject' : 'course'}.`;\n importWarnings.push(warn);\n return;\n }\n\n\n ////\n //// check number of teachers\n ////\n if (scheduledGroup.teachers?.length == 0) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" did not contain any teachers.`;\n importWarnings.push(warn);\n }\n\n\n courses.push({\n ids: scheduledGroup.id.toString(),\n displayName: scheduledGroup.name,\n subject: subjects.map(x => x.name).join(', '),\n groups: scheduledGroup.users_primary_groups.map(x => ({ to: x.toString() })),\n teachers: scheduledGroup.teachers?.map(x => ({ to: x.id.toString() }))\n } satisfies OutTypes.course);\n\n });\n\n return courses;\n}\n"],"mappings":";AAKA,yBACE,iBACA,QACA,cACA,gBACmB;CAEnB,MAAMA,UAA6B,EAAE;AAErC,kBAAiB,SAAQ,mBAAkB;EAKzC,MAAM,WAAW,OAAO,eAAe,OAAO,eAAe,WAAW,eAAe;AACvF,MAAI,SAAS,UAAU,GAAG;GACxB,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG,cAAc,SAAS,OAAO,aAAa,OAAO,eAAe,OAAO,aAAa,UAAU,2EAA2E,OAAO,eAAe,OAAO,YAAY,SAAS;AACnT,kBAAe,KAAK,KAAK;AACzB;;AAOF,MAAI,eAAe,UAAU,UAAU,GAAG;GACxC,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG;AACvF,kBAAe,KAAK,KAAK;;AAI3B,UAAQ,KAAK;GACX,KAAa,eAAe,GAAG,UAAU;GACzC,aAAa,eAAe;GAC5B,SAAa,SAAS,KAAI,MAAK,EAAE,KAAK,CAAC,KAAK,KAAK;GACjD,QAAa,eAAe,qBAAqB,KAAI,OAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;GACjF,UAAa,eAAe,UAAU,KAAI,OAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,EAAE;GAC1E,CAA2B;GAE5B;AAEF,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","names":["events: OutTypes.event[]","eventTeachers: string[] | undefined"],"sources":["../../../src/Additio/from/events.ts"],"sourcesContent":["\nimport moment from 'moment';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nconst firstDay = moment.utc('1970-01-05');\n\nfunction fromTimeString (\n day: number,\n timeString: string\n): moment.Moment {\n const [hours, minutes, seconds] = timeString.split(':').map((time: string) => parseInt(time));\n return firstDay.clone().add(day, 'day')\n .set('hour', hours)\n .set('minute', minutes);\n}\n\nexport default function (\n lessons: Lesson[] | undefined,\n courses: OutTypes.course[] | undefined,\n teachers: OutTypes.teacher[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.event[] {\n\n // create schedule_group (group) to course map for quick lookup\n const group2course = new Map<string, OutTypes.course>();\n courses?.forEach(c => group2course.set(c.ids!, c));\n\n // create teacher set for quick lookup\n const teacherSet = new Set<string>();\n teachers?.forEach(t => teacherSet.add(t.ids!));\n\n const events: OutTypes.event[] = [];\n lessons?.forEach(l => {\n\n // check number of groups (schedule_groups = course) to ensure that only one exists\n if (l.info.groups?.length != 1) {\n const warn = `The lesson with id \"${l.id} contained ${l.info.groups?.length} number of groups (schedule_groups = courses) and was therefore omitted: a lesson shall contain only a single group.`;\n importWarnings.push(warn);\n return;\n }\n const course_id = l.info.groups[0].id.toString();\n\n // ensure the course exists\n const course = group2course.get(course_id);\n if (!course) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown/faulty schedule_group (course) \"${course_id}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n\n const start = fromTimeString(l.weekday, l.info.start);\n const end = fromTimeString(l.weekday, l.info.end);\n const preferredDuration = l.info.duration;\n const duration = l.info.duration;\n\n // store only teachers if they mismatch teachers of parent course\n let eventTeachers: string[] | undefined;\n if (!course.teachers || !course.teachers?.every(x => l.info.teachers?.some(y => y.id.toString() == x.to))) {\n eventTeachers = l.info.teachers?.map(x => x.id.toString());\n\n // ensure that the teachers exist\n for (const teacher of eventTeachers ?? []) {\n if (!teacherSet.has(teacher)) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown teacher \"${teacher}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n }\n }\n\n // location\n const location = l.info.room?.id.toString();\n\n events.push({\n ids: l.id.toString(),\n start,\n end,\n preferredDuration,\n duration,\n course: course_id,\n ...location && { inLocations: [ location ], locations: [{ locations: [ location ] }] },\n ...(eventTeachers && { teachers: eventTeachers.map((to) => ({ to })) })\n } satisfies OutTypes.event);\n });\n\n return events;\n}\n"],"mappings":";;;AAKA,MAAM,WAAW,OAAO,IAAI;AAE5B,SAAS,eACP,KACA,YACe;CACf,MAAM,CAAC,OAAO,SAAS,WAAW,WAAW,MAAM,KAAK,KAAK,SAAiB,SAAS;AACvF,QAAO,SAAS,QAAQ,IAAI,KAAK,OAC9B,IAAI,QAAQ,OACZ,IAAI,UAAU;;AAGnB,wBACE,SACA,SACA,UACA,cACA,gBACkB;CAGlB,MAAM,+BAAe,IAAI;AACzB,UAAS,SAAQ,MAAK,aAAa,IAAI,EAAE,KAAM;CAG/C,MAAM,6BAAa,IAAI;AACvB,WAAU,SAAQ,MAAK,WAAW,IAAI,EAAE;CAExC,MAAMA,SAA2B;AACjC,UAAS,SAAQ,MAAK;AAGpB,MAAI,EAAE,KAAK,QAAQ,UAAU,GAAG;GAC9B,MAAM,OAAO,uBAAuB,EAAE,GAAG,aAAa,EAAE,KAAK,QAAQ,OAAO;AAC5E,kBAAe,KAAK;AACpB;;EAEF,MAAM,YAAY,EAAE,KAAK,OAAO,GAAG,GAAG;EAGtC,MAAM,SAAS,aAAa,IAAI;AAChC,MAAI,CAAC,QAAQ;GACX,MAAM,OAAO,uBAAuB,EAAE,GAAG,2DAA2D,UAAU;AAC9G,kBAAe,KAAK;AACpB;;EAGF,MAAM,QAAoB,eAAe,EAAE,SAAS,EAAE,KAAK;EAC3D,MAAM,MAAoB,eAAe,EAAE,SAAS,EAAE,KAAK;EAC3D,MAAM,oBAAoB,EAAE,KAAK;EACjC,MAAM,WAAoB,EAAE,KAAK;EAGjC,IAAIC;AACJ,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,UAAU,OAAM,MAAK,EAAE,KAAK,UAAU,MAAK,MAAK,EAAE,GAAG,cAAc,EAAE,MAAM;AACzG,mBAAgB,EAAE,KAAK,UAAU,KAAI,MAAK,EAAE,GAAG;AAG/C,QAAK,MAAM,WAAW,iBAAiB,GACrC,KAAI,CAAC,WAAW,IAAI,UAAU;IAC5B,MAAM,OAAO,uBAAuB,EAAE,GAAG,oCAAoC,QAAQ;AACrF,mBAAe,KAAK;AACpB;;;EAMN,MAAM,WAAW,EAAE,KAAK,MAAM,GAAG;AAEjC,SAAO,KAAK;GACV,KAAQ,EAAE,GAAG;GACb;GACA;GACA;GACA;GACA,QAAQ;GACR,GAAG,YAAY;IAAE,aAAa,CAAE;IAAY,WAAW,CAAC,EAAE,WAAW,CAAE;;GACvE,GAAI,iBAAiB,EAAE,UAAU,cAAc,KAAK,QAAQ,EAAE;;;AAIlE,QAAO"}
1
+ {"version":3,"file":"events.js","names":["events: OutTypes.event[]","eventTeachers: string[] | undefined"],"sources":["../../../src/Additio/from/events.ts"],"sourcesContent":["\nimport moment from 'moment';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nconst firstDay = moment.utc('1970-01-05');\n\nfunction fromTimeString (\n day: number,\n timeString: string\n): moment.Moment {\n const [hours, minutes, seconds] = timeString.split(':').map((time: string) => parseInt(time));\n return firstDay.clone().add(day, 'day')\n .set('hour', hours)\n .set('minute', minutes);\n}\n\nexport default function (\n lessons: Lesson[] | undefined,\n courses: OutTypes.course[] | undefined,\n teachers: OutTypes.teacher[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.event[] {\n\n // create schedule_group (group) to course map for quick lookup\n const group2course = new Map<string, OutTypes.course>();\n courses?.forEach(c => group2course.set(c.ids!, c));\n\n // create teacher set for quick lookup\n const teacherSet = new Set<string>();\n teachers?.forEach(t => teacherSet.add(t.ids!));\n\n const events: OutTypes.event[] = [];\n lessons?.forEach(l => {\n\n // check number of groups (schedule_groups = course) to ensure that only one exists\n if (l.info.groups?.length != 1) {\n const warn = `The lesson with id \"${l.id} contained ${l.info.groups?.length} number of groups (schedule_groups = courses) and was therefore omitted: a lesson shall contain only a single group.`;\n importWarnings.push(warn);\n return;\n }\n const course_id = l.info.groups[0].id.toString();\n\n // ensure the course exists\n const course = group2course.get(course_id);\n if (!course) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown/faulty schedule_group (course) \"${course_id}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n\n const start = fromTimeString(l.weekday, l.info.start);\n const end = fromTimeString(l.weekday, l.info.end);\n const preferredDuration = l.info.duration;\n const duration = l.info.duration;\n\n // store only teachers if they mismatch teachers of parent course\n let eventTeachers: string[] | undefined;\n if (!course.teachers || !course.teachers?.every(x => l.info.teachers?.some(y => y.id.toString() == x.to))) {\n eventTeachers = l.info.teachers?.map(x => x.id.toString());\n\n // ensure that the teachers exist\n for (const teacher of eventTeachers ?? []) {\n if (!teacherSet.has(teacher)) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown teacher \"${teacher}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n }\n }\n\n // location\n const location = l.info.room?.id.toString();\n\n events.push({\n ids: l.id.toString(),\n start,\n end,\n preferredDuration,\n duration,\n course: course_id,\n ...location && { inLocations: [ location ], locations: [{ locations: [ location ] }] },\n ...(eventTeachers && { teachers: eventTeachers.map((to) => ({ to })) })\n } satisfies OutTypes.event);\n });\n\n return events;\n}\n"],"mappings":";;;AAKA,MAAM,WAAW,OAAO,IAAI,aAAa;AAEzC,SAAS,eACP,KACA,YACe;CACf,MAAM,CAAC,OAAO,SAAS,WAAW,WAAW,MAAM,IAAI,CAAC,KAAK,SAAiB,SAAS,KAAK,CAAC;AAC7F,QAAO,SAAS,OAAO,CAAC,IAAI,KAAK,MAAM,CACpC,IAAI,QAAQ,MAAM,CAClB,IAAI,UAAU,QAAQ;;AAG3B,wBACE,SACA,SACA,UACA,cACA,gBACkB;CAGlB,MAAM,+BAAe,IAAI,KAA8B;AACvD,UAAS,SAAQ,MAAK,aAAa,IAAI,EAAE,KAAM,EAAE,CAAC;CAGlD,MAAM,6BAAa,IAAI,KAAa;AACpC,WAAU,SAAQ,MAAK,WAAW,IAAI,EAAE,IAAK,CAAC;CAE9C,MAAMA,SAA2B,EAAE;AACnC,UAAS,SAAQ,MAAK;AAGpB,MAAI,EAAE,KAAK,QAAQ,UAAU,GAAG;GAC9B,MAAM,OAAO,uBAAuB,EAAE,GAAG,aAAa,EAAE,KAAK,QAAQ,OAAO;AAC5E,kBAAe,KAAK,KAAK;AACzB;;EAEF,MAAM,YAAY,EAAE,KAAK,OAAO,GAAG,GAAG,UAAU;EAGhD,MAAM,SAAS,aAAa,IAAI,UAAU;AAC1C,MAAI,CAAC,QAAQ;GACX,MAAM,OAAO,uBAAuB,EAAE,GAAG,2DAA2D,UAAU;AAC9G,kBAAe,KAAK,KAAK;AACzB;;EAGF,MAAM,QAAoB,eAAe,EAAE,SAAS,EAAE,KAAK,MAAM;EACjE,MAAM,MAAoB,eAAe,EAAE,SAAS,EAAE,KAAK,IAAI;EAC/D,MAAM,oBAAoB,EAAE,KAAK;EACjC,MAAM,WAAoB,EAAE,KAAK;EAGjC,IAAIC;AACJ,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,UAAU,OAAM,MAAK,EAAE,KAAK,UAAU,MAAK,MAAK,EAAE,GAAG,UAAU,IAAI,EAAE,GAAG,CAAC,EAAE;AACzG,mBAAgB,EAAE,KAAK,UAAU,KAAI,MAAK,EAAE,GAAG,UAAU,CAAC;AAG1D,QAAK,MAAM,WAAW,iBAAiB,EAAE,CACvC,KAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;IAC5B,MAAM,OAAO,uBAAuB,EAAE,GAAG,oCAAoC,QAAQ;AACrF,mBAAe,KAAK,KAAK;AACzB;;;EAMN,MAAM,WAAW,EAAE,KAAK,MAAM,GAAG,UAAU;AAE3C,SAAO,KAAK;GACV,KAAQ,EAAE,GAAG,UAAU;GACvB;GACA;GACA;GACA;GACA,QAAQ;GACR,GAAG,YAAY;IAAE,aAAa,CAAE,SAAU;IAAE,WAAW,CAAC,EAAE,WAAW,CAAE,SAAU,EAAE,CAAC;IAAE;GACtF,GAAI,iBAAiB,EAAE,UAAU,cAAc,KAAK,QAAQ,EAAE,IAAI,EAAE,EAAE;GACvE,CAA0B;GAC3B;AAEF,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","names":[],"sources":["../../../src/Additio/from/groups.ts"],"sourcesContent":["import type { PrimaryGroup } from '../types/primary-groups';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n primaryGroups: PrimaryGroup[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.group[] {\n return primaryGroups?.map(x => { return {\n ids: x.id.toString(),\n displayName: x.name,\n species: 'class',\n };}) ?? [];\n}\n"],"mappings":";AAGA,wBACE,eACA,cACA,gBACkB;AAClB,QAAO,eAAe,KAAI,MAAK;AAAE,SAAO;GACtC,KAAa,EAAE,GAAG;GAClB,aAAa,EAAE;GACf,SAAa;;OACP"}
1
+ {"version":3,"file":"groups.js","names":[],"sources":["../../../src/Additio/from/groups.ts"],"sourcesContent":["import type { PrimaryGroup } from '../types/primary-groups';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n primaryGroups: PrimaryGroup[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.group[] {\n return primaryGroups?.map(x => { return {\n ids: x.id.toString(),\n displayName: x.name,\n species: 'class',\n };}) ?? [];\n}\n"],"mappings":";AAGA,wBACE,eACA,cACA,gBACkB;AAClB,QAAO,eAAe,KAAI,MAAK;AAAE,SAAO;GACtC,KAAa,EAAE,GAAG,UAAU;GAC5B,aAAa,EAAE;GACf,SAAa;GACd;GAAG,IAAI,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/Additio/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;\n"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA"}
1
+ {"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/Additio/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;\n"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA,mBACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"locations.js","names":[],"sources":["../../../src/Additio/from/locations.ts"],"sourcesContent":["import type { Room } from '../types/rooms';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n rooms: Room[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.location[] {\n return rooms?.map(room => { return {\n ids: room.id.toString(),\n displayName: room.name\n };}) ?? [];\n}\n"],"mappings":";AAIA,2BACE,OACA,cACA,gBACqB;AACrB,QAAO,OAAO,KAAI,SAAQ;AAAE,SAAO;GACjC,KAAa,KAAK,GAAG;GACrB,aAAa,KAAK;;OACZ"}
1
+ {"version":3,"file":"locations.js","names":[],"sources":["../../../src/Additio/from/locations.ts"],"sourcesContent":["import type { Room } from '../types/rooms';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n rooms: Room[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.location[] {\n return rooms?.map(room => { return {\n ids: room.id.toString(),\n displayName: room.name\n };}) ?? [];\n}\n"],"mappings":";AAIA,2BACE,OACA,cACA,gBACqB;AACrB,QAAO,OAAO,KAAI,SAAQ;AAAE,SAAO;GACjC,KAAa,KAAK,GAAG,UAAU;GAC/B,aAAa,KAAK;GACnB;GAAG,IAAI,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"persons.js","names":["personSet: Map<number, OutTypes.person>"],"sources":["../../../src/Additio/from/persons.ts"],"sourcesContent":["import type { User } from '../types/users';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n users: User[] | undefined,\n groups: OutTypes.group[],\n importErrors: string[],\n importWarnings: string[]\n) {\n // add all persons to a set to remove duplicates\n const personSet: Map<number, OutTypes.person> = new Map();\n\n /*\n The reference to the group is different that the one in the primary_groups array.\n To solve this we create a map of all groups and use the id of the group as key. If\n the id is not found in the map, try to find a group with the same name.\n */\n const groupSet = new Map(groups.map(x => [x.displayName!, x.ids!]));\n\n users?.filter(x => x.role === 1).forEach(user => {\n const person = {\n ids: user.id.toString(),\n firstName: user.first_name,\n lastName: user.last_name,\n group: user.current_primary_group?.id?.toString(),\n ...user.email && {\n emails: [\n {\n value: user.email,\n type: 'organization'\n }\n ]\n }\n } satisfies OutTypes.person;\n\n if (user.current_primary_group) {\n const { id, name } = user.current_primary_group;\n if (groupSet.get(name.toString()) != person.group) {\n importWarnings.push(`The group of the user ${person.firstName} ${person.lastName} is not the same as the group in the primary_groups array.`);\n person.group = groupSet.get(name.toString()) ?? person.group;\n }\n }\n\n\n personSet.set(user.id, person);\n });\n\n return Array.from(personSet.values());\n}\n"],"mappings":";AAGA,yBACE,OACA,QACA,cACA,gBACA;CAEA,MAAMA,4BAA0C,IAAI;CAOpD,MAAM,WAAW,IAAI,IAAI,OAAO,KAAI,MAAK,CAAC,EAAE,aAAc,EAAE;AAE5D,QAAO,QAAO,MAAK,EAAE,SAAS,GAAG,SAAQ,SAAQ;EAC/C,MAAM,SAAS;GACb,KAAW,KAAK,GAAG;GACnB,WAAW,KAAK;GAChB,UAAW,KAAK;GAChB,OAAW,KAAK,uBAAuB,IAAI;GAC3C,GAAG,KAAK,SAAS,EACf,QAAQ,CACN;IACE,OAAO,KAAK;IACZ,MAAO;;;AAMf,MAAI,KAAK,uBAAuB;GAC9B,MAAM,EAAE,IAAI,SAAS,KAAK;AAC1B,OAAI,SAAS,IAAI,KAAK,eAAe,OAAO,OAAO;AACjD,mBAAe,KAAK,yBAAyB,OAAO,UAAU,GAAG,OAAO,SAAS;AACjF,WAAO,QAAQ,SAAS,IAAI,KAAK,eAAe,OAAO;;;AAK3D,YAAU,IAAI,KAAK,IAAI;;AAGzB,QAAO,MAAM,KAAK,UAAU"}
1
+ {"version":3,"file":"persons.js","names":["personSet: Map<number, OutTypes.person>"],"sources":["../../../src/Additio/from/persons.ts"],"sourcesContent":["import type { User } from '../types/users';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n users: User[] | undefined,\n groups: OutTypes.group[],\n importErrors: string[],\n importWarnings: string[]\n) {\n // add all persons to a set to remove duplicates\n const personSet: Map<number, OutTypes.person> = new Map();\n\n /*\n The reference to the group is different that the one in the primary_groups array.\n To solve this we create a map of all groups and use the id of the group as key. If\n the id is not found in the map, try to find a group with the same name.\n */\n const groupSet = new Map(groups.map(x => [x.displayName!, x.ids!]));\n\n users?.filter(x => x.role === 1).forEach(user => {\n const person = {\n ids: user.id.toString(),\n firstName: user.first_name,\n lastName: user.last_name,\n group: user.current_primary_group?.id?.toString(),\n ...user.email && {\n emails: [\n {\n value: user.email,\n type: 'organization'\n }\n ]\n }\n } satisfies OutTypes.person;\n\n if (user.current_primary_group) {\n const { id, name } = user.current_primary_group;\n if (groupSet.get(name.toString()) != person.group) {\n importWarnings.push(`The group of the user ${person.firstName} ${person.lastName} is not the same as the group in the primary_groups array.`);\n person.group = groupSet.get(name.toString()) ?? person.group;\n }\n }\n\n\n personSet.set(user.id, person);\n });\n\n return Array.from(personSet.values());\n}\n"],"mappings":";AAGA,yBACE,OACA,QACA,cACA,gBACA;CAEA,MAAMA,4BAA0C,IAAI,KAAK;CAOzD,MAAM,WAAW,IAAI,IAAI,OAAO,KAAI,MAAK,CAAC,EAAE,aAAc,EAAE,IAAK,CAAC,CAAC;AAEnE,QAAO,QAAO,MAAK,EAAE,SAAS,EAAE,CAAC,SAAQ,SAAQ;EAC/C,MAAM,SAAS;GACb,KAAW,KAAK,GAAG,UAAU;GAC7B,WAAW,KAAK;GAChB,UAAW,KAAK;GAChB,OAAW,KAAK,uBAAuB,IAAI,UAAU;GACrD,GAAG,KAAK,SAAS,EACf,QAAQ,CACN;IACE,OAAO,KAAK;IACZ,MAAO;IACR,CACF,EACF;GACF;AAED,MAAI,KAAK,uBAAuB;GAC9B,MAAM,EAAE,IAAI,SAAS,KAAK;AAC1B,OAAI,SAAS,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO,OAAO;AACjD,mBAAe,KAAK,yBAAyB,OAAO,UAAU,GAAG,OAAO,SAAS,4DAA4D;AAC7I,WAAO,QAAQ,SAAS,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO;;;AAK3D,YAAU,IAAI,KAAK,IAAI,OAAO;GAC9B;AAEF,QAAO,MAAM,KAAK,UAAU,QAAQ,CAAC"}
@@ -1,15 +1,16 @@
1
1
  import { InternalIdKey } from "../../core/types/common/index.js";
2
2
  import { Types } from "../../core/types/index.js";
3
+ import "../../core/index.js";
3
4
  import { Schedule } from "../types/schedules.js";
4
5
 
5
6
  //#region src/Additio/from/schedules.d.ts
6
7
  declare namespace OutTypes {
7
- type location = Omit<Types.serialized.location, InternalIdKey>;
8
- type teacher = Omit<Types.serialized.teacher, InternalIdKey>;
9
- type group = Omit<Types.serialized.group, InternalIdKey>;
10
- type course = Omit<Types.serialized.course, InternalIdKey>;
11
- type event = Omit<Types.serialized.event, InternalIdKey>;
12
- type person = Omit<Types.serialized.person, InternalIdKey>;
8
+ type location = Omit<Types.Serialized.Location, InternalIdKey>;
9
+ type teacher = Omit<Types.Serialized.Teacher, InternalIdKey>;
10
+ type group = Omit<Types.Serialized.Group, InternalIdKey>;
11
+ type course = Omit<Types.Serialized.Course, InternalIdKey>;
12
+ type event = Omit<Types.Serialized.Event, InternalIdKey>;
13
+ type person = Omit<Types.Serialized.Person, InternalIdKey>;
13
14
  }
14
15
  declare function export_default(schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>): {
15
16
  meta: {
@@ -15,15 +15,13 @@ function schedules_default(schedule) {
15
15
  const teachers = teachers_default(schedule.schedule_groups, schedule.lessons, errors, warnings);
16
16
  const groups = groups_default(schedule.primary_groups, errors, warnings);
17
17
  const courses = courses_default(schedule.schedule_groups, school, errors, warnings);
18
- const events = events_default(schedule.lessons, courses, teachers, errors, warnings);
19
- const persons = persons_default(schedule.users, groups, errors, warnings);
20
18
  return {
21
19
  locations,
22
20
  teachers,
23
21
  groups,
24
22
  courses,
25
- events,
26
- persons,
23
+ events: events_default(schedule.lessons, courses, teachers, errors, warnings),
24
+ persons: persons_default(schedule.users, groups, errors, warnings),
27
25
  meta: {
28
26
  ...errors.length ? { errors } : {},
29
27
  ...warnings.length ? { warnings } : {}
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","locations: OutTypes.location[]","_locations","teachers: OutTypes.teacher []","_teachers","groups: OutTypes.group []","_groups","courses: OutTypes.course []","_courses","events: OutTypes.event []","_events","persons: OutTypes.person []","_persons"],"sources":["../../../src/Additio/from/schedules.ts"],"sourcesContent":["import type { Schedule } from '../types/schedules';\nimport _teachers from './teachers';\nimport _locations from './locations';\nimport _groups from './groups';\nimport _courses from './courses';\nimport _events from './events';\nimport _persons from './persons';\nimport type { CoreTypes } from '../../core';\nimport type { InternalIdKey } from '../../core/types/common';\n\n\nexport namespace OutTypes {\n export type location = Omit<CoreTypes.serialized.location, InternalIdKey>;\n export type teacher = Omit<CoreTypes.serialized.teacher, InternalIdKey>;\n export type group = Omit<CoreTypes.serialized.group, InternalIdKey>;\n export type course = Omit<CoreTypes.serialized.course, InternalIdKey>;\n export type event = Omit<CoreTypes.serialized.event, InternalIdKey>;\n export type person = Omit<CoreTypes.serialized.person, InternalIdKey>;\n};\n\nexport default function (\n schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>\n)/* : Partial<CoreTypes.division> */ {\n\n ////\n //// check the number of contained schools\n ////\n if (schedule.schools.length != 1) {\n return { meta: { errors: [`Received ${schedule.schools.length} number of schools: only a single school is allowed.`] } };\n }\n const school = schedule.schools[0];\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const locations: OutTypes.location[] = _locations(schedule.rooms, errors, warnings);\n const teachers: OutTypes.teacher [] = _teachers (schedule.schedule_groups, schedule.lessons, errors, warnings);\n const groups: OutTypes.group [] = _groups (schedule.primary_groups, errors, warnings);\n const courses: OutTypes.course [] = _courses (schedule.schedule_groups, school, errors, warnings);\n const events: OutTypes.event [] = _events (schedule.lessons, courses, teachers, errors, warnings);\n const persons: OutTypes.person [] = _persons (schedule.users, groups, errors, warnings);\n\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors } : { } ),\n ...( warnings.length ? { warnings } : { } )\n }\n };\n}\n"],"mappings":";;;;;;;;AAoBA,2BACE,UACmC;AAKnC,KAAI,SAAS,QAAQ,UAAU,EAC7B,QAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO;CAEhE,MAAM,SAAS,SAAS,QAAQ;CAGhC,MAAMA,SAAqB;CAC3B,MAAMC,WAAqB;CAE3B,MAAMC,YAAiCC,kBAAW,SAAS,OAAmC,QAAQ;CACtG,MAAMC,WAAiCC,iBAAW,SAAS,iBAAiB,SAAS,SAAS,QAAQ;CACtG,MAAMC,SAAiCC,eAAW,SAAS,gBAAmC,QAAQ;CACtG,MAAMC,UAAiCC,gBAAW,SAAS,iBAAiB,QAAkB,QAAQ;CACtG,MAAMC,SAAiCC,eAAW,SAAS,SAAS,SAAS,UAAiB,QAAQ;CACtG,MAAMC,UAAiCC,gBAAW,SAAS,OAAO,QAA4B,QAAQ;AAEtG,QAAO;EAAE;EAAW;EAAU;EAAQ;EAAS;EAAQ;EACrD,MAAM;GACJ,GAAK,OAAO,SAAW,EAAE,WAAa;GACtC,GAAK,SAAS,SAAS,EAAE,aAAa"}
1
+ {"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","locations: OutTypes.location[]","_locations","teachers: OutTypes.teacher []","_teachers","groups: OutTypes.group []","_groups","courses: OutTypes.course []","_courses","_events","_persons"],"sources":["../../../src/Additio/from/schedules.ts"],"sourcesContent":["import type { Schedule } from '../types/schedules';\nimport _teachers from './teachers';\nimport _locations from './locations';\nimport _groups from './groups';\nimport _courses from './courses';\nimport _events from './events';\nimport _persons from './persons';\nimport type { CoreTypes } from '../../core';\nimport type { InternalIdKey } from '../../core/types/common';\n\n\nexport namespace OutTypes {\n export type location = Omit<CoreTypes.Serialized.Location, InternalIdKey>;\n export type teacher = Omit<CoreTypes.Serialized.Teacher, InternalIdKey>;\n export type group = Omit<CoreTypes.Serialized.Group, InternalIdKey>;\n export type course = Omit<CoreTypes.Serialized.Course, InternalIdKey>;\n export type event = Omit<CoreTypes.Serialized.Event, InternalIdKey>;\n export type person = Omit<CoreTypes.Serialized.Person, InternalIdKey>;\n};\n\nexport default function (\n schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>\n) {\n\n ////\n //// check the number of contained schools\n ////\n if (schedule.schools.length != 1) {\n return { meta: { errors: [`Received ${schedule.schools.length} number of schools: only a single school is allowed.`] } };\n }\n const school = schedule.schools[0];\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const locations: OutTypes.location[] = _locations(schedule.rooms, errors, warnings);\n const teachers: OutTypes.teacher [] = _teachers (schedule.schedule_groups, schedule.lessons, errors, warnings);\n const groups: OutTypes.group [] = _groups (schedule.primary_groups, errors, warnings);\n const courses: OutTypes.course [] = _courses (schedule.schedule_groups, school, errors, warnings);\n const events: OutTypes.event [] = _events (schedule.lessons, courses, teachers, errors, warnings);\n const persons: OutTypes.person [] = _persons (schedule.users, groups, errors, warnings);\n\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors } : { } ),\n ...( warnings.length ? { warnings } : { } )\n }\n };\n}\n"],"mappings":";;;;;;;;AAoBA,2BACE,UACA;AAKA,KAAI,SAAS,QAAQ,UAAU,EAC7B,QAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO,sDAAsD,EAAE,EAAE;CAE1H,MAAM,SAAS,SAAS,QAAQ;CAGhC,MAAMA,SAAqB,EAAE;CAC7B,MAAMC,WAAqB,EAAE;CAE7B,MAAMC,YAAiCC,kBAAW,SAAS,OAAmC,QAAQ,SAAS;CAC/G,MAAMC,WAAiCC,iBAAW,SAAS,iBAAiB,SAAS,SAAS,QAAQ,SAAS;CAC/G,MAAMC,SAAiCC,eAAW,SAAS,gBAAmC,QAAQ,SAAS;CAC/G,MAAMC,UAAiCC,gBAAW,SAAS,iBAAiB,QAAkB,QAAQ,SAAS;AAI/G,QAAO;EAAE;EAAW;EAAU;EAAQ;EAAS,QAHRC,eAAW,SAAS,SAAS,SAAS,UAAiB,QAAQ,SAAS;EAGxD,SAFhBC,gBAAW,SAAS,OAAO,QAA4B,QAAQ,SAAS;EAG7G,MAAM;GACJ,GAAK,OAAO,SAAW,EAAE,QAAQ,GAAK,EAAG;GACzC,GAAK,SAAS,SAAS,EAAE,UAAU,GAAG,EAAG;GAC1C;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"teachers.js","names":["teacherSet: Map<number, OutTypes.teacher>"],"sources":["../../../src/Additio/from/teachers.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n scheduleGroups: ScheduleGroup[] | undefined,\n lessons: Lesson[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.teacher[] {\n // add all teachers to a set to remove duplicates\n const teacherSet: Map<number, OutTypes.teacher> = new Map();\n\n scheduleGroups?.forEach(scheduleGroup => {\n scheduleGroup.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n lessons?.forEach(lesson => {\n lesson.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n return Array.from(teacherSet.values());\n}\n"],"mappings":";AAIA,0BACE,gBACA,SACA,cACA,gBACoB;CAEpB,MAAMA,6BAA4C,IAAI;AAEtD,iBAAgB,SAAQ,kBAAiB;AACvC,gBAAc,UAAU,SAAQ,YAAW;AACzC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG;IACxB,aAAa,QAAQ,aAAa,MAAM,QAAQ;;;;AAKtD,UAAS,SAAQ,WAAU;AACzB,SAAO,UAAU,SAAQ,YAAW;AAClC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG;IACxB,aAAa,QAAQ,aAAa,MAAM,QAAQ;;;;AAKtD,QAAO,MAAM,KAAK,WAAW"}
1
+ {"version":3,"file":"teachers.js","names":["teacherSet: Map<number, OutTypes.teacher>"],"sources":["../../../src/Additio/from/teachers.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n scheduleGroups: ScheduleGroup[] | undefined,\n lessons: Lesson[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.teacher[] {\n // add all teachers to a set to remove duplicates\n const teacherSet: Map<number, OutTypes.teacher> = new Map();\n\n scheduleGroups?.forEach(scheduleGroup => {\n scheduleGroup.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n lessons?.forEach(lesson => {\n lesson.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n return Array.from(teacherSet.values());\n}\n"],"mappings":";AAIA,0BACE,gBACA,SACA,cACA,gBACoB;CAEpB,MAAMA,6BAA4C,IAAI,KAAK;AAE3D,iBAAgB,SAAQ,kBAAiB;AACvC,gBAAc,UAAU,SAAQ,YAAW;AACzC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG,UAAU;IAClC,aAAa,QAAQ,aAAa,MAAM,QAAQ;IACjD,CAAC;IACF;GACF;AAEF,UAAS,SAAQ,WAAU;AACzB,SAAO,UAAU,SAAQ,YAAW;AAClC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG,UAAU;IAClC,aAAa,QAAQ,aAAa,MAAM,QAAQ;IACjD,CAAC;IACF;GACF;AAEF,QAAO,MAAM,KAAK,WAAW,QAAQ,CAAC"}
@@ -1,20 +1,22 @@
1
1
  import { Types } from "../../core/types/index.js";
2
2
  import { Types as Types$1 } from "../types/index.js";
3
- import * as xlsx0 from "xlsx";
3
+ import "../index.js";
4
+ import "../../index.js";
5
+ import * as xlsx1 from "xlsx";
4
6
 
5
7
  //#region src/Additio/to/index.d.ts
6
8
  declare class export_default {
7
9
  static schedules: (schedule: {
8
- division: Types.mixed.division;
9
- settings: Types.mixed.divisionSettings;
10
- periods: Types.mixed.period[];
11
- locations: Types.mixed.location[];
12
- groups: Types.mixed.group[];
13
- teachers: Types.mixed.teacher[];
14
- courses: Types.mixed.course[];
15
- events: Types.mixed.event[];
16
- lockedTimes: Types.mixed.lockedTime[];
17
- }, _options?: Types$1.options) => xlsx0.WorkBook;
10
+ division: Types.Mixed.Division;
11
+ settings: Types.Mixed.Settings;
12
+ periods: Types.Mixed.Period[];
13
+ locations: Types.Mixed.Location[];
14
+ groups: Types.Mixed.Group[];
15
+ teachers: Types.Mixed.Teacher[];
16
+ courses: Types.Mixed.Course[];
17
+ events: Types.Mixed.Event[];
18
+ lockedTimes: Types.Mixed.LockedTime[];
19
+ }, _options?: Types$1.options) => xlsx1.WorkBook;
18
20
  }
19
21
  //#endregion
20
22
  export { export_default };
@@ -61,7 +61,7 @@ var schedules_default = (schedule, _options = {}) => {
61
61
  const locations = (event.inLocations ?? []).map((x) => x ? locationsMap.get(getVertexId(x, options)) : null).filter((x) => !!x);
62
62
  const teachers = (event.teachers ?? course.teachers ?? []).map((x) => teachersMap.get(getVertexId(x.to, options))).filter((x) => !!x);
63
63
  const groups = (event.groups ?? course.groups ?? []).map((x) => groupsMap.get(getVertexId(x.to, options))).filter((x) => !!x);
64
- const out = {
64
+ return {
65
65
  id: getVertexId(event, options),
66
66
  externalid: event.ids?.toString(),
67
67
  groupid: course.ids,
@@ -78,7 +78,6 @@ var schedules_default = (schedule, _options = {}) => {
78
78
  classid: groups.map((x) => x.ids).join(", "),
79
79
  class: groups.map((x) => x.displayName).join(", ")
80
80
  };
81
- return out;
82
81
  }).filter((x) => x != null);
83
82
  const complementaryTimes = (options.includeComplementaryTimes ?? true ? schedule.lockedTimes : []).filter((x) => x.type == "COMPLEMENTARY_TIME").map((lockedTime) => {
84
83
  if (lockedTime.parked) return;
@@ -88,7 +87,7 @@ var schedules_default = (schedule, _options = {}) => {
88
87
  const teachers = (lockedTime.coalesced ?? []).filter((x) => x.toModel == "teachers").map((x) => teachersMap.get(getVertexId(x.to, options))).filter((x) => !!x);
89
88
  const subject = lockedTime.tags?.find((x) => x.type == "COMPLEMENTARY_TIME")?.value;
90
89
  const inweek = inWeeksMap.get(void 0);
91
- const out = {
90
+ return {
92
91
  id: getVertexId(lockedTime, options),
93
92
  dayid: (start.day() + 6) % 7,
94
93
  startTime: start.format("HHmm"),
@@ -98,7 +97,6 @@ var schedules_default = (schedule, _options = {}) => {
98
97
  teacherid: teachers.map((x) => x.ids).join(", "),
99
98
  teacher: teachers.map((x) => x.displayName).join(", ")
100
99
  };
101
- return out;
102
100
  }).filter((x) => !!x);
103
101
  const wb = XLSX.utils.book_new();
104
102
  const sheet = XLSX.utils.json_to_sheet([...events, ...complementaryTimes], { header });
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["header: (keyof Required<OutEvent>)[]","weeks","out: OutEvent"],"sources":["../../../src/Additio/to/schedules.ts"],"sourcesContent":["import XLSX from 'xlsx';\nimport moment from 'moment';\nimport { getDayIndex, getVertexId } from '../../core/util';\nimport type { BaseOptions } from '../../common/types';\nimport type { Types as CoreTypes } from '../../core/types';\nimport type { Types } from '../types';\n\ntype OutEvent = {\n id?: string;\n externalid?: string;\n groupid?: string;\n group?: string;\n dayid?: number;\n startTime?: string;\n length?: number;\n subject?: string;\n roomid?: string;\n room?: string;\n teacherid?: string;\n teacher?: string;\n classid?: string;\n class?: string;\n inweek?: string;\n};\n\n/**\n * Specifies the header and the order of the columns in the exported Excel file.\n */\nconst header: (keyof Required<OutEvent>)[] = [\n 'id',\n 'externalid',\n 'groupid',\n 'group',\n 'dayid',\n 'startTime',\n 'length',\n 'subject',\n 'inweek',\n 'roomid',\n 'room',\n 'teacherid',\n 'teacher',\n 'classid',\n 'class'\n];\n\ntype Schedule = {\n division: CoreTypes.mixed.division;\n settings: CoreTypes.mixed.divisionSettings;\n periods: CoreTypes.mixed.period[];\n locations: CoreTypes.mixed.location[];\n groups: CoreTypes.mixed.group[];\n teachers: CoreTypes.mixed.teacher[];\n courses: CoreTypes.mixed.course[];\n events: CoreTypes.mixed.event[];\n lockedTimes: CoreTypes.mixed.lockedTime[];\n};\n\n\nexport default (\n schedule: Schedule,\n _options: Types.options = { }\n): XLSX.WorkBook => {\n const options = _options as BaseOptions & Types.options;\n\n // a map of period.id -> period\n const periodsMap = new Map(schedule.periods.map(x => [getVertexId(x, options) as string | undefined, x as Omit<typeof x, 'id'>] as const));\n periodsMap.set(undefined, { ranges: [{ start: schedule.division.start, end: schedule.division.end }] });\n\n // a map of period.id -> inWeeks\n const inWeeksMap = new Map<string | undefined, string>();\n periodsMap.forEach((period, id) => {\n const weeks = 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 .join(', ');\n\n inWeeksMap.set(id, weeks);\n });\n\n // a map of location.id -> location\n const locationsMap = new Map(schedule.locations.map(x => [getVertexId(x, options), x] as const));\n\n // a map of group.id -> group\n const groupsMap = new Map(schedule.groups.map(x => [getVertexId(x, options), x] as const));\n\n // a map of teacher.id -> teacher\n const teachersMap = new Map(schedule.teachers.map(x => [getVertexId(x, options), x] as const));\n\n // a map of course.id -> course\n const coursesMap = new Map(schedule.courses.map(x => [getVertexId(x, options), x] as const));\n\n\n const events = (options.includeEvents ?? true ? schedule.events : [])\n .map(event => {\n // ignore parked events\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n // must have a course\n const course = event.course ? coursesMap.get(getVertexId(event.course, options)) : undefined;\n if (!course) return;\n\n const start = moment.utc(event.start);\n const end = moment.utc(event.end);\n\n const period = event.period ?? course.period ?? schedule.settings.period;\n const periodId = period ? getVertexId(period, options) : undefined;\n const inWeeks = inWeeksMap.get(periodId);\n\n const locations = (event.inLocations ?? []).map(x => x ? locationsMap.get(getVertexId(x, options)) : null).filter(x => !!x);\n const teachers = (event.teachers ?? course.teachers ?? []).map(x => teachersMap .get(getVertexId(x.to, options)) ).filter(x => !!x);\n const groups = (event.groups ?? course.groups ?? []).map(x => groupsMap .get(getVertexId(x.to, options)) ).filter(x => !!x);\n\n const out: OutEvent = {\n id: getVertexId(event, options),\n externalid: event.ids?.toString(),\n groupid: course.ids,\n group: course.displayName,\n dayid: getDayIndex(start),\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: course.subject,\n inweek: inWeeks,\n roomid: locations.map(x => x.ids ).join(', '),\n room: locations.map(x => x.displayName).join(', '),\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n classid: groups .map(x => x.ids ).join(', '),\n class: groups .map(x => x.displayName).join(', ')\n };\n return out;\n })\n .filter(x => x != null);\n\n const complementaryTimes = (options.includeComplementaryTimes ?? true ? schedule.lockedTimes : [])\n .filter(x => x.type == 'COMPLEMENTARY_TIME')\n .map(lockedTime => {\n // ignore parked events\n if (lockedTime.parked) return;\n if (!lockedTime.start || !lockedTime.end) return;\n\n const start = moment.utc(lockedTime.start);\n const end = moment.utc(lockedTime.end);\n\n const teachers = (lockedTime.coalesced ?? [])\n .filter(x => x.toModel == 'teachers')\n .map(x => teachersMap.get(getVertexId(x.to, options)))\n .filter(x => !!x);\n\n const subject = lockedTime.tags?.find(x => x.type == 'COMPLEMENTARY_TIME')?.value;\n\n // the full schedule range\n const inweek = inWeeksMap.get(undefined);\n\n const out: OutEvent = {\n id: getVertexId(lockedTime, options),\n dayid: (start.day() + 6) % 7,\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: subject,\n inweek: inweek,\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n };\n return out;\n })\n .filter(x => !!x);\n\n const wb = XLSX.utils.book_new();\n\n const sheet = XLSX.utils.json_to_sheet([...events, ...complementaryTimes], { header });\n XLSX.utils.book_append_sheet(wb, sheet, 'royal schedule export');\n\n return wb;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"schedules.js","names":["header: (keyof Required<OutEvent>)[]","weeks"],"sources":["../../../src/Additio/to/schedules.ts"],"sourcesContent":["import XLSX from 'xlsx';\nimport moment from 'moment';\nimport { getDayIndex, getVertexId } from '../../core/util';\nimport type { BaseOptions } from '../../common/types';\nimport type { Types as CoreTypes } from '../../core/types';\nimport type { Types } from '../types';\n\ntype OutEvent = {\n id?: string;\n externalid?: string;\n groupid?: string;\n group?: string;\n dayid?: number;\n startTime?: string;\n length?: number;\n subject?: string;\n roomid?: string;\n room?: string;\n teacherid?: string;\n teacher?: string;\n classid?: string;\n class?: string;\n inweek?: string;\n};\n\n/**\n * Specifies the header and the order of the columns in the exported Excel file.\n */\nconst header: (keyof Required<OutEvent>)[] = [\n 'id',\n 'externalid',\n 'groupid',\n 'group',\n 'dayid',\n 'startTime',\n 'length',\n 'subject',\n 'inweek',\n 'roomid',\n 'room',\n 'teacherid',\n 'teacher',\n 'classid',\n 'class'\n];\n\ntype Schedule = {\n division: CoreTypes.Mixed.Division;\n settings: CoreTypes.Mixed.Settings;\n periods: CoreTypes.Mixed.Period[];\n locations: CoreTypes.Mixed.Location[];\n groups: CoreTypes.Mixed.Group[];\n teachers: CoreTypes.Mixed.Teacher[];\n courses: CoreTypes.Mixed.Course[];\n events: CoreTypes.Mixed.Event[];\n lockedTimes: CoreTypes.Mixed.LockedTime[];\n};\n\n\nexport default (\n schedule: Schedule,\n _options: Types.options = { }\n): XLSX.WorkBook => {\n const options = _options as BaseOptions & Types.options;\n\n // a map of period.id -> period\n const periodsMap = new Map(schedule.periods.map(x => [getVertexId(x, options) as string | undefined, x as Pick<typeof x, 'ranges'>] as const));\n periodsMap.set(undefined, { ranges: [{ start: schedule.division.start, end: schedule.division.end }] });\n\n // a map of period.id -> inWeeks\n const inWeeksMap = new Map<string | undefined, string>();\n periodsMap.forEach((period, id) => {\n const weeks = 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 .join(', ');\n\n inWeeksMap.set(id, weeks);\n });\n\n // a map of location.id -> location\n const locationsMap = new Map(schedule.locations.map(x => [getVertexId(x, options), x] as const));\n\n // a map of group.id -> group\n const groupsMap = new Map(schedule.groups.map(x => [getVertexId(x, options), x] as const));\n\n // a map of teacher.id -> teacher\n const teachersMap = new Map(schedule.teachers.map(x => [getVertexId(x, options), x] as const));\n\n // a map of course.id -> course\n const coursesMap = new Map(schedule.courses.map(x => [getVertexId(x, options), x] as const));\n\n\n const events = (options.includeEvents ?? true ? schedule.events : [])\n .map(event => {\n // ignore parked events\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n // must have a course\n const course = event.course ? coursesMap.get(getVertexId(event.course, options)) : undefined;\n if (!course) return;\n\n const start = moment.utc(event.start);\n const end = moment.utc(event.end);\n\n const period = event.period ?? course.period ?? schedule.settings.period;\n const periodId = period ? getVertexId(period, options) : undefined;\n const inWeeks = inWeeksMap.get(periodId);\n\n const locations = (event.inLocations ?? []).map(x => x ? locationsMap.get(getVertexId(x, options)) : null).filter(x => !!x);\n const teachers = (event.teachers ?? course.teachers ?? []).map(x => teachersMap .get(getVertexId(x.to, options)) ).filter(x => !!x);\n const groups = (event.groups ?? course.groups ?? []).map(x => groupsMap .get(getVertexId(x.to, options)) ).filter(x => !!x);\n\n const out: OutEvent = {\n id: getVertexId(event, options),\n externalid: event.ids?.toString(),\n groupid: course.ids,\n group: course.displayName,\n dayid: getDayIndex(start),\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: course.subject,\n inweek: inWeeks,\n roomid: locations.map(x => x.ids ).join(', '),\n room: locations.map(x => x.displayName).join(', '),\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n classid: groups .map(x => x.ids ).join(', '),\n class: groups .map(x => x.displayName).join(', ')\n };\n return out;\n })\n .filter(x => x != null);\n\n const complementaryTimes = (options.includeComplementaryTimes ?? true ? schedule.lockedTimes : [])\n .filter(x => x.type == 'COMPLEMENTARY_TIME')\n .map(lockedTime => {\n // ignore parked events\n if (lockedTime.parked) return;\n if (!lockedTime.start || !lockedTime.end) return;\n\n const start = moment.utc(lockedTime.start);\n const end = moment.utc(lockedTime.end);\n\n const teachers = (lockedTime.coalesced ?? [])\n .filter(x => x.toModel == 'teachers')\n .map(x => teachersMap.get(getVertexId(x.to, options)))\n .filter(x => !!x);\n\n const subject = lockedTime.tags?.find(x => x.type == 'COMPLEMENTARY_TIME')?.value;\n\n // the full schedule range\n const inweek = inWeeksMap.get(undefined);\n\n const out: OutEvent = {\n id: getVertexId(lockedTime, options),\n dayid: (start.day() + 6) % 7,\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: subject,\n inweek: inweek,\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n };\n return out;\n })\n .filter(x => !!x);\n\n const wb = XLSX.utils.book_new();\n\n const sheet = XLSX.utils.json_to_sheet([...events, ...complementaryTimes], { header });\n XLSX.utils.book_append_sheet(wb, sheet, 'royal schedule export');\n\n return wb;\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"courses.js","names":["courses: OutTypes.course[]"],"sources":["../../../src/Admentum/from/courses.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { School } from '../types/schools';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n scheduledGroups: ScheduleGroup[] | undefined,\n school: School,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.course[] {\n\n const courses: OutTypes.course[] = [];\n\n scheduledGroups?.forEach(scheduledGroup => {\n\n ////\n //// check number of subjects/courses\n ////\n const subjects = school.school_type == 'GR' ? scheduledGroup.subjects : scheduledGroup.courses;\n if (subjects.length != 1) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" contained ${subjects.length} number of ${school.school_type == 'GR' ? 'subjects' : 'courses'} and was therefore omitted: a schedule group shall contain only a single ${school.school_type == 'GR' ? 'subject' : 'course'}.`;\n importWarnings.push(warn);\n return;\n }\n\n\n ////\n //// check number of teachers\n ////\n if (scheduledGroup.teachers?.length == 0) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" did not contain any teachers.`;\n importWarnings.push(warn);\n }\n\n\n courses.push({\n ids: scheduledGroup.id.toString(),\n displayName: scheduledGroup.name,\n subject: subjects.map(x => x.name).join(', '),\n groups: scheduledGroup.users_primary_groups.map(x => ({ to: x.toString() })),\n teachers: scheduledGroup.teachers?.map(x => ({ to: x.id.toString() }))\n } satisfies OutTypes.course);\n\n });\n\n return courses;\n}\n"],"mappings":";AAKA,yBACE,iBACA,QACA,cACA,gBACmB;CAEnB,MAAMA,UAA6B;AAEnC,kBAAiB,SAAQ,mBAAkB;EAKzC,MAAM,WAAW,OAAO,eAAe,OAAO,eAAe,WAAW,eAAe;AACvF,MAAI,SAAS,UAAU,GAAG;GACxB,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG,cAAc,SAAS,OAAO,aAAa,OAAO,eAAe,OAAO,aAAa,UAAU,2EAA2E,OAAO,eAAe,OAAO,YAAY,SAAS;AACnT,kBAAe,KAAK;AACpB;;AAOF,MAAI,eAAe,UAAU,UAAU,GAAG;GACxC,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG;AACvF,kBAAe,KAAK;;AAItB,UAAQ,KAAK;GACX,KAAa,eAAe,GAAG;GAC/B,aAAa,eAAe;GAC5B,SAAa,SAAS,KAAI,MAAK,EAAE,MAAM,KAAK;GAC5C,QAAa,eAAe,qBAAqB,KAAI,OAAM,EAAE,IAAI,EAAE;GACnE,UAAa,eAAe,UAAU,KAAI,OAAM,EAAE,IAAI,EAAE,GAAG;;;AAK/D,QAAO"}
1
+ {"version":3,"file":"courses.js","names":["courses: OutTypes.course[]"],"sources":["../../../src/Admentum/from/courses.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { School } from '../types/schools';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n scheduledGroups: ScheduleGroup[] | undefined,\n school: School,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.course[] {\n\n const courses: OutTypes.course[] = [];\n\n scheduledGroups?.forEach(scheduledGroup => {\n\n ////\n //// check number of subjects/courses\n ////\n const subjects = school.school_type == 'GR' ? scheduledGroup.subjects : scheduledGroup.courses;\n if (subjects.length != 1) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" contained ${subjects.length} number of ${school.school_type == 'GR' ? 'subjects' : 'courses'} and was therefore omitted: a schedule group shall contain only a single ${school.school_type == 'GR' ? 'subject' : 'course'}.`;\n importWarnings.push(warn);\n return;\n }\n\n\n ////\n //// check number of teachers\n ////\n if (scheduledGroup.teachers?.length == 0) {\n const warn = `The schedule group \"${scheduledGroup.name}\" with id \"${scheduledGroup.id}\" did not contain any teachers.`;\n importWarnings.push(warn);\n }\n\n\n courses.push({\n ids: scheduledGroup.id.toString(),\n displayName: scheduledGroup.name,\n subject: subjects.map(x => x.name).join(', '),\n groups: scheduledGroup.users_primary_groups.map(x => ({ to: x.toString() })),\n teachers: scheduledGroup.teachers?.map(x => ({ to: x.id.toString() }))\n } satisfies OutTypes.course);\n\n });\n\n return courses;\n}\n"],"mappings":";AAKA,yBACE,iBACA,QACA,cACA,gBACmB;CAEnB,MAAMA,UAA6B,EAAE;AAErC,kBAAiB,SAAQ,mBAAkB;EAKzC,MAAM,WAAW,OAAO,eAAe,OAAO,eAAe,WAAW,eAAe;AACvF,MAAI,SAAS,UAAU,GAAG;GACxB,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG,cAAc,SAAS,OAAO,aAAa,OAAO,eAAe,OAAO,aAAa,UAAU,2EAA2E,OAAO,eAAe,OAAO,YAAY,SAAS;AACnT,kBAAe,KAAK,KAAK;AACzB;;AAOF,MAAI,eAAe,UAAU,UAAU,GAAG;GACxC,MAAM,OAAO,uBAAuB,eAAe,KAAK,aAAa,eAAe,GAAG;AACvF,kBAAe,KAAK,KAAK;;AAI3B,UAAQ,KAAK;GACX,KAAa,eAAe,GAAG,UAAU;GACzC,aAAa,eAAe;GAC5B,SAAa,SAAS,KAAI,MAAK,EAAE,KAAK,CAAC,KAAK,KAAK;GACjD,QAAa,eAAe,qBAAqB,KAAI,OAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;GACjF,UAAa,eAAe,UAAU,KAAI,OAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,EAAE;GAC1E,CAA2B;GAE5B;AAEF,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","names":["events: OutTypes.event[]","eventTeachers: string[] | undefined"],"sources":["../../../src/Admentum/from/events.ts"],"sourcesContent":["\nimport moment from 'moment';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nconst firstDay = moment.utc('1970-01-05');\n\nfunction fromTimeString (\n day: number,\n timeString: string\n): moment.Moment {\n const [hours, minutes, seconds] = timeString.split(':').map((time: string) => parseInt(time));\n return firstDay.clone().add(day, 'day')\n .set('hour', hours)\n .set('minute', minutes);\n}\n\nexport default function (\n lessons: Lesson[] | undefined,\n courses: OutTypes.course[] | undefined,\n teachers: OutTypes.teacher[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.event[] {\n\n // create schedule_group (group) to course map for quick lookup\n const group2course = new Map<string, OutTypes.course>();\n courses?.forEach(c => group2course.set(c.ids!, c));\n\n // create teacher set for quick lookup\n const teacherSet = new Set<string>();\n teachers?.forEach(t => teacherSet.add(t.ids!));\n\n const events: OutTypes.event[] = [];\n lessons?.forEach(l => {\n\n // check number of groups (schedule_groups = course) to ensure that only one exists\n if (l.info.groups?.length != 1) {\n const warn = `The lesson with id \"${l.id} contained ${l.info.groups?.length} number of groups (schedule_groups = courses) and was therefore omitted: a lesson shall contain only a single group.`;\n importWarnings.push(warn);\n return;\n }\n const course_id = l.info.groups[0].id.toString();\n\n // ensure the course exists\n const course = group2course.get(course_id);\n if (!course) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown/faulty schedule_group (course) \"${course_id}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n\n const start = fromTimeString(l.weekday, l.info.start);\n const end = fromTimeString(l.weekday, l.info.end);\n const preferredDuration = l.info.duration;\n const duration = l.info.duration;\n\n // store only teachers if they mismatch teachers of parent course\n let eventTeachers: string[] | undefined;\n if (!course.teachers || !course.teachers?.every(x => l.info.teachers?.some(y => y.id.toString() == x.to))) {\n eventTeachers = l.info.teachers?.map(x => x.id.toString());\n\n // ensure that the teachers exist\n for (const teacher of eventTeachers ?? []) {\n if (!teacherSet.has(teacher)) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown teacher \"${teacher}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n }\n }\n\n // location\n const location = l.info.room?.id.toString();\n\n events.push({\n ids: l.id.toString(),\n start,\n end,\n preferredDuration,\n duration,\n course: course_id,\n ...location && { inLocations: [ location ], locations: [{ locations: [ location ] }] },\n ...(eventTeachers && { teachers: eventTeachers.map((to) => ({ to })) })\n } satisfies OutTypes.event);\n });\n\n return events;\n}\n"],"mappings":";;;AAKA,MAAM,WAAW,OAAO,IAAI;AAE5B,SAAS,eACP,KACA,YACe;CACf,MAAM,CAAC,OAAO,SAAS,WAAW,WAAW,MAAM,KAAK,KAAK,SAAiB,SAAS;AACvF,QAAO,SAAS,QAAQ,IAAI,KAAK,OAC9B,IAAI,QAAQ,OACZ,IAAI,UAAU;;AAGnB,wBACE,SACA,SACA,UACA,cACA,gBACkB;CAGlB,MAAM,+BAAe,IAAI;AACzB,UAAS,SAAQ,MAAK,aAAa,IAAI,EAAE,KAAM;CAG/C,MAAM,6BAAa,IAAI;AACvB,WAAU,SAAQ,MAAK,WAAW,IAAI,EAAE;CAExC,MAAMA,SAA2B;AACjC,UAAS,SAAQ,MAAK;AAGpB,MAAI,EAAE,KAAK,QAAQ,UAAU,GAAG;GAC9B,MAAM,OAAO,uBAAuB,EAAE,GAAG,aAAa,EAAE,KAAK,QAAQ,OAAO;AAC5E,kBAAe,KAAK;AACpB;;EAEF,MAAM,YAAY,EAAE,KAAK,OAAO,GAAG,GAAG;EAGtC,MAAM,SAAS,aAAa,IAAI;AAChC,MAAI,CAAC,QAAQ;GACX,MAAM,OAAO,uBAAuB,EAAE,GAAG,2DAA2D,UAAU;AAC9G,kBAAe,KAAK;AACpB;;EAGF,MAAM,QAAoB,eAAe,EAAE,SAAS,EAAE,KAAK;EAC3D,MAAM,MAAoB,eAAe,EAAE,SAAS,EAAE,KAAK;EAC3D,MAAM,oBAAoB,EAAE,KAAK;EACjC,MAAM,WAAoB,EAAE,KAAK;EAGjC,IAAIC;AACJ,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,UAAU,OAAM,MAAK,EAAE,KAAK,UAAU,MAAK,MAAK,EAAE,GAAG,cAAc,EAAE,MAAM;AACzG,mBAAgB,EAAE,KAAK,UAAU,KAAI,MAAK,EAAE,GAAG;AAG/C,QAAK,MAAM,WAAW,iBAAiB,GACrC,KAAI,CAAC,WAAW,IAAI,UAAU;IAC5B,MAAM,OAAO,uBAAuB,EAAE,GAAG,oCAAoC,QAAQ;AACrF,mBAAe,KAAK;AACpB;;;EAMN,MAAM,WAAW,EAAE,KAAK,MAAM,GAAG;AAEjC,SAAO,KAAK;GACV,KAAQ,EAAE,GAAG;GACb;GACA;GACA;GACA;GACA,QAAQ;GACR,GAAG,YAAY;IAAE,aAAa,CAAE;IAAY,WAAW,CAAC,EAAE,WAAW,CAAE;;GACvE,GAAI,iBAAiB,EAAE,UAAU,cAAc,KAAK,QAAQ,EAAE;;;AAIlE,QAAO"}
1
+ {"version":3,"file":"events.js","names":["events: OutTypes.event[]","eventTeachers: string[] | undefined"],"sources":["../../../src/Admentum/from/events.ts"],"sourcesContent":["\nimport moment from 'moment';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nconst firstDay = moment.utc('1970-01-05');\n\nfunction fromTimeString (\n day: number,\n timeString: string\n): moment.Moment {\n const [hours, minutes, seconds] = timeString.split(':').map((time: string) => parseInt(time));\n return firstDay.clone().add(day, 'day')\n .set('hour', hours)\n .set('minute', minutes);\n}\n\nexport default function (\n lessons: Lesson[] | undefined,\n courses: OutTypes.course[] | undefined,\n teachers: OutTypes.teacher[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.event[] {\n\n // create schedule_group (group) to course map for quick lookup\n const group2course = new Map<string, OutTypes.course>();\n courses?.forEach(c => group2course.set(c.ids!, c));\n\n // create teacher set for quick lookup\n const teacherSet = new Set<string>();\n teachers?.forEach(t => teacherSet.add(t.ids!));\n\n const events: OutTypes.event[] = [];\n lessons?.forEach(l => {\n\n // check number of groups (schedule_groups = course) to ensure that only one exists\n if (l.info.groups?.length != 1) {\n const warn = `The lesson with id \"${l.id} contained ${l.info.groups?.length} number of groups (schedule_groups = courses) and was therefore omitted: a lesson shall contain only a single group.`;\n importWarnings.push(warn);\n return;\n }\n const course_id = l.info.groups[0].id.toString();\n\n // ensure the course exists\n const course = group2course.get(course_id);\n if (!course) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown/faulty schedule_group (course) \"${course_id}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n\n const start = fromTimeString(l.weekday, l.info.start);\n const end = fromTimeString(l.weekday, l.info.end);\n const preferredDuration = l.info.duration;\n const duration = l.info.duration;\n\n // store only teachers if they mismatch teachers of parent course\n let eventTeachers: string[] | undefined;\n if (!course.teachers || !course.teachers?.every(x => l.info.teachers?.some(y => y.id.toString() == x.to))) {\n eventTeachers = l.info.teachers?.map(x => x.id.toString());\n\n // ensure that the teachers exist\n for (const teacher of eventTeachers ?? []) {\n if (!teacherSet.has(teacher)) {\n const warn = `The lesson with id \"${l.id}\" referenced the unknown teacher \"${teacher}\" and was therefore ignored.`;\n importWarnings.push(warn);\n return;\n }\n }\n }\n\n // location\n const location = l.info.room?.id.toString();\n\n events.push({\n ids: l.id.toString(),\n start,\n end,\n preferredDuration,\n duration,\n course: course_id,\n ...location && { inLocations: [ location ], locations: [{ locations: [ location ] }] },\n ...(eventTeachers && { teachers: eventTeachers.map((to) => ({ to })) })\n } satisfies OutTypes.event);\n });\n\n return events;\n}\n"],"mappings":";;;AAKA,MAAM,WAAW,OAAO,IAAI,aAAa;AAEzC,SAAS,eACP,KACA,YACe;CACf,MAAM,CAAC,OAAO,SAAS,WAAW,WAAW,MAAM,IAAI,CAAC,KAAK,SAAiB,SAAS,KAAK,CAAC;AAC7F,QAAO,SAAS,OAAO,CAAC,IAAI,KAAK,MAAM,CACpC,IAAI,QAAQ,MAAM,CAClB,IAAI,UAAU,QAAQ;;AAG3B,wBACE,SACA,SACA,UACA,cACA,gBACkB;CAGlB,MAAM,+BAAe,IAAI,KAA8B;AACvD,UAAS,SAAQ,MAAK,aAAa,IAAI,EAAE,KAAM,EAAE,CAAC;CAGlD,MAAM,6BAAa,IAAI,KAAa;AACpC,WAAU,SAAQ,MAAK,WAAW,IAAI,EAAE,IAAK,CAAC;CAE9C,MAAMA,SAA2B,EAAE;AACnC,UAAS,SAAQ,MAAK;AAGpB,MAAI,EAAE,KAAK,QAAQ,UAAU,GAAG;GAC9B,MAAM,OAAO,uBAAuB,EAAE,GAAG,aAAa,EAAE,KAAK,QAAQ,OAAO;AAC5E,kBAAe,KAAK,KAAK;AACzB;;EAEF,MAAM,YAAY,EAAE,KAAK,OAAO,GAAG,GAAG,UAAU;EAGhD,MAAM,SAAS,aAAa,IAAI,UAAU;AAC1C,MAAI,CAAC,QAAQ;GACX,MAAM,OAAO,uBAAuB,EAAE,GAAG,2DAA2D,UAAU;AAC9G,kBAAe,KAAK,KAAK;AACzB;;EAGF,MAAM,QAAoB,eAAe,EAAE,SAAS,EAAE,KAAK,MAAM;EACjE,MAAM,MAAoB,eAAe,EAAE,SAAS,EAAE,KAAK,IAAI;EAC/D,MAAM,oBAAoB,EAAE,KAAK;EACjC,MAAM,WAAoB,EAAE,KAAK;EAGjC,IAAIC;AACJ,MAAI,CAAC,OAAO,YAAY,CAAC,OAAO,UAAU,OAAM,MAAK,EAAE,KAAK,UAAU,MAAK,MAAK,EAAE,GAAG,UAAU,IAAI,EAAE,GAAG,CAAC,EAAE;AACzG,mBAAgB,EAAE,KAAK,UAAU,KAAI,MAAK,EAAE,GAAG,UAAU,CAAC;AAG1D,QAAK,MAAM,WAAW,iBAAiB,EAAE,CACvC,KAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;IAC5B,MAAM,OAAO,uBAAuB,EAAE,GAAG,oCAAoC,QAAQ;AACrF,mBAAe,KAAK,KAAK;AACzB;;;EAMN,MAAM,WAAW,EAAE,KAAK,MAAM,GAAG,UAAU;AAE3C,SAAO,KAAK;GACV,KAAQ,EAAE,GAAG,UAAU;GACvB;GACA;GACA;GACA;GACA,QAAQ;GACR,GAAG,YAAY;IAAE,aAAa,CAAE,SAAU;IAAE,WAAW,CAAC,EAAE,WAAW,CAAE,SAAU,EAAE,CAAC;IAAE;GACtF,GAAI,iBAAiB,EAAE,UAAU,cAAc,KAAK,QAAQ,EAAE,IAAI,EAAE,EAAE;GACvE,CAA0B;GAC3B;AAEF,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","names":[],"sources":["../../../src/Admentum/from/groups.ts"],"sourcesContent":["import type { PrimaryGroup } from '../types/primary-groups';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n primaryGroups: PrimaryGroup[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.group[] {\n return primaryGroups?.map(x => { return {\n ids: x.id.toString(),\n displayName: x.name,\n species: 'class',\n };}) ?? [];\n}\n"],"mappings":";AAGA,wBACE,eACA,cACA,gBACkB;AAClB,QAAO,eAAe,KAAI,MAAK;AAAE,SAAO;GACtC,KAAa,EAAE,GAAG;GAClB,aAAa,EAAE;GACf,SAAa;;OACP"}
1
+ {"version":3,"file":"groups.js","names":[],"sources":["../../../src/Admentum/from/groups.ts"],"sourcesContent":["import type { PrimaryGroup } from '../types/primary-groups';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n primaryGroups: PrimaryGroup[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.group[] {\n return primaryGroups?.map(x => { return {\n ids: x.id.toString(),\n displayName: x.name,\n species: 'class',\n };}) ?? [];\n}\n"],"mappings":";AAGA,wBACE,eACA,cACA,gBACkB;AAClB,QAAO,eAAe,KAAI,MAAK;AAAE,SAAO;GACtC,KAAa,EAAE,GAAG,UAAU;GAC5B,aAAa,EAAE;GACf,SAAa;GACd;GAAG,IAAI,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/Admentum/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;\n"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA"}
1
+ {"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/Admentum/from/index.ts"],"sourcesContent":["import type { FromInterface } from '../../common/types';\nimport _schedules from './schedules';\n\nexport default {\n schedules: _schedules\n} satisfies FromInterface;\n"],"mappings":";;;AAGA,mBAAe,EACb,WAAWA,mBACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"locations.js","names":[],"sources":["../../../src/Admentum/from/locations.ts"],"sourcesContent":["import type { Room } from '../types/rooms';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n rooms: Room[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.location[] {\n return rooms?.map(room => { return {\n ids: room.id.toString(),\n displayName: room.name\n };}) ?? [];\n}\n"],"mappings":";AAIA,2BACE,OACA,cACA,gBACqB;AACrB,QAAO,OAAO,KAAI,SAAQ;AAAE,SAAO;GACjC,KAAa,KAAK,GAAG;GACrB,aAAa,KAAK;;OACZ"}
1
+ {"version":3,"file":"locations.js","names":[],"sources":["../../../src/Admentum/from/locations.ts"],"sourcesContent":["import type { Room } from '../types/rooms';\nimport type { OutTypes } from './schedules';\n\n\nexport default function (\n rooms: Room[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.location[] {\n return rooms?.map(room => { return {\n ids: room.id.toString(),\n displayName: room.name\n };}) ?? [];\n}\n"],"mappings":";AAIA,2BACE,OACA,cACA,gBACqB;AACrB,QAAO,OAAO,KAAI,SAAQ;AAAE,SAAO;GACjC,KAAa,KAAK,GAAG,UAAU;GAC/B,aAAa,KAAK;GACnB;GAAG,IAAI,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"persons.js","names":["personSet: Map<number, OutTypes.person>"],"sources":["../../../src/Admentum/from/persons.ts"],"sourcesContent":["import type { User } from '../types/users';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n users: User[] | undefined,\n groups: OutTypes.group[],\n importErrors: string[],\n importWarnings: string[]\n) {\n // add all persons to a set to remove duplicates\n const personSet: Map<number, OutTypes.person> = new Map();\n\n /*\n The reference to the group is different that the one in the primary_groups array.\n To solve this we create a map of all groups and use the id of the group as key. If\n the id is not found in the map, try to find a group with the same name.\n */\n const groupSet = new Map(groups.map(x => [x.displayName!, x.ids!]));\n\n users?.filter(x => x.role === 1).forEach(user => {\n const person = {\n ids: user.id.toString(),\n firstName: user.first_name,\n lastName: user.last_name,\n group: user.current_primary_group?.id?.toString(),\n ...user.email && {\n emails: [\n {\n value: user.email,\n type: 'organization'\n }\n ]\n }\n } satisfies OutTypes.person;\n\n if (user.current_primary_group) {\n const { id, name } = user.current_primary_group;\n if (groupSet.get(name.toString()) != person.group) {\n importWarnings.push(`The group of the user ${person.firstName} ${person.lastName} is not the same as the group in the primary_groups array.`);\n person.group = groupSet.get(name.toString()) ?? person.group;\n }\n }\n\n\n personSet.set(user.id, person);\n });\n\n return Array.from(personSet.values());\n}\n"],"mappings":";AAGA,yBACE,OACA,QACA,cACA,gBACA;CAEA,MAAMA,4BAA0C,IAAI;CAOpD,MAAM,WAAW,IAAI,IAAI,OAAO,KAAI,MAAK,CAAC,EAAE,aAAc,EAAE;AAE5D,QAAO,QAAO,MAAK,EAAE,SAAS,GAAG,SAAQ,SAAQ;EAC/C,MAAM,SAAS;GACb,KAAW,KAAK,GAAG;GACnB,WAAW,KAAK;GAChB,UAAW,KAAK;GAChB,OAAW,KAAK,uBAAuB,IAAI;GAC3C,GAAG,KAAK,SAAS,EACf,QAAQ,CACN;IACE,OAAO,KAAK;IACZ,MAAO;;;AAMf,MAAI,KAAK,uBAAuB;GAC9B,MAAM,EAAE,IAAI,SAAS,KAAK;AAC1B,OAAI,SAAS,IAAI,KAAK,eAAe,OAAO,OAAO;AACjD,mBAAe,KAAK,yBAAyB,OAAO,UAAU,GAAG,OAAO,SAAS;AACjF,WAAO,QAAQ,SAAS,IAAI,KAAK,eAAe,OAAO;;;AAK3D,YAAU,IAAI,KAAK,IAAI;;AAGzB,QAAO,MAAM,KAAK,UAAU"}
1
+ {"version":3,"file":"persons.js","names":["personSet: Map<number, OutTypes.person>"],"sources":["../../../src/Admentum/from/persons.ts"],"sourcesContent":["import type { User } from '../types/users';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n users: User[] | undefined,\n groups: OutTypes.group[],\n importErrors: string[],\n importWarnings: string[]\n) {\n // add all persons to a set to remove duplicates\n const personSet: Map<number, OutTypes.person> = new Map();\n\n /*\n The reference to the group is different that the one in the primary_groups array.\n To solve this we create a map of all groups and use the id of the group as key. If\n the id is not found in the map, try to find a group with the same name.\n */\n const groupSet = new Map(groups.map(x => [x.displayName!, x.ids!]));\n\n users?.filter(x => x.role === 1).forEach(user => {\n const person = {\n ids: user.id.toString(),\n firstName: user.first_name,\n lastName: user.last_name,\n group: user.current_primary_group?.id?.toString(),\n ...user.email && {\n emails: [\n {\n value: user.email,\n type: 'organization'\n }\n ]\n }\n } satisfies OutTypes.person;\n\n if (user.current_primary_group) {\n const { id, name } = user.current_primary_group;\n if (groupSet.get(name.toString()) != person.group) {\n importWarnings.push(`The group of the user ${person.firstName} ${person.lastName} is not the same as the group in the primary_groups array.`);\n person.group = groupSet.get(name.toString()) ?? person.group;\n }\n }\n\n\n personSet.set(user.id, person);\n });\n\n return Array.from(personSet.values());\n}\n"],"mappings":";AAGA,yBACE,OACA,QACA,cACA,gBACA;CAEA,MAAMA,4BAA0C,IAAI,KAAK;CAOzD,MAAM,WAAW,IAAI,IAAI,OAAO,KAAI,MAAK,CAAC,EAAE,aAAc,EAAE,IAAK,CAAC,CAAC;AAEnE,QAAO,QAAO,MAAK,EAAE,SAAS,EAAE,CAAC,SAAQ,SAAQ;EAC/C,MAAM,SAAS;GACb,KAAW,KAAK,GAAG,UAAU;GAC7B,WAAW,KAAK;GAChB,UAAW,KAAK;GAChB,OAAW,KAAK,uBAAuB,IAAI,UAAU;GACrD,GAAG,KAAK,SAAS,EACf,QAAQ,CACN;IACE,OAAO,KAAK;IACZ,MAAO;IACR,CACF,EACF;GACF;AAED,MAAI,KAAK,uBAAuB;GAC9B,MAAM,EAAE,IAAI,SAAS,KAAK;AAC1B,OAAI,SAAS,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO,OAAO;AACjD,mBAAe,KAAK,yBAAyB,OAAO,UAAU,GAAG,OAAO,SAAS,4DAA4D;AAC7I,WAAO,QAAQ,SAAS,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO;;;AAK3D,YAAU,IAAI,KAAK,IAAI,OAAO;GAC9B;AAEF,QAAO,MAAM,KAAK,UAAU,QAAQ,CAAC"}
@@ -1,15 +1,16 @@
1
1
  import { InternalIdKey } from "../../core/types/common/index.js";
2
2
  import { Types } from "../../core/types/index.js";
3
+ import "../../core/index.js";
3
4
  import { Schedule } from "../types/schedules.js";
4
5
 
5
6
  //#region src/Admentum/from/schedules.d.ts
6
7
  declare namespace OutTypes {
7
- type location = Omit<Types.serialized.location, InternalIdKey>;
8
- type teacher = Omit<Types.serialized.teacher, InternalIdKey>;
9
- type group = Omit<Types.serialized.group, InternalIdKey>;
10
- type course = Omit<Types.serialized.course, InternalIdKey>;
11
- type event = Omit<Types.serialized.event, InternalIdKey>;
12
- type person = Omit<Types.serialized.person, InternalIdKey>;
8
+ type location = Omit<Types.Serialized.Location, InternalIdKey>;
9
+ type teacher = Omit<Types.Serialized.Teacher, InternalIdKey>;
10
+ type group = Omit<Types.Serialized.Group, InternalIdKey>;
11
+ type course = Omit<Types.Serialized.Course, InternalIdKey>;
12
+ type event = Omit<Types.Serialized.Event, InternalIdKey>;
13
+ type person = Omit<Types.Serialized.Person, InternalIdKey>;
13
14
  }
14
15
  declare function export_default(schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>): {
15
16
  meta: {
@@ -15,15 +15,13 @@ function schedules_default(schedule) {
15
15
  const teachers = teachers_default(schedule.schedule_groups, schedule.lessons, errors, warnings);
16
16
  const groups = groups_default(schedule.primary_groups, errors, warnings);
17
17
  const courses = courses_default(schedule.schedule_groups, school, errors, warnings);
18
- const events = events_default(schedule.lessons, courses, teachers, errors, warnings);
19
- const persons = persons_default(schedule.users, groups, errors, warnings);
20
18
  return {
21
19
  locations,
22
20
  teachers,
23
21
  groups,
24
22
  courses,
25
- events,
26
- persons,
23
+ events: events_default(schedule.lessons, courses, teachers, errors, warnings),
24
+ persons: persons_default(schedule.users, groups, errors, warnings),
27
25
  meta: {
28
26
  ...errors.length ? { errors } : {},
29
27
  ...warnings.length ? { warnings } : {}
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","locations: OutTypes.location[]","_locations","teachers: OutTypes.teacher []","_teachers","groups: OutTypes.group []","_groups","courses: OutTypes.course []","_courses","events: OutTypes.event []","_events","persons: OutTypes.person []","_persons"],"sources":["../../../src/Admentum/from/schedules.ts"],"sourcesContent":["import type { Schedule } from '../types/schedules';\nimport _teachers from './teachers';\nimport _locations from './locations';\nimport _groups from './groups';\nimport _courses from './courses';\nimport _events from './events';\nimport _persons from './persons';\nimport type { CoreTypes } from '../../core';\nimport type { InternalIdKey } from '../../core/types/common';\n\n\nexport namespace OutTypes {\n export type location = Omit<CoreTypes.serialized.location, InternalIdKey>;\n export type teacher = Omit<CoreTypes.serialized.teacher, InternalIdKey>;\n export type group = Omit<CoreTypes.serialized.group, InternalIdKey>;\n export type course = Omit<CoreTypes.serialized.course, InternalIdKey>;\n export type event = Omit<CoreTypes.serialized.event, InternalIdKey>;\n export type person = Omit<CoreTypes.serialized.person, InternalIdKey>;\n};\n\nexport default function (\n schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>\n)/* : Partial<CoreTypes.division> */ {\n\n ////\n //// check the number of contained schools\n ////\n if (schedule.schools.length != 1) {\n return { meta: { errors: [`Received ${schedule.schools.length} number of schools: only a single school is allowed.`] } };\n }\n const school = schedule.schools[0];\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const locations: OutTypes.location[] = _locations(schedule.rooms, errors, warnings);\n const teachers: OutTypes.teacher [] = _teachers (schedule.schedule_groups, schedule.lessons, errors, warnings);\n const groups: OutTypes.group [] = _groups (schedule.primary_groups, errors, warnings);\n const courses: OutTypes.course [] = _courses (schedule.schedule_groups, school, errors, warnings);\n const events: OutTypes.event [] = _events (schedule.lessons, courses, teachers, errors, warnings);\n const persons: OutTypes.person [] = _persons (schedule.users, groups, errors, warnings);\n\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors } : { } ),\n ...( warnings.length ? { warnings } : { } )\n }\n };\n}\n"],"mappings":";;;;;;;;AAoBA,2BACE,UACmC;AAKnC,KAAI,SAAS,QAAQ,UAAU,EAC7B,QAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO;CAEhE,MAAM,SAAS,SAAS,QAAQ;CAGhC,MAAMA,SAAqB;CAC3B,MAAMC,WAAqB;CAE3B,MAAMC,YAAiCC,kBAAW,SAAS,OAAmC,QAAQ;CACtG,MAAMC,WAAiCC,iBAAW,SAAS,iBAAiB,SAAS,SAAS,QAAQ;CACtG,MAAMC,SAAiCC,eAAW,SAAS,gBAAmC,QAAQ;CACtG,MAAMC,UAAiCC,gBAAW,SAAS,iBAAiB,QAAkB,QAAQ;CACtG,MAAMC,SAAiCC,eAAW,SAAS,SAAS,SAAS,UAAiB,QAAQ;CACtG,MAAMC,UAAiCC,gBAAW,SAAS,OAAO,QAA4B,QAAQ;AAEtG,QAAO;EAAE;EAAW;EAAU;EAAQ;EAAS;EAAQ;EACrD,MAAM;GACJ,GAAK,OAAO,SAAW,EAAE,WAAa;GACtC,GAAK,SAAS,SAAS,EAAE,aAAa"}
1
+ {"version":3,"file":"schedules.js","names":["errors: string[]","warnings: string[]","locations: OutTypes.location[]","_locations","teachers: OutTypes.teacher []","_teachers","groups: OutTypes.group []","_groups","courses: OutTypes.course []","_courses","_events","_persons"],"sources":["../../../src/Admentum/from/schedules.ts"],"sourcesContent":["import type { Schedule } from '../types/schedules';\nimport _teachers from './teachers';\nimport _locations from './locations';\nimport _groups from './groups';\nimport _courses from './courses';\nimport _events from './events';\nimport _persons from './persons';\nimport type { CoreTypes } from '../../core';\nimport type { InternalIdKey } from '../../core/types/common';\n\n\nexport namespace OutTypes {\n export type location = Omit<CoreTypes.Serialized.Location, InternalIdKey>;\n export type teacher = Omit<CoreTypes.Serialized.Teacher, InternalIdKey>;\n export type group = Omit<CoreTypes.Serialized.Group, InternalIdKey>;\n export type course = Omit<CoreTypes.Serialized.Course, InternalIdKey>;\n export type event = Omit<CoreTypes.Serialized.Event, InternalIdKey>;\n export type person = Omit<CoreTypes.Serialized.Person, InternalIdKey>;\n};\n\nexport default function (\n schedule: Omit<Schedule, 'start_date' | 'end_date' | 'schedule' | 'school_year'>\n) {\n\n ////\n //// check the number of contained schools\n ////\n if (schedule.schools.length != 1) {\n return { meta: { errors: [`Received ${schedule.schools.length} number of schools: only a single school is allowed.`] } };\n }\n const school = schedule.schools[0];\n\n // gather all import related warnings/errors\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const locations: OutTypes.location[] = _locations(schedule.rooms, errors, warnings);\n const teachers: OutTypes.teacher [] = _teachers (schedule.schedule_groups, schedule.lessons, errors, warnings);\n const groups: OutTypes.group [] = _groups (schedule.primary_groups, errors, warnings);\n const courses: OutTypes.course [] = _courses (schedule.schedule_groups, school, errors, warnings);\n const events: OutTypes.event [] = _events (schedule.lessons, courses, teachers, errors, warnings);\n const persons: OutTypes.person [] = _persons (schedule.users, groups, errors, warnings);\n\n return { locations, teachers, groups, courses, events, persons,\n meta: {\n ...( errors.length ? { errors } : { } ),\n ...( warnings.length ? { warnings } : { } )\n }\n };\n}\n"],"mappings":";;;;;;;;AAoBA,2BACE,UACA;AAKA,KAAI,SAAS,QAAQ,UAAU,EAC7B,QAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,SAAS,QAAQ,OAAO,sDAAsD,EAAE,EAAE;CAE1H,MAAM,SAAS,SAAS,QAAQ;CAGhC,MAAMA,SAAqB,EAAE;CAC7B,MAAMC,WAAqB,EAAE;CAE7B,MAAMC,YAAiCC,kBAAW,SAAS,OAAmC,QAAQ,SAAS;CAC/G,MAAMC,WAAiCC,iBAAW,SAAS,iBAAiB,SAAS,SAAS,QAAQ,SAAS;CAC/G,MAAMC,SAAiCC,eAAW,SAAS,gBAAmC,QAAQ,SAAS;CAC/G,MAAMC,UAAiCC,gBAAW,SAAS,iBAAiB,QAAkB,QAAQ,SAAS;AAI/G,QAAO;EAAE;EAAW;EAAU;EAAQ;EAAS,QAHRC,eAAW,SAAS,SAAS,SAAS,UAAiB,QAAQ,SAAS;EAGxD,SAFhBC,gBAAW,SAAS,OAAO,QAA4B,QAAQ,SAAS;EAG7G,MAAM;GACJ,GAAK,OAAO,SAAW,EAAE,QAAQ,GAAK,EAAG;GACzC,GAAK,SAAS,SAAS,EAAE,UAAU,GAAG,EAAG;GAC1C;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"teachers.js","names":["teacherSet: Map<number, OutTypes.teacher>"],"sources":["../../../src/Admentum/from/teachers.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n scheduleGroups: ScheduleGroup[] | undefined,\n lessons: Lesson[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.teacher[] {\n // add all teachers to a set to remove duplicates\n const teacherSet: Map<number, OutTypes.teacher> = new Map();\n\n scheduleGroups?.forEach(scheduleGroup => {\n scheduleGroup.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n lessons?.forEach(lesson => {\n lesson.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n return Array.from(teacherSet.values());\n}\n"],"mappings":";AAIA,0BACE,gBACA,SACA,cACA,gBACoB;CAEpB,MAAMA,6BAA4C,IAAI;AAEtD,iBAAgB,SAAQ,kBAAiB;AACvC,gBAAc,UAAU,SAAQ,YAAW;AACzC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG;IACxB,aAAa,QAAQ,aAAa,MAAM,QAAQ;;;;AAKtD,UAAS,SAAQ,WAAU;AACzB,SAAO,UAAU,SAAQ,YAAW;AAClC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG;IACxB,aAAa,QAAQ,aAAa,MAAM,QAAQ;;;;AAKtD,QAAO,MAAM,KAAK,WAAW"}
1
+ {"version":3,"file":"teachers.js","names":["teacherSet: Map<number, OutTypes.teacher>"],"sources":["../../../src/Admentum/from/teachers.ts"],"sourcesContent":["import type { ScheduleGroup } from '../types/schedule-groups';\nimport type { Lesson } from '../types/lessons';\nimport type { OutTypes } from './schedules';\n\nexport default function (\n scheduleGroups: ScheduleGroup[] | undefined,\n lessons: Lesson[] | undefined,\n importErrors: string[],\n importWarnings: string[],\n): OutTypes.teacher[] {\n // add all teachers to a set to remove duplicates\n const teacherSet: Map<number, OutTypes.teacher> = new Map();\n\n scheduleGroups?.forEach(scheduleGroup => {\n scheduleGroup.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n lessons?.forEach(lesson => {\n lesson.teachers?.forEach(teacher => {\n teacherSet.set(teacher.id, {\n ids: teacher.id.toString(),\n displayName: teacher.first_name + ' ' + teacher.last_name\n });\n });\n });\n\n return Array.from(teacherSet.values());\n}\n"],"mappings":";AAIA,0BACE,gBACA,SACA,cACA,gBACoB;CAEpB,MAAMA,6BAA4C,IAAI,KAAK;AAE3D,iBAAgB,SAAQ,kBAAiB;AACvC,gBAAc,UAAU,SAAQ,YAAW;AACzC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG,UAAU;IAClC,aAAa,QAAQ,aAAa,MAAM,QAAQ;IACjD,CAAC;IACF;GACF;AAEF,UAAS,SAAQ,WAAU;AACzB,SAAO,UAAU,SAAQ,YAAW;AAClC,cAAW,IAAI,QAAQ,IAAI;IACzB,KAAa,QAAQ,GAAG,UAAU;IAClC,aAAa,QAAQ,aAAa,MAAM,QAAQ;IACjD,CAAC;IACF;GACF;AAEF,QAAO,MAAM,KAAK,WAAW,QAAQ,CAAC"}
@@ -1,17 +1,18 @@
1
1
  import { BaseOptions } from "../../common/types.js";
2
2
  import { Types } from "../../core/types/index.js";
3
+ import "../../index.js";
3
4
 
4
5
  //#region src/Admentum/to/index.d.ts
5
6
  declare class export_default {
6
7
  static schedules: (schedule: {
7
- division: Types.mixed.division;
8
- settings: Types.mixed.divisionSettings;
9
- periods: Types.mixed.period[];
10
- locations: Types.mixed.location[];
11
- groups: Types.mixed.group[];
12
- teachers: Types.mixed.teacher[];
13
- courses: Types.mixed.course[];
14
- events: Types.mixed.event[];
8
+ division: Types.Mixed.Division;
9
+ settings: Types.Mixed.Settings;
10
+ periods: Types.Mixed.Period[];
11
+ locations: Types.Mixed.Location[];
12
+ groups: Types.Mixed.Group[];
13
+ teachers: Types.Mixed.Teacher[];
14
+ courses: Types.Mixed.Course[];
15
+ events: Types.Mixed.Event[];
15
16
  }, options: BaseOptions) => string;
16
17
  }
17
18
  //#endregion
@@ -26,7 +26,7 @@ var schedules_default = (schedule, options) => {
26
26
  const groupsMap = new Map(schedule.groups.map((x) => [getVertexId(x, options), x]));
27
27
  const teachersMap = new Map(schedule.teachers.map((x) => [getVertexId(x, options), x]));
28
28
  const coursesMap = new Map(schedule.courses.map((x) => [getVertexId(x, options), x]));
29
- const events = schedule.events.map((event) => {
29
+ return toCsv(schedule.events.map((event) => {
30
30
  if (event.parked) return;
31
31
  if (!event.start || !event.end) return;
32
32
  const course = event.course ? coursesMap.get(getVertexId(event.course, options)) : void 0;
@@ -39,7 +39,7 @@ var schedules_default = (schedule, options) => {
39
39
  const locations = (event.inLocations ?? []).map((x) => x ? locationsMap.get(getVertexId(x, options)) : null).filter((x) => !!x);
40
40
  const teachers = (event.teachers ?? course.teachers ?? []).map((x) => teachersMap.get(getVertexId(x.to, options))).filter((x) => !!x);
41
41
  const groups = (event.groups ?? course.groups ?? []).map((x) => groupsMap.get(getVertexId(x.to, options))).filter((x) => !!x);
42
- const out = {
42
+ return {
43
43
  id: getVertexId(event, options),
44
44
  externalid: event.ids?.toString(),
45
45
  groupid: course.ids,
@@ -56,9 +56,7 @@ var schedules_default = (schedule, options) => {
56
56
  classid: groups.map((x) => x.ids).join(", "),
57
57
  class: groups.map((x) => x.displayName).join(", ")
58
58
  };
59
- return out;
60
- }).filter((x) => x != null);
61
- return toCsv(events);
59
+ }).filter((x) => x != null));
62
60
  };
63
61
  function toCsv(events) {
64
62
  const headers = [
@@ -85,8 +83,7 @@ function toCsv(events) {
85
83
  if (stringValue.includes(";") || stringValue.includes("\"") || stringValue.includes("\n") || stringValue.includes("\r")) return `"${stringValue.replace(/"/g, "\"\"")}"`;
86
84
  return stringValue;
87
85
  }).join(";"));
88
- const csv = [headers.join(";"), ...csvRows].join("\r\n");
89
- return csv;
86
+ return [headers.join(";"), ...csvRows].join("\r\n");
90
87
  }
91
88
 
92
89
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["weeks","out: OutEvent"],"sources":["../../../src/Admentum/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex, getVertexId } from '../../core/util';\nimport type { BaseOptions } from '../../common/types';\n\n\ntype OutEvent = {\n id?: string;\n externalid?: string;\n groupid?: string;\n group?: string;\n dayid?: number;\n startTime?: string;\n length?: number;\n subject?: string;\n roomid?: string;\n room?: string;\n teacherid?: string;\n teacher?: string;\n classid?: string;\n class?: string;\n inweek?: string;\n};\n\ntype Schedule = {\n division: CoreTypes.mixed.division;\n settings: CoreTypes.mixed.divisionSettings;\n periods: CoreTypes.mixed.period[];\n locations: CoreTypes.mixed.location[];\n groups: CoreTypes.mixed.group[];\n teachers: CoreTypes.mixed.teacher[];\n courses: CoreTypes.mixed.course[];\n events: CoreTypes.mixed.event[];\n};\n\nexport default (\n schedule: Schedule,\n options: BaseOptions\n): string => {\n\n // a map of period.id -> period\n const periodsMap = new Map(schedule.periods.map(x => [getVertexId(x, options) as string | undefined, x as Omit<typeof x, 'id'>] as const));\n periodsMap.set(undefined, { ranges: [{ start: schedule.division.start, end: schedule.division.end }] });\n\n // a map of period.id -> inWeeks\n const inWeeksMap = new Map<string | undefined, string>();\n periodsMap.forEach((period, id) => {\n const weeks = 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 .join(', ');\n\n inWeeksMap.set(id, weeks);\n });\n\n // a map of location.id -> location\n const locationsMap = new Map(schedule.locations.map(x => [getVertexId(x, options), x] as const));\n\n // a map of group.id -> group\n const groupsMap = new Map(schedule.groups.map(x => [getVertexId(x, options), x] as const));\n\n // a map of teacher.id -> teacher\n const teachersMap = new Map(schedule.teachers.map(x => [getVertexId(x, options), x] as const));\n\n // a map of course.id -> course\n const coursesMap = new Map(schedule.courses.map(x => [getVertexId(x, options), x] as const));\n\n\n const events = schedule.events\n .map(event => {\n // ignore parked events\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n // must have a course\n const course = event.course ? coursesMap.get(getVertexId(event.course, options)) : undefined;\n if (!course) return;\n\n const start = moment.utc(event.start);\n const end = moment.utc(event.end);\n\n const period = event.period ?? course.period ?? schedule.settings.period;\n const periodId = period ? getVertexId(period, options) : undefined;\n const inWeeks = inWeeksMap.get(periodId);\n\n const locations = (event.inLocations ?? []).map(x => x ? locationsMap.get(getVertexId(x, options)) : null).filter((x): x is NonNullable<typeof x> => !!x);\n const teachers = (event.teachers ?? course.teachers ?? []).map(x => teachersMap .get(getVertexId(x.to, options)) ).filter((x): x is NonNullable<typeof x> => !!x);\n const groups = (event.groups ?? course.groups ?? []).map(x => groupsMap .get(getVertexId(x.to, options)) ).filter((x): x is NonNullable<typeof x> => !!x);\n\n const out: OutEvent = {\n id: getVertexId(event, options),\n externalid: event.ids?.toString(),\n groupid: course.ids,\n group: course.displayName,\n dayid: getDayIndex(start),\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: course.subject,\n inweek: inWeeks,\n roomid: locations.map(x => x.ids ).join(', '),\n room: locations.map(x => x.displayName).join(', '),\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n classid: groups .map(x => x.ids ).join(', '),\n class: groups .map(x => x.displayName).join(', ')\n };\n return out;\n })\n .filter(x => x != null);\n\n\n return toCsv(events);\n};\n\nfunction toCsv (events: OutEvent[]): string {\n // CSV header\n const headers = [\n 'id', 'externalid', 'groupid', 'group', 'dayid',\n 'startTime', 'length', 'subject', 'roomid', 'room',\n 'teacherid', 'teacher', 'classid', 'class', 'inweek'\n ];\n\n // Convert events to CSV rows\n const csvRows = events.map(event =>\n headers.map(header => {\n const value = event[header as keyof OutEvent];\n // Handle null/undefined values\n if (value == null) return '';\n\n const stringValue = value.toString();\n // Escape values that contain semicolons, quotes, or newlines\n if (stringValue.includes(';') || stringValue.includes('\"') || stringValue.includes('\\n') || stringValue.includes('\\r')) {\n return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n }\n return stringValue;\n }).join(';')\n );\n\n // Combine header and rows with proper line endings\n const csv = [headers.join(';'), ...csvRows].join('\\r\\n');\n\n return csv;\n}"],"mappings":"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"}
1
+ {"version":3,"file":"schedules.js","names":["weeks"],"sources":["../../../src/Admentum/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport { getDayIndex, getVertexId } from '../../core/util';\nimport type { BaseOptions } from '../../common/types';\n\n\ntype OutEvent = {\n id?: string;\n externalid?: string;\n groupid?: string;\n group?: string;\n dayid?: number;\n startTime?: string;\n length?: number;\n subject?: string;\n roomid?: string;\n room?: string;\n teacherid?: string;\n teacher?: string;\n classid?: string;\n class?: string;\n inweek?: string;\n};\n\ntype Schedule = {\n division: CoreTypes.Mixed.Division;\n settings: CoreTypes.Mixed.Settings;\n periods: CoreTypes.Mixed.Period[];\n locations: CoreTypes.Mixed.Location[];\n groups: CoreTypes.Mixed.Group[];\n teachers: CoreTypes.Mixed.Teacher[];\n courses: CoreTypes.Mixed.Course[];\n events: CoreTypes.Mixed.Event[];\n};\n\nexport default (\n schedule: Schedule,\n options: BaseOptions\n): string => {\n\n // a map of period.id -> period\n const periodsMap = new Map(schedule.periods.map(x => [getVertexId(x, options) as string | undefined, x as Pick<typeof x, 'ranges'>] as const));\n periodsMap.set(undefined, { ranges: [{ start: schedule.division.start, end: schedule.division.end }] });\n\n // a map of period.id -> inWeeks\n const inWeeksMap = new Map<string | undefined, string>();\n periodsMap.forEach((period, id) => {\n const weeks = 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 .join(', ');\n\n inWeeksMap.set(id, weeks);\n });\n\n // a map of location.id -> location\n const locationsMap = new Map(schedule.locations.map(x => [getVertexId(x, options), x] as const));\n\n // a map of group.id -> group\n const groupsMap = new Map(schedule.groups.map(x => [getVertexId(x, options), x] as const));\n\n // a map of teacher.id -> teacher\n const teachersMap = new Map(schedule.teachers.map(x => [getVertexId(x, options), x] as const));\n\n // a map of course.id -> course\n const coursesMap = new Map(schedule.courses.map(x => [getVertexId(x, options), x] as const));\n\n\n const events = schedule.events\n .map(event => {\n // ignore parked events\n if (event.parked) return;\n if (!event.start || !event.end) return;\n\n // must have a course\n const course = event.course ? coursesMap.get(getVertexId(event.course, options)) : undefined;\n if (!course) return;\n\n const start = moment.utc(event.start);\n const end = moment.utc(event.end);\n\n const period = event.period ?? course.period ?? schedule.settings.period;\n const periodId = period ? getVertexId(period, options) : undefined;\n const inWeeks = inWeeksMap.get(periodId);\n\n const locations = (event.inLocations ?? []).map(x => x ? locationsMap.get(getVertexId(x, options)) : null).filter((x): x is NonNullable<typeof x> => !!x);\n const teachers = (event.teachers ?? course.teachers ?? []).map(x => teachersMap .get(getVertexId(x.to, options)) ).filter((x): x is NonNullable<typeof x> => !!x);\n const groups = (event.groups ?? course.groups ?? []).map(x => groupsMap .get(getVertexId(x.to, options)) ).filter((x): x is NonNullable<typeof x> => !!x);\n\n const out: OutEvent = {\n id: getVertexId(event, options),\n externalid: event.ids?.toString(),\n groupid: course.ids,\n group: course.displayName,\n dayid: getDayIndex(start),\n startTime: start.format('HHmm'),\n length: end.diff(start, 'minutes'),\n subject: course.subject,\n inweek: inWeeks,\n roomid: locations.map(x => x.ids ).join(', '),\n room: locations.map(x => x.displayName).join(', '),\n teacherid: teachers .map(x => x.ids ).join(', '),\n teacher: teachers .map(x => x.displayName).join(', '),\n classid: groups .map(x => x.ids ).join(', '),\n class: groups .map(x => x.displayName).join(', ')\n };\n return out;\n })\n .filter(x => x != null);\n\n\n return toCsv(events);\n};\n\nfunction toCsv (events: OutEvent[]): string {\n // CSV header\n const headers = [\n 'id', 'externalid', 'groupid', 'group', 'dayid',\n 'startTime', 'length', 'subject', 'roomid', 'room',\n 'teacherid', 'teacher', 'classid', 'class', 'inweek'\n ];\n\n // Convert events to CSV rows\n const csvRows = events.map(event =>\n headers.map(header => {\n const value = event[header as keyof OutEvent];\n // Handle null/undefined values\n if (value == null) return '';\n\n const stringValue = value.toString();\n // Escape values that contain semicolons, quotes, or newlines\n if (stringValue.includes(';') || stringValue.includes('\"') || stringValue.includes('\\n') || stringValue.includes('\\r')) {\n return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n }\n return stringValue;\n }).join(';')\n );\n\n // Combine header and rows with proper line endings\n const csv = [headers.join(';'), ...csvRows].join('\\r\\n');\n\n return csv;\n}"],"mappings":"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"}