sunrise-cms/database/getReportData.js

241 lines
8.8 KiB
JavaScript

import { dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToString } from '@cityssm/utils-datetime';
import { acquireConnection } from './pool.js';
// eslint-disable-next-line complexity
export default async function getReportData(reportName, reportParameters = {}) {
let sql = '';
const sqlParameters = [];
switch (reportName) {
case 'cemeteries-all': {
sql = 'select * from Maps';
break;
}
case 'cemeteries-formatted': {
sql = `select cemeteryName,
cemeteryDescription,
cemeteryAddress1, cemeteryAddress2,
cemeteryCity, cemeteryProvince,
cemeteryPostalCode,
cemeteryPhoneNumber
from Cemeteries
where recordDelete_timeMillis is null
order by cemeteryName`;
break;
}
case 'burialSites-all': {
sql = 'select * from BurialSites';
break;
}
case 'burialSites-byBurialSiteTypeId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
left join BurialSiteTypes t on l.burialSiteTypeId = t.burialSiteTypeId
left join BurialSiteStatuses s on l.burialSiteStatusId = s.burialSiteStatusId
left join Cemeteries m on l.cemeteryId = m.cemeteryId
where l.recordDelete_timeMillis is null
and l.burialSiteTypeId = ?`;
sqlParameters.push(reportParameters.burialSiteTypeId);
break;
}
case 'burialSites-byBurialSiteStatusId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
left join BurialSiteTypes t on l.burialSiteTypeId = t.burialSiteTypeId
left join BurialSiteStatuses s on l.burialSiteStatusId = s.burialSiteStatusId
left join Cemeteries m on l.cemeteryId = m.cemeteryId
where l.recordDelete_timeMillis is null
and l.burialSiteStatusId = ?`;
sqlParameters.push(reportParameters.burialSiteStatusId);
break;
}
case 'burialSites-byCemeteryId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
left join BurialSiteTypes t on l.burialSiteTypeId = t.burialSiteTypeId
left join BurialSiteStatuses s on l.burialSiteStatusId = s.burialSiteStatusId
left join Cemeteries m on l.cemeteryId = m.cemeteryId
where l.recordDelete_timeMillis is null
and l.cemeteryId = ?`;
sqlParameters.push(reportParameters.cemeteryId);
break;
}
case 'burialSiteComments-all': {
sql = 'select * from BurialSiteComments';
break;
}
case 'burialSiteFields-all': {
sql = 'select * from BurialSiteFields';
break;
}
case 'burialSiteContracts-all': {
sql = 'select * from BurialSiteContracts';
break;
}
case 'burialSiteContracts-current-byCemeteryId': {
sql = `select o.burialSiteContractId,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
m.cemeteryName,
ot.contractType,
o.contractStartDate,
o.contractEndDate
from BurialSiteContracts o
left join ContractTypes ot on o.contractTypeId = ot.contractTypeId
left join BurialSites l on o.burialSiteId = l.burialSiteId
left join Cemeteries m on l.cemeteryId = m.cemeteryId
where o.recordDelete_timeMillis is null
and (o.contractEndDate is null or o.contractEndDate >= ?)
and l.cemeteryId = ?`;
sqlParameters.push(dateToInteger(new Date()), reportParameters.cemeteryId);
break;
}
case 'burialSiteContractComments-all': {
sql = 'select * from BurialSiteContractComments';
break;
}
case 'burialSiteContractFees-all': {
sql = 'select * from BurialSiteContractFees';
break;
}
case 'burialSiteContractFields-all': {
sql = 'select * from BurialSiteContractFields';
break;
}
case 'burialSiteContractTransactions-all': {
sql = 'select * from BurialSiteContractTransactions';
break;
}
case 'burialSiteContractTransactions-byTransactionDateString': {
sql = `select t.burialSiteContractId, t.transactionIndex,
t.transactionDate, t.transactionTime,
t.transactionAmount,
t.externalReceiptNumber, t.transactionNote
from BurialSiteContractTransactions t
where t.recordDelete_timeMillis is null
and t.transactionDate = ?`;
sqlParameters.push(dateStringToInteger(reportParameters.transactionDateString));
break;
}
case 'workOrders-all': {
sql = 'select * from WorkOrders';
break;
}
case 'workOrders-open': {
sql = `select w.workOrderId, w.workOrderNumber,
t.workOrderType, w.workOrderDescription,
w.workOrderOpenDate,
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 'workOrderMilestones-byWorkOrderId': {
sql = `select t.workOrderMilestoneType,
m.workOrderMilestoneDate,
m.workOrderMilestoneTime,
m.workOrderMilestoneDescription,
m.workOrderMilestoneCompletionDate,
m.workOrderMilestoneCompletionTime
from WorkOrderMilestones m
left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId
where m.recordDelete_timeMillis is null
and m.workOrderId = ?`;
sqlParameters.push(reportParameters.workOrderId);
break;
}
case 'fees-all': {
sql = 'select * from Fees';
break;
}
case 'feeCategories-all': {
sql = 'select * from FeeCategories';
break;
}
case 'burialSiteTypes-all': {
sql = 'select * from BurialSiteTypes';
break;
}
case 'burialSiteTypeFields-all': {
sql = 'select * from BurialSiteTypeFields';
break;
}
case 'burialSiteStatuses-all': {
sql = 'select * from BurialSiteStatuses';
break;
}
case 'contractTypes-all': {
sql = 'select * from ContractTypes';
break;
}
case 'contractTypeFields-all': {
sql = 'select * from ContractTypeFields';
break;
}
case 'workOrderTypes-all': {
sql = 'select * from WorkOrderTypes';
break;
}
case 'workOrderMilestoneTypes-all': {
sql = 'select * from WorkOrderMilestoneTypes';
break;
}
default: {
return undefined;
}
}
const database = await acquireConnection();
database.function('userFn_dateIntegerToString', dateIntegerToString);
database.function('userFn_timeIntegerToString', timeIntegerToString);
const rows = database.prepare(sql).all(sqlParameters);
database.release();
return rows;
}