42 lines
961 B
TypeScript
42 lines
961 B
TypeScript
import type { InferResultType } from "@/utils/drizzle";
|
|
|
|
export enum PrinterStatus {
|
|
IDLE = 0,
|
|
OUT_OF_ORDER = 1,
|
|
RESERVED = 2,
|
|
}
|
|
|
|
export function derivePrinterStatus(
|
|
printer: InferResultType<"printers", { printJobs: true }>,
|
|
) {
|
|
if (printer.status === PrinterStatus.OUT_OF_ORDER) {
|
|
return PrinterStatus.OUT_OF_ORDER;
|
|
}
|
|
|
|
const activePrintJob = printer.printJobs[0];
|
|
|
|
if (!activePrintJob || activePrintJob.aborted) {
|
|
return PrinterStatus.IDLE;
|
|
}
|
|
|
|
const now = Date.now();
|
|
const startAt = new Date(activePrintJob.startAt).getTime();
|
|
const endAt = startAt + activePrintJob.durationInMinutes * 60 * 1000;
|
|
if (now < endAt) {
|
|
return PrinterStatus.RESERVED;
|
|
}
|
|
|
|
return PrinterStatus.IDLE;
|
|
}
|
|
|
|
export function translatePrinterStatus(status: PrinterStatus) {
|
|
switch (status) {
|
|
case PrinterStatus.IDLE:
|
|
return "Verfügbar";
|
|
case PrinterStatus.OUT_OF_ORDER:
|
|
return "Außer Betrieb";
|
|
case PrinterStatus.RESERVED:
|
|
return "Reserviert";
|
|
}
|
|
}
|