Skip to content

Commit

Permalink
additional fee maintenance #85 - see todo
Browse files Browse the repository at this point in the history
done
- add additional fee
- update additional fee
- reorder additional fees

todo
- delete additional fee
- format render additional fees
  • Loading branch information
dangowans committed May 30, 2022
1 parent 7f78a7a commit 197f463
Show file tree
Hide file tree
Showing 39 changed files with 1,104 additions and 9 deletions.
4 changes: 3 additions & 1 deletion handlers/admin-get/licenceCategories.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import * as cacheFunctions from "../../helpers/functions.cache.js";
import * as configFunctions from "../../helpers/functions.config.js";
import { getLicenceLengthFunctionNames } from "../../helpers/functions.config.js";
import { getLicenceLengthFunctionNames, getAdditionalFeeFunctionNames } from "../../helpers/functions.config.js";
import { getPrintEJSList } from "../../helpers/functions.print.js";
export const handler = async (_request, response) => {
cacheFunctions.clearAll();
const licenceCategories = cacheFunctions.getLicenceCategories();
const licenceLengthFunctionNames = getLicenceLengthFunctionNames();
const additionalFeeFunctionNames = getAdditionalFeeFunctionNames();
const printEJSList = await getPrintEJSList();
response.render("admin-licenceCategories", {
headTitle: configFunctions.getProperty("settings.licenceAlias") + " Categories",
licenceCategories,
licenceLengthFunctionNames,
additionalFeeFunctionNames,
printEJSList
});
};
Expand Down
4 changes: 3 additions & 1 deletion handlers/admin-get/licenceCategories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { RequestHandler } from "express";

import * as cacheFunctions from "../../helpers/functions.cache.js";
import * as configFunctions from "../../helpers/functions.config.js";
import { getLicenceLengthFunctionNames } from "../../helpers/functions.config.js";
import { getLicenceLengthFunctionNames, getAdditionalFeeFunctionNames } from "../../helpers/functions.config.js";
import { getPrintEJSList } from "../../helpers/functions.print.js";

