Skip to content

Commit

Permalink
additional fees #85
Browse files Browse the repository at this point in the history
  • Loading branch information
dangowans committed Jun 3, 2022
1 parent 7333ee6 commit 4dfb93d
Show file tree
Hide file tree
Showing 23 changed files with 444 additions and 61 deletions.
3 changes: 3 additions & 0 deletions handlers/licences-post/doAddAdditionalFee.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/licences-post/doAddAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { addLicenceAdditionalFee } from "../../helpers/licencesDB/addLicenceAdditionalFee.js";
export const handler = async (request, response) => {
const feeDetails = addLicenceAdditionalFee(request.body.licenceId, request.body.licenceAdditionalFeeKey, request.session);
const additionalFee = {
licenceAdditionalFeeKey: feeDetails.licenceCategoryAdditionalFee.licenceAdditionalFeeKey,
additionalFeeAmount: feeDetails.additionalFeeAmount,
additionalFee: feeDetails.licenceCategoryAdditionalFee.additionalFee
};
response.json({
success: (additionalFee ? true : false),
licenceFee: feeDetails.licenceFee,
additionalFee
});
};
export default handler;
27 changes: 27 additions & 0 deletions handlers/licences-post/doAddAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import type { RequestHandler } from "express";

import { addLicenceAdditionalFee } from "../../helpers/licencesDB/addLicenceAdditionalFee.js";

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


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

const feeDetails = addLicenceAdditionalFee(
request.body.licenceId, request.body.licenceAdditionalFeeKey, request.session);

const additionalFee: recordTypes.LicenceAdditionalFee = {
licenceAdditionalFeeKey: feeDetails.licenceCategoryAdditionalFee.licenceAdditionalFeeKey,
additionalFeeAmount: feeDetails.additionalFeeAmount,
additionalFee: feeDetails.licenceCategoryAdditionalFee.additionalFee
};

response.json({
success: (additionalFee ? true : false),
licenceFee: feeDetails.licenceFee,
additionalFee
});
};


export default handler;
3 changes: 3 additions & 0 deletions handlers/licences-post/doDeleteAdditionalFee.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;
9 changes: 9 additions & 0 deletions handlers/licences-post/doDeleteAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { deleteLicenceAdditionalFee } from "../../helpers/licencesDB/deleteLicenceAdditionalFee.js";
export const handler = async (request, response) => {
const feeDetails = deleteLicenceAdditionalFee(request.body.licenceId, request.body.licenceAdditionalFeeKey, request.session);
response.json({
success: (feeDetails ? true : false),
licenceFee: feeDetails.licenceFee
});
};
export default handler;
18 changes: 18 additions & 0 deletions handlers/licences-post/doDeleteAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { RequestHandler } from "express";

import { deleteLicenceAdditionalFee } from "../../helpers/licencesDB/deleteLicenceAdditionalFee.js";


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

const feeDetails = deleteLicenceAdditionalFee(
request.body.licenceId, request.body.licenceAdditionalFeeKey, request.session);

response.json({
success: (feeDetails ? true : false),
licenceFee: feeDetails.licenceFee
});
};


export default handler;
1 change: 1 addition & 0 deletions helpers/functions.cache.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type * as recordTypes from "../types/recordTypes";
export declare const getLicenceCategories: () => recordTypes.LicenceCategory[];
export declare const getLicenceCategory: (licenceCategoryKey: string) => recordTypes.LicenceCategory;
export declare const getLicenceCategoryAdditionalFee: (licenceAdditionalFeeKey: string) => recordTypes.LicenceCategoryAdditionalFee;
export declare const clearAll: () => void;
12 changes: 12 additions & 0 deletions helpers/functions.cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@ export const getLicenceCategory = (licenceCategoryKey) => {
}
return licenceCategoriesMap.get(licenceCategoryKey);
};
export const getLicenceCategoryAdditionalFee = (licenceAdditionalFeeKey) => {
const licenceCategories = getLicenceCategories();
for (const licenceCategory of licenceCategories) {
const licenceCategoryAdditionalFees = getLicenceCategory(licenceCategory.licenceCategoryKey).licenceCategoryAdditionalFees;
for (const licenceCategoryAdditionalFee of licenceCategoryAdditionalFees) {
if (licenceCategoryAdditionalFee.licenceAdditionalFeeKey === licenceAdditionalFeeKey) {
return licenceCategoryAdditionalFee;
}
}
}
return undefined;
};
export const clearAll = () => {
licenceCategoriesList = undefined;
licenceCategoriesMap.clear();
Expand Down
20 changes: 20 additions & 0 deletions helpers/functions.cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,26 @@ export const getLicenceCategory = (licenceCategoryKey: string): recordTypes.Lice
};


