@royalschedule/maps 4.0.35 → 4.0.36

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 (287) 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 +0 -1
  8. package/dist/Additio/from/schedules.js +4 -2
  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 +0 -2
  12. package/dist/Additio/to/schedules.js +4 -2
  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 +0 -1
  21. package/dist/Admentum/from/schedules.js +6 -3
  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 +0 -1
  25. package/dist/Admentum/to/schedules.js +7 -4
  26. package/dist/Admentum/to/schedules.js.map +1 -1
  27. package/dist/Excel/index.d.ts +0 -1
  28. package/dist/Excel/v1/from/index.js +1 -1
  29. package/dist/Excel/v1/from/index.js.map +1 -1
  30. package/dist/Excel/v1/index.d.ts +3 -4
  31. package/dist/Excel/v2/from/index.js +54 -45
  32. package/dist/Excel/v2/from/index.js.map +1 -1
  33. package/dist/Excel/v2/index.d.ts +3 -4
  34. package/dist/IdunSoft/from/courses.js.map +1 -1
  35. package/dist/IdunSoft/from/events.js +2 -1
  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 +0 -1
  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 +0 -1
  44. package/dist/IdunSoft/to/schedules.js +6 -3
  45. package/dist/IdunSoft/to/schedules.js.map +1 -1
  46. package/dist/InfoMentor/to/index.d.ts +0 -1
  47. package/dist/InfoMentor/to/schedules.js +2 -1
  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 +11 -9
  51. package/dist/PlanDigital/from/schedules.js.map +1 -1
  52. package/dist/PlanDigital/index.d.ts +0 -1
  53. package/dist/Quiculum/file/to/index.d.ts +0 -1
  54. package/dist/Quiculum/file/to/schedules.js +9 -5
  55. package/dist/Quiculum/file/to/schedules.js.map +1 -1
  56. package/dist/RS/from/division.d.ts +0 -1
  57. package/dist/RS/from/division.js +2 -1
  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 +0 -1
  61. package/dist/RS/from/schedules.js.map +1 -1
  62. package/dist/RS/make-connected.d.ts +1 -3
  63. package/dist/RS/make-connected.js +42 -34
  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 +6 -4
  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 +2 -1
  70. package/dist/RS/to/input/default.js.map +1 -1
  71. package/dist/RS/to/input/dependencies.js +2 -1
  72. package/dist/RS/to/input/dependencies.js.map +1 -1
  73. package/dist/RS/to/input/dynamic-locked-times.js +2 -1
  74. package/dist/RS/to/input/dynamic-locked-times.js.map +1 -1
  75. package/dist/RS/to/input/events.js.map +1 -1
  76. package/dist/RS/to/input/groups.js.map +1 -1
  77. package/dist/RS/to/input/individuals.js +2 -1
  78. package/dist/RS/to/input/individuals.js.map +1 -1
  79. package/dist/RS/to/input/input.js +2 -1
  80. package/dist/RS/to/input/input.js.map +1 -1
  81. package/dist/RS/to/input/intervals.js +4 -2
  82. package/dist/RS/to/input/intervals.js.map +1 -1
  83. package/dist/RS/to/input/periods.js +4 -2
  84. package/dist/RS/to/input/periods.js.map +1 -1
  85. package/dist/RS/to/input/settings.js.map +1 -1
  86. package/dist/RS/to/input/teachers.js.map +1 -1
  87. package/dist/RS/to/input/util/attach-locked-times.js.map +1 -1
  88. package/dist/RS/to/input/util/parse-days.js.map +1 -1
  89. package/dist/RS/to/input/util/parse-group-references.js.map +1 -1
  90. package/dist/RS/to/input/util/parse-intervals.js +4 -2
  91. package/dist/RS/to/input/util/parse-intervals.js.map +1 -1
  92. package/dist/RS/to/input/util/parse-location-references.js +2 -1
  93. package/dist/RS/to/input/util/parse-location-references.js.map +1 -1
  94. package/dist/RS/to/input/util/parse-max-working-hours.js.map +1 -1
  95. package/dist/RS/to/input/util/parse-minimum-break-length.js.map +1 -1
  96. package/dist/RS/to/input/util/util.js +2 -1
  97. package/dist/RS/to/input/util/util.js.map +1 -1
  98. package/dist/RS/to/schedules.js.map +1 -1
  99. package/dist/RS/types/to.d.ts +0 -1
  100. package/dist/SS12000/from/activities.js +2 -1
  101. package/dist/SS12000/from/activities.js.map +1 -1
  102. package/dist/SS12000/from/calendar-events.js.map +1 -1
  103. package/dist/SS12000/from/duties.js.map +1 -1
  104. package/dist/SS12000/from/groups.js.map +1 -1
  105. package/dist/SS12000/from/index.js.map +1 -1
  106. package/dist/SS12000/from/persons.js.map +1 -1
  107. package/dist/SS12000/from/resources.js.map +1 -1
  108. package/dist/SS12000/from/rooms.js.map +1 -1
  109. package/dist/SS12000/from/syllabuses.js.map +1 -1
  110. package/dist/SS12000/index.d.ts +0 -1
  111. package/dist/SS12000/to/activities.js.map +1 -1
  112. package/dist/SS12000/to/calendar-events.js.map +1 -1
  113. package/dist/SS12000/to/common.js.map +1 -1
  114. package/dist/SS12000/to/duties.js.map +1 -1
  115. package/dist/SS12000/to/groups.js.map +1 -1
  116. package/dist/SS12000/to/index.d.ts +0 -1
  117. package/dist/SS12000/to/persons.js.map +1 -1
  118. package/dist/SS12000/to/resources.js.map +1 -1
  119. package/dist/SS12000/to/rooms.js.map +1 -1
  120. package/dist/SS12000/to/syllabuses.js.map +1 -1
  121. package/dist/SchoolSoft/api/from/index.js.map +1 -1
  122. package/dist/SchoolSoft/api/from/schedules.js +12 -8
  123. package/dist/SchoolSoft/api/from/schedules.js.map +1 -1
  124. package/dist/SchoolSoft/api/index.d.ts +0 -1
  125. package/dist/SchoolSoft/file/from/index.js.map +1 -1
  126. package/dist/SchoolSoft/file/from/schedules.js +87 -83
  127. package/dist/SchoolSoft/file/from/schedules.js.map +1 -1
  128. package/dist/SchoolSoft/file/index.d.ts +0 -1
  129. package/dist/SchoolSoft/file/to/index.d.ts +0 -1
  130. package/dist/SchoolSoft/file/to/schedules.js +2 -1
  131. package/dist/SchoolSoft/file/to/schedules.js.map +1 -1
  132. package/dist/SchoolSoft/index.d.ts +0 -1
  133. package/dist/Schoolity/txt/to/index.d.ts +0 -1
  134. package/dist/Schoolity/txt/to/schedules.js +12 -5
  135. package/dist/Schoolity/txt/to/schedules.js.map +1 -1
  136. package/dist/Skola24/mdb/from/course-and-events.js +5 -3
  137. package/dist/Skola24/mdb/from/course-and-events.js.map +1 -1
  138. package/dist/Skola24/mdb/from/groups.js.map +1 -1
  139. package/dist/Skola24/mdb/from/index.js.map +1 -1
  140. package/dist/Skola24/mdb/from/locations.js.map +1 -1
  141. package/dist/Skola24/mdb/from/schedule.d.ts +0 -1
  142. package/dist/Skola24/mdb/from/schedule.js.map +1 -1
  143. package/dist/Skola24/mdb/from/teachers.js.map +1 -1
  144. package/dist/Skola24/txt/from/calendar-exceptions.js +2 -1
  145. package/dist/Skola24/txt/from/calendar-exceptions.js.map +1 -1
  146. package/dist/Skola24/txt/from/division.js.map +1 -1
  147. package/dist/Skola24/txt/from/index.js.map +1 -1
  148. package/dist/Skola24/txt/from/period.js +34 -31
  149. package/dist/Skola24/txt/from/period.js.map +1 -1
  150. package/dist/Skola24/txt/from/schedules.d.ts +0 -1
  151. package/dist/Skola24/txt/from/schedules.js +10 -6
  152. package/dist/Skola24/txt/from/schedules.js.map +1 -1
  153. package/dist/Skola24/txt/from/util.js.map +1 -1
  154. package/dist/Skola24/txt/index.d.ts +0 -1
  155. package/dist/Skola24/txt/to/index.d.ts +0 -1
  156. package/dist/Skola24/txt/to/schedules.js +12 -5
  157. package/dist/Skola24/txt/to/schedules.js.map +1 -1
  158. package/dist/common/constants.js.map +1 -1
  159. package/dist/common/functions.js.map +1 -1
  160. package/dist/common/get-date.js.map +1 -1
  161. package/dist/common/make-chainable/index.js.map +1 -1
  162. package/dist/common/types.d.ts +3 -1
  163. package/dist/core/from/configurations.js.map +1 -1
  164. package/dist/core/from/courses.js.map +1 -1
  165. package/dist/core/from/events.js.map +1 -1
  166. package/dist/core/from/exceptions.js.map +1 -1
  167. package/dist/core/from/groups.js.map +1 -1
  168. package/dist/core/from/index.js.map +1 -1
  169. package/dist/core/from/locations.js.map +1 -1
  170. package/dist/core/from/locked-times.js.map +1 -1
  171. package/dist/core/from/overlap-groups.js.map +1 -1
  172. package/dist/core/from/periods.js.map +1 -1
  173. package/dist/core/from/persons.js.map +1 -1
  174. package/dist/core/from/root-intervals.js.map +1 -1
  175. package/dist/core/from/schedules.js.map +1 -1
  176. package/dist/core/from/settings.js.map +1 -1
  177. package/dist/core/from/syllabuses.js.map +1 -1
  178. package/dist/core/from/teachers.js.map +1 -1
  179. package/dist/core/index.d.ts +0 -1
  180. package/dist/core/interfaces/other/companies.js.map +1 -1
  181. package/dist/core/interfaces/other/operations.d.ts +0 -1
  182. package/dist/core/interfaces/vertices/companies.d.ts +0 -1
  183. package/dist/core/interfaces/vertices/configurations.d.ts +0 -1
  184. package/dist/core/interfaces/vertices/conversations.d.ts +24 -0
  185. package/dist/core/interfaces/vertices/courses.d.ts +0 -1
  186. package/dist/core/interfaces/vertices/division-settings.d.ts +0 -1
  187. package/dist/core/interfaces/vertices/divisions.d.ts +0 -1
  188. package/dist/core/interfaces/vertices/events.d.ts +0 -1
  189. package/dist/core/interfaces/vertices/exceptions.d.ts +0 -1
  190. package/dist/core/interfaces/vertices/generations.d.ts +0 -2
  191. package/dist/core/interfaces/vertices/groups.d.ts +0 -1
  192. package/dist/core/interfaces/vertices/index.d.ts +14 -1
  193. package/dist/core/interfaces/vertices/locations.d.ts +0 -1
  194. package/dist/core/interfaces/vertices/locked-times.d.ts +0 -2
  195. package/dist/core/interfaces/vertices/messages.d.ts +21 -0
  196. package/dist/core/interfaces/vertices/overlap-groups.d.ts +0 -1
  197. package/dist/core/interfaces/vertices/periods.d.ts +0 -2
  198. package/dist/core/interfaces/vertices/persons.d.ts +0 -1
  199. package/dist/core/interfaces/vertices/properties/belongs-to.d.ts +0 -1
  200. package/dist/core/interfaces/vertices/properties/coalesced.d.ts +0 -1
  201. package/dist/core/interfaces/vertices/root-intervals.d.ts +0 -2
  202. package/dist/core/interfaces/vertices/syllabuses.d.ts +0 -1
  203. package/dist/core/interfaces/vertices/teachers.d.ts +0 -1
  204. package/dist/core/interfaces/vertices/threads.d.ts +0 -1
  205. package/dist/core/interfaces/vertices/users.d.ts +0 -1
  206. package/dist/core/interfaces/vertices/util/custom-vertex-export/index.d.ts +6 -6
  207. package/dist/core/interfaces/vertices/util/custom-vertex-export/util.d.ts +4 -4
  208. package/dist/core/interfaces/vertices/util/deep-vertex-export/index.d.ts +9 -9
  209. package/dist/core/interfaces/vertices/util/edges.d.ts +7 -7
  210. package/dist/core/interfaces/vertices/util/util.d.ts +24 -20
  211. package/dist/core/interfaces/vertices/util/vertex-query/index.d.ts +11 -11
  212. package/dist/core/interfaces/vertices/util/vertex.d.ts +2 -2
  213. package/dist/core/interfaces/vertices/vertex-query.d.ts +32 -27
  214. package/dist/core/interfaces/vertices/vertex-query.js +8 -0
  215. package/dist/core/interfaces/vertices/vertex-query.js.map +1 -1
  216. package/dist/core/to/configurations.js +2 -1
  217. package/dist/core/to/configurations.js.map +1 -1
  218. package/dist/core/to/courses.js +2 -1
  219. package/dist/core/to/courses.js.map +1 -1
  220. package/dist/core/to/division.js.map +1 -1
  221. package/dist/core/to/events.js +2 -1
  222. package/dist/core/to/events.js.map +1 -1
  223. package/dist/core/to/exceptions.js +2 -1
  224. package/dist/core/to/exceptions.js.map +1 -1
  225. package/dist/core/to/groups.js +2 -1
  226. package/dist/core/to/groups.js.map +1 -1
  227. package/dist/core/to/locations.js +2 -1
  228. package/dist/core/to/locations.js.map +1 -1
  229. package/dist/core/to/locked-times.js +2 -1
  230. package/dist/core/to/locked-times.js.map +1 -1
  231. package/dist/core/to/overlap-groups.js +2 -1
  232. package/dist/core/to/overlap-groups.js.map +1 -1
  233. package/dist/core/to/periods.js +2 -1
  234. package/dist/core/to/periods.js.map +1 -1
  235. package/dist/core/to/persons.js +2 -1
  236. package/dist/core/to/persons.js.map +1 -1
  237. package/dist/core/to/root-intervals.js +2 -1
  238. package/dist/core/to/root-intervals.js.map +1 -1
  239. package/dist/core/to/schedules.d.ts +0 -1
  240. package/dist/core/to/schedules.js.map +1 -1
  241. package/dist/core/to/settings.js +2 -1
  242. package/dist/core/to/settings.js.map +1 -1
  243. package/dist/core/to/syllabuses.js +2 -1
  244. package/dist/core/to/syllabuses.js.map +1 -1
  245. package/dist/core/to/teachers.js +2 -1
  246. package/dist/core/to/teachers.js.map +1 -1
  247. package/dist/core/to/util.d.ts +0 -2
  248. package/dist/core/to/util.js +2 -1
  249. package/dist/core/to/util.js.map +1 -1
  250. package/dist/core/types/index.d.ts +0 -1
  251. package/dist/core/util.js +2 -1
  252. package/dist/core/util.js.map +1 -1
  253. package/dist/identify/constants/index.js.map +1 -1
  254. package/dist/identify/index.js +2 -1
  255. package/dist/identify/index.js.map +1 -1
  256. package/dist/sdui/from/classes.js.map +1 -1
  257. package/dist/sdui/from/courses.js.map +1 -1
  258. package/dist/sdui/from/holidays.js.map +1 -1
  259. package/dist/sdui/from/index.js.map +1 -1
  260. package/dist/sdui/from/lessons.js.map +1 -1
  261. package/dist/sdui/from/rooms.js.map +1 -1
  262. package/dist/sdui/from/schedules.d.ts +0 -2
  263. package/dist/sdui/from/schedules.js.map +1 -1
  264. package/dist/sdui/from/school-years.js.map +1 -1
  265. package/dist/sdui/from/substitution-plans.js.map +1 -1
  266. package/dist/sdui/from/teachers.js.map +1 -1
  267. package/dist/sdui/to/classes.js.map +1 -1
  268. package/dist/sdui/to/courses.js.map +1 -1
  269. package/dist/sdui/to/holidays.js.map +1 -1
  270. package/dist/sdui/to/hours.js.map +1 -1
  271. package/dist/sdui/to/index.d.ts +0 -2
  272. package/dist/sdui/to/lessons.js.map +1 -1
  273. package/dist/sdui/to/rooms.js.map +1 -1
  274. package/dist/sdui/to/schedules.js.map +1 -1
  275. package/dist/sdui/to/school-years.js.map +1 -1
  276. package/dist/sdui/to/substitution-plans.js +6 -3
  277. package/dist/sdui/to/substitution-plans.js.map +1 -1
  278. package/dist/sdui/to/teachers.js.map +1 -1
  279. package/dist/vKlass/from/index.js.map +1 -1
  280. package/dist/vKlass/from/schedule.d.ts +0 -1
  281. package/dist/vKlass/from/schedule.js.map +1 -1
  282. package/dist/vKlass/to/schedules.js +17 -6
  283. package/dist/vKlass/to/schedules.js.map +1 -1
  284. package/package.json +1 -1
  285. package/dist/core/interfaces/index.d.ts +0 -23
  286. package/dist/core/interfaces/other/index.d.ts +0 -6
  287. package/dist/core/interfaces/vertices/util/index.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"schedules.js","names":["memberIds: string[]"],"sources":["../../../src/vKlass/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from 'mongoose';\nimport XLSX from 'xlsx';\nimport type { Types as CoreTypes } from '../../core/types';\nimport { getVertexId } from '../../core/util';\n\ntype Schedule = {\n division: CoreTypes.Deep.Division;\n teachers: CoreTypes.Deep.Teacher[];\n courses: CoreTypes.Deep.Course[];\n persons: CoreTypes.Deep.Person[];\n};\n\nexport default function (\n schedule: Schedule,\n): XLSX.WorkBook {\n const did = getVertexId(schedule.division, { idKey: 'id' });\n if (!did) throw new Error('division id is undefined');\n\n // get start and end dates from division in format date + time format: 2024-08-15 00:00:00\n const startDate = moment.utc(schedule.division.start).format('YYYY-MM-DD HH:mm:ss');\n const endDate = moment.utc(schedule.division.end).format('YYYY-MM-DD HH:mm:ss');\n\n // Map persons by id to SSN\n const personMap = new Map<string, string>();\n schedule.persons.forEach((p) => {\n const ssn = p.SSN?.value;\n const id = getVertexId(p, { idKey: '_id' });\n if (ssn && id)\n personMap.set(id, ssn);\n });\n\n const teacherMap = new Map<string, string>();\n schedule.teachers.forEach((t) => {\n const signature = t.signature;\n const id = getVertexId(t, { idKey: 'id' });\n if (signature && id)\n teacherMap.set(id, signature);\n });\n\n\n\n const courses = schedule.courses.map((course) => {\n const group = validateGroup(course.groups);\n if (!group) return null;\n\n const teacherIds = course.teachers?.map((t) => getVertexId(t.to, { idKey: 'id' })).filter((id) => id != null) ?? [];\n const teacherSignatures = teacherIds.map((id) => teacherMap.get(id)).filter((sig) => sig != null);\n\n const courseName = course.displayName || '';\n const subject = course.subject || '';\n\n const membersSSNs = group.members.map((id) => {\n return personMap.get(id);\n }).filter((ssn) => !!ssn);\n\n if (membersSSNs.length === 0) return null;\n\n return membersSSNs.map((ssn) => ({\n Personnummer: ssn ? formatSSN(ssn) : '',\n Kurskod: subject,\n Benämning: courseName,\n Undervisningsgrupp: group.displayName || '',\n Lärarsignatur: teacherSignatures ? teacherSignatures.join(',') : '',\n Poäng: 0,\n Startdatum: startDate,\n Slutdatum: endDate\n }));\n\n }).flat().filter(x => x !== null);\n\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(courses), 'Kurser');\n\n return wb;\n}\n\n// Validate that the group is valid and has at least one member\nfunction validateGroup (groups: CoreTypes.Deep.Course['groups']): {\n members: string[], // Array of member IDs\n displayName?: string\n} | null {\n const group = groups?.at(0)?.to;\n\n if (!(typeof group === 'object') || !('members' in group)) return null;\n\n if (!group?.members || group.members.length === 0) return null;\n\n const memberIds: string[] = [];\n for (const member of group.members) {\n const id = (typeof member === 'object' && 'id' in member) ? member.id : member;\n memberIds.push((id as unknown as (Types.ObjectId | string)).toString());\n }\n if (memberIds.length === 0) return null;\n\n return { members: memberIds, displayName: group.displayName };\n}\n\n/**\n * Formats a Swedish SSN (personnummer) from the standard 12-digit format (YYYYMMDDXXXX) to the common 10-digit format (YYMMDD-XXXX).\n * If the input is already in the 10-digit format, it is returned as is.\n * If the input is invalid, null is returned.\n *\n * @param ssn - The SSN to format, either as a string or number.\n * @returns The formatted SSN in 10-digit format, or null if invalid.\n */\nfunction formatSSN (ssn: string | number): string {\n if (typeof ssn === 'number') {\n ssn = ssn.toString();\n }\n if (typeof ssn !== 'string') {\n return '';\n }\n\n // Check if already in YYMMDD-XXXX format\n const regex10 = /^\\d{6}-\\d{4}$/;\n if (regex10.test(ssn)) {\n return ssn;\n }\n\n // Remove any non-digit characters\n ssn = ssn.replace(/\\D/g, '');\n\n if (ssn.length === 12) {\n // Convert from YYYYMMDDXXXX to YYMMDD-XXXX\n const year = ssn.slice(2, 4);\n const month = ssn.slice(4, 6);\n const day = ssn.slice(6, 8);\n const lastFour = ssn.slice(8);\n return `${year}${month}${day}-${lastFour}`;\n } else if (ssn.length === 10) {\n // Already in YYMMDDXXXX format, just add the hyphen\n const datePart = ssn.slice(0, 6);\n const lastFour = ssn.slice(6);\n return `${datePart}-${lastFour}`;\n } else {\n // Invalid SSN format\n return '';\n }\n}"],"mappings":"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"}
