forked from plainblack/ving
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimport_tgc_hardware.mjs
executable file
·104 lines (95 loc) · 3.18 KB
/
import_tgc_hardware.mjs
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env -S node --env-file=.env
import { useKind } from '#ving/record/utils.mjs';
import { maintenanceItems } from './maintenanceItems.mjs';
import { maintenanceSchedules } from './maintenanceSchedules.mjs';
import { maintenanceLogs } from './maintenanceLogs.mjs';
import { eq, and } from '#ving/drizzle/orm.mjs';
import ving from '#ving/index.mjs'
const Sets = await useKind('HardwareItemSet');
const Items = await useKind('HardwareItem');
const Tasks = await useKind('HardwareTask');
const Schedules = await useKind('HardwareSchedule');
const Tickets = await useKind('HardwareTicket');
await Sets.deleteMany();
await Items.deleteMany();
await Tasks.deleteMany();
await Schedules.deleteMany();
await Tickets.deleteMany();
const seenSets = [];
const itemLookup = [];
for (const item of maintenanceItems) {
//Set == station
if (!seenSets[item.station]) {
//Create the Set
const set = await Sets.create({
name: item.station,
status: item.status == 'In Use' ? 'in_use' : 'retired',
});
seenSets[item.station] = set;
//Create tasks for the Set
for (const task of item.tasks) {
await Tasks.create({
description: task,
hardwareItemSetId: set.id,
});
}
}
//Create the item
const itemObj = await Items.create({
name: item.item,
status: item.status == 'In Use' ? 'in_use' : 'retired',
hardwareItemSetId: seenSets[item.station].id,
});
itemLookup[item.item] = itemObj;
}
for (const schedule of maintenanceSchedules) {
const item = itemLookup[schedule.equipment];
const set = await item.parent('itemSet');
const task = await Tasks.findOne(
and(
eq(Tasks.table.hardwareItemSetId, item.hardwareItemSetId),
eq(Tasks.table.description, schedule.event)
)
);
const scheduleObject = await Schedules.create({
recurrence: schedule.recurrence,
weeks: schedule.weeks,
months: schedule.months,
days: schedule.days,
hardwareItemId: item.id,
hardwareTaskId: task.id,
description: schedule.note || '',
});
}
for (const log of maintenanceLogs) {
const item = itemLookup[log.equipment];
if (!item) {
continue;
}
const set = await item.parent('itemSet');
const task = await Tasks.findOne(
and(
eq(Tasks.table.hardwareItemSetId, item.hardwareItemSetId),
eq(Tasks.table.description, log.event)
)
);
if (!task) {
continue;
}
const ticket = Tickets.mint({
type: log.is_routine ? 'routine' : 'needs_help',
hardwareItemId: item.id,
hardwareTaskId: task.id,
description: log.note || '',
status: 'resolved',
severity: 'working',
submittedBy: log.who || 'TGC',
});
ticket.skipSlackPing = true;
await ticket.insert();
const date_updated = new Date(Date.parse(log.date_updated));
const date_created = new Date(Date.parse(log.date_created));
await Tickets.update.set({ updatedAt: date_updated, createdAt: date_created }).where(eq(Tickets.table.id, ticket.id));
}
console.log("Done");
await ving.close();