import { acquireConnection } from './pool.js'; import { getFees } from './getFees.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; export async function getFeeCategories(filters, options) { const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees; const database = await acquireConnection(); let sqlWhereClause = ' where recordDelete_timeMillis is null'; const sqlParameters = []; if ((filters.occupancyTypeId ?? '') !== '') { sqlWhereClause += ' and feeCategoryId in (' + 'select feeCategoryId from Fees' + ' where recordDelete_timeMillis is null' + ' and (occupancyTypeId is null or occupancyTypeId = ?))'; sqlParameters.push(filters.occupancyTypeId); } if ((filters.lotTypeId ?? '') !== '') { sqlWhereClause += ' and feeCategoryId in (' + 'select feeCategoryId from Fees' + ' where recordDelete_timeMillis is null' + ' and (lotTypeId is null or lotTypeId = ?))'; sqlParameters.push(filters.lotTypeId); } const feeCategories = database .prepare('select feeCategoryId, feeCategory, orderNumber' + ' from FeeCategories' + sqlWhereClause + ' order by orderNumber, feeCategory') .all(sqlParameters); if (options.includeFees ?? false) { let expectedOrderNumber = 0; for (const feeCategory of feeCategories) { if (updateOrderNumbers && feeCategory.orderNumber !== expectedOrderNumber) { updateRecordOrderNumber('FeeCategories', feeCategory.feeCategoryId, expectedOrderNumber, database); feeCategory.orderNumber = expectedOrderNumber; } expectedOrderNumber += 1; feeCategory.fees = await getFees(feeCategory.feeCategoryId, filters, database); } } database.release(); return feeCategories; } export default getFeeCategories;