sunrise-cms/helpers/lotOccupancyDB/getNextWorkOrderNumber.ts

61 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 === undefined) {
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