import sqlite from 'better-sqlite3'; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'; export function getPastLotOccupancyOccupants(filters, options) { const database = sqlite(databasePath, { readonly: true }); let sqlWhereClause = ' where o.recordDelete_timeMillis is null and l.recordDelete_timeMillis is null'; const sqlParameters = []; if (filters.searchFilter) { const searchFilterPieces = filters.searchFilter.split(' '); for (const searchFilterPiece of searchFilterPieces) { sqlWhereClause += " and (o.occupantName like '%' || ? || '%'" + " or o.occupantAddress1 like '%' || ? || '%'" + " or o.occupantAddress2 like '%' || ? || '%'" + " or o.occupantCity like '%' || ? || '%')"; sqlParameters.push(searchFilterPiece, searchFilterPiece, searchFilterPiece, searchFilterPiece); } } const sql = 'select' + ' o.occupantName, o.occupantAddress1, o.occupantAddress2,' + ' o.occupantCity, o.occupantProvince, o.occupantPostalCode,' + ' o.occupantPhoneNumber, o.occupantEmailAddress,' + ' count(*) as lotOccupancyIdCount,' + ' max(o.recordUpdate_timeMillis) as recordUpdate_timeMillisMax' + ' from LotOccupancyOccupants o' + ' left join LotOccupancies l on o.lotOccupancyId = l.lotOccupancyId' + sqlWhereClause + ' group by occupantName, occupantAddress1, occupantAddress2, occupantCity, occupantProvince, occupantPostalCode,' + ' occupantPhoneNumber, occupantEmailAddress' + ' order by lotOccupancyIdCount desc, recordUpdate_timeMillisMax desc' + ' limit ' + options.limit; const lotOccupancyOccupants = database .prepare(sql) .all(sqlParameters); database.close(); return lotOccupancyOccupants; } export default getPastLotOccupancyOccupants;