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