1
+ {"version":3,"file":"schedules.js","names":["memberIds: string[]"],"sources":["../../../src/vKlass/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport type { Types } from 'mongoose';\nimport XLSX from 'xlsx';\nimport type { Types as CoreTypes } from '../../core/types';\nimport { getVertexId } from '../../core/util';\n\ntype Schedule = {\n division: CoreTypes.Deep.Division;\n teachers: CoreTypes.Deep.Teacher[];\n courses: CoreTypes.Deep.Course[];\n persons: CoreTypes.Deep.Person[];\n};\n\nexport default function (\n schedule: Schedule,\n): XLSX.WorkBook {\n const did = getVertexId(schedule.division, { idKey: 'id' });\n if (!did) throw new Error('division id is undefined');\n\n // get start and end dates from division in format date + time format: 2024-08-15 00:00:00\n const startDate = moment.utc(schedule.division.start).format('YYYY-MM-DD HH:mm:ss');\n const endDate = moment.utc(schedule.division.end).format('YYYY-MM-DD HH:mm:ss');\n\n // Map persons by id to SSN\n const personMap = new Map<string, string>();\n schedule.persons.forEach((p) => {\n const ssn = p.SSN?.value;\n const id = getVertexId(p, { idKey: '_id' });\n if (ssn && id)\n personMap.set(id, ssn);\n });\n\n const teacherMap = new Map<string, string>();\n schedule.teachers.forEach((t) => {\n const signature = t.signature;\n const id = getVertexId(t, { idKey: 'id' });\n if (signature && id)\n teacherMap.set(id, signature);\n });\n\n\n\n const courses = schedule.courses.map((course) => {\n const group = validateGroup(course.groups);\n if (!group) return null;\n\n const teacherIds = course.teachers?.map((t) => getVertexId(t.to, { idKey: 'id' })).filter((id) => id != null) ?? [];\n const teacherSignatures = teacherIds.map((id) => teacherMap.get(id)).filter((sig) => sig != null);\n\n const courseName = course.displayName || '';\n const subject = course.subject || '';\n\n const membersSSNs = group.members.map((id) => {\n return personMap.get(id);\n }).filter((ssn) => !!ssn);\n\n if (membersSSNs.length === 0) return null;\n\n return membersSSNs.map((ssn) => ({\n Personnummer: ssn ? formatSSN(ssn) : '',\n Kurskod: subject,\n Benämning: courseName,\n Undervisningsgrupp: group.displayName || '',\n Lärarsignatur: teacherSignatures ? teacherSignatures.join(',') : '',\n Poäng: 0,\n Startdatum: startDate,\n Slutdatum: endDate\n }));\n\n }).flat().filter(x => x !== null);\n\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(courses), 'Kurser');\n\n return wb;\n}\n\n// Validate that the group is valid and has at least one member\nfunction validateGroup (groups: CoreTypes.Deep.Course['groups']): {\n members: string[], // Array of member IDs\n displayName?: string\n} | null {\n const group = groups?.at(0)?.to;\n\n if (!(typeof group === 'object') || !('members' in group)) return null;\n\n if (!group?.members || group.members.length === 0) return null;\n\n const memberIds: string[] = [];\n for (const member of group.members) {\n const id = (typeof member === 'object' && 'id' in member) ? member.id : member;\n memberIds.push((id as unknown as (Types.ObjectId | string)).toString());\n }\n if (memberIds.length === 0) return null;\n\n return { members: memberIds, displayName: group.displayName };\n}\n\n/**\n * Formats a Swedish SSN (personnummer) from the standard 12-digit format (YYYYMMDDXXXX) to the common 10-digit format (YYMMDD-XXXX).\n * If the input is already in the 10-digit format, it is returned as is.\n * If the input is invalid, null is returned.\n *\n * @param ssn - The SSN to format, either as a string or number.\n * @returns The formatted SSN in 10-digit format, or null if invalid.\n */\nfunction formatSSN (ssn: string | number): string {\n if (typeof ssn === 'number') {\n ssn = ssn.toString();\n }\n if (typeof ssn !== 'string') {\n return '';\n }\n\n // Check if already in YYMMDD-XXXX format\n const regex10 = /^\\d{6}-\\d{4}$/;\n if (regex10.test(ssn)) {\n return ssn;\n }\n\n // Remove any non-digit characters\n ssn = ssn.replace(/\\D/g, '');\n\n if (ssn.length === 12) {\n // Convert from YYYYMMDDXXXX to YYMMDD-XXXX\n const year = ssn.slice(2, 4);\n const month = ssn.slice(4, 6);\n const day = ssn.slice(6, 8);\n const lastFour = ssn.slice(8);\n return `${year}${month}${day}-${lastFour}`;\n } else if (ssn.length === 10) {\n // Already in YYMMDDXXXX format, just add the hyphen\n const datePart = ssn.slice(0, 6);\n const lastFour = ssn.slice(6);\n return `${datePart}-${lastFour}`;\n } else {\n // Invalid SSN format\n return '';\n }\n}"],"mappings":";;;;;AAaA,2BACE,UACe;CACf,MAAM,MAAM,YAAY,SAAS,UAAU,EAAE,OAAO;AACpD,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM;CAG1B,MAAM,YAAY,OAAO,IAAI,SAAS,SAAS,OAAO,OAAO;CAC7D,MAAM,UAAU,OAAO,IAAI,SAAS,SAAS,KAAK,OAAO;CAGzD,MAAM,4BAAY,IAAI;AACtB,UAAS,QAAQ,SAAS,MAAM;EAC9B,MAAM,MAAM,EAAE,KAAK;EACnB,MAAM,KAAK,YAAY,GAAG,EAAE,OAAO;AACnC,MAAI,OAAO,GACT,WAAU,IAAI,IAAI;;CAGtB,MAAM,6BAAa,IAAI;AACvB,UAAS,SAAS,SAAS,MAAM;EAC/B,MAAM,YAAY,EAAE;EACpB,MAAM,KAAK,YAAY,GAAG,EAAE,OAAO;AACnC,MAAI,aAAa,GACf,YAAW,IAAI,IAAI;;CAKvB,MAAM,UAAU,SAAS,QAAQ,KAAK,WAAW;EAC/C,MAAM,QAAQ,cAAc,OAAO;AACnC,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,aAAa,OAAO,UAAU,KAAK,MAAM,YAAY,EAAE,IAAI,EAAE,OAAO,SAAS,QAAQ,OAAO,MAAM,SAAS;EACjH,MAAM,oBAAoB,WAAW,KAAK,OAAO,WAAW,IAAI,KAAK,QAAQ,QAAQ,OAAO;EAE5F,MAAM,aAAa,OAAO,eAAe;EACzC,MAAM,UAAU,OAAO,WAAW;EAElC,MAAM,cAAc,MAAM,QAAQ,KAAK,OAAO;AAC5C,UAAO,UAAU,IAAI;KACpB,QAAQ,QAAQ,CAAC,CAAC;AAErB,MAAI,YAAY,WAAW,EAAG,QAAO;AAErC,SAAO,YAAY,KAAK,SAAS;GAC/B,cAAoB,MAAM,UAAU,OAAO;GAC3C,SAAoB;GACpB,WAAoB;GACpB,oBAAoB,MAAM,eAAe;GACzC,eAAoB,oBAAoB,kBAAkB,KAAK,OAAO;GACtE,OAAoB;GACpB,YAAoB;GACpB,WAAoB;;IAGrB,OAAO,QAAO,MAAK,MAAM;CAE5B,MAAM,KAAK,KAAK,MAAM;AACtB,MAAK,MAAM,kBAAkB,IAAI,KAAK,MAAM,cAAc,UAAU;AAEpE,QAAO;;AAIT,SAAS,cAAe,QAGf;CACP,MAAM,QAAQ,QAAQ,GAAG,IAAI;AAE7B,KAAI,EAAE,OAAO,UAAU,aAAa,EAAE,aAAa,OAAQ,QAAO;AAElE,KAAI,CAAC,OAAO,WAAW,MAAM,QAAQ,WAAW,EAAG,QAAO;CAE1D,MAAMA,YAAsB;AAC5B,MAAK,MAAM,UAAU,MAAM,SAAS;EAClC,MAAM,KAAM,OAAO,WAAW,YAAY,QAAQ,SAAU,OAAO,KAAK;AACxE,YAAU,KAAM,GAA4C;;AAE9D,KAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAO;EAAE,SAAS;EAAW,aAAa,MAAM;;;;;;;;;;;AAWlD,SAAS,UAAW,KAA8B;AAChD,KAAI,OAAO,QAAQ,SACjB,OAAM,IAAI;AAEZ,KAAI,OAAO,QAAQ,SACjB,QAAO;CAIT,MAAM,UAAU;AAChB,KAAI,QAAQ,KAAK,KACf,QAAO;AAIT,OAAM,IAAI,QAAQ,OAAO;AAEzB,KAAI,IAAI,WAAW,IAAI;EAErB,MAAM,OAAO,IAAI,MAAM,GAAG;EAC1B,MAAM,QAAQ,IAAI,MAAM,GAAG;EAC3B,MAAM,MAAM,IAAI,MAAM,GAAG;EACzB,MAAM,WAAW,IAAI,MAAM;AAC3B,SAAO,GAAG,OAAO,QAAQ,IAAI,GAAG;YACvB,IAAI,WAAW,IAAI;EAE5B,MAAM,WAAW,IAAI,MAAM,GAAG;EAC9B,MAAM,WAAW,IAAI,MAAM;AAC3B,SAAO,GAAG,SAAS,GAAG;OAGtB,QAAO"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@royalschedule/maps",
3
3
  "description": "",
4
- "version": "4.0.35",
4
+ "version": "4.0.36",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -1,23 +0,0 @@
1
- import { Coalesced } from "./vertices/properties/coalesced.js";
2
- import { Species } from "./vertices/properties/species.js";
3
- import { AllWeeks, Week, allWeeks } from "./vertices/properties/week.js";
4
- import { Day } from "./vertices/properties/days.js";
5
- import { Interval } from "./vertices/properties/intervals.js";
6
- import { Tag, TagType } from "./vertices/properties/tags.js";
7
- import { MaximumScheduleSpan } from "./vertices/properties/maximum-schedule-span.js";
8
- import { PlannedScheduledDuration } from "./vertices/properties/planned-scheduled-duration.js";
9
- import { MinBreakLength } from "./vertices/properties/min-break-length.js";
10
- import { PublicId } from "./vertices/properties/index.js";
11
- import { CalendarException } from "./vertices/division-settings.js";
12
- import { Address, AutoSyncConfig, Company, GlobalDefaultValues, INACTIVITY_ACTIONS, InactivityAction, InactivitySettings, PublicConfig, TimeRosterSection } from "./other/companies.js";
13
- import { Integration } from "./other/integrations.js";
14
- import { User } from "./other/users.js";
15
- import { Action, Policy, Statement } from "./other/policies.js";
16
- import { Operation, OperationType, operationType } from "./other/operations.js";
17
- import { ErrorCode, SyncLog } from "./other/sync-logs.js";
18
- import "./other/index.js";
19
- import { StepGuideProgress } from "./vertices/divisions.js";
20
- import { CalendarExceptionAction, ExceptionStatus } from "./vertices/exceptions.js";
21
- import { LockedTimeType } from "./vertices/locked-times.js";
22
- import { Infer, VertexQuery, createVertexQuery } from "./vertices/vertex-query.js";
23
- import { Deep, DeepWithoutPrivateId, Mixed, MixedWithOptionalId, Serialized, SerializedWithOptionalId } from "./vertices/index.js";
@@ -1,6 +0,0 @@
1
- import { Address, AutoSyncConfig, Company, GlobalDefaultValues, INACTIVITY_ACTIONS, InactivityAction, InactivitySettings, PublicConfig, TimeRosterSection } from "./companies.js";
2
- import { Integration } from "./integrations.js";
3
- import { User } from "./users.js";
4
- import { Action, Policy, Statement } from "./policies.js";
5
- import { Operation, OperationType, operationType } from "./operations.js";
6
- import { ErrorCode, SyncLog } from "./sync-logs.js";
@@ -1,6 +0,0 @@
1
- import { Collection, PseudoCollection, RealCollection, Vertex, VertexFactory } from "./vertex.js";
2
- import { AvailableLocation, Coalesced, EdgeWrapper, GroupWithExclude, Plain, ThreadMessage, Wrapped } from "./edges.js";
3
- import { AssertNoInvalidExpandKeys } from "./custom-vertex-export/assert-no-invalid-expand-keys.js";
4
- import { CustomVertexExport } from "./custom-vertex-export/index.js";
5
- import { DeepVertexExport, MixedVertexExport, MixedWithOptionalIdVertexExport } from "./deep-vertex-export/index.js";
6
- import { SerializedVertexExport } from "./serialized-vertex-export.js";