@royalschedule/maps 4.0.1 → 4.0.3
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/Excel/v1/from/index.js +2 -2
- package/dist/Excel/v1/from/index.js.map +1 -1
- package/dist/Excel/v2/from/index.js +2 -2
- package/dist/Excel/v2/from/index.js.map +1 -1
- package/dist/InfoMentor/to/schedules.js +2 -2
- package/dist/InfoMentor/to/schedules.js.map +1 -1
- package/dist/PlanDigital/index.d.ts +28 -28
- package/dist/RS/make-connected.js +2 -2
- package/dist/RS/make-connected.js.map +1 -1
- package/dist/SS12000/from/activities.js +36 -0
- package/dist/SS12000/from/activities.js.map +1 -0
- package/dist/SS12000/from/calendar-events.js +20 -0
- package/dist/SS12000/from/calendar-events.js.map +1 -0
- package/dist/SS12000/from/duties.js +21 -0
- package/dist/SS12000/from/duties.js.map +1 -0
- package/dist/SS12000/from/groups.js +23 -0
- package/dist/SS12000/from/groups.js.map +1 -0
- package/dist/SS12000/from/index.js +24 -0
- package/dist/SS12000/from/index.js.map +1 -0
- package/dist/SS12000/from/persons.js +43 -0
- package/dist/SS12000/from/persons.js.map +1 -0
- package/dist/SS12000/from/resources.js +9 -0
- package/dist/SS12000/from/resources.js.map +1 -0
- package/dist/SS12000/from/rooms.js +18 -0
- package/dist/SS12000/from/rooms.js.map +1 -0
- package/dist/SS12000/from/syllabuses.js +21 -0
- package/dist/SS12000/from/syllabuses.js.map +1 -0
- package/dist/SS12000/index.d.ts +36 -0
- package/dist/SS12000/index.js +12 -0
- package/dist/SS12000/index.js.map +1 -0
- package/dist/SS12000/to/activities.js +63 -0
- package/dist/SS12000/to/activities.js.map +1 -0
- package/dist/SS12000/to/calendar-events.js +53 -0
- package/dist/SS12000/to/calendar-events.js.map +1 -0
- package/dist/SS12000/to/common.js +25 -0
- package/dist/SS12000/to/common.js.map +1 -0
- package/dist/SS12000/to/duties.js +45 -0
- package/dist/SS12000/to/duties.js.map +1 -0
- package/dist/SS12000/to/groups.js +47 -0
- package/dist/SS12000/to/groups.js.map +1 -0
- package/dist/SS12000/to/index.d.ts +58 -0
- package/dist/SS12000/to/index.js +24 -0
- package/dist/SS12000/to/index.js.map +1 -0
- package/dist/SS12000/to/persons.js +40 -0
- package/dist/SS12000/to/persons.js.map +1 -0
- package/dist/SS12000/to/resources.js +27 -0
- package/dist/SS12000/to/resources.js.map +1 -0
- package/dist/SS12000/to/rooms.js +32 -0
- package/dist/SS12000/to/rooms.js.map +1 -0
- package/dist/SS12000/to/syllabuses.js +34 -0
- package/dist/SS12000/to/syllabuses.js.map +1 -0
- package/dist/SS12000/types/activities.d.ts +41 -0
- package/dist/SS12000/types/calendar-events.d.ts +23 -0
- package/dist/SS12000/types/codes.d.ts +9 -0
- package/dist/SS12000/types/duties.d.ts +23 -0
- package/dist/SS12000/types/duty-assignments.d.ts +13 -0
- package/dist/SS12000/types/groups.d.ts +23 -0
- package/dist/SS12000/types/index.d.ts +21 -0
- package/dist/SS12000/types/organisation.d.ts +20 -0
- package/dist/SS12000/types/persons.d.ts +30 -0
- package/dist/SS12000/types/resources.d.ts +13 -0
- package/dist/SS12000/types/rooms.d.ts +17 -0
- package/dist/SS12000/types/syllabus.d.ts +19 -0
- package/dist/core/to/exceptions.js +5 -3
- package/dist/core/to/exceptions.js.map +1 -1
- package/dist/core/to/groups.js +4 -1
- package/dist/core/to/groups.js.map +1 -1
- package/dist/core/to/locations.js +4 -1
- package/dist/core/to/locations.js.map +1 -1
- package/dist/core/to/settings.js +4 -1
- package/dist/core/to/settings.js.map +1 -1
- package/dist/core/types/exceptions.d.ts +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.js +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isNil, omitBy } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/from/activities.ts
|
|
4
|
+
var activities_default = (activities, options) => {
|
|
5
|
+
if (!Array.isArray(activities)) throw new Error("(SS12000::From::Activities) Activities input is not of array type", { cause: "invalid_input" });
|
|
6
|
+
const parentActivities = new Set(activities.map((x) => x.parentActivity?.id).filter(Boolean));
|
|
7
|
+
return activities.map((activity) => {
|
|
8
|
+
if (parentActivities.has(activity.id)) return;
|
|
9
|
+
const groupIndexSet = [...new Set([void 0, ...activity.rooms?.map(({ index }) => index) ?? []])];
|
|
10
|
+
const doc = {
|
|
11
|
+
ids: activity.id,
|
|
12
|
+
startDate: activity.startDate,
|
|
13
|
+
...omitBy({
|
|
14
|
+
displayName: activity.displayName,
|
|
15
|
+
comment: activity.comment,
|
|
16
|
+
subject: activity.subject,
|
|
17
|
+
endDate: activity.endDate,
|
|
18
|
+
syllabus: activity._embedded?.syllabus
|
|
19
|
+
}, isNil),
|
|
20
|
+
...activity.minutesPlanned && { plannedDuration: `${Math.ceil(activity.minutesPlanned / 60)} hrs` },
|
|
21
|
+
type: activity.activityType,
|
|
22
|
+
groups: activity.groups?.map(({ id }) => ({ to: id })),
|
|
23
|
+
teachers: activity.teachers?.map(({ duty: { id } }) => ({ to: id })),
|
|
24
|
+
...activity.rooms && { locations: activity.rooms?.map(({ room, index }) => ({
|
|
25
|
+
locations: [room.id],
|
|
26
|
+
groupIndex: groupIndexSet.indexOf(index)
|
|
27
|
+
})) },
|
|
28
|
+
...activity._embedded?.syllabus && { subject: activity._embedded.syllabus.subjectCode }
|
|
29
|
+
};
|
|
30
|
+
return doc;
|
|
31
|
+
}).filter((x) => x != null);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { activities_default as default };
|
|
36
|
+
//# sourceMappingURL=activities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activities.js","names":[],"sources":["../../../src/SS12000/from/activities.ts"],"sourcesContent":["import { isNil, omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Activity } from '../types/activities';\n\nexport default (\n activities: Activity[],\n options?: { interval?: { start: string, end: string } }\n) => {\n if (!Array.isArray(activities))\n throw new Error('(SS12000::From::Activities) Activities input is not of array type', { cause: 'invalid_input' });\n\n const parentActivities = new Set(activities.map(x => x.parentActivity?.id).filter(Boolean));\n\n return activities\n .map((activity): CoreTypes.mixedWithoutInternalId.course | undefined => {\n // Skip activities that are above courses\n if (parentActivities.has(activity.id)) return;\n\n const groupIndexSet = [...new Set<number | undefined>([undefined, ...(activity.rooms?.map(({ index }) => index) ?? [])])];\n\n const doc = {\n ids: activity.id,\n startDate: activity.startDate,\n ...omitBy({\n displayName: activity.displayName,\n comment: activity.comment,\n subject: activity.subject,\n endDate: activity.endDate,\n syllabus: activity._embedded?.syllabus,\n }, isNil),\n ...activity.minutesPlanned && { plannedDuration: `${ Math.ceil(activity.minutesPlanned / 60) } hrs` },\n type: activity.activityType,\n groups: activity.groups?.map(({ id }) => ({ to: id })),\n teachers: activity.teachers?.map(({ duty: { id } }) => ({ to: id })),\n // not in the standard\n ...activity.rooms && {\n locations: activity.rooms?.map(({ room, index }) => ({ locations: [room.id!] as [string], groupIndex: groupIndexSet.indexOf(index) })),\n },\n ...activity._embedded?.syllabus && {\n subject: activity._embedded.syllabus.subjectCode,\n }\n };\n return doc;\n })\n .filter(x => x != null);\n};"],"mappings":";;;AAIA,0BACE,YACA,YACG;AACH,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,qEAAqE,EAAE,OAAO;CAEhG,MAAM,mBAAmB,IAAI,IAAI,WAAW,KAAI,MAAK,EAAE,gBAAgB,IAAI,OAAO;AAElF,QAAO,WACJ,KAAK,aAAkE;AAEtE,MAAI,iBAAiB,IAAI,SAAS,IAAK;EAEvC,MAAM,gBAAgB,CAAC,GAAG,IAAI,IAAwB,CAAC,QAAW,GAAI,SAAS,OAAO,KAAK,EAAE,YAAY,UAAU;EAEnH,MAAM,MAAM;GACV,KAAW,SAAS;GACpB,WAAW,SAAS;GACpB,GAAG,OAAO;IACR,aAAa,SAAS;IACtB,SAAa,SAAS;IACtB,SAAa,SAAS;IACtB,SAAa,SAAS;IACtB,UAAa,SAAS,WAAW;MAChC;GACH,GAAG,SAAS,kBAAkB,EAAE,iBAAiB,GAAI,KAAK,KAAK,SAAS,iBAAiB,IAAK;GAC9F,MAAU,SAAS;GACnB,QAAU,SAAS,QAAQ,KAAK,EAAE,UAAU,EAAE,IAAI;GAClD,UAAU,SAAS,UAAU,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI;GAE9D,GAAG,SAAS,SAAS,EACnB,WAAW,SAAS,OAAO,KAAK,EAAE,MAAM,aAAa;IAAE,WAAW,CAAC,KAAK;IAAkB,YAAY,cAAc,QAAQ;;GAE9H,GAAG,SAAS,WAAW,YAAY,EACjC,SAAS,SAAS,UAAU,SAAS;;AAGzC,SAAO;IAER,QAAO,MAAK,KAAK"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import rooms_default from "./rooms.js";
|
|
2
|
+
import moment from "moment";
|
|
3
|
+
|
|
4
|
+
//#region src/SS12000/from/calendar-events.ts
|
|
5
|
+
var calendar_events_default = (events) => {
|
|
6
|
+
if (!Array.isArray(events)) throw new Error("(SS12000::From::CalendarEvents) CalendarEvent input is not of array type", { cause: "invalid_input" });
|
|
7
|
+
return events.map((event) => ({
|
|
8
|
+
ids: event.id,
|
|
9
|
+
start: event.startTime.toString(),
|
|
10
|
+
end: event.endTime.toString(),
|
|
11
|
+
duration: moment(event.endTime).diff(event.endTime, "m"),
|
|
12
|
+
preferredDuration: moment(event.endTime).diff(event.endTime, "m"),
|
|
13
|
+
course: event.activity.id,
|
|
14
|
+
inLocations: rooms_default(event.rooms ?? [])
|
|
15
|
+
}));
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { calendar_events_default as default };
|
|
20
|
+
//# sourceMappingURL=calendar-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-events.js","names":["toRoom"],"sources":["../../../src/SS12000/from/calendar-events.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { CalendarEvent } from '../types/calendar-events';\nimport toRoom from './rooms';\n\nexport default (events: CalendarEvent[]) => {\n if (!Array.isArray(events))\n throw new Error('(SS12000::From::CalendarEvents) CalendarEvent input is not of array type', { cause: 'invalid_input' });\n\n return events\n .map((event): CoreTypes.mixedWithoutInternalId.event => ({\n ids: event.id,\n start: event.startTime.toString(),\n end: event.endTime.toString(),\n duration: moment(event.endTime).diff(event.endTime, 'm'),\n preferredDuration: moment(event.endTime).diff(event.endTime, 'm'),\n course: event.activity.id,\n inLocations: toRoom(event.rooms ?? []),\n // resources: toResource([])\n }));\n};\n"],"mappings":";;;;AAKA,+BAAgB,WAA4B;AAC1C,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,4EAA4E,EAAE,OAAO;AAEvG,QAAO,OACJ,KAAK,WAAmD;EACvD,KAAmB,MAAM;EACzB,OAAmB,MAAM,UAAU;EACnC,KAAmB,MAAM,QAAQ;EACjC,UAAmB,OAAO,MAAM,SAAS,KAAK,MAAM,SAAS;EAC7D,mBAAmB,OAAO,MAAM,SAAS,KAAK,MAAM,SAAS;EAC7D,QAAmB,MAAM,SAAS;EAClC,aAAmBA,cAAO,MAAM,SAAS"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import persons_default from "./persons.js";
|
|
2
|
+
import { omit } from "lodash-es";
|
|
3
|
+
|
|
4
|
+
//#region src/SS12000/from/duties.ts
|
|
5
|
+
var duties_default = (duties) => {
|
|
6
|
+
if (!Array.isArray(duties)) throw new Error("(SS12000::From::Duties) Teacher input is not of array type", { cause: "invalid_input" });
|
|
7
|
+
return duties.map((duty) => ({
|
|
8
|
+
ids: duty.id,
|
|
9
|
+
displayName: duty.displayName ?? duty.person?.displayName,
|
|
10
|
+
signature: duty.signature,
|
|
11
|
+
...(duty.person || duty._embedded?.person) && { person: {
|
|
12
|
+
type: "Teacher",
|
|
13
|
+
...duty.person && { ids: duty.person.id },
|
|
14
|
+
...duty._embedded?.person && omit(persons_default([duty._embedded.person])[0], "type")
|
|
15
|
+
} }
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { duties_default as default };
|
|
21
|
+
//# sourceMappingURL=duties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duties.js","names":["toPerson"],"sources":["../../../src/SS12000/from/duties.ts"],"sourcesContent":["import { omit } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Duty } from '../types/duties';\nimport toPerson from './persons';\n\nexport default (duties: Duty[]) => {\n if (!Array.isArray(duties))\n throw new Error('(SS12000::From::Duties) Teacher input is not of array type', { cause: 'invalid_input' });\n\n return duties\n .map((duty): CoreTypes.mixedWithoutInternalId.teacher => ({\n ids: duty.id,\n displayName: duty.displayName ?? duty.person?.displayName,\n signature: duty.signature,\n ...(duty.person || duty._embedded?.person) && {\n person: {\n type: 'Teacher',\n ...duty.person && { ids: duty.person.id },\n ...duty._embedded?.person && omit(toPerson([ duty._embedded.person ])[0], 'type')\n }\n }\n }));\n};\n"],"mappings":";;;;AAKA,sBAAgB,WAAmB;AACjC,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,8DAA8D,EAAE,OAAO;AAEzF,QAAO,OACJ,KAAK,UAAoD;EACxD,KAAa,KAAK;EAClB,aAAa,KAAK,eAAe,KAAK,QAAQ;EAC9C,WAAa,KAAK;EAClB,IAAI,KAAK,UAAU,KAAK,WAAW,WAAW,EAC5C,QAAQ;GACN,MAAM;GACN,GAAG,KAAK,UAAU,EAAE,KAAK,KAAK,OAAO;GACrC,GAAG,KAAK,WAAW,UAAU,KAAKA,gBAAS,CAAE,KAAK,UAAU,SAAU,IAAI"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import moment from "moment";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/from/groups.ts
|
|
4
|
+
function _transformGroupMembers(members, options) {
|
|
5
|
+
return [...new Set(members?.filter((member) => {
|
|
6
|
+
if (options?.end && member.startDate && !moment(member.startDate).isBefore(moment(options.end))) return false;
|
|
7
|
+
if (options?.start && member.endDate && !moment(member.endDate).isAfter(moment(options.start))) return false;
|
|
8
|
+
return true;
|
|
9
|
+
}).map((member) => member.person.id).filter(Boolean))];
|
|
10
|
+
}
|
|
11
|
+
var groups_default = (groups, options) => {
|
|
12
|
+
if (!Array.isArray(groups)) throw new Error("(SS12000::From::Groups) Group input is not of array type", { cause: "invalid_input" });
|
|
13
|
+
return groups.map((group) => ({
|
|
14
|
+
ids: group.id,
|
|
15
|
+
displayName: group.displayName,
|
|
16
|
+
...group.groupType == "Klass" && { species: "class" },
|
|
17
|
+
...group.groupMemberships && { members: _transformGroupMembers(group.groupMemberships, options) }
|
|
18
|
+
}));
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { groups_default as default };
|
|
23
|
+
//# sourceMappingURL=groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groups.js","names":[],"sources":["../../../src/SS12000/from/groups.ts"],"sourcesContent":["import moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Group } from '../types/groups';\n\nfunction _transformGroupMembers (\n members: Group['groupMemberships'],\n options?: Pick<CoreTypes.division, 'start' | 'end'>\n) {\n return [\n ...new Set(\n members?.filter(member => {\n if (options?.end && member.startDate && !moment(member.startDate).isBefore(moment(options.end)))\n return false;\n if (options?.start && member.endDate && !moment(member.endDate).isAfter(moment(options.start)))\n return false;\n return true;\n })\n .map((member) => member.person.id)\n .filter(Boolean)\n )\n ];\n}\n\nexport default (\n groups: Group[],\n options?: Pick<CoreTypes.division, 'start' | 'end'>\n) => {\n if (!Array.isArray(groups))\n throw new Error('(SS12000::From::Groups) Group input is not of array type', { cause: 'invalid_input' });\n\n return groups\n .map((group): CoreTypes.mixedWithoutInternalId.group => ({\n ids: group.id,\n displayName: group.displayName,\n ...group.groupType == 'Klass' && { species: 'class' },\n ...group.groupMemberships && {\n members: _transformGroupMembers(group.groupMemberships, options)\n }\n }));\n};"],"mappings":";;;AAIA,SAAS,uBACP,SACA,SACA;AACA,QAAO,CACL,GAAG,IAAI,IACL,SAAS,QAAO,WAAU;AACxB,MAAI,SAAS,OAAO,OAAO,aAAa,CAAC,OAAO,OAAO,WAAW,SAAS,OAAO,QAAQ,MACxF,QAAO;AACT,MAAI,SAAS,SAAS,OAAO,WAAW,CAAC,OAAO,OAAO,SAAS,QAAQ,OAAO,QAAQ,QACrF,QAAO;AACT,SAAO;IAEN,KAAK,WAAW,OAAO,OAAO,IAC9B,OAAO;;AAKhB,sBACE,QACA,YACG;AACH,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,4DAA4D,EAAE,OAAO;AAEvF,QAAO,OACJ,KAAK,WAAmD;EACvD,KAAa,MAAM;EACnB,aAAa,MAAM;EACnB,GAAG,MAAM,aAAa,WAAW,EAAE,SAAS;EAC5C,GAAG,MAAM,oBAAoB,EAC3B,SAAS,uBAAuB,MAAM,kBAAkB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import activities_default from "./activities.js";
|
|
2
|
+
import rooms_default from "./rooms.js";
|
|
3
|
+
import calendar_events_default from "./calendar-events.js";
|
|
4
|
+
import persons_default from "./persons.js";
|
|
5
|
+
import duties_default from "./duties.js";
|
|
6
|
+
import groups_default from "./groups.js";
|
|
7
|
+
import resources_default from "./resources.js";
|
|
8
|
+
import syllabuses_default from "./syllabuses.js";
|
|
9
|
+
|
|
10
|
+
//#region src/SS12000/from/index.ts
|
|
11
|
+
var from_default = {
|
|
12
|
+
activities: activities_default,
|
|
13
|
+
calendarEvents: calendar_events_default,
|
|
14
|
+
duties: duties_default,
|
|
15
|
+
groups: groups_default,
|
|
16
|
+
persons: persons_default,
|
|
17
|
+
resources: resources_default,
|
|
18
|
+
rooms: rooms_default,
|
|
19
|
+
syllabuses: syllabuses_default
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { from_default as default };
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_activities","_calendarEvents","_duties","_groups","_persons","_resources","_rooms","_syllabuses"],"sources":["../../../src/SS12000/from/index.ts"],"sourcesContent":["import _activities from './activities';\nimport _calendarEvents from './calendar-events';\nimport _duties from './duties';\nimport _groups from './groups';\nimport _persons from './persons';\nimport _resources from './resources';\nimport _rooms from './rooms';\nimport _syllabuses from './syllabuses';\n\nexport default {\n activities: _activities,\n calendarEvents: _calendarEvents,\n duties: _duties,\n groups: _groups,\n persons: _persons,\n resources: _resources,\n rooms: _rooms,\n syllabuses: _syllabuses,\n};"],"mappings":";;;;;;;;;;AASA,mBAAe;CACb,YAAgBA;CAChB,gBAAgBC;CAChB,QAAgBC;CAChB,QAAgBC;CAChB,SAAgBC;CAChB,WAAgBC;CAChB,OAAgBC;CAChB,YAAgBC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { get, omitBy } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/from/persons.ts
|
|
4
|
+
const SexMap = {
|
|
5
|
+
Man: "Man",
|
|
6
|
+
Kvinna: "Woman",
|
|
7
|
+
Okänt: void 0
|
|
8
|
+
};
|
|
9
|
+
const TypeMap = {
|
|
10
|
+
"Privat": "private",
|
|
11
|
+
"Hem": "private",
|
|
12
|
+
"Arbete övrigt": "organization",
|
|
13
|
+
"Arbete": "organization",
|
|
14
|
+
"Skola elev": "organization",
|
|
15
|
+
"Skola personal": "organization"
|
|
16
|
+
};
|
|
17
|
+
var persons_default = (groups) => {
|
|
18
|
+
if (!Array.isArray(groups)) throw new Error("(SS12000::From::Person) Person input is not of array type", { cause: "invalid_input" });
|
|
19
|
+
return groups.map((person) => ({
|
|
20
|
+
ids: person.id,
|
|
21
|
+
displayName: person.displayName,
|
|
22
|
+
type: "Student",
|
|
23
|
+
...omitBy({
|
|
24
|
+
sex: person.sex ? get(SexMap, person.sex, void 0) : void 0,
|
|
25
|
+
displayName: person.displayName,
|
|
26
|
+
firstName: person.givenName,
|
|
27
|
+
lastName: person.familyName,
|
|
28
|
+
SSN: person.civicNo,
|
|
29
|
+
emails: person.emails?.map(({ type,...arg }) => ({
|
|
30
|
+
type: get(TypeMap, type, void 0),
|
|
31
|
+
...arg
|
|
32
|
+
})),
|
|
33
|
+
phoneNumbers: person.phoneNumbers?.map(({ type,...arg }) => ({
|
|
34
|
+
type: get(TypeMap, type, void 0),
|
|
35
|
+
...arg
|
|
36
|
+
}))
|
|
37
|
+
}, (x) => x == null)
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { persons_default as default };
|
|
43
|
+
//# sourceMappingURL=persons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persons.js","names":["SexMap: Record<NonNullable<Person['sex']>, CoreTypes.person['sex']>","TypeMap: Record<\n NonNullable<\n Person['phoneNumbers']\n >[0]['type'],\n NonNullable<\n CoreTypes.person['phoneNumbers']\n >[0]['type']\n>"],"sources":["../../../src/SS12000/from/persons.ts"],"sourcesContent":["import { get, omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Person } from '../types/persons';\n\nconst SexMap: Record<NonNullable<Person['sex']>, CoreTypes.person['sex']> = { Man: 'Man', Kvinna: 'Woman', Okänt: undefined };\nconst TypeMap: Record<\n NonNullable<\n Person['phoneNumbers']\n >[0]['type'],\n NonNullable<\n CoreTypes.person['phoneNumbers']\n >[0]['type']\n> = {\n 'Privat': 'private',\n 'Hem': 'private',\n 'Arbete övrigt': 'organization',\n 'Arbete': 'organization',\n 'Skola elev': 'organization',\n 'Skola personal': 'organization'\n};\n\nexport default (groups: Person[]) => {\n if (!Array.isArray(groups))\n throw new Error('(SS12000::From::Person) Person input is not of array type', { cause: 'invalid_input' });\n\n return groups\n .map((person): CoreTypes.mixedWithoutInternalId.person => ({\n ids: person.id,\n displayName: person.displayName,\n type: 'Student',\n ...omitBy({\n sex: person.sex ? get(SexMap, person.sex, undefined) : undefined,\n displayName: person.displayName,\n firstName: person.givenName,\n lastName: person.familyName,\n SSN: person.civicNo,\n emails: person.emails?.map(({ type, ...arg }) => ({ type: get(TypeMap, type, undefined), ...arg })),\n phoneNumbers: person.phoneNumbers?.map(({ type, ...arg }) => ({ type: get(TypeMap, type, undefined), ...arg })),\n }, x => x == null)\n }));\n};"],"mappings":";;;AAIA,MAAMA,SAAsE;CAAE,KAAK;CAAO,QAAQ;CAAS,OAAO;;AAClH,MAAMC,UAOF;CACF,UAAkB;CAClB,OAAkB;CAClB,iBAAkB;CAClB,UAAkB;CAClB,cAAkB;CAClB,kBAAkB;;AAGpB,uBAAgB,WAAqB;AACnC,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,6DAA6D,EAAE,OAAO;AAExF,QAAO,OACJ,KAAK,YAAqD;EACzD,KAAa,OAAO;EACpB,aAAa,OAAO;EACpB,MAAa;EACb,GAAG,OAAO;GACR,KAAc,OAAO,MAAM,IAAI,QAAQ,OAAO,KAAK,UAAa;GAChE,aAAc,OAAO;GACrB,WAAc,OAAO;GACrB,UAAc,OAAO;GACrB,KAAc,OAAO;GACrB,QAAc,OAAO,QAAQ,KAAK,EAAE,KAAM,GAAG,WAAW;IAAE,MAAM,IAAI,SAAS,MAAM;IAAY,GAAG;;GAClG,cAAc,OAAO,cAAc,KAAK,EAAE,KAAM,GAAG,WAAW;IAAE,MAAM,IAAI,SAAS,MAAM;IAAY,GAAG;;MACvG,MAAK,KAAK"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/SS12000/from/resources.ts
|
|
2
|
+
var resources_default = (resources) => {
|
|
3
|
+
if (!Array.isArray(resources)) throw new Error("(SS12000::From::Resources) Resources input is not of array type", { cause: "invalid_input" });
|
|
4
|
+
return resources.map((resource) => ({ ids: resource.id }));
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
export { resources_default as default };
|
|
9
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","names":[],"sources":["../../../src/SS12000/from/resources.ts"],"sourcesContent":["\nimport type { Resource } from '../types/resources';\n\nexport default (resources: Resource[]) => {\n if (!Array.isArray(resources))\n throw new Error('(SS12000::From::Resources) Resources input is not of array type', { cause: 'invalid_input' });\n\n return resources.map((resource) => ({\n ids: resource.id,\n }));\n};\n"],"mappings":";AAGA,yBAAgB,cAA0B;AACxC,KAAI,CAAC,MAAM,QAAQ,WACjB,OAAM,IAAI,MAAM,mEAAmE,EAAE,OAAO;AAE9F,QAAO,UAAU,KAAK,cAAc,EAClC,KAAK,SAAS"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { omitBy } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/from/rooms.ts
|
|
4
|
+
var rooms_default = (locations) => {
|
|
5
|
+
if (!Array.isArray(locations)) throw new Error("(SS12000::From::Room) Room input is not of array type", { cause: "invalid_input" });
|
|
6
|
+
return locations.map((location) => ({
|
|
7
|
+
ids: location.id,
|
|
8
|
+
...omitBy({
|
|
9
|
+
displayName: location.displayName,
|
|
10
|
+
seats: location.seats,
|
|
11
|
+
tags: location.tags
|
|
12
|
+
}, (x) => x == null)
|
|
13
|
+
}));
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { rooms_default as default };
|
|
18
|
+
//# sourceMappingURL=rooms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rooms.js","names":[],"sources":["../../../src/SS12000/from/rooms.ts"],"sourcesContent":["import { omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Room } from '../types/rooms';\n\nexport default (locations: Room[]) => {\n if (!Array.isArray(locations))\n throw new Error('(SS12000::From::Room) Room input is not of array type', { cause: 'invalid_input' });\n\n return locations\n .map((location): CoreTypes.mixedWithoutInternalId.location => ({\n ids: location.id,\n ...omitBy({\n displayName: location.displayName,\n seats: location.seats,\n tags: location.tags,\n }, x => x == null),\n }));\n};"],"mappings":";;;AAIA,qBAAgB,cAAsB;AACpC,KAAI,CAAC,MAAM,QAAQ,WACjB,OAAM,IAAI,MAAM,yDAAyD,EAAE,OAAO;AAEpF,QAAO,UACJ,KAAK,cAAyD;EAC7D,KAAK,SAAS;EACd,GAAG,OAAO;GACR,aAAa,SAAS;GACtB,OAAa,SAAS;GACtB,MAAa,SAAS;MACrB,MAAK,KAAK"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { omitBy } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/from/syllabuses.ts
|
|
4
|
+
var syllabuses_default = (syllabuses) => {
|
|
5
|
+
if (!Array.isArray(syllabuses)) throw new Error("(SS12000::From::Syllabus) Syllabus input is not of array type", { cause: "invalid_input" });
|
|
6
|
+
return syllabuses.map((syllabus) => ({
|
|
7
|
+
ids: syllabus.id,
|
|
8
|
+
schoolType: syllabus.schoolType,
|
|
9
|
+
official: syllabus.official,
|
|
10
|
+
subjectName: syllabus.subjectName,
|
|
11
|
+
...omitBy({
|
|
12
|
+
subjectDesignation: syllabus.subjectDesignation,
|
|
13
|
+
subjectCode: syllabus.subjectCode,
|
|
14
|
+
curriculum: syllabus.curriculum
|
|
15
|
+
}, (x) => x == null)
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { syllabuses_default as default };
|
|
21
|
+
//# sourceMappingURL=syllabuses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syllabuses.js","names":[],"sources":["../../../src/SS12000/from/syllabuses.ts"],"sourcesContent":["import { omitBy } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\nimport type { Syllabus } from '../types/syllabus';\n\nexport default (syllabuses: Syllabus[]) => {\n if (!Array.isArray(syllabuses))\n throw new Error('(SS12000::From::Syllabus) Syllabus input is not of array type', { cause: 'invalid_input' });\n\n return syllabuses\n .map((syllabus): CoreTypes.mixedWithoutInternalId.syllabus => ({\n ids: syllabus.id,\n schoolType: syllabus.schoolType!,\n official: syllabus.official!,\n subjectName: syllabus.subjectName!,\n ...omitBy({\n subjectDesignation: syllabus.subjectDesignation,\n subjectCode: syllabus.subjectCode,\n curriculum: syllabus.curriculum,\n }, x => x == null),\n }));\n};"],"mappings":";;;AAIA,0BAAgB,eAA2B;AACzC,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,iEAAiE,EAAE,OAAO;AAE5F,QAAO,WACJ,KAAK,cAAyD;EAC7D,KAAa,SAAS;EACtB,YAAa,SAAS;EACtB,UAAa,SAAS;EACtB,aAAa,SAAS;EACtB,GAAG,OAAO;GACR,oBAAoB,SAAS;GAC7B,aAAoB,SAAS;GAC7B,YAAoB,SAAS;MAC5B,MAAK,KAAK"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Types as Types$1 } from "../core/types/index.js";
|
|
2
|
+
import { Person } from "./types/persons.js";
|
|
3
|
+
import { Group } from "./types/groups.js";
|
|
4
|
+
import { Duty } from "./types/duties.js";
|
|
5
|
+
import { Room } from "./types/rooms.js";
|
|
6
|
+
import { Syllabus } from "./types/syllabus.js";
|
|
7
|
+
import { Activity } from "./types/activities.js";
|
|
8
|
+
import { Resource } from "./types/resources.js";
|
|
9
|
+
import { CalendarEvent } from "./types/calendar-events.js";
|
|
10
|
+
import { export_default } from "./to/index.js";
|
|
11
|
+
import { Types } from "./types/index.js";
|
|
12
|
+
|
|
13
|
+
//#region src/SS12000/index.d.ts
|
|
14
|
+
declare class SS12000Map {
|
|
15
|
+
static from: {
|
|
16
|
+
activities: (activities: Activity[], options?: {
|
|
17
|
+
interval?: {
|
|
18
|
+
start: string;
|
|
19
|
+
end: string;
|
|
20
|
+
};
|
|
21
|
+
}) => Types$1.mixedWithoutInternalId.course[];
|
|
22
|
+
calendarEvents: (events: CalendarEvent[]) => Types$1.mixedWithoutInternalId.event[];
|
|
23
|
+
duties: (duties: Duty[]) => Types$1.mixedWithoutInternalId.teacher[];
|
|
24
|
+
groups: (groups: Group[], options?: Pick<Types$1.division, "start" | "end">) => Types$1.mixedWithoutInternalId.group[];
|
|
25
|
+
persons: (groups: Person[]) => Types$1.mixedWithoutInternalId.person[];
|
|
26
|
+
resources: (resources: Resource[]) => {
|
|
27
|
+
ids: string;
|
|
28
|
+
}[];
|
|
29
|
+
rooms: (locations: Room[]) => Types$1.mixedWithoutInternalId.location[];
|
|
30
|
+
syllabuses: (syllabuses: Syllabus[]) => Types$1.mixedWithoutInternalId.syllabus[];
|
|
31
|
+
};
|
|
32
|
+
static to: typeof export_default;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { SS12000Map };
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import to_default from "./to/index.js";
|
|
2
|
+
import from_default from "./from/index.js";
|
|
3
|
+
|
|
4
|
+
//#region src/SS12000/index.ts
|
|
5
|
+
var SS12000Map = class {
|
|
6
|
+
static from = from_default;
|
|
7
|
+
static to = to_default;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { SS12000Map };
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_from","_to"],"sources":["../../src/SS12000/index.ts"],"sourcesContent":["import _to from './to';\nimport _from from './from';\nimport type { Types } from './types';\n\nexport class SS12000Map {\n static from = _from;\n static to = _to;\n}\n\nexport { Types as SS12000Types };"],"mappings":";;;;AAIA,IAAa,aAAb,MAAwB;CACtB,OAAO,OAAOA;CACd,OAAO,KAAOC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getDivisionId, toReference } from "./common.js";
|
|
2
|
+
import groups_default from "./groups.js";
|
|
3
|
+
import duties_default from "./duties.js";
|
|
4
|
+
import { get, has, isNil, isString, map, omitBy } from "lodash-es";
|
|
5
|
+
import moment from "moment";
|
|
6
|
+
|
|
7
|
+
//#region src/SS12000/to/activities.ts
|
|
8
|
+
function mapActivityType(type) {
|
|
9
|
+
switch (type) {
|
|
10
|
+
case "LUNCH": return "Övrigt";
|
|
11
|
+
default: return "Undervisning";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated This is only used for SCS. can be removed when scs use v2
|
|
16
|
+
*/
|
|
17
|
+
var activities_default = (activities, belongsTo, expand) => {
|
|
18
|
+
if (!Array.isArray(activities)) throw new Error("(SS12000::To::Activities) Activities input is not of array type", { cause: "invalid_input" });
|
|
19
|
+
if (!activities.every((activity) => isString(activity) || isString(get(activity, "id")))) throw new Error("(SS12000::To::Activities) Some Activities are missing \"id\" values", { cause: "invalid_input" });
|
|
20
|
+
if (!belongsTo && !activities.every((activity) => isString(activity) && belongsTo || has(activity, "belongsTo"))) throw new Error("(SS12000::To::Activities) Some top layer Activities are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
21
|
+
return activities.map((activity) => {
|
|
22
|
+
const division = belongsTo ?? (!isString(activity) ? activity.belongsTo : void 0);
|
|
23
|
+
if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::Activities) Some events members are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
24
|
+
if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::Activities) Some events members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
|
|
25
|
+
return {
|
|
26
|
+
id: `${getDivisionId(activity, belongsTo)}.${isString(activity) ? activity : activity.id}`,
|
|
27
|
+
calendarEventsRequired: "course" in activity,
|
|
28
|
+
activityType: mapActivityType(activity.type),
|
|
29
|
+
startDate: moment(division.start).toISOString(),
|
|
30
|
+
...typeof activity != "string" && {
|
|
31
|
+
meta: {
|
|
32
|
+
created: moment(activity.createdAt).toISOString(),
|
|
33
|
+
modified: moment(activity.updatedAt).toISOString()
|
|
34
|
+
},
|
|
35
|
+
...omitBy({
|
|
36
|
+
foreignId: activity.ids,
|
|
37
|
+
displayName: activity.displayName,
|
|
38
|
+
comment: get(activity, "comment"),
|
|
39
|
+
subject: get(activity, "subject")
|
|
40
|
+
}, isNil),
|
|
41
|
+
...activity.groups && { groups: toReference(map(activity.groups, "to"), division, expand?.includes("referenceNames")) },
|
|
42
|
+
...activity.teachers && { teachers: activity.teachers.map(({ to }) => ({ duty: toReference([to], belongsTo ?? activity.belongsTo, expand?.includes("referenceNames"))[0] })) },
|
|
43
|
+
..."course" in activity && typeof activity.course == "object" && "id" in activity.course && activity.course.id && { parentActivity: toReference([activity.course], division, expand?.includes("referenceNames"))[0] },
|
|
44
|
+
...activity.locations && { rooms: activity.locations.map(({ locations, groupIndex }) => ({
|
|
45
|
+
room: toReference(locations, division, expand?.includes("referenceNames"))[0],
|
|
46
|
+
index: groupIndex
|
|
47
|
+
})) },
|
|
48
|
+
...expand?.some((x) => [
|
|
49
|
+
"groups",
|
|
50
|
+
"teachers",
|
|
51
|
+
"syllabus"
|
|
52
|
+
].includes(x)) && { _embedded: {
|
|
53
|
+
...expand.includes("groups") && { ...activity.groups && { groups: groups_default(map(activity.groups, "to"), division) } },
|
|
54
|
+
...expand.includes("teachers") && { ...activity.teachers && { teachers: duties_default(map(activity.teachers, "to"), division) } }
|
|
55
|
+
} }
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { activities_default as default };
|
|
63
|
+
//# sourceMappingURL=activities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activities.js","names":["toGroup","toTeacher"],"sources":["../../../src/SS12000/to/activities.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil, map } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Activity } from '../types/activities';\nimport type { ActivityType } from '../types/codes';\nimport type { Duty } from '../types/duties';\nimport { getDivisionId, toReference } from './common';\nimport toGroup from './groups';\nimport toTeacher from './duties';\n\ntype Expand = ('referenceNames' | 'teachers' | 'syllabus' | 'groups')[];\n\nfunction mapActivityType (type: CoreTypes.course['type']): ActivityType {\n switch (type) {\n case 'LUNCH':\n return 'Övrigt';\n default:\n return 'Undervisning';\n }\n}\n\n/**\n * @deprecated This is only used for SCS. can be removed when scs use v2\n */\nexport default (\n activities: (Extract<CoreTypes.mixed.course, { id: string }> | Extract<CoreTypes.mixed.event, { id: string }>)[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Activity[] => {\n if (!Array.isArray(activities))\n throw new Error('(SS12000::To::Activities) Activities input is not of array type', { cause: 'invalid_input' });\n\n if (!activities.every((activity) => isString(activity) || isString(get(activity, 'id'))))\n throw new Error('(SS12000::To::Activities) Some Activities are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !activities.every((activity) => (isString(activity) && belongsTo) || has(activity, 'belongsTo')))\n throw new Error('(SS12000::To::Activities) Some top layer Activities are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return activities.map((activity): Activity => {\n const division = belongsTo ?? (!isString(activity) ? activity.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::Activities) Some events members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::Activities) Some events members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n return {\n id: `${ getDivisionId(activity, belongsTo) }.${ isString(activity) ? activity : activity.id }`,\n calendarEventsRequired: 'course' in activity, // true for events, false for courses\n activityType: mapActivityType(activity.type),\n startDate: moment(division.start).toISOString(),\n ...typeof activity != 'string' && {\n meta: {\n created: moment(activity.createdAt).toISOString(),\n modified: moment(activity.updatedAt).toISOString()\n },\n ...omitBy({\n foreignId: activity.ids,\n displayName: activity.displayName,\n comment: get(activity, 'comment'),\n subject: get(activity, 'subject'),\n }, isNil),\n // @ts-ignore\n ...activity.groups && { groups: toReference(map(activity.groups, 'to'), division, expand?.includes('referenceNames')) },\n // @ts-ignore\n ...activity.teachers && { teachers: activity.teachers.map(({ to }) => ({ duty: toReference([to], belongsTo ?? activity.belongsTo, expand?.includes('referenceNames'))[0] as Duty })) },\n ...'course' in activity && typeof activity.course == 'object' && 'id' in activity.course && activity.course.id && {\n // @ts-ignore\n parentActivity: toReference([activity.course as CoreTypes.mixed.course], division, expand?.includes('referenceNames'))[0]\n },\n ...activity.locations && { rooms: activity.locations.map(({ locations, groupIndex }) => ({\n // @ts-ignore\n room: toReference(locations as any, division, expand?.includes('referenceNames'))[0],\n index: groupIndex\n }))\n },\n // syllabus: {\n // id: activity.id!,\n // ...expandReferenceNames && { displayName: activity.displayName }\n // },\n ...expand?.some(x => ['groups', 'teachers', 'syllabus'].includes(x)) && {\n _embedded: {\n ...expand.includes('groups') && {\n // @ts-ignore\n ...activity.groups && { groups: toGroup(map(activity.groups, 'to'), division) }\n },\n ...expand.includes('teachers') && {\n // @ts-ignore\n ...activity.teachers && { teachers: toTeacher(map(activity.teachers, 'to'), division) }\n },\n // ...expand.includes('syllabus') && {\n // syllabus: {\n // id: activity.id!,\n // displayName: activity.displayName,\n // }\n // },\n }\n }\n }\n }\n });\n};"],"mappings":";;;;;;;AAYA,SAAS,gBAAiB,MAA8C;AACtE,SAAQ,MAAR;EACE,KAAK,QACH,QAAO;EACT,QACE,QAAO;;;;;;AAOb,0BACE,YACA,WACA,WACe;AACf,KAAI,CAAC,MAAM,QAAQ,YACjB,OAAM,IAAI,MAAM,mEAAmE,EAAE,OAAO;AAE9F,KAAI,CAAC,WAAW,OAAO,aAAa,SAAS,aAAa,SAAS,IAAI,UAAU,QAC/E,OAAM,IAAI,MAAM,uEAAqE,EAAE,OAAO;AAEhG,KAAI,CAAC,aAAa,CAAC,WAAW,OAAO,aAAc,SAAS,aAAa,aAAc,IAAI,UAAU,cACnG,OAAM,IAAI,MAAM,wFAAsF,EAAE,OAAO;AAEjH,QAAO,WAAW,KAAK,aAAuB;EAC5C,MAAM,WAAW,cAAc,CAAC,SAAS,YAAY,SAAS,YAAY;AAC1E,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,kFAAgF,EAAE,OAAO;AAC3G,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,+FAA6F,EAAE,OAAO;AAExH,SAAO;GACL,IAAwB,GAAI,cAAc,UAAU,WAAY,GAAI,SAAS,YAAY,WAAW,SAAS;GAC7G,wBAAwB,YAAY;GACpC,cAAwB,gBAAgB,SAAS;GACjD,WAAwB,OAAO,SAAS,OAAO;GAC/C,GAAG,OAAO,YAAY,YAAY;IAChC,MAAM;KACJ,SAAU,OAAO,SAAS,WAAW;KACrC,UAAU,OAAO,SAAS,WAAW;;IAEvC,GAAG,OAAO;KACR,WAAa,SAAS;KACtB,aAAa,SAAS;KACtB,SAAa,IAAI,UAAU;KAC3B,SAAa,IAAI,UAAU;OAC1B;IAEH,GAAG,SAAS,UAAe,EAAE,QAAe,YAAY,IAAI,SAAS,QAAQ,OAAO,UAAU,QAAQ,SAAS;IAE/G,GAAG,SAAS,YAAe,EAAE,UAAU,SAAS,SAAS,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC,KAAK,aAAa,SAAS,WAAW,QAAQ,SAAS,mBAAmB;IACzK,GAAG,YAAY,YAAY,OAAO,SAAS,UAAU,YAAY,QAAQ,SAAS,UAAU,SAAS,OAAO,MAAM,EAEhH,gBAAgB,YAAY,CAAC,SAAS,SAAmC,UAAU,QAAQ,SAAS,mBAAmB;IAEzH,GAAG,SAAS,aAAc,EAAE,OAAO,SAAS,UAAU,KAAK,EAAE,WAAW,kBAAkB;KAExF,MAAO,YAAY,WAAkB,UAAU,QAAQ,SAAS,mBAAmB;KACnF,OAAO;;IAOT,GAAG,QAAQ,MAAK,MAAK;KAAC;KAAU;KAAY;MAAY,SAAS,OAAO,EACtE,WAAW;KACT,GAAG,OAAO,SAAS,aAAa,EAE9B,GAAG,SAAS,UAAU,EAAE,QAAQA,eAAQ,IAAI,SAAS,QAAQ,OAAO;KAEtE,GAAG,OAAO,SAAS,eAAe,EAEhC,GAAG,SAAS,YAAY,EAAE,UAAUC,eAAU,IAAI,SAAS,UAAU,OAAO"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getDivisionId, toReference } from "./common.js";
|
|
2
|
+
import groups_default from "./groups.js";
|
|
3
|
+
import duties_default from "./duties.js";
|
|
4
|
+
import activities_default from "./activities.js";
|
|
5
|
+
import { get, has, isNil, isNull, isString, map, omitBy, reject } from "lodash-es";
|
|
6
|
+
import moment from "moment";
|
|
7
|
+
|
|
8
|
+
//#region src/SS12000/to/calendar-events.ts
|
|
9
|
+
var calendar_events_default = (events, belongsTo, expand) => {
|
|
10
|
+
if (!Array.isArray(events)) throw new Error("(SS12000::To::CalendarEvents) CalendarEvent input is not of array type", { cause: "invalid_input" });
|
|
11
|
+
if (!events.every((event) => isString(event) || isString(get(event, "id")))) throw new Error("(SS12000::To::CalendarEvents) Some CalendarEvents are missing \"id\" values", { cause: "invalid_input" });
|
|
12
|
+
if (!belongsTo && !events.every((event) => isString(event) && belongsTo || has(event, "belongsTo"))) throw new Error("(SS12000::To::CalendarEvents) Some top layer CalendarEvents are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
13
|
+
return events.map((event) => {
|
|
14
|
+
const division = belongsTo ?? (!isString(event) ? event.belongsTo : void 0);
|
|
15
|
+
if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
16
|
+
if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
|
|
17
|
+
const course = !isString(event) && event.course && !isString(event.course) ? event.course : void 0;
|
|
18
|
+
return {
|
|
19
|
+
id: `${getDivisionId(event, belongsTo)}.${isString(event) ? event : event.id}`,
|
|
20
|
+
...!isString(event) && {
|
|
21
|
+
meta: {
|
|
22
|
+
created: moment(event.createdAt).toISOString(),
|
|
23
|
+
modified: moment(event.updatedAt).toISOString(),
|
|
24
|
+
...event.type && { type: event.type }
|
|
25
|
+
},
|
|
26
|
+
...omitBy({
|
|
27
|
+
foreignId: event.ids,
|
|
28
|
+
color: event.color ?? course?.color
|
|
29
|
+
}, isNil),
|
|
30
|
+
startTime: event.start?.toString(),
|
|
31
|
+
endTime: event.end?.toString(),
|
|
32
|
+
...course && { activity: toReference([course], division, expand?.includes("referenceNames"))[0] },
|
|
33
|
+
rooms: toReference(reject(event.inLocations, isNull) ?? [], division, expand?.includes("referenceNames")),
|
|
34
|
+
resources: toReference([], division, expand?.includes("referenceNames")),
|
|
35
|
+
teachers: toReference(map(event.teachers ?? course?.teachers ?? [], "to"), division, expand?.includes("referenceNames")),
|
|
36
|
+
groups: toReference(map(event.groups ?? course?.groups ?? [], "to"), division, expand?.includes("referenceNames")),
|
|
37
|
+
...expand?.some((x) => [
|
|
38
|
+
"groups",
|
|
39
|
+
"teachers",
|
|
40
|
+
"activity"
|
|
41
|
+
].includes(x)) && { _embedded: {
|
|
42
|
+
...expand.includes("groups") && { groups: groups_default(map(event.groups, "to"), division) },
|
|
43
|
+
...expand.includes("teachers") && { teachers: duties_default(map(event.teachers, "to"), division) },
|
|
44
|
+
...expand.includes("activity") && course && { activity: activities_default([course], division)[0] }
|
|
45
|
+
} }
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { calendar_events_default as default };
|
|
53
|
+
//# sourceMappingURL=calendar-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-events.js","names":["toGroup","toTeacher","toActivities"],"sources":["../../../src/SS12000/to/calendar-events.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil, isNull, map, reject } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { CalendarEvent } from '../types/calendar-events';\nimport { getDivisionId, toReference } from './common';\nimport toActivities from './activities';\nimport toGroup from './groups';\nimport toTeacher from './duties';\n\ntype Expand = ('referenceNames' | 'teachers' | 'activity' | 'groups')[];\n\nexport default (\n events: Extract<CoreTypes.mixed.event, { id: string }>[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Partial<CalendarEvent>[] => {\n if (!Array.isArray(events))\n throw new Error('(SS12000::To::CalendarEvents) CalendarEvent input is not of array type', { cause: 'invalid_input' });\n\n if (!events.every((event) => isString(event) || isString(get(event, 'id'))))\n throw new Error('(SS12000::To::CalendarEvents) Some CalendarEvents are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !events.every((event) => (isString(event) && belongsTo) || has(event, 'belongsTo')))\n throw new Error('(SS12000::To::CalendarEvents) Some top layer CalendarEvents are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return events.map((event) => {\n const division = belongsTo ?? (!isString(event) ? event.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::CalendarEvents) Some events members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n const course = (!isString(event) && event.course && !isString(event.course)) ?\n event.course as Extract<CoreTypes.mixed.course, { id: string }>\n : undefined;\n\n return {\n id: `${ getDivisionId(event, belongsTo) }.${ isString(event) ? event : event.id }`,\n ...!isString(event) && {\n meta: {\n created: moment(event.createdAt).toISOString(),\n modified: moment(event.updatedAt).toISOString(),\n ...event.type && { type: event.type },\n },\n ...omitBy({\n foreignId: event.ids,\n color: event.color ?? course?.color,\n }, isNil),\n startTime: event.start?.toString(),\n endTime: event.end?.toString(),\n // Locked times have no course, so we need to check for it\n // @ts-ignore\n ...course && { activity: toReference([course], division, expand?.includes('referenceNames'))[0] },\n // @ts-ignore\n rooms: toReference(reject(event.inLocations, isNull) ?? [], division, expand?.includes('referenceNames')),\n // @ts-ignore\n resources: toReference([], division, expand?.includes('referenceNames')),\n // @ts-ignore\n teachers: toReference(map(event.teachers ?? course?.teachers ?? [], 'to'), division, expand?.includes('referenceNames')),\n // @ts-ignore\n groups: toReference(map(event.groups ?? course?.groups ?? [], 'to'), division, expand?.includes('referenceNames')),\n ...expand?.some(x => ['groups', 'teachers', 'activity'].includes(x)) && {\n _embedded: {\n ...expand.includes('groups') && {\n // @ts-ignore\n groups: toGroup(map(event.groups, 'to'), division)\n },\n ...expand.includes('teachers') && {\n // @ts-ignore\n teachers: toTeacher(map(event.teachers, 'to'), division)\n },\n ...(expand.includes('activity') && course)&& {\n activity: toActivities([course], division as Extract<CoreTypes.division, { id: string }>)[0]\n }\n }\n }\n }\n }\n });\n};\n"],"mappings":";;;;;;;;AAWA,+BACE,QACA,WACA,WAC6B;AAC7B,KAAI,CAAC,MAAM,QAAQ,QACjB,OAAM,IAAI,MAAM,0EAA0E,EAAE,OAAO;AAErG,KAAI,CAAC,OAAO,OAAO,UAAU,SAAS,UAAU,SAAS,IAAI,OAAO,QAClE,OAAM,IAAI,MAAM,+EAA6E,EAAE,OAAO;AAExG,KAAI,CAAC,aAAa,CAAC,OAAO,OAAO,UAAW,SAAS,UAAU,aAAc,IAAI,OAAO,cACtF,OAAM,IAAI,MAAM,gGAA8F,EAAE,OAAO;AAEzH,QAAO,OAAO,KAAK,UAAU;EAC3B,MAAM,WAAW,cAAc,CAAC,SAAS,SAAS,MAAM,YAAY;AACpE,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,sFAAoF,EAAE,OAAO;AAC/G,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,mGAAiG,EAAE,OAAO;EAE5H,MAAM,SAAU,CAAC,SAAS,UAAU,MAAM,UAAU,CAAC,SAAS,MAAM,UAClE,MAAM,SACJ;AAEJ,SAAO;GACL,IAAI,GAAI,cAAc,OAAO,WAAY,GAAI,SAAS,SAAS,QAAQ,MAAM;GAC7E,GAAG,CAAC,SAAS,UAAU;IACrB,MAAM;KACJ,SAAU,OAAO,MAAM,WAAW;KAClC,UAAU,OAAO,MAAM,WAAW;KAClC,GAAG,MAAM,QAAiB,EAAE,MAAM,MAAM;;IAE1C,GAAG,OAAO;KACR,WAAW,MAAM;KACjB,OAAW,MAAM,SAAS,QAAQ;OACjC;IACH,WAAW,MAAM,OAAO;IACxB,SAAW,MAAM,KAAK;IAGtB,GAAG,UAAU,EAAE,UAAU,YAAY,CAAC,SAAS,UAAU,QAAQ,SAAS,mBAAmB;IAE7F,OAAW,YAAY,OAAO,MAAM,aAAa,WAAW,IAAI,UAAU,QAAQ,SAAS;IAE3F,WAAW,YAAY,IAAI,UAAU,QAAQ,SAAS;IAEtD,UAAW,YAAY,IAAI,MAAM,YAAY,QAAQ,YAAY,IAAI,OAAO,UAAU,QAAQ,SAAS;IAEvG,QAAW,YAAY,IAAI,MAAM,UAAU,QAAQ,UAAU,IAAI,OAAO,UAAU,QAAQ,SAAS;IACnG,GAAG,QAAQ,MAAK,MAAK;KAAC;KAAU;KAAY;MAAY,SAAS,OAAO,EACtE,WAAW;KACT,GAAG,OAAO,SAAS,aAAa,EAE9B,QAAQA,eAAQ,IAAI,MAAM,QAAQ,OAAO;KAE3C,GAAG,OAAO,SAAS,eAAe,EAEhC,UAAUC,eAAU,IAAI,MAAM,UAAU,OAAO;KAEjD,GAAI,OAAO,SAAS,eAAe,UAAU,EAC3C,UAAUC,mBAAa,CAAC,SAAS,UAAyD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isNil, isObject, isString, omitBy } from "lodash-es";
|
|
2
|
+
|
|
3
|
+
//#region src/SS12000/to/common.ts
|
|
4
|
+
function toReference(input, belongsTo, expandReferenceNames) {
|
|
5
|
+
return input.map((x) => {
|
|
6
|
+
if (!(belongsTo && "id" in belongsTo && belongsTo.id) && !isString(x) && (!x.belongsTo || isString(x.belongsTo) || !("id" in x.belongsTo && x.belongsTo.id))) throw new Error("(SS12000::To::Reference) Some top layer entities are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
7
|
+
return {
|
|
8
|
+
id: `${getDivisionId(x, belongsTo)}.${isString(x) ? x : x.id}`,
|
|
9
|
+
...!isString(x) && { ...omitBy({
|
|
10
|
+
foreignId: x.ids,
|
|
11
|
+
...expandReferenceNames && { displayName: x.displayName }
|
|
12
|
+
}, isNil) }
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function getDivisionId(entity, division) {
|
|
17
|
+
if (division) return division.id;
|
|
18
|
+
if (isString(entity)) throw new Error("(SS12000::To::getDivisionId) belongsTo is missing \"id\" value", { cause: "invalid_input" });
|
|
19
|
+
if (!isObject(entity) || !("belongsTo" in entity) || !entity.belongsTo || !isObject(entity.belongsTo) || !("id" in entity.belongsTo) || !isString(entity.belongsTo.id)) throw new Error("(SS12000::To::getDivisionId) entity is missing \"belongsTo.id\" value", { cause: "invalid_input" });
|
|
20
|
+
return entity.belongsTo.id;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { getDivisionId, toReference };
|
|
25
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","names":[],"sources":["../../../src/SS12000/to/common.ts"],"sourcesContent":["import { isString, omitBy, isNil, isObject } from 'lodash-es';\nimport type { CoreTypes } from '../../core';\n\nexport function toReference<T extends Partial<{\n id: string,\n belongsTo?: CoreTypes.division | string,\n ids: string,\n displayName: string\n}>> (\n input: T[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expandReferenceNames?: boolean\n) {\n return input.map((x) => {\n // Bth belongsTo.id and entity.belongsto.id cant be missing\n if (!(belongsTo && 'id' in belongsTo && belongsTo.id) && !isString(x) && (!x.belongsTo || isString(x.belongsTo) || !('id' in x.belongsTo && x.belongsTo.id)))\n throw new Error('(SS12000::To::Reference) Some top layer entities are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return {\n id: `${ getDivisionId(x, belongsTo) }.${ isString(x) ? x : x.id }`,\n ...!isString(x) && {\n ...omitBy({\n foreignId: x.ids,\n ...expandReferenceNames && { displayName: x.displayName }\n }, isNil),\n }\n };\n });\n}\n\nexport function getDivisionId(\n entity: unknown,\n division?: Extract<CoreTypes.division, { id: string }>\n) {\n if (division) return division.id;\n\n if (isString(entity)) {\n throw new Error('(SS12000::To::getDivisionId) belongsTo is missing \"id\" value', { cause: 'invalid_input' });\n };\n if (!isObject(entity) || !('belongsTo' in entity) || !entity.belongsTo || !isObject(entity.belongsTo) || !('id' in entity.belongsTo) || !isString(entity.belongsTo.id))\n throw new Error('(SS12000::To::getDivisionId) entity is missing \"belongsTo.id\" value', { cause: 'invalid_input' });\n return entity.belongsTo.id;\n}"],"mappings":";;;AAGA,SAAgB,YAMd,OACA,WACA,sBACA;AACA,QAAO,MAAM,KAAK,MAAM;AAEtB,MAAI,EAAE,aAAa,QAAQ,aAAa,UAAU,OAAO,CAAC,SAAS,OAAO,CAAC,EAAE,aAAa,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,KACtJ,OAAM,IAAI,MAAM,qFAAmF,EAAE,OAAO;AAE9G,SAAO;GACL,IAAI,GAAI,cAAc,GAAG,WAAY,GAAI,SAAS,KAAK,IAAI,EAAE;GAC7D,GAAG,CAAC,SAAS,MAAM,EACjB,GAAG,OAAO;IACR,WAAW,EAAE;IACb,GAAG,wBAAwB,EAAE,aAAa,EAAE;MAC3C;;;;AAMX,SAAgB,cACd,QACA,UACA;AACA,KAAI,SAAU,QAAO,SAAS;AAE9B,KAAI,SAAS,QACX,OAAM,IAAI,MAAM,kEAAgE,EAAE,OAAO;AAE3F,KAAI,CAAC,SAAS,WAAW,EAAE,eAAe,WAAW,CAAC,OAAO,aAAa,CAAC,SAAS,OAAO,cAAc,EAAE,QAAQ,OAAO,cAAc,CAAC,SAAS,OAAO,UAAU,IACjK,OAAM,IAAI,MAAM,yEAAuE,EAAE,OAAO;AAClG,QAAO,OAAO,UAAU"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getDivisionId, toReference } from "./common.js";
|
|
2
|
+
import persons_default from "./persons.js";
|
|
3
|
+
import { get, has, isNil, isString, omitBy } from "lodash-es";
|
|
4
|
+
import moment from "moment";
|
|
5
|
+
|
|
6
|
+
//#region src/SS12000/to/duties.ts
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated This is only used for SCS. can be removed when scs use v2
|
|
9
|
+
*/
|
|
10
|
+
var duties_default = (teachers, belongsTo, expand) => {
|
|
11
|
+
if (!Array.isArray(teachers)) throw new Error("(SS12000::To::Duty) Teacher input is not of array type", { cause: "invalid_input" });
|
|
12
|
+
if (!teachers.every((teacher) => isString(teacher) || isString(get(teacher, "id")))) throw new Error("(SS12000::To::Duty) Some teachers are missing \"id\" values", { cause: "invalid_input" });
|
|
13
|
+
if (!belongsTo && !teachers.every((teacher) => isString(teacher) && belongsTo || has(teacher, "belongsTo"))) throw new Error("(SS12000::To::Duty) Some top layer teachers are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
14
|
+
return teachers.map((teacher) => {
|
|
15
|
+
const division = belongsTo ?? (!isString(teacher) ? teacher.belongsTo : void 0);
|
|
16
|
+
if (!division || isString(division) || !("id" in division && division.id)) throw new Error("(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" values", { cause: "invalid_input" });
|
|
17
|
+
if (!("start" in division && division.start) || !("end" in division && division.end)) throw new Error("(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" start or end values", { cause: "invalid_input" });
|
|
18
|
+
const person = !isString(teacher) && teacher.person && !isString(teacher.person) ? teacher.person : void 0;
|
|
19
|
+
return {
|
|
20
|
+
id: `${getDivisionId(teacher, belongsTo)}.${isString(teacher) ? teacher : teacher.id}`,
|
|
21
|
+
dutyRole: "Lärare",
|
|
22
|
+
startDate: moment(division.start).toISOString(),
|
|
23
|
+
endDate: moment(division.end).toISOString(),
|
|
24
|
+
...typeof teacher != "string" && {
|
|
25
|
+
meta: {
|
|
26
|
+
created: moment(teacher.createdAt).toISOString(),
|
|
27
|
+
modified: moment(teacher.updatedAt).toISOString()
|
|
28
|
+
},
|
|
29
|
+
...omitBy({
|
|
30
|
+
foreignId: teacher.ids,
|
|
31
|
+
displayName: teacher.displayName
|
|
32
|
+
}, isNil),
|
|
33
|
+
...person && { person: {
|
|
34
|
+
...toReference([person], belongsTo ?? teacher.belongsTo)[0],
|
|
35
|
+
...expand?.includes("referenceNames") && { displayName: `${person.firstName ?? ""} ${person.lastName ?? ""}` }
|
|
36
|
+
} },
|
|
37
|
+
...expand?.some((x) => ["person"].includes(x)) && { _embedded: { ...expand.includes("person") && person && { person: persons_default([person], division)[0] } } }
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { duties_default as default };
|
|
45
|
+
//# sourceMappingURL=duties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duties.js","names":["toPerson"],"sources":["../../../src/SS12000/to/duties.ts"],"sourcesContent":["import { isString, has, get, omitBy, isNil } from 'lodash-es';\nimport moment from 'moment';\nimport type { CoreTypes } from '../../core';\nimport type { Duty } from '../types/duties';\nimport { getDivisionId, toReference } from './common';\nimport toPerson from './persons';\n\ntype Expand = ('referenceNames' | 'person')[];\n\n/**\n * @deprecated This is only used for SCS. can be removed when scs use v2\n */\nexport default (\n teachers: Extract<CoreTypes.mixed.teacher, { id: string }>[],\n belongsTo?: Extract<CoreTypes.division, { id: string }>,\n expand?: Expand\n): Duty[] => {\n if (!Array.isArray(teachers))\n throw new Error('(SS12000::To::Duty) Teacher input is not of array type', { cause: 'invalid_input' });\n\n if (!teachers.every((teacher) => isString(teacher) || isString(get(teacher, 'id'))))\n throw new Error('(SS12000::To::Duty) Some teachers are missing \"id\" values', { cause: 'invalid_input' });\n\n if (!belongsTo && !teachers.every((teacher) => (isString(teacher) && belongsTo) || has(teacher, 'belongsTo')))\n throw new Error('(SS12000::To::Duty) Some top layer teachers are missing \"belongsTo\" values', { cause: 'invalid_input' });\n\n return teachers.map((teacher) => {\n const division = belongsTo ?? (!isString(teacher) ? teacher.belongsTo : undefined);\n if (!division || isString(division) || !('id' in division && division.id))\n throw new Error('(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" values', { cause: 'invalid_input' });\n if (!('start' in division && division.start) || !('end' in division && division.end))\n throw new Error('(SS12000::To::Duty) Some teachers members are missing \"belongsTo\" start or end values', { cause: 'invalid_input' });\n\n const person = (!isString(teacher) && teacher.person && !isString(teacher.person)) ?\n teacher.person as Extract<CoreTypes.mixed.person, { id: string }>\n : undefined;\n\n return {\n id: `${ getDivisionId(teacher, belongsTo) }.${ isString(teacher) ? teacher : teacher.id }`,\n dutyRole: 'Lärare' as const,\n startDate: moment(division.start).toISOString(),\n endDate: moment(division.end).toISOString(),\n ...typeof teacher != 'string' && {\n meta: {\n created: moment(teacher.createdAt).toISOString(),\n modified: moment(teacher.updatedAt).toISOString()\n },\n ...omitBy({\n foreignId: teacher.ids,\n displayName: teacher.displayName,\n }, isNil),\n ...person && {\n person: {\n // @ts-ignore\n ...toReference([person], belongsTo ?? teacher.belongsTo)[0],\n ...expand?.includes('referenceNames') && {\n displayName: `${ person.firstName ?? '' } ${ person.lastName ?? '' }`\n }\n }\n },\n ...expand?.some(x => ['person'].includes(x)) && {\n _embedded: {\n ...(expand.includes('person') && person) && {\n person: toPerson([person], division as Extract<CoreTypes.division, { id: string }>)[0]\n }\n }\n }\n }\n };\n });\n};"],"mappings":";;;;;;;;;AAYA,sBACE,UACA,WACA,WACW;AACX,KAAI,CAAC,MAAM,QAAQ,UACjB,OAAM,IAAI,MAAM,0DAA0D,EAAE,OAAO;AAErF,KAAI,CAAC,SAAS,OAAO,YAAY,SAAS,YAAY,SAAS,IAAI,SAAS,QAC1E,OAAM,IAAI,MAAM,+DAA6D,EAAE,OAAO;AAExF,KAAI,CAAC,aAAa,CAAC,SAAS,OAAO,YAAa,SAAS,YAAY,aAAc,IAAI,SAAS,cAC9F,OAAM,IAAI,MAAM,gFAA8E,EAAE,OAAO;AAEzG,QAAO,SAAS,KAAK,YAAY;EAC/B,MAAM,WAAW,cAAc,CAAC,SAAS,WAAW,QAAQ,YAAY;AACxE,MAAI,CAAC,YAAY,SAAS,aAAa,EAAE,QAAQ,YAAY,SAAS,IACpE,OAAM,IAAI,MAAM,8EAA4E,EAAE,OAAO;AACvG,MAAI,EAAE,WAAW,YAAY,SAAS,UAAU,EAAE,SAAS,YAAY,SAAS,KAC9E,OAAM,IAAI,MAAM,2FAAyF,EAAE,OAAO;EAEpH,MAAM,SAAU,CAAC,SAAS,YAAY,QAAQ,UAAU,CAAC,SAAS,QAAQ,UACxE,QAAQ,SACN;AAEJ,SAAO;GACL,IAAW,GAAI,cAAc,SAAS,WAAY,GAAI,SAAS,WAAW,UAAU,QAAQ;GAC5F,UAAW;GACX,WAAW,OAAO,SAAS,OAAO;GAClC,SAAW,OAAO,SAAS,KAAK;GAChC,GAAG,OAAO,WAAW,YAAY;IAC/B,MAAM;KACJ,SAAU,OAAO,QAAQ,WAAW;KACpC,UAAU,OAAO,QAAQ,WAAW;;IAEtC,GAAG,OAAO;KACR,WAAa,QAAQ;KACrB,aAAa,QAAQ;OACpB;IACH,GAAG,UAAU,EACX,QAAQ;KAEN,GAAG,YAAY,CAAC,SAAS,aAAa,QAAQ,WAAW;KACzD,GAAG,QAAQ,SAAS,qBAAqB,EACvC,aAAa,GAAI,OAAO,aAAa,GAAI,GAAI,OAAO,YAAY;;IAItE,GAAG,QAAQ,MAAK,MAAK,CAAC,UAAU,SAAS,OAAO,EAC9C,WAAW,EACT,GAAI,OAAO,SAAS,aAAa,UAAW,EAC1C,QAAQA,gBAAS,CAAC,SAAS,UAAyD"}
|