29 lines
1.3 KiB
JavaScript
29 lines
1.3 KiB
JavaScript
import * as configFunctions from '../helpers/functions.config.js';
|
|
import { acquireConnection } from './pool.js';
|
|
export async function getNextWorkOrderNumber(connectedDatabase) {
|
|
const database = connectedDatabase ?? (await acquireConnection());
|
|
const paddingLength = configFunctions.getConfigProperty('settings.workOrders.workOrderNumberLength');
|
|
const currentYearString = new Date().getFullYear().toString();
|
|
const regex = new RegExp('^' + currentYearString + '-\\d+$');
|
|
database.function('userFn_matchesWorkOrderNumberSyntax', (workOrderNumber) => {
|
|
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.release();
|
|
}
|
|
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;
|