This repository has been archived by the owner on Dec 25, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinterpret.js
90 lines (73 loc) · 2.41 KB
/
interpret.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
const XLSX = require("xlsx");
const Utils = XLSX.utils;
const path = require("path");
var { DateTime, Interval } = require('luxon');
const { unarchive, searchFiles, margeLuxonDateTimeObject } = require('./util');
let downloadPath = '';
async function run(requestTimeRange) {
if (!requestTimeRange) {
return;
}
if (!(await unarchive(downloadPath))) {
return;
}
const reservations = {};
const sheetFiles = await searchFiles(downloadPath, "xlsx");
sheetFiles.forEach(function (file) {
const book = XLSX.readFile(path.join(downloadPath, file));
const sheet = book.Sheets["Sheet0"];
const range = Utils.decode_range(sheet['!ref']);
for (let row = range.s.r + 1; row <= range.e.r; row++) {
const dateDt = DateTime.fromFormat(sheet[Utils.encode_cell({ r: row, c: 5 })].v, "y/MM/dd");
const data = {
reserveId: sheet[Utils.encode_cell({ r: row, c: 0 })].v,
className: sheet[Utils.encode_cell({ r: row, c: 2 })].v,
date: dateDt,
timeRange: Interval.fromDateTimes(
margeLuxonDateTimeObject(dateDt, DateTime.fromFormat(sheet[Utils.encode_cell({ r: row, c: 7 })].v, "hhmm")),
margeLuxonDateTimeObject(dateDt, DateTime.fromFormat(sheet[Utils.encode_cell({ r: row, c: 8 })].v, "hhmm")),
),
category: sheet[Utils.encode_cell({ r: row, c: 9 })].v,
detail: sheet[Utils.encode_cell({ r: row, c: 10 })].v,
teacher: sheet[Utils.encode_cell({ r: row, c: 12 })].v,
};
if (data.detail == '') {
data.detail = `<${data.category}>`;
}
if (!reservations[data.className]) {
reservations[data.className] = [];
}
if (true /*data.reserveId != '-'*/) {
reservations[data.className].push(data);
}
}
});
overlapReserved = [];
emptyClasses = [];
Object.keys(reservations).forEach(function (className) {
if (reservations[className].length == 0) {
emptyClasses.push(className);
} else {
let overlapReserveCount = 0;
reservations[className].forEach((reserve) => {
if (reserve.timeRange.overlaps(requestTimeRange)) {
overlapReserved.push(reserve);
overlapReserveCount++;
}
})
if (overlapReserveCount == 0) {
emptyClasses.push(className);
}
}
});
return {
overlapReserved,
emptyClasses
}
}
module.exports = (path) => {
downloadPath = path;
return {
run
}
}