UNPKG

attestation-to-examiner-distribution

Version:

An API to calculate the precedence diagram method

198 lines (197 loc) 8.12 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const JSONToGraph_1 = __importDefault(require("./JSONToGraph")); const csv = require('csvtojson'); class ParseStudIPCSVToJSON { static getAllTutorsDict(nodes) { let tutors = {}; for (const element of nodes) { let node = element; let tutor = ParseStudIPCSVToJSON.getTutorFromNode(node); if (tutor != undefined) { // @ts-ignore if (!tutors[tutor]) { // @ts-ignore tutors[tutor] = {}; } // @ts-ignore let slotForTutor = ParseStudIPCSVToJSON.getSlotFromNode(node); // @ts-ignore if (!tutors[tutor][slotForTutor.day]) { // @ts-ignore tutors[tutor][slotForTutor.day] = {}; } // @ts-ignore tutors[tutor][slotForTutor.day][slotForTutor.time] = true; } } return tutors; } static getTutorFromNode(node) { let ort = node["Ort"]; return ort; } static getSlotFromNode(node) { let datum = node["Datum"]; let splits = datum.split("."); let date = new Date(); date.setFullYear(parseInt(splits[2]), parseInt(splits[1]) - 1, parseInt(splits[0])); // date.setDate(parseInt(splits[0])) // date.setFullYear(parseInt(splits[2])) // date.setMonth(parseInt(splits[1]) - 1) let day = ParseStudIPCSVToJSON.getWeekday(date); let tutor = ParseStudIPCSVToJSON.getTutorFromNode(node); let slot = { tutor: tutor, day: day, time: node["Beginn"], }; return slot; } static getWeekday(date) { return JSONToGraph_1.default.getWeekdayByNumber(date.getDay()); } static getAllGroups(nodes) { let groups = {}; let tutorSlotToGroupMembersInformations = {}; // since not all group members are in the same row, we need to collect them first for (const element of nodes) { let node = element; let slotsForGroup = ParseStudIPCSVToJSON.getSlotFromNode(node); let tutor = slotsForGroup.tutor; let day = slotsForGroup.day; let time = slotsForGroup.time; let slotId = tutor + "-" + day + "-" + time; // get the slot id // @ts-ignore let tutorSlotToGroupMembersInformation = tutorSlotToGroupMembersInformations[slotId] || { slot: slotsForGroup, groupMembers: [] }; let members = tutorSlotToGroupMembersInformation.groupMembers; let groupMembers = ParseStudIPCSVToJSON.getGroupMembersFromNode(node); // get the group member if (!!groupMembers && groupMembers.length > 0) { for (const groupMember of groupMembers) { members.push(groupMember); // add the group member to the list of group members } tutorSlotToGroupMembersInformation.groupMembers = members; } // @ts-ignore tutorSlotToGroupMembersInformations[slotId] = tutorSlotToGroupMembersInformation; } let slotKeys = Object.keys(tutorSlotToGroupMembersInformations); for (const slotKey of slotKeys) { // @ts-ignore let tutorSlotToGroupMembersInformation = tutorSlotToGroupMembersInformations[slotKey]; let slotsForGroup = tutorSlotToGroupMembersInformation.slot; let groupMembers = tutorSlotToGroupMembersInformation.groupMembers; if (groupMembers != undefined && groupMembers.length > 0) { let groupId = groupMembers.join(" & "); // @ts-ignore if (!groups[groupId]) { // @ts-ignore groups[groupId] = {}; } // @ts-ignore groups[groupId]["members"] = groupMembers; // @ts-ignore if (!groups[groupId]["selectedSlot"]) { // @ts-ignore groups[groupId]["selectedSlot"] = slotsForGroup; } // @ts-ignore if (!groups[groupId]["possibleSlots"]) { // @ts-ignore groups[groupId]["possibleSlots"] = {}; } // @ts-ignore if (!groups[groupId]["possibleSlots"][slotsForGroup.day]) { // @ts-ignore groups[groupId]["possibleSlots"][slotsForGroup.day] = {}; } // @ts-ignore groups[groupId]["possibleSlots"][slotsForGroup.day][slotsForGroup.time] = true; } } return groups; } static getGroupMembersFromNode(node) { let person = node["Person"]; console.log("person: " + JSON.stringify(person)); if (person == "") { return undefined; } if (person.length > 0) { if (person.includes("\n")) { let parts = person.split("\n"); return parts; } return [person]; } return undefined; } static getTutorFromSlot(slot) { let parts = slot.split("-"); return parts[2]; } static parseStudIPCSVToJSON(s) { return __awaiter(this, void 0, void 0, function* () { let output = yield csv({ delimiter: ";" }).fromString(s); let result = { groups: {}, tutors: {}, tutorMultipliers: {}, }; let tutorDicts = ParseStudIPCSVToJSON.getAllTutorsDict(output); // @ts-ignore result.tutors = tutorDicts; let tutorNames = Object.keys(tutorDicts); for (const tutorName of tutorNames) { // @ts-ignore result.tutorMultipliers[tutorName] = 1; } let groupDicts = ParseStudIPCSVToJSON.getAllGroups(output); // @ts-ignore result.groups = groupDicts; return result; }); } static getGroupsForTutors(parsedAsJSON) { if (!parsedAsJSON) { return {}; } let tutorNames = Object.keys(parsedAsJSON.tutors); let tutorsWithGroups = {}; let groupNames = Object.keys(parsedAsJSON.groups); for (const groupName of groupNames) { let group = parsedAsJSON.groups[groupName]; let tutorName = group.selectedSlot.tutor; if (tutorName != undefined) { // @ts-ignore if (!tutorsWithGroups[tutorName]) { // @ts-ignore tutorsWithGroups[tutorName] = []; } // @ts-ignore tutorsWithGroups[tutorName].push({ group: groupName, day: group.selectedSlot.day, time: group.selectedSlot.time, }); } } return tutorsWithGroups; } } exports.default = ParseStudIPCSVToJSON;