diff --git a/public/html/contract-addInterment.html b/public/html/contract-addInterment.html
index 0411310b..d55650b0 100644
--- a/public/html/contract-addInterment.html
+++ b/public/html/contract-addInterment.html
@@ -177,6 +177,11 @@
+
+
+
diff --git a/public/html/contract-editInterment.html b/public/html/contract-editInterment.html
index 252fa86b..9433e560 100644
--- a/public/html/contract-editInterment.html
+++ b/public/html/contract-editInterment.html
@@ -184,6 +184,11 @@
+
+
+
diff --git a/public/javascripts/contract.edit.js b/public/javascripts/contract.edit.js
index 27402538..a765aa4c 100644
--- a/public/javascripts/contract.edit.js
+++ b/public/javascripts/contract.edit.js
@@ -435,7 +435,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
setUnsavedChanges();
});
- sunrise.initializeMinDateUpdate(document.querySelector('#contract--birthDateString'), document.querySelector('#contract--deathDateString'));
- sunrise.initializeMinDateUpdate(document.querySelector('#contract--deathDateString'), document.querySelector('#contract--funeralDateString'));
+ const birthDateStringElement = document.querySelector('#contract--birthDateString');
+ const deathDateStringElement = document.querySelector('#contract--deathDateString');
+ sunrise.initializeMinDateUpdate(birthDateStringElement, deathDateStringElement);
+ sunrise.initializeMinDateUpdate(deathDateStringElement, document.querySelector('#contract--funeralDateString'));
+ const calculateDeathAgeButtonElement = document.querySelector('#button--calculateDeathAge');
+ function toggleDeathAgeCalculatorButton() {
+ if (birthDateStringElement.value === '' ||
+ deathDateStringElement.value === '') {
+ calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled');
+ }
+ else {
+ calculateDeathAgeButtonElement.removeAttribute('disabled');
+ }
+ }
+ birthDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
+ deathDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
+ calculateDeathAgeButtonElement.addEventListener('click', (clickEvent) => {
+ clickEvent.preventDefault();
+ const birthDate = new Date(birthDateStringElement.value);
+ const deathDate = new Date(deathDateStringElement.value);
+ const ageInDays = Math.floor((deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24));
+ const ageInYears = Math.floor(ageInDays / 365.25);
+ const deathAgeElement = document.querySelector('#contract--deathAge');
+ const deathAgePeriodElement = document.querySelector('#contract--deathAgePeriod');
+ if (ageInYears > 0) {
+ deathAgeElement.value = ageInYears.toString();
+ deathAgePeriodElement.value = 'Years';
+ }
+ else if (ageInDays > 0) {
+ deathAgeElement.value = ageInDays.toString();
+ deathAgePeriodElement.value = 'Days';
+ }
+ else {
+ deathAgeElement.value = '0';
+ deathAgePeriodElement.value = 'Stillborn';
+ }
+ setUnsavedChanges();
+ });
}
})();
diff --git a/public/javascripts/contract.edit.ts b/public/javascripts/contract.edit.ts
index 6bc21049..db62ab89 100644
--- a/public/javascripts/contract.edit.ts
+++ b/public/javascripts/contract.edit.ts
@@ -724,14 +724,80 @@ declare const exports: {
setUnsavedChanges()
})
+ const birthDateStringElement = document.querySelector(
+ '#contract--birthDateString'
+ ) as HTMLInputElement
+
+ const deathDateStringElement = document.querySelector(
+ '#contract--deathDateString'
+ ) as HTMLInputElement
+
sunrise.initializeMinDateUpdate(
- document.querySelector('#contract--birthDateString') as HTMLInputElement,
- document.querySelector('#contract--deathDateString') as HTMLInputElement
+ birthDateStringElement,
+ deathDateStringElement
)
sunrise.initializeMinDateUpdate(
- document.querySelector('#contract--deathDateString') as HTMLInputElement,
+ deathDateStringElement,
document.querySelector('#contract--funeralDateString') as HTMLInputElement
)
+
+ const calculateDeathAgeButtonElement = document.querySelector(
+ '#button--calculateDeathAge'
+ ) as HTMLButtonElement
+
+ function toggleDeathAgeCalculatorButton(): void {
+ if (
+ birthDateStringElement.value === '' ||
+ deathDateStringElement.value === ''
+ ) {
+ calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled')
+ } else {
+ calculateDeathAgeButtonElement.removeAttribute('disabled')
+ }
+ }
+
+ birthDateStringElement.addEventListener(
+ 'change',
+ toggleDeathAgeCalculatorButton
+ )
+ deathDateStringElement.addEventListener(
+ 'change',
+ toggleDeathAgeCalculatorButton
+ )
+
+ calculateDeathAgeButtonElement.addEventListener('click', (clickEvent) => {
+ clickEvent.preventDefault()
+
+ const birthDate = new Date(birthDateStringElement.value)
+ const deathDate = new Date(deathDateStringElement.value)
+
+ const ageInDays = Math.floor(
+ (deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24)
+ )
+
+ const ageInYears = Math.floor(ageInDays / 365.25)
+
+ const deathAgeElement = document.querySelector(
+ '#contract--deathAge'
+ ) as HTMLInputElement
+
+ const deathAgePeriodElement = document.querySelector(
+ '#contract--deathAgePeriod'
+ ) as HTMLInputElement
+
+ if (ageInYears > 0) {
+ deathAgeElement.value = ageInYears.toString()
+ deathAgePeriodElement.value = 'Years'
+ } else if (ageInDays > 0) {
+ deathAgeElement.value = ageInDays.toString()
+ deathAgePeriodElement.value = 'Days'
+ } else {
+ deathAgeElement.value = '0'
+ deathAgePeriodElement.value = 'Stillborn'
+ }
+
+ setUnsavedChanges()
+ })
}
})()
diff --git a/public/javascripts/contract.editInterments.js b/public/javascripts/contract.editInterments.js
index 9dc5246c..4596bc2a 100644
--- a/public/javascripts/contract.editInterments.js
+++ b/public/javascripts/contract.editInterments.js
@@ -8,6 +8,48 @@ Object.defineProperty(exports, "__esModule", { value: true });
delete exports.deathAgePeriods;
const intermentContainerTypes = exports.intermentContainerTypes;
delete exports.intermentContainerTypes;
+ function initializeDeathAgeCalculator(fieldPrefix) {
+ const birthDateStringElement = document.querySelector(`#${fieldPrefix}--birthDateString`);
+ const deathDateStringElement = document.querySelector(`#${fieldPrefix}--deathDateString`);
+ const calculateDeathAgeButtonElement = document.querySelector('#button--calculateDeathAge');
+ function toggleDeathAgeCalculatorButton() {
+ if (birthDateStringElement.value === '' ||
+ deathDateStringElement.value === '') {
+ calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled');
+ }
+ else {
+ calculateDeathAgeButtonElement.removeAttribute('disabled');
+ }
+ }
+ toggleDeathAgeCalculatorButton();
+ birthDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
+ deathDateStringElement.addEventListener('change', toggleDeathAgeCalculatorButton);
+ const deathAgeElement = document.querySelector(`#${fieldPrefix}--deathAge`);
+ const deathAgePeriodElement = document.querySelector(`#${fieldPrefix}--deathAgePeriod`);
+ function calculateDeathAge() {
+ if (birthDateStringElement.value === '' ||
+ deathDateStringElement.value === '') {
+ return;
+ }
+ const birthDate = new Date(birthDateStringElement.value);
+ const deathDate = new Date(deathDateStringElement.value);
+ const ageInDays = Math.floor((deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24));
+ const ageInYears = Math.floor(ageInDays / 365.25);
+ if (ageInYears > 0) {
+ deathAgeElement.value = ageInYears.toString();
+ deathAgePeriodElement.value = 'Years';
+ }
+ else if (ageInDays > 0) {
+ deathAgeElement.value = ageInDays.toString();
+ deathAgePeriodElement.value = 'Days';
+ }
+ else {
+ deathAgeElement.value = '0';
+ deathAgePeriodElement.value = 'Stillborn';
+ }
+ }
+ calculateDeathAgeButtonElement.addEventListener('click', calculateDeathAge);
+ }
function openEditContractInterment(clickEvent) {
const intermentNumber = clickEvent.currentTarget.closest('tr')?.dataset.intermentNumber;
if (intermentNumber === undefined) {
@@ -123,6 +165,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm);
+ initializeDeathAgeCalculator('contractIntermentEdit');
},
onremoved() {
bulmaJS.toggleHtmlClipped();
@@ -290,6 +333,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm);
+ initializeDeathAgeCalculator('contractIntermentAdd');
},
onremoved() {
bulmaJS.toggleHtmlClipped();
diff --git a/public/javascripts/contract.editInterments.ts b/public/javascripts/contract.editInterments.ts
index 54d904bd..c941c19c 100644
--- a/public/javascripts/contract.editInterments.ts
+++ b/public/javascripts/contract.editInterments.ts
@@ -24,6 +24,83 @@ declare const exports: Record
exports.intermentContainerTypes as IntermentContainerType[]
delete exports.intermentContainerTypes
+ function initializeDeathAgeCalculator(
+ fieldPrefix: 'contractIntermentAdd' | 'contractIntermentEdit'
+ ): void {
+ const birthDateStringElement = document.querySelector(
+ `#${fieldPrefix}--birthDateString`
+ ) as HTMLInputElement
+
+ const deathDateStringElement = document.querySelector(
+ `#${fieldPrefix}--deathDateString`
+ ) as HTMLInputElement
+
+ const calculateDeathAgeButtonElement = document.querySelector(
+ '#button--calculateDeathAge'
+ ) as HTMLButtonElement
+
+ function toggleDeathAgeCalculatorButton(): void {
+ if (
+ birthDateStringElement.value === '' ||
+ deathDateStringElement.value === ''
+ ) {
+ calculateDeathAgeButtonElement.setAttribute('disabled', 'disabled')
+ } else {
+ calculateDeathAgeButtonElement.removeAttribute('disabled')
+ }
+ }
+
+ toggleDeathAgeCalculatorButton()
+
+ birthDateStringElement.addEventListener(
+ 'change',
+ toggleDeathAgeCalculatorButton
+ )
+ deathDateStringElement.addEventListener(
+ 'change',
+ toggleDeathAgeCalculatorButton
+ )
+
+ const deathAgeElement = document.querySelector(
+ `#${fieldPrefix}--deathAge`
+ ) as HTMLInputElement
+
+ const deathAgePeriodElement = document.querySelector(
+ `#${fieldPrefix}--deathAgePeriod`
+ ) as HTMLSelectElement
+
+ function calculateDeathAge(): void {
+ if (
+ birthDateStringElement.value === '' ||
+ deathDateStringElement.value === ''
+ ) {
+ return
+ }
+
+ const birthDate = new Date(birthDateStringElement.value)
+ const deathDate = new Date(deathDateStringElement.value)
+
+ const ageInDays = Math.floor(
+ (deathDate.getTime() - birthDate.getTime()) / (1000 * 60 * 60 * 24)
+ )
+
+ const ageInYears = Math.floor(ageInDays / 365.25)
+
+ if (ageInYears > 0) {
+ deathAgeElement.value = ageInYears.toString()
+ deathAgePeriodElement.value = 'Years'
+ } else if (ageInDays > 0) {
+ deathAgeElement.value = ageInDays.toString()
+ deathAgePeriodElement.value = 'Days'
+ } else {
+ deathAgeElement.value = '0'
+ deathAgePeriodElement.value = 'Stillborn'
+ }
+ }
+
+ calculateDeathAgeButtonElement.addEventListener('click', calculateDeathAge)
+ }
+
function openEditContractInterment(clickEvent: Event): void {
const intermentNumber = (clickEvent.currentTarget as HTMLElement).closest(
'tr'
@@ -198,7 +275,10 @@ declare const exports: Record
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm)
+
+ initializeDeathAgeCalculator('contractIntermentEdit')
},
+
onremoved() {
bulmaJS.toggleHtmlClipped()
}
@@ -424,7 +504,10 @@ declare const exports: Record
modalElement
.querySelector('form')
?.addEventListener('submit', submitForm)
+
+ initializeDeathAgeCalculator('contractIntermentAdd')
},
+
onremoved() {
bulmaJS.toggleHtmlClipped()
}
diff --git a/views/contract-edit.ejs b/views/contract-edit.ejs
index f03e0ffc..961e4fbd 100644
--- a/views/contract-edit.ejs
+++ b/views/contract-edit.ejs
@@ -687,6 +687,11 @@