@royalschedule/maps 3.3.1 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/vKlass/index.d.ts +2 -0
- package/dist/vKlass/index.js +2 -0
- package/dist/vKlass/index.js.map +1 -1
- package/dist/vKlass/to/index.d.ts +9 -0
- package/dist/vKlass/to/index.js +10 -0
- package/dist/vKlass/to/index.js.map +1 -0
- package/dist/vKlass/to/schedules.d.ts +14 -0
- package/dist/vKlass/to/schedules.js +74 -0
- package/dist/vKlass/to/schedules.js.map +1 -0
- package/package.json +1 -1
package/dist/vKlass/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { export_default } from "./from/index.js";
|
|
2
|
+
import { export_default as export_default$1 } from "./to/index.js";
|
|
2
3
|
|
|
3
4
|
//#region src/vKlass/index.d.ts
|
|
4
5
|
declare class vKlassMap {
|
|
5
6
|
static from: typeof export_default;
|
|
7
|
+
static to: typeof export_default$1;
|
|
6
8
|
}
|
|
7
9
|
//#endregion
|
|
8
10
|
export { vKlassMap };
|
package/dist/vKlass/index.js
CHANGED
package/dist/vKlass/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_from"],"sources":["../../src/vKlass/index.ts"],"sourcesContent":["import _from from './from';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_from","_to"],"sources":["../../src/vKlass/index.ts"],"sourcesContent":["import _from from './from';\nimport _to from './to';\nexport class vKlassMap {\n static from = _from;\n static to = _to;\n}\n"],"mappings":";;;;AAEA,IAAa,YAAb,MAAuB;CACrB,OAAO,OAAOA;CACd,OAAO,KAAOC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { export_default } from "./schedules.js";
|
|
2
|
+
|
|
3
|
+
//#region src/vKlass/to/index.d.ts
|
|
4
|
+
declare class export_default$1 {
|
|
5
|
+
static schedules: typeof export_default;
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { export_default$1 as export_default };
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_schedules"],"sources":["../../../src/vKlass/to/index.ts"],"sourcesContent":["import _schedules from './schedules';\n\nexport default class {\n static schedules = _schedules;\n}"],"mappings":";;;AAEA,uBAAqB;CACnB,OAAO,YAAYA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Types } from "../../core/v2/types/index.js";
|
|
2
|
+
import XLSX from "xlsx";
|
|
3
|
+
|
|
4
|
+
//#region src/vKlass/to/schedules.d.ts
|
|
5
|
+
type Schedule = {
|
|
6
|
+
division: Types.division;
|
|
7
|
+
teachers: Types.teacher[];
|
|
8
|
+
courses: Types.course[];
|
|
9
|
+
persons: Types.person[];
|
|
10
|
+
};
|
|
11
|
+
declare function export_default(schedule: Schedule): XLSX.WorkBook;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { export_default };
|
|
14
|
+
//# sourceMappingURL=schedules.d.ts.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import moment from "moment";
|
|
2
|
+
import XLSX from "xlsx";
|
|
3
|
+
import { isObjectIdOrHexString } from "mongoose";
|
|
4
|
+
|
|
5
|
+
//#region src/vKlass/to/schedules.ts
|
|
6
|
+
function schedules_default(schedule) {
|
|
7
|
+
const did = schedule.division.id;
|
|
8
|
+
if (!did) throw new Error("division id is undefined");
|
|
9
|
+
const startDate = moment.utc(schedule.division.start).format("YYYY-MM-DD HH:mm:ss");
|
|
10
|
+
const endDate = moment.utc(schedule.division.end).format("YYYY-MM-DD HH:mm:ss");
|
|
11
|
+
const personMap = /* @__PURE__ */ new Map();
|
|
12
|
+
schedule.persons.forEach((p) => {
|
|
13
|
+
const ssn = p.SSN?.value;
|
|
14
|
+
const id = p.id?.toString();
|
|
15
|
+
if (ssn && id) personMap.set(id, ssn);
|
|
16
|
+
});
|
|
17
|
+
const teacherMap = /* @__PURE__ */ new Map();
|
|
18
|
+
schedule.teachers.forEach((t) => {
|
|
19
|
+
const signature = t.signature;
|
|
20
|
+
const id = t.id?.toString();
|
|
21
|
+
if (signature && id) teacherMap.set(id, signature);
|
|
22
|
+
});
|
|
23
|
+
const courses = schedule.courses.map((course) => {
|
|
24
|
+
const group = validateGroup(course.groups);
|
|
25
|
+
if (!group) return null;
|
|
26
|
+
const teacherId = getTeacherId(course.teachers?.at(0)?.to);
|
|
27
|
+
const teacherSignature = teacherId ? teacherMap.get(teacherId) : "";
|
|
28
|
+
const courseName = course.displayName || "";
|
|
29
|
+
const subject = course.subject || "";
|
|
30
|
+
const membersSSNs = group.members.map((id) => {
|
|
31
|
+
return personMap.get(id);
|
|
32
|
+
}).filter((ssn) => !!ssn);
|
|
33
|
+
if (membersSSNs.length === 0) return null;
|
|
34
|
+
return membersSSNs.map((ssn) => ({
|
|
35
|
+
Personnummer: ssn,
|
|
36
|
+
Kurskod: subject,
|
|
37
|
+
Benämning: courseName,
|
|
38
|
+
Undervisningsgrupp: group.displayName || "",
|
|
39
|
+
Lärarsignatur: teacherSignature,
|
|
40
|
+
Poäng: 0,
|
|
41
|
+
Startdatum: startDate,
|
|
42
|
+
Slutdatum: endDate
|
|
43
|
+
}));
|
|
44
|
+
}).flat().filter((x) => x !== null);
|
|
45
|
+
const wb = XLSX.utils.book_new();
|
|
46
|
+
XLSX.utils.book_append_sheet(wb, XLSX.utils.json_to_sheet(courses), "Kurser");
|
|
47
|
+
return wb;
|
|
48
|
+
}
|
|
49
|
+
function validateGroup(groups) {
|
|
50
|
+
const group = groups?.at(0)?.to;
|
|
51
|
+
if (!(typeof group === "object") || !("members" in group)) return null;
|
|
52
|
+
if (!group?.members || group.members.length === 0) return null;
|
|
53
|
+
const memberIds = [];
|
|
54
|
+
for (const member of group.members) {
|
|
55
|
+
const id = typeof member === "object" && "id" in member ? member.id : member;
|
|
56
|
+
if (id && isObjectIdOrHexString(id)) memberIds.push(typeof id === "string" ? id : id.toString());
|
|
57
|
+
}
|
|
58
|
+
if (memberIds.length === 0) return null;
|
|
59
|
+
return {
|
|
60
|
+
members: group.members,
|
|
61
|
+
displayName: group.displayName
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function getTeacherId(teacher) {
|
|
65
|
+
if (!teacher) return null;
|
|
66
|
+
if (typeof teacher === "string") return teacher;
|
|
67
|
+
if (isObjectIdOrHexString(teacher)) return teacher.toString();
|
|
68
|
+
if (typeof teacher === "object" && "id" in teacher && teacher.id) return typeof teacher.id === "string" ? teacher.id : teacher.id.toString();
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { schedules_default as default };
|
|
74
|
+
//# sourceMappingURL=schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedules.js","names":["memberIds: string[]"],"sources":["../../../src/vKlass/to/schedules.ts"],"sourcesContent":["import moment from 'moment';\nimport { isObjectIdOrHexString, Types } from 'mongoose';\nimport XLSX from 'xlsx';\n\nimport { Types as CoreTypes } from '../../core/types';\n\ntype Schedule = {\n division: CoreTypes.division;\n teachers: CoreTypes.teacher[];\n courses: CoreTypes.course[];\n persons: CoreTypes.person[];\n};\n\nexport default function (schedule: Schedule): XLSX.WorkBook {\n const did = schedule.division.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 = p.id?.toString();\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 = t.id?.toString();\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 teacherId = getTeacherId(course.teachers?.at(0)?.to);\n const teacherSignature = teacherId ? teacherMap.get(teacherId) : '';\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,\n Kurskod: subject,\n Benämning: courseName,\n Undervisningsgrupp: group.displayName || '',\n Lärarsignatur: teacherSignature,\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.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 if (id && isObjectIdOrHexString(id)) {\n memberIds.push(typeof id === 'string' ? id : (id as unknown as Types.ObjectId).toString());\n }\n }\n if (memberIds.length === 0) return null;\n\n return { members: group.members as string[], displayName: group.displayName };\n}\n\nfunction getTeacherId (teacher: CoreTypes.teacher | Types.ObjectId | string | undefined | null): string | null {\n if (!teacher) return null;\n if (typeof teacher === 'string') return teacher;\n if (isObjectIdOrHexString(teacher)) return (teacher as Types.ObjectId).toString();\n if (typeof teacher === 'object' && 'id' in teacher && teacher.id) {\n return typeof teacher.id === 'string' ? teacher.id : teacher.id.toString();\n }\n return null;\n}"],"mappings":";;;;;AAaA,2BAAyB,UAAmC;CAC1D,MAAM,MAAM,SAAS,SAAS;AAC9B,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,EAAE,IAAI;AACjB,MAAI,OAAO,GACT,WAAU,IAAI,IAAI;;CAGtB,MAAM,6BAAa,IAAI;AACvB,UAAS,SAAS,SAAS,MAAM;EAC/B,MAAM,YAAY,EAAE;EACpB,MAAM,KAAK,EAAE,IAAI;AACjB,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,YAAY,aAAa,OAAO,UAAU,GAAG,IAAI;EACvD,MAAM,mBAAmB,YAAY,WAAW,IAAI,aAAa;EAEjE,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;GACpB,SAAoB;GACpB,WAAoB;GACpB,oBAAoB,MAAM,eAAe;GACzC,eAAoB;GACpB,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,MAAI,MAAM,sBAAsB,IAC9B,WAAU,KAAK,OAAO,OAAO,WAAW,KAAM,GAAiC;;AAGnF,KAAI,UAAU,WAAW,EAAG,QAAO;AAEnC,QAAO;EAAE,SAAS,MAAM;EAAqB,aAAa,MAAM;;;AAGlE,SAAS,aAAc,SAAwF;AAC7G,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,OAAO,YAAY,SAAU,QAAO;AACxC,KAAI,sBAAsB,SAAU,QAAQ,QAA2B;AACvE,KAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,QAAQ,GAC5D,QAAO,OAAO,QAAQ,OAAO,WAAW,QAAQ,KAAK,QAAQ,GAAG;AAElE,QAAO"}
|