cityssm/lottery-licence-manager

View on GitHub
helpers/reportDefinitions/bankRecordReports.js

Summary

Maintainability
A
2 hrs
Test Coverage
A
100%
import * as configFunctions from "../functions.config.js";
const sql_bankRecordsFlatByBankingYear = (() => {
    const bankRecordTypes = configFunctions.getProperty("bankRecordTypes");
    const sql = "select o.organizationName," +
        " r1.accountNumber, m.bankingYear, m.bankingMonth" +
        bankRecordTypes.reduce((soFar, bankRecordType) => {
            const bankRecordTypeKey = bankRecordType.bankRecordType;
            return soFar +
                ", max(case" +
                " when r2.bankRecordType = '" + bankRecordTypeKey + "' and r2.recordIsNA = 1 then 'Not Applicable'" +
                " when r2.bankRecordType = '" + bankRecordTypeKey + "' and r2.recordDate is not null and r2.recordDate != 0 then 'Received'" +
                " else '' end) as " + bankRecordTypeKey + "_status" +
                ", max(case when r2.bankRecordType = '" + bankRecordTypeKey + "' then r2.recordNote end) as " + bankRecordTypeKey + "_recordNote";
        }, "") +
        " from (select ? as bankingYear, bankingMonth from BankingMonths) as m" +
        " left join (select distinct organizationID, accountNumber, bankingYear from OrganizationBankRecords) r1 on m.bankingYear = r1.bankingYear" +
        " left join OrganizationBankRecords r2" +
        " on r1.organizationID = r2.organizationID and r1.accountNumber = r2.accountNumber" +
        " and m.bankingYear = r2.bankingYear and m.bankingMonth = r2.bankingMonth" +
        " left join Organizations o on r1.organizationID = o.organizationID" +
        " where r2.recordDelete_timeMillis is null" +
        " and o.recordDelete_timeMillis is null" +
        " group by o.organizationName, r1.accountNumber, m.bankingYear, m.bankingMonth";
    return sql;
})();
const sql_bankRecordsFlatByOrganizationAndBankingYear = (() => {
    const bankRecordTypes = configFunctions.getProperty("bankRecordTypes");
    const sql = "select o.organizationName," +
        " r1.accountNumber, m.bankingYear, m.bankingMonth" +
        bankRecordTypes.reduce((soFar, bankRecordType) => {
            const bankRecordTypeKey = bankRecordType.bankRecordType;
            return soFar +
                ", max(case" +
                " when r2.bankRecordType = '" + bankRecordTypeKey + "' and r2.recordIsNA = 1 then 'Not Applicable'" +
                " when r2.bankRecordType = '" + bankRecordTypeKey + "' and r2.recordDate is not null and r2.recordDate != 0 then 'Received'" +
                " else '' end) as " + bankRecordTypeKey + "_status" +
                ", max(case when bankRecordType = '" + bankRecordTypeKey + "' then recordDate end) as " + bankRecordTypeKey + "_recordDate" +
                ", max(case when r2.bankRecordType = '" + bankRecordTypeKey + "' then r2.recordNote end) as " + bankRecordTypeKey + "_recordNote";
        }, "") +
        " from (select ? as bankingYear, bankingMonth from BankingMonths) as m" +
        " left join (select distinct organizationID, accountNumber, bankingYear from OrganizationBankRecords) r1 on m.bankingYear = r1.bankingYear" +
        " left join OrganizationBankRecords r2" +
        " on r1.organizationID = r2.organizationID and r1.accountNumber = r2.accountNumber" +
        " and m.bankingYear = r2.bankingYear and m.bankingMonth = r2.bankingMonth" +
        " left join Organizations o on r1.organizationID = o.organizationID" +
        " where r2.recordDelete_timeMillis is null" +
        " and r1.organizationID = ?" +
        " group by o.organizationName, r1.accountNumber, m.bankingYear, m.bankingMonth";
    return sql;
})();
export const reports = {
    "bankRecords-all": {
        sql: "select * from OrganizationBankRecords"
    },
    "bankRecordsFlat-byBankingYear": {
        sql: sql_bankRecordsFlatByBankingYear,
        params: (request) => [request.query.bankingYear]
    },
    "bankRecordsFlat-byOrganizationAndBankingYear": {
        sql: sql_bankRecordsFlatByOrganizationAndBankingYear,
        params: (request) => [request.query.bankingYear, request.query.organizationID]
    }
};
export default reports;