190 lines
7.7 KiB
JavaScript
190 lines
7.7 KiB
JavaScript
import sqlite from "better-sqlite3";
|
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
|
import * as configFunctions from "../functions.config.js";
|
|
import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
|
|
import camelCase from "camelcase";
|
|
const mapCamelCase = camelCase(configFunctions.getProperty("aliases.map"));
|
|
const mapNameAlias = mapCamelCase + "Name";
|
|
const mapDescriptionAlias = mapCamelCase + "Description";
|
|
const mapAddress1Alias = mapCamelCase + "Address1";
|
|
const mapAddress2Alias = mapCamelCase + "Address2";
|
|
const mapCityAlias = mapCamelCase + "City";
|
|
const mapProvinceAlias = mapCamelCase + "Province";
|
|
const mapPostalCodeAlias = mapCamelCase + "PostalCode";
|
|
const mapPhoneNumberAlias = mapCamelCase + "PhoneNumber";
|
|
export const getReportData = (reportName, reportParameters) => {
|
|
let sql;
|
|
const sqlParameters = [];
|
|
switch (reportName) {
|
|
case "maps-all":
|
|
sql = "select * from Maps";
|
|
break;
|
|
case "maps-formatted":
|
|
sql =
|
|
"select mapName as " +
|
|
mapNameAlias +
|
|
"," +
|
|
" mapDescription as " +
|
|
mapDescriptionAlias +
|
|
"," +
|
|
" mapAddress1 as " +
|
|
mapAddress1Alias +
|
|
"," +
|
|
" mapAddress2 as " +
|
|
mapAddress2Alias +
|
|
"," +
|
|
" mapCity as " +
|
|
mapCityAlias +
|
|
"," +
|
|
" mapProvince as " +
|
|
mapProvinceAlias +
|
|
"," +
|
|
" mapPostalCode as " +
|
|
mapPostalCodeAlias +
|
|
"," +
|
|
" mapPhoneNumber as " +
|
|
mapPhoneNumberAlias +
|
|
" from Maps" +
|
|
" where recordDelete_timeMillis is null" +
|
|
" order by mapName";
|
|
break;
|
|
case "lots-all":
|
|
sql = "select * from Lots";
|
|
break;
|
|
case "lots-byLotTypeId":
|
|
sql =
|
|
"select l.lotId," +
|
|
" m.mapName, l.lotName," +
|
|
" t.lotType, s.lotStatus" +
|
|
" from Lots l" +
|
|
" left join LotTypes t on l.lotTypeId = t.lotTypeId" +
|
|
" left join LotStatuses s on l.lotStatusId = s.lotStatusId" +
|
|
" left join Maps m on l.mapId = m.mapId" +
|
|
" where l.recordDelete_timeMillis is null" +
|
|
" and l.lotTypeId = ?";
|
|
sqlParameters.push(reportParameters.lotTypeId);
|
|
break;
|
|
case "lots-byLotStatusId":
|
|
sql =
|
|
"select l.lotId," +
|
|
" m.mapName, l.lotName," +
|
|
" t.lotType, s.lotStatus" +
|
|
" from Lots l" +
|
|
" left join LotTypes t on l.lotTypeId = t.lotTypeId" +
|
|
" left join LotStatuses s on l.lotStatusId = s.lotStatusId" +
|
|
" left join Maps m on l.mapId = m.mapId" +
|
|
" where l.recordDelete_timeMillis is null" +
|
|
" and l.lotStatusId = ?";
|
|
sqlParameters.push(reportParameters.lotStatusId);
|
|
break;
|
|
case "lots-byMapId":
|
|
sql =
|
|
"select l.lotId," +
|
|
" m.mapName, l.lotName," +
|
|
" t.lotType, s.lotStatus" +
|
|
" from Lots l" +
|
|
" left join LotTypes t on l.lotTypeId = t.lotTypeId" +
|
|
" left join LotStatuses s on l.lotStatusId = s.lotStatusId" +
|
|
" left join Maps m on l.mapId = m.mapId" +
|
|
" where l.recordDelete_timeMillis is null" +
|
|
" and l.mapId = ?";
|
|
sqlParameters.push(reportParameters.mapId);
|
|
break;
|
|
case "lotComments-all":
|
|
sql = "select * from LotComments";
|
|
break;
|
|
case "lotFields-all":
|
|
sql = "select * from LotFields";
|
|
break;
|
|
case "lotOccupancies-all":
|
|
sql = "select * from LotOccupancies";
|
|
break;
|
|
case "lotOccupancyComments-all":
|
|
sql = "select * from LotOccupancyComments";
|
|
break;
|
|
case "lotOccupancyFees-all":
|
|
sql = "select * from LotOccupancyFees";
|
|
break;
|
|
case "lotOccupancyFields-all":
|
|
sql = "select * from LotOccupancyFields";
|
|
break;
|
|
case "lotOccupancyOccupants-all":
|
|
sql = "select * from LotOccupancyOccupants";
|
|
break;
|
|
case "lotOccupancyTransactions-all":
|
|
sql = "select * from LotOccupancyTransactions";
|
|
break;
|
|
case "workOrders-all":
|
|
sql = "select * from WorkOrders";
|
|
break;
|
|
case "workOrders-open":
|
|
sql =
|
|
"select w.workOrderId, w.workOrderNumber," +
|
|
" t.workOrderType, w.workOrderDescription," +
|
|
" m.workOrderMilestoneCount, m.workOrderMilestoneCompletionCount" +
|
|
" from WorkOrders w" +
|
|
" left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId" +
|
|
(" left join (" +
|
|
"select m.workOrderId," +
|
|
" count(m.workOrderMilestoneId) as workOrderMilestoneCount," +
|
|
" sum(case when m.workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount" +
|
|
" from WorkOrderMilestones m" +
|
|
" where m.recordDelete_timeMillis is null" +
|
|
" group by m.workOrderId" +
|
|
") m on w.workOrderId = m.workOrderId") +
|
|
" where w.recordDelete_timeMillis is null" +
|
|
" and w.workOrderCloseDate is null";
|
|
break;
|
|
case "workOrderComments-all":
|
|
sql = "select * from WorkOrderComments";
|
|
break;
|
|
case "workOrderLots-all":
|
|
sql = "select * from WorkOrderLots";
|
|
break;
|
|
case "workOrderMilestones-all":
|
|
sql = "select * from WorkOrderMilestones";
|
|
break;
|
|
case "fees-all":
|
|
sql = "select * from Fees";
|
|
break;
|
|
case "feeCategories-all":
|
|
sql = "select * from FeeCategories";
|
|
break;
|
|
case "lotTypes-all":
|
|
sql = "select * from LotTypes";
|
|
break;
|
|
case "lotTypeFields-all":
|
|
sql = "select * from LotTypeFields";
|
|
break;
|
|
case "lotStatuses-all":
|
|
sql = "select * from LotStatuses";
|
|
break;
|
|
case "occupancyTypes-all":
|
|
sql = "select * from OccupancyTypes";
|
|
break;
|
|
case "occupancyTypeFields-all":
|
|
sql = "select * from OccupancyTypeFields";
|
|
break;
|
|
case "lotOccupantTypes-all":
|
|
sql = "select * from LotOccupantTypes";
|
|
break;
|
|
case "workOrderTypes-all":
|
|
sql = "select * from WorkOrderTypes";
|
|
break;
|
|
case "workOrderMilestoneTypes-all":
|
|
sql = "select * from WorkOrderMilestoneTypes";
|
|
break;
|
|
default:
|
|
return undefined;
|
|
}
|
|
const database = sqlite(databasePath, {
|
|
readonly: true
|
|
});
|
|
database.function("userFn_dateIntegerToString", dateTimeFunctions.dateIntegerToString);
|
|
database.function("userFn_timeIntegerToString", dateTimeFunctions.timeIntegerToString);
|
|
const rows = database.prepare(sql).all(sqlParameters);
|
|
database.close();
|
|
return rows;
|
|
};
|
|
export default getReportData;
|