export const getLicenceCategoryAdditionalFee = (licenceAdditionalFeeKey: string): recordTypes.LicenceCategoryAdditionalFee => {

const licenceCategories = getLicenceCategories();

for (const licenceCategory of licenceCategories) {

const licenceCategoryAdditionalFees = getLicenceCategory(licenceCategory.licenceCategoryKey).licenceCategoryAdditionalFees;

for (const licenceCategoryAdditionalFee of licenceCategoryAdditionalFees) {

if (licenceCategoryAdditionalFee.licenceAdditionalFeeKey === licenceAdditionalFeeKey) {
return licenceCategoryAdditionalFee;
}
}
}

return undefined;
};


export const clearAll = (): void => {
licenceCategoriesList = undefined;
licenceCategoriesMap.clear();
Expand Down
7 changes: 7 additions & 0 deletions helpers/licencesDB/addLicenceAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type * as recordTypes from "../../types/recordTypes";
export declare const addLicenceAdditionalFee: (licenceId: string | number, licenceAdditionalFeeKey: string, requestSession: recordTypes.PartialSession) => {
licenceFee: number;
additionalFeeAmount: number;
licenceCategoryAdditionalFee: recordTypes.LicenceCategoryAdditionalFee;
};
export default addLicenceAdditionalFee;
34 changes: 34 additions & 0 deletions helpers/licencesDB/addLicenceAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";
import { getLicenceCategoryAdditionalFee } from "./getLicenceCategoryAdditionalFee.js";
import * as licenceFunctions from "../functions.licence.js";
export const addLicenceAdditionalFee = (licenceId, licenceAdditionalFeeKey, requestSession) => {
const database = sqlite(databasePath);
const licenceFees = database.prepare("select baseLicenceFee, licenceFee" +
" from Licences" +
" where licenceId = ?" +
" and recordDelete_timeMillis is null")
.get(licenceId);
const additionalFee = getLicenceCategoryAdditionalFee(licenceAdditionalFeeKey, database);
const additionalFeeAmount = licenceFunctions.calculateAdditionalFeeAmount(additionalFee, licenceFees.baseLicenceFee);
const rightNowMillis = Date.now();
database
.prepare("insert into LicenceAdditionalFees" +
"(licenceId, licenceAdditionalFeeKey, additionalFeeAmount)" +
" values (?, ?, ?)")
.run(licenceId, licenceAdditionalFeeKey, additionalFeeAmount.toFixed(2));
const newLicenceFee = licenceFees.licenceFee + additionalFeeAmount;
database.prepare("update Licences" +
" set licenceFee = ?," +
" recordUpdate_userName = ?," +
" recordUpdate_timeMillis = ?" +
" where licenceId = ?")
.run(newLicenceFee, requestSession.user.userName, rightNowMillis, licenceId);
database.close();
return {
licenceFee: newLicenceFee,
additionalFeeAmount,
licenceCategoryAdditionalFee: additionalFee
};
};
export default addLicenceAdditionalFee;
60 changes: 60 additions & 0 deletions helpers/licencesDB/addLicenceAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";

import { getLicenceCategoryAdditionalFee } from "./getLicenceCategoryAdditionalFee.js";
import * as licenceFunctions from "../functions.licence.js";

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


export const addLicenceAdditionalFee =
(licenceId: string | number, licenceAdditionalFeeKey: string, requestSession: recordTypes.PartialSession) => {

const database = sqlite(databasePath);

const licenceFees: {
baseLicenceFee: number;
licenceFee: number;
} = database.prepare("select baseLicenceFee, licenceFee" +
" from Licences" +
" where licenceId = ?" +
" and recordDelete_timeMillis is null")
.get(licenceId);

const additionalFee = getLicenceCategoryAdditionalFee(licenceAdditionalFeeKey, database);

const additionalFeeAmount = licenceFunctions.calculateAdditionalFeeAmount(additionalFee, licenceFees.baseLicenceFee);

const rightNowMillis = Date.now();

database
.prepare("insert into LicenceAdditionalFees" +
"(licenceId, licenceAdditionalFeeKey, additionalFeeAmount)" +
" values (?, ?, ?)")
.run(licenceId,
licenceAdditionalFeeKey,
additionalFeeAmount.toFixed(2));

const newLicenceFee = licenceFees.licenceFee + additionalFeeAmount;

database.prepare("update Licences" +
" set licenceFee = ?," +
" recordUpdate_userName = ?," +
" recordUpdate_timeMillis = ?" +
" where licenceId = ?")
.run(newLicenceFee,
requestSession.user.userName,
rightNowMillis,
licenceId);

database.close();

return {
licenceFee: newLicenceFee,
additionalFeeAmount,
licenceCategoryAdditionalFee: additionalFee
};
};


export default addLicenceAdditionalFee;
5 changes: 5 additions & 0 deletions helpers/licencesDB/deleteLicenceAdditionalFee.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import type * as recordTypes from "../../types/recordTypes";
export declare const deleteLicenceAdditionalFee: (licenceId: string | number, licenceAdditionalFeeKey: string, requestSession: recordTypes.PartialSession) => {
licenceFee: number;
};
export default deleteLicenceAdditionalFee;
30 changes: 30 additions & 0 deletions helpers/licencesDB/deleteLicenceAdditionalFee.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";
export const deleteLicenceAdditionalFee = (licenceId, licenceAdditionalFeeKey, requestSession) => {
const database = sqlite(databasePath);
const licenceFees = database.prepare("select licenceFee, additionalFeeAmount" +
" from Licences l" +
" left join LicenceAdditionalFees f on l.licenceId = f.licenceId" +
" where l.licenceId = ?" +
" and f.licenceAdditionalFeeKey = ?" +
" and l.recordDelete_timeMillis is null")
.get(licenceId, licenceAdditionalFeeKey);
const rightNowMillis = Date.now();
database
.prepare("delete from LicenceAdditionalFees" +
" where licenceId = ?" +
" and licenceAdditionalFeeKey = ?")
.run(licenceId, licenceAdditionalFeeKey);
const newLicenceFee = licenceFees.licenceFee - licenceFees.additionalFeeAmount;
database.prepare("update Licences" +
" set licenceFee = ?," +
" recordUpdate_userName = ?," +
" recordUpdate_timeMillis = ?" +
" where licenceId = ?")
.run(newLicenceFee, requestSession.user.userName, rightNowMillis, licenceId);
database.close();
return {
licenceFee: newLicenceFee
};
};
export default deleteLicenceAdditionalFee;
52 changes: 52 additions & 0 deletions helpers/licencesDB/deleteLicenceAdditionalFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import sqlite from "better-sqlite3";
import { licencesDB as databasePath } from "../../data/databasePaths.js";

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


export const deleteLicenceAdditionalFee =
(licenceId: string | number, licenceAdditionalFeeKey: string, requestSession: recordTypes.PartialSession) => {

const database = sqlite(databasePath);

const licenceFees: {
licenceFee: number;
additionalFeeAmount: number;
} = database.prepare("select licenceFee, additionalFeeAmount" +
" from Licences l" +
" left join LicenceAdditionalFees f on l.licenceId = f.licenceId" +
" where l.licenceId = ?" +
" and f.licenceAdditionalFeeKey = ?" +
" and l.recordDelete_timeMillis is null")
.get(licenceId, licenceAdditionalFeeKey);

const rightNowMillis = Date.now();

database
.prepare("delete from LicenceAdditionalFees" +
" where licenceId = ?" +
" and licenceAdditionalFeeKey = ?")
.run(licenceId,
licenceAdditionalFeeKey);

const newLicenceFee = licenceFees.licenceFee - licenceFees.additionalFeeAmount;

database.prepare("update Licences" +
" set licenceFee = ?," +
" recordUpdate_userName = ?," +
" recordUpdate_timeMillis = ?" +
" where licenceId = ?")
.run(newLicenceFee,
requestSession.user.userName,
rightNowMillis,
licenceId);

database.close();

return {
licenceFee: newLicenceFee
};
};


export default deleteLicenceAdditionalFee;
2 changes: 1 addition & 1 deletion helpers/licencesDB/getLicence.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export const getLicence = (licenceId) => {
" and c.licenceApprovalKey not in (select licenceApprovalKey from LicenceApprovals where licenceId = ?)" +
" order by c.orderNumber, c.licenceApproval")
.all(licenceId, licence.licenceCategoryKey, licenceId);
licence.licenceAdditionalFees = database.prepare("select l.licenceAdditionalFeeKey, l.additionalFeeAmount, f.additionalFee" +
licence.licenceAdditionalFees = database.prepare("select l.licenceAdditionalFeeKey, l.additionalFeeAmount, f.additionalFee, f.isRequired" +
" from LicenceAdditionalFees l" +
" left join LicenceCategoryAdditionalFees f on l.licenceAdditionalFeeKey = f.licenceAdditionalFeeKey" +
" where l.licenceId = ?" +
Expand Down
2 changes: 1 addition & 1 deletion helpers/licencesDB/getLicence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export const getLicence = (licenceId: number | string): recordTypes.Licence => {
licence.licenceCategoryKey, licenceId);

licence.licenceAdditionalFees = database.prepare(
"select l.licenceAdditionalFeeKey, l.additionalFeeAmount, f.additionalFee" +
"select l.licenceAdditionalFeeKey, l.additionalFeeAmount, f.additionalFee, f.isRequired" +
" from LicenceAdditionalFees l" +
" left join LicenceCategoryAdditionalFees f on l.licenceAdditionalFeeKey = f.licenceAdditionalFeeKey" +
" where l.licenceId = ?" +
Expand Down
Loading

0 comments on commit 4dfb93d

Please sign in to comment.