sunrise-cms/helpers/functions.sqlFilters.js

89 lines
3.1 KiB
JavaScript

import { dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function getLotNameWhereClause(lotName = '', lotNameSearchType, lotsTableAlias = 'l') {
let sqlWhereClause = '';
const sqlParameters = [];
if (lotName !== '') {
switch (lotNameSearchType) {
case 'startsWith': {
sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like ? || '%'";
sqlParameters.push(lotName);
break;
}
case 'endsWith': {
sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like '%' || ?";
sqlParameters.push(lotName);
break;
}
default: {
const lotNamePieces = lotName.toLowerCase().split(' ');
for (const lotNamePiece of lotNamePieces) {
if (lotNamePiece === '') {
continue;
}
sqlWhereClause +=
' and instr(lower(' + lotsTableAlias + '.lotName), ?)';
sqlParameters.push(lotNamePiece);
}
}
}
}
return {
sqlWhereClause,
sqlParameters
};
}
export function getOccupancyTimeWhereClause(occupancyTime, lotOccupanciesTableAlias = 'o') {
let sqlWhereClause = '';
const sqlParameters = [];
const currentDateString = dateToInteger(new Date());
switch (occupancyTime ?? '') {
case 'current': {
sqlWhereClause +=
' and ' +
lotOccupanciesTableAlias +
'.occupancyStartDate <= ? and (' +
lotOccupanciesTableAlias +
'.occupancyEndDate is null or ' +
lotOccupanciesTableAlias +
'.occupancyEndDate >= ?)';
sqlParameters.push(currentDateString, currentDateString);
break;
}
case 'past': {
sqlWhereClause +=
' and ' + lotOccupanciesTableAlias + '.occupancyEndDate < ?';
sqlParameters.push(currentDateString);
break;
}
case 'future': {
sqlWhereClause +=
' and ' + lotOccupanciesTableAlias + '.occupancyStartDate > ?';
sqlParameters.push(currentDateString);
break;
}
}
return {
sqlWhereClause,
sqlParameters
};
}
export function getOccupantNameWhereClause(occupantName = '', tableAlias = 'o') {
let sqlWhereClause = '';
const sqlParameters = [];
if (occupantName !== '') {
const occupantNamePieces = occupantName.toLowerCase().split(' ');
for (const occupantNamePiece of occupantNamePieces) {
if (occupantNamePiece === '') {
continue;
}
sqlWhereClause += ` and (instr(lower(${tableAlias}.occupantName), ?)
or instr(lower(${tableAlias}.occupantFamilyName), ?))`;
sqlParameters.push(occupantNamePiece, occupantNamePiece);
}
}
return {
sqlWhereClause,
sqlParameters
};
}