export const handler: RequestHandler = async (_request, response) => {
Expand All @@ -12,13 +12,15 @@ export const handler: RequestHandler = async (_request, response) => {
const licenceCategories = cacheFunctions.getLicenceCategories();

const licenceLengthFunctionNames = getLicenceLengthFunctionNames();
const additionalFeeFunctionNames = getAdditionalFeeFunctionNames();

const printEJSList = await getPrintEJSList();

response.render("admin-licenceCategories", {
headTitle: configFunctions.getProperty("settings.licenceAlias") + " Categories",
licenceCategories,
licenceLengthFunctionNames,
additionalFeeFunctionNames,
printEJSList
});
};
Expand Down
3 changes: 3 additions & 0 deletions handlers/admin-post/doAddLicenceCategoryAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import type { RequestHandler } from "express";
export declare const handler: RequestHandler;
export default handler;
14 changes: 14 additions & 0 deletions handlers/admin-post/doAddLicenceCategoryAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { addLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/addLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";
import * as cacheFunctions from "../../helpers/functions.cache.js";
export const handler = async (request, response) => {
const licenceApprovalKey = addLicenceCategoryAdditionalFee(request.body, request.session);
cacheFunctions.clearAll();
const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(request.body.licenceCategoryKey);
response.json({
success: true,
licenceCategoryAdditionalFees,
licenceApprovalKey
});
};
export default handler;
25 changes: 25 additions & 0 deletions handlers/admin-post/doAddLicenceCategoryAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { RequestHandler } from "express";

import { addLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/addLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";

import * as cacheFunctions from "../../helpers/functions.cache.js";


export const handler: RequestHandler = async (request, response) => {

const licenceApprovalKey = addLicenceCategoryAdditionalFee(request.body, request.session);

cacheFunctions.clearAll();

const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(request.body.licenceCategoryKey);

response.json({
success: true,
licenceCategoryAdditionalFees,
licenceApprovalKey
});
};


export default handler;
3 changes: 3 additions & 0 deletions handlers/admin-post/doMoveLicenceCategoryAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import type { RequestHandler } from "express";
export declare const handler: RequestHandler;
export default handler;
14 changes: 14 additions & 0 deletions handlers/admin-post/doMoveLicenceCategoryAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { moveLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/moveLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";
import * as cacheFunctions from "../../helpers/functions.cache.js";
export const handler = async (request, response) => {
const licenceAdditionalFeeKey_from = request.body.licenceAdditionalFeeKey_from;
const licenceAdditionalFeeKey_to = request.body.licenceApprovalKey_to;
const licenceCategoryKey = moveLicenceCategoryAdditionalFee(licenceAdditionalFeeKey_from, licenceAdditionalFeeKey_to, request.session);
cacheFunctions.clearAll();
const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(licenceCategoryKey);
response.json({
licenceCategoryAdditionalFees
});
};
export default handler;
25 changes: 25 additions & 0 deletions handlers/admin-post/doMoveLicenceCategoryAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { RequestHandler } from "express";

import { moveLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/moveLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";

import * as cacheFunctions from "../../helpers/functions.cache.js";


export const handler: RequestHandler = async (request, response) => {

const licenceAdditionalFeeKey_from = request.body.licenceAdditionalFeeKey_from as string;
const licenceAdditionalFeeKey_to = request.body.licenceApprovalKey_to as string;

const licenceCategoryKey = moveLicenceCategoryAdditionalFee(licenceAdditionalFeeKey_from, licenceAdditionalFeeKey_to, request.session);

cacheFunctions.clearAll();
const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(licenceCategoryKey);

response.json({
licenceCategoryAdditionalFees
});
};


export default handler;
3 changes: 3 additions & 0 deletions handlers/admin-post/doUpdateLicenceCategoryAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import type { RequestHandler } from "express";
export declare const handler: RequestHandler;
export default handler;
15 changes: 15 additions & 0 deletions handlers/admin-post/doUpdateLicenceCategoryAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { updateLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/updateLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";
import * as cacheFunctions from "../../helpers/functions.cache.js";
export const handler = async (request, response) => {
const success = updateLicenceCategoryAdditionalFee(request.body, request.session);
cacheFunctions.clearAll();
const licenceCategoryAdditionalFee = getLicenceCategoryAdditionalFee(request.body.licenceAdditionalFeeKey);
const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(licenceCategoryAdditionalFee.licenceCategoryKey);
response.json({
success,
licenceCategoryAdditionalFees
});
};
export default handler;
27 changes: 27 additions & 0 deletions handlers/admin-post/doUpdateLicenceCategoryAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import type { RequestHandler } from "express";

import { updateLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/updateLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFee } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFee.js";
import { getLicenceCategoryAdditionalFees } from "../../helpers/licencesDB/getLicenceCategoryAdditionalFees.js";

import * as cacheFunctions from "../../helpers/functions.cache.js";


export const handler: RequestHandler = async (request, response) => {

const success = updateLicenceCategoryAdditionalFee(request.body, request.session);

cacheFunctions.clearAll();

const licenceCategoryAdditionalFee = getLicenceCategoryAdditionalFee(request.body.licenceAdditionalFeeKey);

const licenceCategoryAdditionalFees = getLicenceCategoryAdditionalFees(licenceCategoryAdditionalFee.licenceCategoryKey);

response.json({
success,
licenceCategoryAdditionalFees
});
};


export default handler;
5 changes: 5 additions & 0 deletions helpers/functions.config.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ export declare function getProperty(propertyName: "exports.batches"): configType
export declare function getProperty(propertyName: "licenceLengthFunctions"): {
[licenceLengthFunctionName: string]: configTypes.LicenceLengthFunction;
};
export declare function getProperty(propertyName: "additionalFeeFunctions"): {
[additonalFeeFunctionName: string]: configTypes.AdditionalFeeFunction;
};
export declare function getProperty(propertyName: "reverseProxy.disableCompression"): boolean;
export declare function getProperty(propertyName: "reverseProxy.disableEtag"): boolean;
export declare function getProperty(propertyName: "reverseProxy.urlPrefix"): string;
Expand All @@ -33,3 +36,5 @@ export declare function getProperty(propertyName: "session.secret"): string;
export declare const keepAliveMillis: number;
export declare const getLicenceLengthFunctionNames: () => string[];
export declare const getLicenceLengthFunction: (licenceLengthFunctionName: string) => configTypes.LicenceLengthFunction;
export declare const getAdditionalFeeFunctionNames: () => string[];
export declare const getAdditionalFeeFunction: (additionalFeeFunctionName: string) => configTypes.AdditionalFeeFunction;
7 changes: 7 additions & 0 deletions helpers/functions.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ configFallbackValues.set("settings.renewalAlias", "Renewal");
configFallbackValues.set("settings.includeBatches", false);
configFallbackValues.set("settings.includeReplacementFee", true);
configFallbackValues.set("licenceLengthFunctions", {});
configFallbackValues.set("additionalFeeFunctions", {});
export function getProperty(propertyName) {
const propertyNameSplit = propertyName.split(".");
let currentObject = config;
Expand All @@ -47,3 +48,9 @@ export const getLicenceLengthFunctionNames = () => {
export const getLicenceLengthFunction = (licenceLengthFunctionName) => {
return getProperty("licenceLengthFunctions")[licenceLengthFunctionName];
};
export const getAdditionalFeeFunctionNames = () => {
return Object.keys(getProperty("additionalFeeFunctions"));
};
export const getAdditionalFeeFunction = (additionalFeeFunctionName) => {
return getProperty("additionalFeeFunctions")[additionalFeeFunctionName];
};
13 changes: 13 additions & 0 deletions helpers/functions.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ configFallbackValues.set("settings.includeBatches", false);
configFallbackValues.set("settings.includeReplacementFee", true);

configFallbackValues.set("licenceLengthFunctions", {});
configFallbackValues.set("additionalFeeFunctions", {});


/*
Expand Down Expand Up @@ -79,6 +80,10 @@ export function getProperty(propertyName: "licenceLengthFunctions"): {
[licenceLengthFunctionName: string]: configTypes.LicenceLengthFunction;
};

export function getProperty(propertyName: "additionalFeeFunctions"): {
[additonalFeeFunctionName: string]: configTypes.AdditionalFeeFunction;
};

export function getProperty(propertyName: "reverseProxy.disableCompression"): boolean;
export function getProperty(propertyName: "reverseProxy.disableEtag"): boolean;
export function getProperty(propertyName: "reverseProxy.urlPrefix"): string;
Expand Down Expand Up @@ -123,3 +128,11 @@ export const getLicenceLengthFunctionNames = (): string[] => {
export const getLicenceLengthFunction = (licenceLengthFunctionName: string): configTypes.LicenceLengthFunction => {
return getProperty("licenceLengthFunctions")[licenceLengthFunctionName];
};

export const getAdditionalFeeFunctionNames = (): string[] => {
return Object.keys(getProperty("additionalFeeFunctions"));
};

export const getAdditionalFeeFunction = (additionalFeeFunctionName: string): configTypes.AdditionalFeeFunction => {
return getProperty("additionalFeeFunctions")[additionalFeeFunctionName];
};
7 changes: 7 additions & 0 deletions helpers/licencesDB/addLicenceCategoryAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type * as recordTypes from "../../types/recordTypes";
interface AddLicenceCategoryAdditionalFeeForm {
licenceCategoryKey: string;
additionalFee: string;
}
export declare const addLicenceCategoryAdditionalFee: (licenceCategoryAdditionalFeeForm: AddLicenceCategoryAdditionalFeeForm, requestSession: recordTypes.PartialSession) => string;
export default addLicenceCategoryAdditionalFee;
20 changes: 20 additions & 0 deletions helpers/licencesDB/addLicenceCategoryAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";
import { getUnusedLicenceAdditionalFeeKey } from "./getUnusedKey.js";
export const addLicenceCategoryAdditionalFee = (licenceCategoryAdditionalFeeForm, requestSession) => {
const licenceAdditionalFeeKey = getUnusedLicenceAdditionalFeeKey(licenceCategoryAdditionalFeeForm.licenceCategoryKey, licenceCategoryAdditionalFeeForm.additionalFee);
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
database
.prepare("insert into licenceCategoryAdditionalFees" +
"(licenceAdditionalFeeKey, licenceCategoryKey, additionalFee," +
" additionalFeeType, additionalFeeNumber, additionalFeeFunction," +
" isRequired," +
" recordCreate_userName, recordCreate_timeMillis," +
" recordUpdate_userName, recordUpdate_timeMillis)" +
" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
.run(licenceAdditionalFeeKey, licenceCategoryAdditionalFeeForm.licenceCategoryKey, licenceCategoryAdditionalFeeForm.additionalFee, "flat", 0, "", 0, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close();
return licenceAdditionalFeeKey;
};
export default addLicenceCategoryAdditionalFee;
49 changes: 49 additions & 0 deletions helpers/licencesDB/addLicenceCategoryAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";

import { getUnusedLicenceAdditionalFeeKey } from "./getUnusedKey.js";

import type * as recordTypes from "../../types/recordTypes";

interface AddLicenceCategoryAdditionalFeeForm {
licenceCategoryKey: string;
additionalFee: string;
}

export const addLicenceCategoryAdditionalFee =
(licenceCategoryAdditionalFeeForm: AddLicenceCategoryAdditionalFeeForm, requestSession: recordTypes.PartialSession): string => {

const licenceAdditionalFeeKey =
getUnusedLicenceAdditionalFeeKey(licenceCategoryAdditionalFeeForm.licenceCategoryKey, licenceCategoryAdditionalFeeForm.additionalFee);

const database = sqlite(databasePath);

const rightNowMillis = Date.now();

database
.prepare("insert into licenceCategoryAdditionalFees" +
"(licenceAdditionalFeeKey, licenceCategoryKey, additionalFee," +
" additionalFeeType, additionalFeeNumber, additionalFeeFunction," +
" isRequired," +
" recordCreate_userName, recordCreate_timeMillis," +
" recordUpdate_userName, recordUpdate_timeMillis)" +
" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
.run(licenceAdditionalFeeKey,
licenceCategoryAdditionalFeeForm.licenceCategoryKey,
licenceCategoryAdditionalFeeForm.additionalFee,
"flat",
0,
"",
0,
requestSession.user.userName,
rightNowMillis,
requestSession.user.userName,
rightNowMillis);

database.close();

return licenceAdditionalFeeKey;
};


export default addLicenceCategoryAdditionalFee;
4 changes: 4 additions & 0 deletions helpers/licencesDB/getLicenceCategoryAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import sqlite from "better-sqlite3";
import type * as recordTypes from "../../types/recordTypes";
export declare const getLicenceCategoryAdditionalFee: (licenceAdditionalFeeKey: string, database?: sqlite.Database) => recordTypes.LicenceCategoryAdditionalFee;
export default getLicenceCategoryAdditionalFee;
23 changes: 23 additions & 0 deletions helpers/licencesDB/getLicenceCategoryAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";
export const getLicenceCategoryAdditionalFee = (licenceAdditionalFeeKey, database) => {
let doCloseDatabase = false;
if (!database) {
database = sqlite(databasePath, {
readonly: true
});
doCloseDatabase = true;
}
const licenceCategoryAdditionalFee = database.prepare("select licenceCategoryKey, licenceAdditionalFeeKey," +
" additionalFee, additionalFeeType, additionalFeeNumber, additionalFeeFunction," +
" isRequired, orderNumber" +
" from LicenceCategoryAdditionalFees" +
" where recordDelete_timeMillis is null" +
" and licenceAdditionalFeeKey = ?")
.get(licenceAdditionalFeeKey);
if (doCloseDatabase) {
database.close();
}
return licenceCategoryAdditionalFee;
};
export default getLicenceCategoryAdditionalFee;
37 changes: 37 additions & 0 deletions helpers/licencesDB/getLicenceCategoryAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";

import type * as recordTypes from "../../types/recordTypes";


export const getLicenceCategoryAdditionalFee = (licenceAdditionalFeeKey: string, database?: sqlite.Database): recordTypes.LicenceCategoryAdditionalFee => {

let doCloseDatabase = false;

if (!database) {

database = sqlite(databasePath, {
readonly: true
});

doCloseDatabase = true;
}

const licenceCategoryAdditionalFee: recordTypes.LicenceCategoryAdditionalFee =
database.prepare("select licenceCategoryKey, licenceAdditionalFeeKey," +
" additionalFee, additionalFeeType, additionalFeeNumber, additionalFeeFunction," +
" isRequired, orderNumber" +
" from LicenceCategoryAdditionalFees" +
" where recordDelete_timeMillis is null" +
" and licenceAdditionalFeeKey = ?")
.get(licenceAdditionalFeeKey);

if (doCloseDatabase) {
database.close();
}

return licenceCategoryAdditionalFee;
};


export default getLicenceCategoryAdditionalFee;
1 change: 1 addition & 0 deletions helpers/licencesDB/getUnusedKey.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export declare const getUnusedLicenceCategoryKey: (licenceCategory: string) => string;
export declare const getUnusedLicenceFieldKey: (licenceCategoryKey: string, licenceField: string) => string;
export declare const getUnusedLicenceApprovalKey: (licenceCategoryKey: string, licenceApproval: string) => string;
export declare const getUnusedLicenceAdditionalFeeKey: (licenceCategoryKey: string, additionalFee: string) => string;
Loading

0 comments on commit 197f463

Please sign in to comment.