sunrise-cms/helpers/lotOccupancyDB/getNextWorkOrderNumber.ts

50 lines
1.5 KiB
TypeScript

import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import * as configFunctions from "../functions.config.js";
export function getNextWorkOrderNumber(connectedDatabase?: sqlite.Database): string {
const database =
connectedDatabase ||
sqlite(databasePath, {
readonly: true
});
const paddingLength = configFunctions.getProperty("settings.workOrders.workOrderNumberLength");
const currentYearString = new Date().getFullYear().toString();
const regex = new RegExp("^" + currentYearString + "-\\d+$");
database.function("userFn_matchesWorkOrderNumberSyntax", (workOrderNumber: string) => {
return regex.test(workOrderNumber) ? 1 : 0;
});
const workOrderNumberRecord = database
.prepare(
"select workOrderNumber from WorkOrders" +
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" +
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc"
)
.get();
if (!connectedDatabase) {
database.close();
}
let workOrderNumberIndex = 0;
if (workOrderNumberRecord) {
workOrderNumberIndex = Number.parseInt(
workOrderNumberRecord.workOrderNumber.split("-")[1],
10
);
}
workOrderNumberIndex += 1;
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0");
}
export default getNextWorkOrderNumber;