pull/11/head
Dan Gowans 2025-03-31 14:59:31 -04:00
parent 4a1f6b42b0
commit b2da12dac1
41 changed files with 1574 additions and 1406 deletions

3
.ncurc.json 100644
View File

@ -0,0 +1,3 @@
{
"reject": ["puppeteer"]
}

View File

@ -31,6 +31,15 @@ Sunrise CMS does not need an expensive server to run.
No separate database server is required either.
The whole application could run on a current, modest workstation.
### ✔️ Track Unlimited Cemeteries and Burial Sites
There are no limits to the number of records that can be tracked in Sunrise CMS.
### ✔️ Includes a Built-In Work Order System
In addition to tracking data related to cemetery plots,
Sunrise CMS can also track work order activities, like grave maintenance.
### ✔️ Sunrise CMS is Free and Open Source
There's no cost to use it.

View File

@ -1,5 +1,5 @@
import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, {
burialSiteStatus: string;
orderNumber?: string | number;
orderNumber?: number | string;
}>, response: Response): Promise<void>;

View File

@ -5,7 +5,7 @@ export default async function handler(request, response) {
const burialSiteStatuses = await getBurialSiteStatuses();
response.json({
success: true,
burialSiteStatusId,
burialSiteStatuses
burialSiteStatuses,
burialSiteStatusId
});
}

View File

@ -7,7 +7,7 @@ export default async function handler(
request: Request<
unknown,
unknown,
{ burialSiteStatus: string; orderNumber?: string | number }
{ burialSiteStatus: string; orderNumber?: number | string }
>,
response: Response
): Promise<void> {
@ -22,7 +22,8 @@ export default async function handler(
response.json({
success: true,
burialSiteStatusId,
burialSiteStatuses
burialSiteStatuses,
burialSiteStatusId
})
}

View File

@ -1,5 +1,5 @@
import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, {
burialSiteType: string;
orderNumber?: string | number;
orderNumber?: number | string;
}>, response: Response): Promise<void>;

View File

@ -7,7 +7,7 @@ export default async function handler(
request: Request<
unknown,
unknown,
{ burialSiteType: string; orderNumber?: string | number }
{ burialSiteType: string; orderNumber?: number | string }
>,
response: Response
): Promise<void> {
@ -22,6 +22,7 @@ export default async function handler(
response.json({
success: true,
burialSiteTypeId,
burialSiteTypes
})

View File

@ -18,6 +18,7 @@ export default async function handler(
response.json({
success: true,
burialSiteTypeFieldId,
burialSiteTypes
})

View File

@ -6,8 +6,8 @@ export default async function handler(request, response) {
const allContractTypeFields = await getAllContractTypeFields();
response.json({
success: true,
allContractTypeFields,
contractTypeId,
contractTypes,
allContractTypeFields
contractTypes
});
}

View File

@ -22,8 +22,9 @@ export default async function handler(
response.json({
success: true,
allContractTypeFields,
contractTypeId,
contractTypes,
allContractTypeFields
contractTypes
})
}

View File

@ -192,11 +192,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
<strong>Birth:</strong>
</div>
<div class="column">
${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}<br />
${cityssm.escapeHTML((interment.birthDateString ?? '') === ''
? '(No Birth Date)'
: interment.birthDateString ?? '')}<br />
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
</div>
</div>
<div class="columns">
<div class="columns mb-0">
<div class="column">
<strong>Death:</strong>
</div>
@ -205,12 +207,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
</div>
</div>
<div class="columns">
<div class="columns mb-0">
<div class="column">
<strong>Age:</strong>
</div>
<div class="column">
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}<br />
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
</div>
</div>

View File

@ -291,11 +291,15 @@ declare const exports: Record<string, unknown>
<strong>Birth:</strong>
</div>
<div class="column">
${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}<br />
${cityssm.escapeHTML(
(interment.birthDateString ?? '') === ''
? '(No Birth Date)'
: interment.birthDateString ?? ''
)}<br />
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
</div>
</div>
<div class="columns">
<div class="columns mb-0">
<div class="column">
<strong>Death:</strong>
</div>
@ -304,12 +308,12 @@ declare const exports: Record<string, unknown>
${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
</div>
</div>
<div class="columns">
<div class="columns mb-0">
<div class="column">
<strong>Age:</strong>
</div>
<div class="column">
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}<br />
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
</div>
</div>

View File

@ -103,10 +103,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
actualSeedString += 'a1';
}
return exports.randomColor({
seed: actualSeedString + actualSeedString,
hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) %
hues.length],
luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length]
luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length],
seed: actualSeedString + actualSeedString
});
}
/*
@ -202,24 +202,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
* Declare sunrise
*/
const sunrise = {
urlPrefix,
apiKey: document.querySelector('main')?.dataset.apiKey ?? '',
dynamicsGPIntegrationIsEnabled,
urlPrefix,
highlightMap,
initializeUnlockFieldButtons,
populateAliases,
escapedAliases,
populateAliases,
getRandomColor,
setUnsavedChanges,
clearUnsavedChanges,
hasUnsavedChanges,
getMoveUpDownButtonFieldHTML,
setUnsavedChanges,
getLoadingParagraphHTML,
getMoveUpDownButtonFieldHTML,
getSearchResultsPagerHTML,
getCemeteryURL,
getBurialSiteURL,
getFuneralHomeURL,
getCemeteryURL,
getContractURL,
getFuneralHomeURL,
getWorkOrderURL
};
exports.sunrise = sunrise;

View File

@ -3,26 +3,26 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { Sunrise } from './types.js'
type RandomColorHue =
| 'red'
| 'orange'
| 'yellow'
| 'green'
| 'blue'
| 'purple'
| 'pink'
| 'green'
| 'monochrome'
type RandomColorLuminosity = 'bright' | 'light' | 'dark'
| 'orange'
| 'pink'
| 'purple'
| 'red'
| 'yellow'
type RandomColorLuminosity = 'bright' | 'dark' | 'light'
declare const cityssm: cityssmGlobal
declare const exports: Record<string, unknown> & {
aliases: Record<string, string>
randomColor: (options?: {
alpha?: number
count?: number
format?: 'hex' | 'hsl' | 'hsla' | 'hslArray' | 'rgb' | 'rgba' | 'rgbArray'
hue?: RandomColorHue
luminosity?: RandomColorLuminosity
count?: number
seed?: number | string
format?: 'rgb' | 'rgba' | 'rgbArray' | 'hsl' | 'hsla' | 'hslArray' | 'hex'
alpha?: number
}) => string
}
;(() => {
@ -55,7 +55,7 @@ declare const exports: Record<string, unknown> & {
function highlightMap(
mapContainerElement: HTMLElement,
mapKey: string,
contextualClass: 'success' | 'danger'
contextualClass: 'danger' | 'success'
): void {
// Search for ID
let svgId = mapKey
@ -175,7 +175,6 @@ declare const exports: Record<string, unknown> & {
}
return exports.randomColor({
seed: actualSeedString + actualSeedString,
hue: hues[
(actualSeedString.codePointAt(actualSeedString.length - 1) as number) %
hues.length
@ -185,7 +184,8 @@ declare const exports: Record<string, unknown> & {
(actualSeedString.codePointAt(
actualSeedString.length - 2
) as number) % luminosity.length
]
],
seed: actualSeedString + actualSeedString
})
}
@ -271,10 +271,10 @@ declare const exports: Record<string, unknown> & {
function getRecordURL(
recordTypePlural:
| 'cemeteries'
| 'burialSites'
| 'funeralHomes'
| 'cemeteries'
| 'contracts'
| 'funeralHomes'
| 'workOrders',
recordId: number | string,
edit: boolean,
@ -342,29 +342,30 @@ declare const exports: Record<string, unknown> & {
*/
const sunrise: Sunrise = {
urlPrefix,
apiKey: document.querySelector('main')?.dataset.apiKey ?? '',
dynamicsGPIntegrationIsEnabled,
urlPrefix,
highlightMap,
initializeUnlockFieldButtons,
populateAliases,
escapedAliases,
populateAliases,
getRandomColor,
setUnsavedChanges,
clearUnsavedChanges,
hasUnsavedChanges,
setUnsavedChanges,
getMoveUpDownButtonFieldHTML,
getLoadingParagraphHTML,
getMoveUpDownButtonFieldHTML,
getSearchResultsPagerHTML,
getCemeteryURL,
getBurialSiteURL,
getFuneralHomeURL,
getCemeteryURL,
getContractURL,
getFuneralHomeURL,
getWorkOrderURL
}

View File

@ -1,28 +1,28 @@
export interface Sunrise {
urlPrefix: string;
apiKey: string;
highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'success' | 'danger') => void;
highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'danger' | 'success') => void;
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void;
escapedAliases: {
ExternalReceiptNumber: string;
externalReceiptNumber: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
WorkOrderCloseDate: string;
workOrderCloseDate: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
};
dynamicsGPIntegrationIsEnabled: boolean;
getRandomColor: (seedString: string) => string;
setUnsavedChanges: () => void;
clearUnsavedChanges: () => void;
hasUnsavedChanges: () => boolean;
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string;
setUnsavedChanges: () => void;
getLoadingParagraphHTML: (captionText?: string) => string;
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string;
getSearchResultsPagerHTML: (limit: number, offset: number, count: number) => string;
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string;
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string;
getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string;
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string;
getContractURL: (contractId?: number | string, edit?: boolean, time?: boolean) => string;
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string;
getWorkOrderURL: (workOrderId?: number | string, edit?: boolean, time?: boolean) => string;
}

View File

@ -5,7 +5,7 @@ export interface Sunrise {
highlightMap: (
mapContainerElement: HTMLElement,
mapKey: string,
contextualClass: 'success' | 'danger'
contextualClass: 'danger' | 'success'
) => void
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void
@ -15,40 +15,52 @@ export interface Sunrise {
escapedAliases: {
ExternalReceiptNumber: string
externalReceiptNumber: string
WorkOrderOpenDate: string
workOrderOpenDate: string
WorkOrderCloseDate: string
workOrderCloseDate: string
WorkOrderOpenDate: string
workOrderOpenDate: string
}
dynamicsGPIntegrationIsEnabled: boolean
getRandomColor: (seedString: string) => string
setUnsavedChanges: () => void
clearUnsavedChanges: () => void
hasUnsavedChanges: () => boolean
setUnsavedChanges: () => void
getLoadingParagraphHTML: (captionText?: string) => string
getMoveUpDownButtonFieldHTML: (
upButtonClassNames: string,
downButtonClassNames: string,
isSmall?: boolean
) => string
getLoadingParagraphHTML: (captionText?: string) => string
getSearchResultsPagerHTML: (
limit: number,
offset: number,
count: number
) => string
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string
getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string
getBurialSiteURL: (
burialSiteId?: number | string,
edit?: boolean,
time?: boolean
) => string
getCemeteryURL: (
cemeteryId?: number | string,
edit?: boolean,
time?: boolean
) => string
getContractURL: (
contractId?: number | string,
edit?: boolean,
time?: boolean
) => string
getFuneralHomeURL: (
funeralHomeId?: number | string,
edit?: boolean,
time?: boolean
) => string
getWorkOrderURL: (
workOrderId?: number | string,
edit?: boolean,

View File

@ -382,7 +382,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
<div class="dropdown is-right">
<div class="dropdown-trigger">
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options">
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
</button>
</div>
<div class="dropdown-menu">

View File

@ -559,6 +559,7 @@ declare const exports: Record<string, unknown>
conflictingMilestonePanelElement
)
},
onremoved() {
bulmaJS.toggleHtmlClipped()
}
@ -622,7 +623,7 @@ declare const exports: Record<string, unknown>
<div class="dropdown is-right">
<div class="dropdown-trigger">
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options">
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
</button>
</div>
<div class="dropdown-menu">

View File

@ -127,7 +127,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
<span>Edit</span>
</button>
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</div>
</td>`;

View File

@ -211,7 +211,7 @@ declare const exports: Record<string, unknown>
<span>Edit</span>
</button>
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</div>
</td>`

View File

@ -171,7 +171,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
: `<ul class="fa-ul ml-5">${intermentsHTML}</ul>`}
</td><td>
<button class="button is-small is-light is-danger button--deleteContract" data-tooltip="Delete Relationship" type="button">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</td>`);
rowElement
@ -317,12 +317,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
${burialSite.burialSiteStatusId
? cityssm.escapeHTML(burialSite.burialSiteStatus ?? '')
: '<span class="has-text-grey">(No Status)</span>'}
</td><td class="is-nowrap">
</td><td class="has-text-right is-nowrap">
<button class="button is-small is-light is-info button--editBurialSiteStatus" data-tooltip="Update Status" type="button">
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
</button>
<button class="button is-small is-light is-danger button--deleteBurialSite" data-tooltip="Delete Relationship" type="button">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</td>`;
rowElement
@ -350,13 +350,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
document
.querySelector('#button--addContract')
?.addEventListener('click', () => {
?.addEventListener('click', (addClickEvent) => {
addClickEvent.preventDefault();
let searchFormElement;
let searchResultsContainerElement;
function doSearch(event) {
if (event) {
event.preventDefault();
}
event?.preventDefault();
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML =
sunrise.getLoadingParagraphHTML('Searching...');
@ -459,13 +458,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
document
.querySelector('#button--addBurialSite')
?.addEventListener('click', () => {
?.addEventListener('click', (addClickEvent) => {
addClickEvent.preventDefault();
let searchFormElement;
let searchResultsContainerElement;
function doSearch(event) {
if (event) {
event.preventDefault();
}
event?.preventDefault();
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML =
sunrise.getLoadingParagraphHTML('Searching...');
@ -490,7 +488,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
for (const burialSite of responseJSON.burialSites) {
const rowElement = document.createElement('tr');
rowElement.className = 'container--burialSite';
rowElement.dataset.burialSiteId = burialSite.burialSiteId.toString();
rowElement.dataset.burialSiteId =
burialSite.burialSiteId.toString();
rowElement.innerHTML = `<td class="has-text-centered">
<button class="button is-small is-success button--addBurialSite" data-tooltip="Add" type="button" aria-label="Add">
<i class="fas fa-plus" aria-hidden="true"></i>

View File

@ -273,7 +273,7 @@ declare const exports: Record<string, unknown>
}
</td><td>
<button class="button is-small is-light is-danger button--deleteContract" data-tooltip="Delete Relationship" type="button">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</td>`
)
@ -502,12 +502,12 @@ declare const exports: Record<string, unknown>
? cityssm.escapeHTML(burialSite.burialSiteStatus ?? '')
: '<span class="has-text-grey">(No Status)</span>'
}
</td><td class="is-nowrap">
</td><td class="has-text-right is-nowrap">
<button class="button is-small is-light is-info button--editBurialSiteStatus" data-tooltip="Update Status" type="button">
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
</button>
<button class="button is-small is-light is-danger button--deleteBurialSite" data-tooltip="Delete Relationship" type="button">
<i class="fas fa-trash" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
</button>
</td>`
@ -546,14 +546,14 @@ declare const exports: Record<string, unknown>
document
.querySelector('#button--addContract')
?.addEventListener('click', () => {
?.addEventListener('click', (addClickEvent) => {
addClickEvent.preventDefault()
let searchFormElement: HTMLFormElement
let searchResultsContainerElement: HTMLElement
function doSearch(event?: Event): void {
if (event) {
event.preventDefault()
}
event?.preventDefault()
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML =
@ -703,6 +703,7 @@ declare const exports: Record<string, unknown>
searchFormElement.addEventListener('submit', doSearch)
},
onremoved() {
bulmaJS.toggleHtmlClipped()
;(
@ -728,14 +729,14 @@ declare const exports: Record<string, unknown>
document
.querySelector('#button--addBurialSite')
?.addEventListener('click', () => {
?.addEventListener('click', (addClickEvent) => {
addClickEvent.preventDefault()
let searchFormElement: HTMLFormElement
let searchResultsContainerElement: HTMLElement
function doSearch(event?: Event): void {
if (event) {
event.preventDefault()
}
event?.preventDefault()
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML =
@ -745,7 +746,9 @@ declare const exports: Record<string, unknown>
`${sunrise.urlPrefix}/burialSites/doSearchBurialSites`,
searchFormElement,
(rawResponseJSON) => {
const responseJSON = rawResponseJSON as { burialSites: BurialSite[] }
const responseJSON = rawResponseJSON as {
burialSites: BurialSite[]
}
if (responseJSON.burialSites.length === 0) {
searchResultsContainerElement.innerHTML = `<div class="message is-info">
@ -769,7 +772,8 @@ declare const exports: Record<string, unknown>
for (const burialSite of responseJSON.burialSites) {
const rowElement = document.createElement('tr')
rowElement.className = 'container--burialSite'
rowElement.dataset.burialSiteId = burialSite.burialSiteId.toString()
rowElement.dataset.burialSiteId =
burialSite.burialSiteId.toString()
rowElement.innerHTML = `<td class="has-text-centered">
<button class="button is-small is-success button--addBurialSite" data-tooltip="Add" type="button" aria-label="Add">
@ -843,6 +847,7 @@ declare const exports: Record<string, unknown>
searchFormElement.addEventListener('submit', doSearch)
},
onremoved() {
bulmaJS.toggleHtmlClipped()
;(

View File

@ -127,8 +127,9 @@ async function importFromMasterCSV() {
burialSiteNameSegment2,
burialSiteNameSegment3,
burialSiteNameSegment4,
burialSiteTypeId,
burialSiteStatusId: importIds.availableBurialSiteStatusId,
burialSiteTypeId,
burialSiteImage: '',
cemeteryId,
cemeterySvgId: '',
burialSiteLatitude: '',

View File

@ -322,10 +322,14 @@ async function importFromMasterCSV(): Promise<void> {
burialSiteNameSegment2,
burialSiteNameSegment3,
burialSiteNameSegment4,
burialSiteTypeId,
burialSiteStatusId: importIds.availableBurialSiteStatusId,
burialSiteTypeId,
burialSiteImage: '',
cemeteryId,
cemeterySvgId: '',
burialSiteLatitude: '',
burialSiteLongitude: ''
},

View File

@ -40,81 +40,81 @@
</a>
</div>
<div class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item" href="<%= urlPrefix %>/workOrders" accesskey="1">
<span class="icon">
<i class="fas fa-hard-hat" aria-hidden="true"></i>
</span>
<span>Work Orders</span>
</a>
<div class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item" href="<%= urlPrefix %>/workOrders" accesskey="1">
<span class="icon">
<i class="fas fa-hard-hat" aria-hidden="true"></i>
</span>
<span>Work Orders</span>
</a>
<a class="navbar-item" href="<%= urlPrefix %>/contracts" accesskey="2">
<span class="icon">
<span class="fa-layers fa-fw" aria-hidden="true">
<i class="fas fa-vector-square"></i>
<i class="fas fa-user" data-fa-transform="shrink-10"></i>
</span>
<a class="navbar-item" href="<%= urlPrefix %>/contracts" accesskey="2">
<span class="icon">
<span class="fa-layers fa-fw" aria-hidden="true">
<i class="fas fa-vector-square"></i>
<i class="fas fa-user" data-fa-transform="shrink-10"></i>
</span>
<span>Contracts</span>
</a>
</span>
<span>Contracts</span>
</a>
<div class="navbar-item has-dropdown">
<a class="navbar-link is-arrowless" href="#">
<span>More</span>
<div class="navbar-item has-dropdown">
<a class="navbar-link is-arrowless" href="#">
<span>More</span>
<span class="icon">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</a>
<div class="navbar-dropdown">
<a class="navbar-item" href="<%= urlPrefix %>/funeralHomes">
<span class="icon">
<i class="fas fa-angle-down" aria-hidden="true"></i>
<i class="fas fa-fw fa-place-of-worship" aria-hidden="true"></i>
</span>
<span>Funeral Homes</span>
</a>
<a class="navbar-item" href="<%= urlPrefix %>/burialSites" accesskey="3">
<span class="icon">
<i class="fas fa-fw fa-vector-square" aria-hidden="true"></i>
</span>
<span>Burial Sites</span>
</a>
<a class="navbar-item" href="<%= urlPrefix %>/cemeteries" accesskey="4">
<span class="icon">
<i class="far fa-fw fa-map" aria-hidden="true"></i>
</span>
<span>Cemeteries</span>
</a>
<hr class="navbar-divider" />
<a class="navbar-item" href="<%= urlPrefix %>/reports">
<span class="icon">
<i class="fas fa-fw fa-file" aria-hidden="true"></i>
</span>
<span>Reports</span>
</a>
<hr class="navbar-divider" />
<a class="navbar-item" href="https://cityssm.github.io/sunrise-cms/docs"
target="_blank"
accesskey="h"
rel="noopener noreferrer">
<span class="icon">
<i class="fas fa-fw fa-question-circle" aria-hidden="true"></i>
</span>
<span>Help</span>
</a>
<div class="navbar-dropdown">
<a class="navbar-item" href="<%= urlPrefix %>/funeralHomes">
<span class="icon">
<i class="fas fa-fw fa-place-of-worship" aria-hidden="true"></i>
</span>
<span>Funeral Homes</span>
</a>
<a class="navbar-item" href="<%= urlPrefix %>/burialSites" accesskey="3">
<span class="icon">
<i class="fas fa-fw fa-vector-square" aria-hidden="true"></i>
</span>
<span>Burial Sites</span>
</a>
<a class="navbar-item" href="<%= urlPrefix %>/cemeteries" accesskey="4">
<span class="icon">
<i class="far fa-fw fa-map" aria-hidden="true"></i>
</span>
<span>Cemeteries</span>
</a>
<hr class="navbar-divider" />
<a class="navbar-item" href="<%= urlPrefix %>/reports">
<span class="icon">
<i class="fas fa-fw fa-file" aria-hidden="true"></i>
</span>
<span>Reports</span>
</a>
<hr class="navbar-divider" />
<a class="navbar-item" href="https://cityssm.github.io/sunrise-cms/docs"
target="_blank"
accesskey="h"
rel="noopener noreferrer">
<span class="icon">
<i class="fas fa-fw fa-question-circle" aria-hidden="true"></i>
</span>
<span>Help</span>
</a>
</div>
</div>
</div>
<div class="navbar-end">
<a class="navbar-item" id="cityssm-theme--logout-button" role="button" href="#" accesskey="x">
<span class="icon">
<i class="fas fa-fw fa-sign-out-alt" aria-hidden="true"></i>
</span>
<span>Log Out <%=user.userName %></span>
</a>
</div>
</div>
<div class="navbar-end">
<a class="navbar-item" id="cityssm-theme--logout-button" role="button" href="#" accesskey="x">
<span class="icon">
<i class="fas fa-fw fa-sign-out-alt" aria-hidden="true"></i>
</span>
<span>Log Out <%=user.userName %></span>
</a>
</div>
</div>
</div>
</nav>

View File

@ -1,43 +1,43 @@
<%- include('_header'); -%>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch is-hidden-print">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Burial Site Type Management
</a>
</li>
</ul>
</nav>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
<div class="column is-2-desktop is-narrow-touch is-hidden-print">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Burial Site Type Management
</h1>
</div>
<div class="column has-text-right is-narrow is-hidden-print">
<button class="button is-success" id="button--addBurialSiteType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Burial Site Type</span>
</button>
</div>
</div>
</a>
</li>
</ul>
</nav>
<div id="container--burialSiteTypes"></div>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
Burial Site Type Management
</h1>
</div>
<div class="column has-text-right is-narrow is-hidden-print">
<button class="button is-success" id="button--addBurialSiteType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Burial Site Type</span>
</button>
</div>
</div>
<div id="container--burialSiteTypes"></div>
</div>
</div>
<%- include('_footerA'); -%>

View File

@ -5,79 +5,79 @@
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Contract Type Management
</a>
</li>
</ul>
</nav>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Contract Type Management
</h1>
</div>
<div class="column has-text-right is-narrow is-hidden-print">
<button class="button is-success" id="button--addContractType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Contract Type</span>
</button>
</div>
</div>
</a>
</li>
</ul>
</nav>
<div class="tabs is-boxed" role="tablist">
<ul role="presentation">
<li class="is-active" role="presentation">
<a href="#tab--contractTypes">
<i class="fas fa-user-friends" aria-hidden="true"></i>
<span class="ml-2">Types and Fields</span>
</a>
</li>
<li role="presentation">
<a href="#tab--contractTypePrints">
<i class="fas fa-print" aria-hidden="true"></i>
<span class="ml-2">Prints</span>
</a>
</li>
</ul>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
Contract Type Management
</h1>
</div>
<div class="tab-container">
<div id="tab--contractTypes">
<div id="container--contractTypes"></div>
</div>
<div class="is-hidden" id="tab--contractTypePrints">
<div class="columns">
<div class="column">
<div id="container--contractTypePrints"></div>
</div>
<div class="column is-4">
<div class="box">
<h2 class="title is-6">Available Prints</h2>
<ul class="fa-ul">
<% for (const [printEJS, printTitle] of Object.entries(contractTypePrintTitles)) { %>
<% const printIconClass = printEJS.startsWith("pdf/") ? "fa-file-pdf" : "fa-file" %>
<li>
<span class="fa-li"><i class="fas <%= printIconClass %>" aria-hidden="true"></i></span>
<%= printTitle %>
</li>
<% } %>
</ul>
</div>
<div class="column has-text-right is-narrow is-hidden-print">
<button class="button is-success" id="button--addContractType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Contract Type</span>
</button>
</div>
</div>
<div class="tabs is-boxed" role="tablist">
<ul role="presentation">
<li class="is-active" role="presentation">
<a href="#tab--contractTypes">
<i class="fas fa-user-friends" aria-hidden="true"></i>
<span class="ml-2">Types and Fields</span>
</a>
</li>
<li role="presentation">
<a href="#tab--contractTypePrints">
<i class="fas fa-print" aria-hidden="true"></i>
<span class="ml-2">Prints</span>
</a>
</li>
</ul>
</div>
<div class="tab-container">
<div id="tab--contractTypes">
<div id="container--contractTypes"></div>
</div>
<div class="is-hidden" id="tab--contractTypePrints">
<div class="columns">
<div class="column">
<div id="container--contractTypePrints"></div>
</div>
<div class="column is-4">
<div class="box">
<h2 class="title is-6">Available Prints</h2>
<ul class="fa-ul">
<% for (const [printEJS, printTitle] of Object.entries(contractTypePrintTitles)) { %>
<% const printIconClass = printEJS.startsWith("pdf/") ? "fa-file-pdf" : "fa-file" %>
<li>
<span class="fa-li"><i class="fas <%= printIconClass %>" aria-hidden="true"></i></span>
<%= printTitle %>
</li>
<% } %>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -50,94 +50,94 @@
</div>
<div class="tabs-container">
<div id="tab--workOrderTypes">
<h2 class="title is-4">Work Order Types</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Work Order Type</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addWorkOrderType">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="workOrderType" type="text" maxlength="100" placeholder="New Work Order Type" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Work Order Type" type="submit" aria-label="Add Work Order Type">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--workOrderTypes"></tbody>
</table>
<h2 class="title is-4">Work Order Types</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Work Order Type</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addWorkOrderType">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="workOrderType" type="text" maxlength="100" placeholder="New Work Order Type" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Work Order Type" type="submit" aria-label="Add Work Order Type">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--workOrderTypes"></tbody>
</table>
</div>
<div class="is-hidden" id="tab--workOrderMilestoneTypes">
<h2 class="title is-4">Work Order Milestone Types</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Work Order Milestone Type</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addWorkOrderMilestoneType">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="workOrderMilestoneType" type="text" maxlength="100" placeholder="New Milestone Type" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Work Order Milestone Type" type="submit" aria-label="Add Work Order Milestone Type">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--workOrderMilestoneTypes"></tbody>
</table>
<h2 class="title is-4">Work Order Milestone Types</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Work Order Milestone Type</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addWorkOrderMilestoneType">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="workOrderMilestoneType" type="text" maxlength="100" placeholder="New Milestone Type" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Work Order Milestone Type" type="submit" aria-label="Add Work Order Milestone Type">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--workOrderMilestoneTypes"></tbody>
</table>
</div>
<div class="is-hidden" id="tab--burialSiteStatuses">
<h2 class="title is-4">Burial Site Statuses</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Burial Site Status</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addBurialSiteStatus">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="burialSiteStatus" type="text" maxlength="100" placeholder="New Burial Site Status" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Status" type="submit" aria-label="Add Status">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--burialSiteStatuses"></tbody>
</table>
<h2 class="title is-4">Burial Site Statuses</h2>
<table class="table is-striped is-hoverable has-sticky-header">
<thead>
<tr>
<th>Burial Site Status</th>
<th class="has-text-centered has-width-1">Options</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">
<form id="form--addBurialSiteStatus">
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" name="burialSiteStatus" type="text" maxlength="100" placeholder="New Burial Site Status" required />
</div>
<div class="control">
<button class="button is-success has-tooltip-bottom" data-tooltip="Add Status" type="submit" aria-label="Add Status">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
</button>
</div>
</div>
</form>
</td>
</tr>
</tbody>
<tbody id="container--burialSiteStatuses"></tbody>
</table>
</div>
</div>
</div>

View File

@ -338,7 +338,20 @@
<div class="columns">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="burialSite--burialSiteLatitude">Latitude</label>
@ -363,7 +376,20 @@
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-image" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="burialSite--cemeterySvgId">

View File

@ -75,46 +75,46 @@
</div>
</div>
<div class="columns">
<div class="column">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--cemeteryId">Cemetery</label>
<div class="control has-icons-left">
<label class="label" for="searchFilter--cemeteryId">Cemetery</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--cemeteryId" name="cemeteryId">
<select id="searchFilter--cemeteryId" name="cemeteryId">
<option value="">(All Cemeteries)</option>
<% for (const cemetery of cemeteries) { %>
<option value="<%= cemetery.cemeteryId %>" <%= (cemetery.cemeteryId.toString() === cemeteryId) ? " selected" : "" %>>
<%= cemetery.cemeteryName || "(No Name)" %>
<%= cemetery.cemeteryName || "(No Name)" %>
</option>
<% } %>
</select>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
<div class="column">
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--burialSiteStatusId">Status</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--burialSiteStatusId" name="burialSiteStatusId">
<option value="">(All Statuses)</option>
<% for (const burialSiteStatus of burialSiteStatuses) { %>
<option value="<%= burialSiteStatus.burialSiteStatusId %>" <%= (burialSiteStatus.burialSiteStatusId.toString() === burialSiteStatusId) ? " selected" : "" %>>
<%= burialSiteStatus.burialSiteStatus %>
</option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
<label class="label" for="searchFilter--burialSiteStatusId">Status</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--burialSiteStatusId" name="burialSiteStatusId">
<option value="">(All Statuses)</option>
<% for (const burialSiteStatus of burialSiteStatuses) { %>
<option value="<%= burialSiteStatus.burialSiteStatusId %>" <%= (burialSiteStatus.burialSiteStatusId.toString() === burialSiteStatusId) ? " selected" : "" %>>
<%= burialSiteStatus.burialSiteStatus %>
</option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
</div>
</form>
</div>

View File

@ -101,7 +101,20 @@
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-image" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<% if (burialSite.burialSiteImage) { %>
<div class="image">

View File

@ -125,63 +125,89 @@
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Address</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="cemetery--cemeteryAddress1">Address</label>
<div class="control">
<input class="input" id="cemetery--cemeteryAddress1" name="cemeteryAddress1" type="text" value="<%= cemetery.cemeteryAddress1 %>" maxlength="50" placeholder="Line 1" />
</div>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Address</h2>
</div>
<div class="field">
<div class="control">
<input class="input" id="cemetery--cemeteryAddress2" name="cemeteryAddress2" type="text" value="<%= cemetery.cemeteryAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field">
<label class="label" for="cemetery--cemeteryCity">City</label>
<div class="control">
<input class="input" id="cemetery--cemeteryCity" name="cemeteryCity" value="<%= cemetery.cemeteryCity %>" maxlength="20" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryProvince">Province</label>
<div class="control">
<input class="input" id="cemetery--cemeteryProvince" name="cemeteryProvince" value="<%= cemetery.cemeteryProvince %>" maxlength="2" />
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryPostalCode">Postal Code</label>
<div class="control">
<input class="input" id="cemetery--cemeteryPostalCode" name="cemeteryPostalCode" value="<%= cemetery.cemeteryPostalCode %>" maxlength="7" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryPhoneNumber">Phone Number</label>
<div class="control">
<input class="input" id="cemetery--cemeteryPhoneNumber" name="cemeteryPhoneNumber" value="<%= cemetery.cemeteryPhoneNumber %>" maxlength="30" />
</div>
</div>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-location-arrow" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="cemetery--cemeteryAddress1">Address</label>
<div class="control">
<input class="input" id="cemetery--cemeteryAddress1" name="cemeteryAddress1" type="text" value="<%= cemetery.cemeteryAddress1 %>" maxlength="50" placeholder="Line 1" />
</div>
</div>
<div class="field">
<div class="control">
<input class="input" id="cemetery--cemeteryAddress2" name="cemeteryAddress2" type="text" value="<%= cemetery.cemeteryAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field">
<label class="label" for="cemetery--cemeteryCity">City</label>
<div class="control">
<input class="input" id="cemetery--cemeteryCity" name="cemeteryCity" value="<%= cemetery.cemeteryCity %>" maxlength="20" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryProvince">Province</label>
<div class="control">
<input class="input" id="cemetery--cemeteryProvince" name="cemeteryProvince" value="<%= cemetery.cemeteryProvince %>" maxlength="2" />
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryPostalCode">Postal Code</label>
<div class="control">
<input class="input" id="cemetery--cemeteryPostalCode" name="cemeteryPostalCode" value="<%= cemetery.cemeteryPostalCode %>" maxlength="7" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="cemetery--cemeteryPhoneNumber">Phone Number</label>
<div class="control">
<input class="input" id="cemetery--cemeteryPhoneNumber" name="cemeteryPhoneNumber" value="<%= cemetery.cemeteryPhoneNumber %>" maxlength="30" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="cemetery--cemeteryLatitude">Latitude</label>
@ -206,7 +232,20 @@
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-image" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="cemetery--cemeterySvg">SVG File</label>
@ -232,107 +271,107 @@
<% if (!isCreate) { %>
<% const burialSiteSearchUrl = urlPrefix + "/burialSites?cemeteryId=" + cemetery.cemeteryId; %>
<div class="panel mt-4">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-white has-text-weight-bold">
Burial Site Summaries
<a class="tag is-link ml-2" href="<%= burialSiteSearchUrl %>">
<%= cemetery.burialSiteCount %>
</a>
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<a class="button is-small is-success has-text-weight-normal" href="<%=urlPrefix %>/burialSites/new?cemeteryId=<%= cemetery.cemeteryId %>">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Create a Burial Site</span>
</a>
</div>
<div class="level-item">
<a class="button is-small has-text-weight-normal" href="<%=urlPrefix %>/reports/burialSites-byCemeteryId?cemeteryId=<%= cemetery.cemeteryId %>" download>
<span class="icon"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export All</span>
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-white has-text-weight-bold">
Burial Site Summaries
<a class="tag is-link ml-2" href="<%= burialSiteSearchUrl %>">
<%= cemetery.burialSiteCount %>
</a>
</div>
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<a class="button is-small is-success has-text-weight-normal" href="<%=urlPrefix %>/burialSites/new?cemeteryId=<%= cemetery.cemeteryId %>">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Create a Burial Site</span>
</a>
</div>
<div class="level-item">
<a class="button is-small has-text-weight-normal" href="<%=urlPrefix %>/reports/burialSites-byCemeteryId?cemeteryId=<%= cemetery.cemeteryId %>" download>
<span class="icon"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export All</span>
</a>
</div>
</div>
</div>
<div class="panel-block is-block">
<% if (cemetery.burialSiteCount === 0) { %>
<div class="message is-info">
<p class="message-body">
There are no burial sites
associated with this cemetery.
</p>
</div>
<% } else { %>
<div class="columns">
<div class="column">
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Type</th>
<th class="has-text-right">
Burial Site Count
</th>
<th class="has-text-right">Percentage</th>
</tr>
</thead>
<tbody>
<% for (const burialSiteType of burialSiteTypeSummary) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteTypeId=<%= burialSiteType.burialSiteTypeId %>">
<%= burialSiteType.burialSiteType %>
</a>
</td>
<td class="has-text-right">
<%= burialSiteType.burialSiteCount %>
</td>
<td class="has-text-right">
<%= ((burialSiteType.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
<div class="column">
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Status</th>
<th class="has-text-right">
Burial Site Count
</th>
<th class="has-text-right">Percentage</th>
</tr>
</thead>
<tbody>
<% for (const burialSiteStatus of burialSiteStatusSummary) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteStatusId=<%= burialSiteStatus.burialSiteStatusId %>">
<%= burialSiteStatus.burialSiteStatus %>
</a>
</td>
<td class="has-text-right">
<%= burialSiteStatus.burialSiteCount %>
</td>
<td class="has-text-right">
<%= ((burialSiteStatus.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
</div>
<% } %>
</div>
</div>
<div class="panel-block is-block">
<% if (cemetery.burialSiteCount === 0) { %>
<div class="message is-info">
<p class="message-body">
There are no burial sites
associated with this cemetery.
</p>
</div>
<% } else { %>
<div class="columns">
<div class="column">
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Type</th>
<th class="has-text-right">
Burial Site Count
</th>
<th class="has-text-right">Percentage</th>
</tr>
</thead>
<tbody>
<% for (const burialSiteType of burialSiteTypeSummary) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteTypeId=<%= burialSiteType.burialSiteTypeId %>">
<%= burialSiteType.burialSiteType %>
</a>
</td>
<td class="has-text-right">
<%= burialSiteType.burialSiteCount %>
</td>
<td class="has-text-right">
<%= ((burialSiteType.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
<div class="column">
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Status</th>
<th class="has-text-right">
Burial Site Count
</th>
<th class="has-text-right">Percentage</th>
</tr>
</thead>
<tbody>
<% for (const burialSiteStatus of burialSiteStatusSummary) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteStatusId=<%= burialSiteStatus.burialSiteStatusId %>">
<%= burialSiteStatus.burialSiteStatus %>
</a>
</td>
<td class="has-text-right">
<%= burialSiteStatus.burialSiteCount %>
</td>
<td class="has-text-right">
<%= ((burialSiteStatus.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
</div>
<% } %>
</div>
</div>
<% } %>

View File

@ -96,7 +96,20 @@
<div class="columns">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<% if (cemetery.cemeteryLatitude && cemetery.cemeteryLongitude) { %>
<div id="cemetery--leaflet" data-cemetery-latitude="<%= cemetery.cemeteryLatitude %>" data-cemetery-longitude="<%= cemetery.cemeteryLongitude %>" style="height:300px"></div>
@ -112,7 +125,20 @@
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<i class="fas fa-image" aria-hidden="true"></i>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<% if (cemetery.cemeterySvg) { %>
<% const imageURL = urlPrefix + "/internal/images/cemeteries/" + cemetery.cemeterySvg %>

View File

@ -43,7 +43,7 @@
<% if (workOrderPrints.length > 0) { %>
<span class="is-pulled-right">
<a class="button is-small" data-tooltip="Print Work Order" href="<%=urlPrefix %>/print/<%= workOrderPrints[0] %>/?workOrderId=<%= milestone.workOrderId %>" target="_blank" aria-label="Print">
<i class="fas fa-print" aria-hidden="true"></i>
<span class="icon is-small"><i class="fas fa-print" aria-hidden="true"></i></span>
</a>
</span>
<% } %>
@ -228,8 +228,8 @@
</div>
</div>
</div>
<div class="columns is-desktop">
<div class="column">
<div class="columns is-multiline">
<div class="column is-6-widescreen is-full-desktop is-full-tablet">
<div class="panel">
<a class="panel-block" href="<%= urlPrefix %>/reports">
<div class="media">
@ -246,7 +246,7 @@
</a>
</div>
</div>
<div class="column">
<div class="column is-6-widescreen is-full-desktop is-full-tablet">
<div class="panel">
<a class="panel-block" href="https://cityssm.github.io/sunrise-cms/docs" rel="noopener noreferrer" target="_blank">
<div class="media">

View File

@ -83,76 +83,75 @@
</button>
</div>
</div>
</div>
<form id="form--funeralHome">
<input id="funeralHome--funeralHomeId" name="funeralHomeId" type="hidden" value="<%= funeralHome.funeralHomeId %>" />
<input id="funeralHome--funeralHomeId" name="funeralHomeId" type="hidden" value="<%= funeralHome.funeralHomeId %>" />
<div class="columns">
<div class="column">
<div class="panel">
<div class="panel-block is-block">
<div class="columns">
<div class="column">
<div class="panel">
<div class="panel-block is-block">
<div class="field">
<label class="label" for="funeralHome--funeralHomeName">Funeral Home Name</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeName" name="funeralHomeName" type="text"
value="<%= funeralHome.funeralHomeName %>" maxlength="200" required
accesskey="f"
<%= (isCreate ? " autofocus" : "") %> />
</div>
</div>
<div class="field">
<label class="label" for="funeralHome--funeralHomeAddress1">Address</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeAddress1" name="funeralHomeAddress1" type="text" value="<%= funeralHome.funeralHomeAddress1 %>" maxlength="50" placeholder="Line 1" />
</div>
</div>
<div class="field">
<div class="control">
<input class="input" id="funeralHome--funeralHomeAddress2" name="funeralHomeAddress2" type="text" value="<%= funeralHome.funeralHomeAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field">
<label class="label" for="funeralHome--funeralHomeName">Funeral Home Name</label>
<label class="label" for="funeralHome--funeralHomeCity">City</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeName" name="funeralHomeName" type="text"
value="<%= funeralHome.funeralHomeName %>" maxlength="200" required
accesskey="f"
<%= (isCreate ? " autofocus" : "") %> />
<input class="input" id="funeralHome--funeralHomeCity" name="funeralHomeCity" value="<%= funeralHome.funeralHomeCity %>" maxlength="20" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomeAddress1">Address</label>
<label class="label" for="funeralHome--funeralHomeProvince">Province</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeAddress1" name="funeralHomeAddress1" type="text" value="<%= funeralHome.funeralHomeAddress1 %>" maxlength="50" placeholder="Line 1" />
<input class="input" id="funeralHome--funeralHomeProvince" name="funeralHomeProvince" value="<%= funeralHome.funeralHomeProvince %>" maxlength="2" />
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomePostalCode">Postal Code</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeAddress2" name="funeralHomeAddress2" type="text" value="<%= funeralHome.funeralHomeAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" />
<input class="input" id="funeralHome--funeralHomePostalCode" name="funeralHomePostalCode" value="<%= funeralHome.funeralHomePostalCode %>" maxlength="7" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field">
<label class="label" for="funeralHome--funeralHomeCity">City</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeCity" name="funeralHomeCity" value="<%= funeralHome.funeralHomeCity %>" maxlength="20" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomeProvince">Province</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomeProvince" name="funeralHomeProvince" value="<%= funeralHome.funeralHomeProvince %>" maxlength="2" />
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomePostalCode">Postal Code</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomePostalCode" name="funeralHomePostalCode" value="<%= funeralHome.funeralHomePostalCode %>" maxlength="7" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomePhoneNumber">Phone Number</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomePhoneNumber" name="funeralHomePhoneNumber" value="<%= funeralHome.funeralHomePhoneNumber %>" maxlength="30" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="funeralHome--funeralHomePhoneNumber">Phone Number</label>
<div class="control">
<input class="input" id="funeralHome--funeralHomePhoneNumber" name="funeralHomePhoneNumber" value="<%= funeralHome.funeralHomePhoneNumber %>" maxlength="30" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<%- include('_footerA'); -%>

View File

@ -1,74 +1,74 @@
<% const deceased = contract.contractInterments[0]; %>
<html>
<head>
<title><%= headTitle %></title>
<style>
<%- include('style.css'); %>
</style>
</head>
<body style="margin:100px 80px">
<p class="mb-2 has-text-centered is-capitalized">Province of Ontario</p>
<p class="has-text-centered is-italic">Vital Statistics Act</p>
<h1 class="has-text-centered is-capitalized mt-4 mb-4">Burial Permit</h1>
<head>
<title><%= headTitle %></title>
<style>
<%- include('style.css'); %>
</style>
</head>
<body style="margin:100px 80px">
<p class="mb-2 has-text-centered is-capitalized">Province of Ontario</p>
<p class="has-text-centered is-italic">Vital Statistics Act</p>
<h1 class="has-text-centered is-capitalized mt-4 mb-4">Burial Permit</h1>
<p>
Under the <span class="is-italic">Vital Statistics Act</span>
and the regulations,
subject to the limitations thereof,
this permit is granted to:<br />
</p>
<p>
Under the <span class="is-italic">Vital Statistics Act</span>
and the regulations,
subject to the limitations thereof,
this permit is granted to:<br />
</p>
<p class="has-text-centered">
<strong><%= contract.funeralHomeName %></strong><br />
<%= contract.funeralHomeAddress1 %><br />
<% if (contract.funeralHomeAddress2) { %><%= contract.funeralHomeAddress2 %><br /><% } %>
<%= contract.funeralHomeCity %>, <%= contract.funeralHomeProvince %><br />
<%= contract.funeralHomePostalCode %>
</p>
<p class="has-text-centered">
<strong><%= contract.funeralHomeName %></strong><br />
<%= contract.funeralHomeAddress1 %><br />
<% if (contract.funeralHomeAddress2) { %><%= contract.funeralHomeAddress2 %><br /><% } %>
<%= contract.funeralHomeCity %>, <%= contract.funeralHomeProvince %><br />
<%= contract.funeralHomePostalCode %>
</p>
<p class="mt-4">
for the purpose of the burial or other disposition of the body of:
</p>
<p class="mt-4">
for the purpose of the burial or other disposition of the body of:
</p>
<p class="has-text-centered">
<% if (!contract.isPreneed && deceased !== undefined) { %>
<strong><%= deceased.deceasedName %></strong>
<% } %>
</p>
<p class="has-text-centered">
<% if (!contract.isPreneed && deceased !== undefined) { %>
<strong><%= deceased.deceasedName %></strong>
<% } %>
</p>
<p>
who died at
<span class="field has-text-centered" style="width:300px">
&nbsp;
<%= deceased?.deathPlace ?? '' %>
&nbsp;
</span>
in Ontario on
<span class="field has-text-centered" style="width:150px">
&nbsp;
<%= deceased?.deathDateString %>
&nbsp;
</span>
.
</p>
<p class="has-text-right mt-6">
<span class="field mb-1" style="width:300px">&nbsp;</span><br />
<span class="is-8pt">(Signature of Division Registrar)</span>
</p>
<p class="has-text-right">
Sault Ste. Marie
<p>
who died at
<span class="field has-text-centered" style="width:300px">
&nbsp;
<%= deceased?.deathPlace ?? '' %>
&nbsp;
</span>
in Ontario on
<span class="field has-text-centered" style="width:150px">
&nbsp;
5724
</p>
<%= deceased?.deathDateString %>
&nbsp;
</span>
.
</p>
<p class="has-text-right mt-4">
<span class="field mb-1" style="width:150px">&nbsp;</span><br />
<span class="is-8pt">(Year Month Day)</span>
</p>
</body>
<p class="has-text-right mt-6">
<span class="field mb-1" style="width:300px">&nbsp;</span><br />
<span class="is-8pt">(Signature of Division Registrar)</span>
</p>
<p class="has-text-right">
Sault Ste. Marie
&nbsp;
&nbsp;
&nbsp;
5724
</p>
<p class="has-text-right mt-4">
<span class="field mb-1" style="width:150px">&nbsp;</span><br />
<span class="is-8pt">(Year Month Day)</span>
</p>
</body>
</html>

View File

@ -2,463 +2,463 @@
<head>
<title><%= headTitle %></title>
<style>
<%- include('style.css'); %>
<%- include('style.css'); %>
body {
margin: 0 50px;
}
body {
margin: 0 50px;
}
@page {
margin: 50px 0;
}
@page {
margin: 50px 0;
}
.termsList {
counter-reset: list;
}
.termsList {
counter-reset: list;
}
.termsList > li {
list-style: none;
position: relative;
padding-bottom: 10px;
}
.termsList > li {
list-style: none;
position: relative;
padding-bottom: 10px;
}
.termsList > li::before {
content: "(" counter(list, lower-alpha) ")";
counter-increment: list;
position: absolute;
left: -1.8em;
}
.termsList > li::before {
content: "(" counter(list, lower-alpha) ")";
counter-increment: list;
position: absolute;
left: -1.8em;
}
.confirmList > li {
list-style: none;
position: relative;
padding-bottom: 10px;
}
.confirmList > li {
list-style: none;
position: relative;
padding-bottom: 10px;
}
.confirmList > li::before {
content: "";
position: absolute;
border: 2px solid black;
width: 0.8em;
height: 0.8em;
left: -1.4em;
top: -0.1em;
font-size: 15pt;
}
.confirmList > li::before {
content: "";
position: absolute;
border: 2px solid black;
width: 0.8em;
height: 0.8em;
left: -1.4em;
top: -0.1em;
font-size: 15pt;
}
</style>
</head>
<body class="is-10pt">
<h1 class="is-12pt has-text-centered is-capitalized">
Contract for the Purchase of Interment Rights or<br />
Cemetery Services
</h1>
<p class="has-text-centered">
in
<span class="field" style="width:300px">
<%= contract.cemeteryName %>
</span>
cemetery<br />
<span class="is-capitalized">operated by</span><br />
The Corporation of the City of Sault Ste. Marie, 99 Foster Drive<br />
Sault Ste. Marie Ontario &nbsp; P6A 5X6
</p>
<p>
Contract No.
<span class="field">
<%= contract.contractId %>
</span>
</p>
<p>
Date of Purchase
<span class="field">
<%= contract.contractStartDateString %>
</span>
</p>
<table class="layout-table is-10pt" style="table-layout:fixed">
<tbody>
<h1 class="is-12pt has-text-centered is-capitalized">
Contract for the Purchase of Interment Rights or<br />
Cemetery Services
</h1>
<p class="has-text-centered">
in
<span class="field" style="width:300px">
<%= contract.cemeteryName %>
</span>
cemetery<br />
<span class="is-capitalized">operated by</span><br />
The Corporation of the City of Sault Ste. Marie, 99 Foster Drive<br />
Sault Ste. Marie Ontario &nbsp; P6A 5X6
</p>
<p>
Contract No.
<span class="field">
<%= contract.contractId %>
</span>
</p>
<p>
Date of Purchase
<span class="field">
<%= contract.contractStartDateString %>
</span>
</p>
<table class="layout-table is-10pt" style="table-layout:fixed">
<tbody>
<tr>
<td>
<h2 class="is-10pt">Purchaser</h2>
<table class="is-10pt layout-table">
<tbody>
<tr>
<th class="has-text-left">Name:</th>
<td class="has-border-bottom">
<%= contract.purchaserName %>
</td>
</tr><tr>
<th class="has-text-left" rowspan="2" style="vertical-align:top">Address:</th>
<td class="has-border-bottom"><%= contract.purchaserAddress1 %>&nbsp;</td>
</tr><tr>
<td class="has-border-bottom"><%= contract.purchaserAddress2 %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">City:</th>
<td class="has-border-bottom"><%= contract.purchaserCity %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Province:</th>
<td class="has-border-bottom"><%= contract.purchaserProvince %>&nbsp;</td>
</tr><tr>
<th class="has-text-left has-text-nowrap">Postal Code:</th>
<td class="has-border-bottom" style="width:100%"><%= contract.purchaserPostalCode %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Telephone:</th>
<td class="has-border-bottom"><%= contract.purchaserPhoneNumber %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">E-mail:</th>
<td class="has-border-bottom"><%= contract.purchaserEmail %>&nbsp;</td>
</tr>
</tbody>
</table>
</td>
<td>
<h2 class="is-10pt">Recipient</h2>
<%
const recipient = contract.contractInterments[0]
%>
<table class="is-10pt layout-table">
<tbody>
<tr>
<th class="has-text-left">Name:</th>
<td class="has-border-bottom">
<%= recipient ? recipient.deceasedName : "" %>
</td>
</tr><tr>
<th class="has-text-left" rowspan="2" style="vertical-align:top">Address:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedAddress1 : "" %>&nbsp;</td>
</tr><tr>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedAddress2 : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">City:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedCity : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Province:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedProvince : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Postal Code:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedPostalCode : "" %>&nbsp;</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>
Purchaser's relationship to Recipient:
<span class="field" style="width:550px">
<%= contract.purchaserRelationship %>
&nbsp;
</span>
</p>
<p>
This Contract for Purchase of Interment Rights or Cemetery Services
is between the Purchaser and The Corporation of the City of Sault Ste. Marie (Corporation)
concerning interment rights or cemetery services for the Recipient(s)
as identified in this Contract.
</p>
<p>
The Purchaser (if different than the Recipient)
represents being legally authorized or charged with the responsibility for
the Recipient's interment rights and prepaid cemetery services
specified in this Contract. This Contract will be enforceable to
the benefit of and be binding upon the parties hereto
and their respective heirs, executors, administrators, successors, and assigns.
</p>
<table class="layout-table" style="table-layout:fixed">
<tr>
<td>
<h2 class="is-10pt is-capitalized">Details</h2>
<table class="is-10pt data-table">
<tr>
<td>
<h2 class="is-10pt">Purchaser</h2>
<table class="is-10pt layout-table">
<tbody>
<tr>
<th class="has-text-left">Name:</th>
<td class="has-border-bottom">
<%= contract.purchaserName %>
</td>
</tr><tr>
<th class="has-text-left" rowspan="2" style="vertical-align:top">Address:</th>
<td class="has-border-bottom"><%= contract.purchaserAddress1 %>&nbsp;</td>
</tr><tr>
<td class="has-border-bottom"><%= contract.purchaserAddress2 %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">City:</th>
<td class="has-border-bottom"><%= contract.purchaserCity %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Province:</th>
<td class="has-border-bottom"><%= contract.purchaserProvince %>&nbsp;</td>
</tr><tr>
<th class="has-text-left has-text-nowrap">Postal Code:</th>
<td class="has-border-bottom" style="width:100%"><%= contract.purchaserPostalCode %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Telephone:</th>
<td class="has-border-bottom"><%= contract.purchaserPhoneNumber %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">E-mail:</th>
<td class="has-border-bottom"><%= contract.purchaserEmail %>&nbsp;</td>
</tr>
</tbody>
</table>
</td>
<td>
<h2 class="is-10pt">Recipient</h2>
<%
const recipient = contract.contractInterments[0]
%>
<table class="is-10pt layout-table">
<tbody>
<tr>
<th class="has-text-left">Name:</th>
<td class="has-border-bottom">
<%= recipient ? recipient.deceasedName : "" %>
</td>
</tr><tr>
<th class="has-text-left" rowspan="2" style="vertical-align:top">Address:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedAddress1 : "" %>&nbsp;</td>
</tr><tr>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedAddress2 : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">City:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedCity : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Province:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedProvince : "" %>&nbsp;</td>
</tr><tr>
<th class="has-text-left">Postal Code:</th>
<td class="has-border-bottom"><%= recipient ? recipient.deceasedPostalCode : "" %>&nbsp;</td>
</tr>
</tbody>
</table>
</td>
<td>Cemetery</td>
<td><%= contract.cemeteryName ?? '(No ' + configFunctions.getConfigProperty("aliases.map") + ')' %></td>
</tr>
</tbody>
</table>
<p>
Purchaser's relationship to Recipient:
<span class="field" style="width:550px">
<%= contract.purchaserRelationship %>
&nbsp;
</span>
</p>
<p>
This Contract for Purchase of Interment Rights or Cemetery Services
is between the Purchaser and The Corporation of the City of Sault Ste. Marie (Corporation)
concerning interment rights or cemetery services for the Recipient(s)
as identified in this Contract.
</p>
<p>
The Purchaser (if different than the Recipient)
represents being legally authorized or charged with the responsibility for
the Recipient's interment rights and prepaid cemetery services
specified in this Contract. This Contract will be enforceable to
the benefit of and be binding upon the parties hereto
and their respective heirs, executors, administrators, successors, and assigns.
</p>
<table class="layout-table" style="table-layout:fixed">
<tr>
<td>
<h2 class="is-10pt is-capitalized">Details</h2>
<table class="is-10pt data-table">
<tr>
<td>Cemetery</td>
<td><%= contract.cemeteryName ?? '(No ' + configFunctions.getConfigProperty("aliases.map") + ')' %></td>
</tr>
<tr>
<td>Burial Site</td>
<td><%= contract.burialSiteName ?? '(No ' + configFunctions.getConfigProperty("aliases.lot") + ')' %></td>
</tr>
<%
for (const field of contract.contractFields) {
if (!recipientFields.includes(field.contractTypeField) && field.contractFieldValue) {
%>
<tr>
<td><%= field.contractTypeField %></td>
<td><%= field.contractFieldValue %></td>
</tr>
<%
}
<tr>
<td>Burial Site</td>
<td><%= contract.burialSiteName ?? '(No ' + configFunctions.getConfigProperty("aliases.lot") + ')' %></td>
</tr>
<%
for (const field of contract.contractFields) {
if (!recipientFields.includes(field.contractTypeField) && field.contractFieldValue) {
%>
<tr>
<td><%= field.contractTypeField %></td>
<td><%= field.contractFieldValue %></td>
</tr>
<%
}
}
%>
</table>
</td>
<td>
<h2 class="is-10pt is-capitalized">Interment Rights and Services</h2>
<table class="is-10pt data-table">
<tbody>
<%
let currentFeeCategory = "";
let feeAmountTotal = 0;
let taxAmountTotal = 0;
%>
</table>
</td>
<td>
<h2 class="is-10pt is-capitalized">Interment Rights and Services</h2>
<table class="is-10pt data-table">
<tbody>
<%
let currentFeeCategory = "";
let feeAmountTotal = 0;
let taxAmountTotal = 0;
%>
<% for (const fee of contract.contractFees) { %>
<% if (currentFeeCategory !== fee.feeCategory) { %>
<tr>
<td colspan="3">
<strong><%= fee.feeCategory %></strong>
</td>
</tr>
<% currentFeeCategory = fee.feeCategory; %>
<% } %>
<tr>
<td <% if (fee.quantity === 1) { %>colspan="2"<% } %>>
<%= fee.feeName %>
</td>
<% if (fee.quantity !== 1) { %>
<td class="has-text-right is-8pt has-text-nowrap">
$<%= fee.feeAmount.toFixed(2) %>
&times;
<%= fee.quantity %>
</td>
<% } %>
<td class="has-text-right">
$<%= fee.feeAmount.toFixed(2) %>
</td>
</tr>
<%
feeAmountTotal += fee.feeAmount * fee.quantity;
taxAmountTotal += fee.taxAmount * fee.quantity;
%>
<% } %>
<tr>
<td colspan="2"><strong>Sub Total</strong></td>
<td class="has-text-right">
<strong>$<%= feeAmountTotal.toFixed(2) %></strong>
</td>
</tr><tr>
<td colspan="2">HST</td>
<td class="has-text-right">
$<%= taxAmountTotal.toFixed(2) %>
</td>
</tr><tr>
<td colspan="2"><strong>Total Sale</strong></td>
<td class="has-text-right">
<strong>$<%= (feeAmountTotal + taxAmountTotal).toFixed(2) %></strong>
</td>
</tr><tr>
<td colspan="2"><strong>Balance Owing</strong></td>
<td class="has-text-right">
<strong>$<%= (feeAmountTotal + taxAmountTotal - contractFunctions.getTransactionTotal(contract)).toFixed(2) %></strong>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<% for (const fee of contract.contractFees) { %>
<% if (currentFeeCategory !== fee.feeCategory) { %>
<tr>
<td colspan="3">
<strong><%= fee.feeCategory %></strong>
</td>
</tr>
<% currentFeeCategory = fee.feeCategory; %>
<% } %>
<tr>
<td <% if (fee.quantity === 1) { %>colspan="2"<% } %>>
<%= fee.feeName %>
</td>
<% if (fee.quantity !== 1) { %>
<td class="has-text-right is-8pt has-text-nowrap">
$<%= fee.feeAmount.toFixed(2) %>
&times;
<%= fee.quantity %>
</td>
<% } %>
<td class="has-text-right">
$<%= fee.feeAmount.toFixed(2) %>
</td>
</tr>
<%
feeAmountTotal += fee.feeAmount * fee.quantity;
taxAmountTotal += fee.taxAmount * fee.quantity;
%>
<% } %>
<tr>
<td colspan="2"><strong>Sub Total</strong></td>
<td class="has-text-right">
<strong>$<%= feeAmountTotal.toFixed(2) %></strong>
</td>
</tr><tr>
<td colspan="2">HST</td>
<td class="has-text-right">
$<%= taxAmountTotal.toFixed(2) %>
</td>
</tr><tr>
<td colspan="2"><strong>Total Sale</strong></td>
<td class="has-text-right">
<strong>$<%= (feeAmountTotal + taxAmountTotal).toFixed(2) %></strong>
</td>
</tr><tr>
<td colspan="2"><strong>Balance Owing</strong></td>
<td class="has-text-right">
<strong>$<%= (feeAmountTotal + taxAmountTotal - contractFunctions.getTransactionTotal(contract)).toFixed(2) %></strong>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<!-- PAGE BREAK -->
<!-- PAGE BREAK -->
<h2 class="is-10pt" style="page-break-before:always">
Contribution Levels to the Care and Maintenance Fund<br />
(based on the price of Interment Rights and as prescribed by the <em>Funeral, Burial and Cremation Services Act</em>)
</h2>
<h2 class="is-10pt" style="page-break-before:always">
Contribution Levels to the Care and Maintenance Fund<br />
(based on the price of Interment Rights and as prescribed by the <em>Funeral, Burial and Cremation Services Act</em>)
</h2>
<table class="layout-table is-10pt">
<tr>
<td>Niches</td>
<td>the greater of 15% and $100</td>
</tr>
<tr>
<td>Crypts</td>
<td>the greater of 20% and $500</td>
</tr>
<tr>
<td>
In-ground grave (2.23 sq.m. or 24 sq.ft. or larger)
</td>
<td>
the greater of 40% and $250
</td>
</tr>
<tr>
<td>In-ground grave (smaller than 2.23 sq.m. or 24 sq ft)</td>
<td>the greater of 40% and $150</td>
</tr>
</table>
<table class="layout-table is-10pt">
<tr>
<td>Niches</td>
<td>the greater of 15% and $100</td>
</tr>
<tr>
<td>Crypts</td>
<td>the greater of 20% and $500</td>
</tr>
<tr>
<td>
In-ground grave (2.23 sq.m. or 24 sq.ft. or larger)
</td>
<td>
the greater of 40% and $250
</td>
</tr>
<tr>
<td>In-ground grave (smaller than 2.23 sq.m. or 24 sq ft)</td>
<td>the greater of 40% and $150</td>
</tr>
</table>
<h2 class="is-10pt">
Contribution Levels to the Care and Maintenance Fund - Markers<br />
(as prescribed by the <em>Funeral, Burial and Cremation Services Act</em>)
</h2>
<h2 class="is-10pt">
Contribution Levels to the Care and Maintenance Fund - Markers<br />
(as prescribed by the <em>Funeral, Burial and Cremation Services Act</em>)
</h2>
<table class="layout-table is-10pt">
<tr>
<td>Flat marker measuring less than 1,116.3 sq.m. (173 sq.in.)</td>
<td class="has-text-right">$0.00</td>
</tr>
<tr>
<td>Flat marker measuring over 1,116.3 sq.m. (173 sq.in.)</td>
<td class="has-text-right">$50.00</td>
</tr>
<tr>
<td>
Upright monument measuring more than 1.22 m. (4 ft.) or less in height or length,
including the base
</td>
<td class="has-text-right">$100.00</td>
</tr>
<tr>
<td>
Upright monument measuring more than 1.22m. (4 ft.) either in height or length,
including the base
</td>
<td class="has-text-right">$200.00</td>
</tr>
</table>
<table class="layout-table is-10pt">
<tr>
<td>Flat marker measuring less than 1,116.3 sq.m. (173 sq.in.)</td>
<td class="has-text-right">$0.00</td>
</tr>
<tr>
<td>Flat marker measuring over 1,116.3 sq.m. (173 sq.in.)</td>
<td class="has-text-right">$50.00</td>
</tr>
<tr>
<td>
Upright monument measuring more than 1.22 m. (4 ft.) or less in height or length,
including the base
</td>
<td class="has-text-right">$100.00</td>
</tr>
<tr>
<td>
Upright monument measuring more than 1.22m. (4 ft.) either in height or length,
including the base
</td>
<td class="has-text-right">$200.00</td>
</tr>
</table>
<h2 class="is-10pt">Contract Terms and Conditions</h2>
<h2 class="is-10pt">Contract Terms and Conditions</h2>
<ol class="termsList">
<li>
The Purchaser may only cancel a contract for interment rights or cemetery services upon written notice of cancellation
to the City Clerk in accordance with the <em>Funeral, Burial and Cremation Services Act</em> and the terms and conditions set
out herein.
</li>
<li>
Where interment rights have not been exercised and none of the contracted cemetery services have been provided
and where the contract is cancelled within thirty (30) days of its execution, the Corporation shall refund the Purchaser
all moneys paid less an administrative fee as set out in the Price List.
</li>
<li>
Where interment rights have not been exercised and part of the contracted cemetery services have been provided,
and where the contract is cancelled within thirty (30) days of its execution, the Corporation shall refund the Purchaser
the amount described in (b) above which shall be reduced by the cost of cemetery services provided as set out in the
current Price List.
</li>
<li>
A contract for interment rights cannot be cancelled more than thirty (30) days after the date of execution of the
contract.
</li>
<li>
Where a contract for cemetery services is cancelled more than thirty (30) days after the date of execution of the
contract, the Purchaser shall be refunded the amount described in (b) and (c) above plus the amount of income
earned on that money.
</li>
<li>
Written consent of all surviving interment rights holder(s), if any, and any other required documentation as set out in
Cemetery By-law 2012-129 is required for: cremation, interments, disinterments, and the placement of markers,
inscriptions or photos.
</li>
<li>
Transfer or resale of the above listed interment rights to a third party is permitted, subject to the provisions of
Cemetery By-law 2012-129 and the <em>Funeral, Burial and Cremation Services Act</em>. A Certificate of Interment Rights
holder shall not resell interment rights for an amount that is greater than the price of those rights as indicated on the
current Price List, inclusive of the care and maintenance component.
</li>
<li>
No Certificate of Interment Rights holder(s) may subdivide and sell or transfer a portion of interment rights.
</li>
<li>
An Interment Rights Certificate will not be issued until this Contract has been paid in full.
</li>
<li>
A marker, purchased and/or installed by anyone other than the Certificate of Interment Rights holder(s) may be
removed by cemetery staff upon the written request of the Certificate of Interment Rights holder(s).
</li>
<li>
Dead human bodies cannot be cremated if there is a pacemaker or radioactive implant in the body or if the body is in
a container made of or containing non-flammable or hazardous material or chlorinated or fibre-reinforced plastic.
</li>
<li>
Dead human bodies will not be cremated unless a coroner's certificate has been provided to the operator.
</li>
<li>
The Corporation shall not be responsible in the event that it is unable to or prevented from carrying out this Contract
due to causes beyond its control.
</li>
</ol>
<ol class="termsList">
<li>
The Purchaser may only cancel a contract for interment rights or cemetery services upon written notice of cancellation
to the City Clerk in accordance with the <em>Funeral, Burial and Cremation Services Act</em> and the terms and conditions set
out herein.
</li>
<li>
Where interment rights have not been exercised and none of the contracted cemetery services have been provided
and where the contract is cancelled within thirty (30) days of its execution, the Corporation shall refund the Purchaser
all moneys paid less an administrative fee as set out in the Price List.
</li>
<li>
Where interment rights have not been exercised and part of the contracted cemetery services have been provided,
and where the contract is cancelled within thirty (30) days of its execution, the Corporation shall refund the Purchaser
the amount described in (b) above which shall be reduced by the cost of cemetery services provided as set out in the
current Price List.
</li>
<li>
A contract for interment rights cannot be cancelled more than thirty (30) days after the date of execution of the
contract.
</li>
<li>
Where a contract for cemetery services is cancelled more than thirty (30) days after the date of execution of the
contract, the Purchaser shall be refunded the amount described in (b) and (c) above plus the amount of income
earned on that money.
</li>
<li>
Written consent of all surviving interment rights holder(s), if any, and any other required documentation as set out in
Cemetery By-law 2012-129 is required for: cremation, interments, disinterments, and the placement of markers,
inscriptions or photos.
</li>
<li>
Transfer or resale of the above listed interment rights to a third party is permitted, subject to the provisions of
Cemetery By-law 2012-129 and the <em>Funeral, Burial and Cremation Services Act</em>. A Certificate of Interment Rights
holder shall not resell interment rights for an amount that is greater than the price of those rights as indicated on the
current Price List, inclusive of the care and maintenance component.
</li>
<li>
No Certificate of Interment Rights holder(s) may subdivide and sell or transfer a portion of interment rights.
</li>
<li>
An Interment Rights Certificate will not be issued until this Contract has been paid in full.
</li>
<li>
A marker, purchased and/or installed by anyone other than the Certificate of Interment Rights holder(s) may be
removed by cemetery staff upon the written request of the Certificate of Interment Rights holder(s).
</li>
<li>
Dead human bodies cannot be cremated if there is a pacemaker or radioactive implant in the body or if the body is in
a container made of or containing non-flammable or hazardous material or chlorinated or fibre-reinforced plastic.
</li>
<li>
Dead human bodies will not be cremated unless a coroner's certificate has been provided to the operator.
</li>
<li>
The Corporation shall not be responsible in the event that it is unable to or prevented from carrying out this Contract
due to causes beyond its control.
</li>
</ol>
<!-- PAGE BREAK -->
<!-- PAGE BREAK -->
<h2 class="is-10pt" style="page-break-before:always">Payment Terms</h2>
<p>
All pre-need interment rights and cemetery services must be paid in full at the time of ordering.
</p>
<p>
In the case of at-need interment rights and cemetery services, the interment rights and services directly related to the
deceased will be invoiced by the Corporation and interest shall be charged at the rate determined by the Treasurer on the
unpaid balance after thirty (30) days from the date of invoice. Such services do not include interment rights in a
mausoleum.
</p>
<p>
Any rights of cancellation of this Contract, whether within thirty (30) days or after thirty (30) days can only be exercised by
the Purchaser or his or her Estate Trustee.
</p>
<h2 class="is-10pt" style="page-break-before:always">Payment Terms</h2>
<p>
All pre-need interment rights and cemetery services must be paid in full at the time of ordering.
</p>
<p>
In the case of at-need interment rights and cemetery services, the interment rights and services directly related to the
deceased will be invoiced by the Corporation and interest shall be charged at the rate determined by the Treasurer on the
unpaid balance after thirty (30) days from the date of invoice. Such services do not include interment rights in a
mausoleum.
</p>
<p>
Any rights of cancellation of this Contract, whether within thirty (30) days or after thirty (30) days can only be exercised by
the Purchaser or his or her Estate Trustee.
</p>
<h2 class="is-10pt">Personal Information</h2>
<h2 class="is-10pt">Personal Information</h2>
<p>
The Purchaser acknowledges and provides consent to permit the Corporation to collect, use and disclose personal
information in accordance with the requirements under the <em>Funeral, Burial and Cremation Services Act</em> and the
regulations made thereunder for information within the cemetery/crematorium public register. The Purchaser also
understands that the Corporation does not rent or sell personal information to third party organizations.
</p>
<p>
All information provided by the Purchaser to the Corporation shall be held, retained, disclosed, and destroyed, as the case
may be, in accordance with the provisions of the <em>Municipal Freedom of Information and Protection of Privacy Act</em>.
</p>
<p>
The Purchaser acknowledges and provides consent to permit the Corporation to collect, use and disclose personal
information in accordance with the requirements under the <em>Funeral, Burial and Cremation Services Act</em> and the
regulations made thereunder for information within the cemetery/crematorium public register. The Purchaser also
understands that the Corporation does not rent or sell personal information to third party organizations.
</p>
<p>
All information provided by the Purchaser to the Corporation shall be held, retained, disclosed, and destroyed, as the case
may be, in accordance with the provisions of the <em>Municipal Freedom of Information and Protection of Privacy Act</em>.
</p>
<h2 class="is-10pt">Consumer Information Guide and Cemetery Price List</h2>
<h2 class="is-10pt">Consumer Information Guide and Cemetery Price List</h2>
<p>
By initialling below, the Purchaser acknowledges receiving a copy of the Ontario Government's Consumer Information
Guide (where made available by the Registrar) and the Cemetery Price List at the time of entering into this Contract.
</p>
<p>
By initialling below, the Purchaser acknowledges receiving a copy of the Ontario Government's Consumer Information
Guide (where made available by the Registrar) and the Cemetery Price List at the time of entering into this Contract.
</p>
<ul class="confirmList">
<li>
I hereby acknowledge that I have been offered and/or received a copy of the Ontario Government's Consumer
Information Guide and the Cemetery Price List.
</li>
<li>
I have reviewed the terms and conditions of the Contract and hereby confirm that the interment rights and cemetery
services as specified in this Contract are complete and correct. I direct the Corporation to proceed with the sale of the
interment right(s) as identified in this Contract in accordance with the Cemetery By-law 2012-129 which is now or at any
time hereinafter in force.
</li>
<li>
I hereby acknowledge that I have received and reviewed a copy of Cemetery By-law 2012-129.
</li>
<li>
I acknowledge having received a copy of this Contract, and will assume full responsibility for payment of the total
Contract price to the Corporation in accordance with the terms and conditions of the Contract.
</li>
</ul>
<ul class="confirmList">
<li>
I hereby acknowledge that I have been offered and/or received a copy of the Ontario Government's Consumer
Information Guide and the Cemetery Price List.
</li>
<li>
I have reviewed the terms and conditions of the Contract and hereby confirm that the interment rights and cemetery
services as specified in this Contract are complete and correct. I direct the Corporation to proceed with the sale of the
interment right(s) as identified in this Contract in accordance with the Cemetery By-law 2012-129 which is now or at any
time hereinafter in force.
</li>
<li>
I hereby acknowledge that I have received and reviewed a copy of Cemetery By-law 2012-129.
</li>
<li>
I acknowledge having received a copy of this Contract, and will assume full responsibility for payment of the total
Contract price to the Corporation in accordance with the terms and conditions of the Contract.
</li>
</ul>
<p>
The Contract date set out below is the date on which this Contract is accepted by the Corporation.
</p>
<p>
The Contract date set out below is the date on which this Contract is accepted by the Corporation.
</p>
<p>
Purchaser:
<span class="field" style="width:400px">&nbsp;</span>
Date:
<span class="field" style="width:200px">&nbsp;</span>
</p>
<p>
Purchaser:
<span class="field" style="width:400px">&nbsp;</span>
Date:
<span class="field" style="width:200px">&nbsp;</span>
</p>
<p>
Purchaser:
<span class="field" style="width:400px">&nbsp;</span>
Date:
<span class="field" style="width:200px">&nbsp;</span>
</p>
<p>
Purchaser:
<span class="field" style="width:400px">&nbsp;</span>
Date:
<span class="field" style="width:200px">&nbsp;</span>
</p>
<p class="has-text-right mt-4">
Accepted on behalf of The Corporation<br />
of the City of Sault Ste. Marie by:
</p>
<p class="has-text-right">
Name:
<span class="field" style="width:300px">&nbsp;</span>
</p>
<p class="has-text-right mt-4">
Accepted on behalf of The Corporation<br />
of the City of Sault Ste. Marie by:
</p>
<p class="has-text-right">
Name:
<span class="field" style="width:300px">&nbsp;</span>
</p>
</body>
</html>

View File

@ -1,47 +1,46 @@
<html>
<head>
<title><%= headTitle %></title>
<style>
<%- include('style.css'); %>
</style>
</head>
<body>
<%- include('_workOrder-header.ejs'); %>
<head>
<title><%= headTitle %></title>
<style>
<%- include('style.css'); %>
</style>
</head>
<body>
<%- include('_workOrder-header.ejs'); %>
<h2 class="mb-0">Comments</h2>
<h2 class="mb-0">Comments</h2>
<% if (workOrder.workOrderComments.length === 0) { %>
<p>There are no comments associated with this work order.</p>
<% } else { %>
<table class="data-table">
<thead>
<tr>
<th>Commentor</th>
<th>Comment Time</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<% for (const comment of workOrder.workOrderComments) { %>
<tr>
<td><%= comment.recordUpdate_userName %></td>
<td><%= comment.workOrderCommentDateString %> <%= comment.workOrderCommentTimePeriodString %></td>
<td><%= comment.workOrderComment %></td>
</tr>
<% } %>
</tbody>
</table>
<% } %>
<% if (workOrder.workOrderComments.length === 0) { %>
<p>There are no comments associated with this work order.</p>
<% } else { %>
<table class="data-table">
<thead>
<tr>
<th>Commentor</th>
<th>Comment Time</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
<% for (const comment of workOrder.workOrderComments) { %>
<tr>
<td><%= comment.recordUpdate_userName %></td>
<td><%= comment.workOrderCommentDateString %> <%= comment.workOrderCommentTimePeriodString %></td>
<td><%= comment.workOrderComment %></td>
</tr>
<% } %>
</tbody>
</table>
<% } %>
<p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px">
<%
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
const currentDate = new Date();
%>
Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimeString(recordCreateDate) %>.
Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimeString(currentDate) %>.<br />
workOrderId = <%= workOrder.workOrderId %>
</p>
</body>
<p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px">
<%
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
const currentDate = new Date();
%>
Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimeString(recordCreateDate) %>.
Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimeString(currentDate) %>.<br />
workOrderId = <%= workOrder.workOrderId %>
</p>
</body>
</html>

View File

@ -69,55 +69,55 @@
<h2 class="mb-0">Milestones</h2>
<table class="data-table">
<thead>
<thead>
<tr>
<th class="is-width-1"></th>
<th>Milestone Description</th>
<th>Due Date</th>
</tr>
</thead>
<tbody>
<% for (const milestone of workOrder.workOrderMilestones) { %>
<tr>
<th class="is-width-1"></th>
<th>Milestone Description</th>
<th>Due Date</th>
<td class="is-width-1">
<% if (milestone.workOrderMilestoneCompletionDate) { %>
<span class="checkbox is-checked"></span>
<% } else { %>
<span class="checkbox"></span>
<% } %>
</td>
<td>
<% if (milestone.workOrderMilestoneTypeId) { %>
<strong><%= milestone.workOrderMilestoneType %></strong><br />
<% } %>
<%= milestone.workOrderMilestoneDescription %>
</td>
<td>
<% if (milestone.workOrderMilestoneDate === 0) { %>
(No Set Date)
<% } else { %>
<%= milestone.workOrderMilestoneDateString %>
<% } %>
<% if (milestone.workOrderMilestoneTime) { %>
<%= milestone.workOrderMilestoneTimePeriodString %>
<% } %>
</td>
</tr>
</thead>
<tbody>
<% for (const milestone of workOrder.workOrderMilestones) { %>
<tr>
<td class="is-width-1">
<% if (milestone.workOrderMilestoneCompletionDate) { %>
<span class="checkbox is-checked"></span>
<% } else { %>
<span class="checkbox"></span>
<% } %>
</td>
<td>
<% if (milestone.workOrderMilestoneTypeId) { %>
<strong><%= milestone.workOrderMilestoneType %></strong><br />
<% } %>
<%= milestone.workOrderMilestoneDescription %>
</td>
<td>
<% if (milestone.workOrderMilestoneDate === 0) { %>
(No Set Date)
<% } else { %>
<%= milestone.workOrderMilestoneDateString %>
<% } %>
<% if (milestone.workOrderMilestoneTime) { %>
<%= milestone.workOrderMilestoneTimePeriodString %>
<% } %>
</td>
</tr>
<% } %>
</tbody>
<% } %>
</tbody>
</table>
<% } %>
<h2 class="mb-0">Notes</h2>
<p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px">
<%
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
const currentDate = new Date();
%>
Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(recordCreateDate) %>.
Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(currentDate) %>.<br />
workOrderId = <%= workOrder.workOrderId %>
<%
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
const currentDate = new Date();
%>
Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(recordCreateDate) %>.
Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(currentDate) %>.<br />
workOrderId = <%= workOrder.workOrderId %>
</p>
</body>
</html>

View File

@ -104,14 +104,14 @@
</button>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" id="button--deleteWorkOrder" href="#">
<span class="icon is-small">
<i class="fas fa-trash has-text-danger" aria-hidden="true"></i>
</span>
<span>Delete Work Order</span>
</a>
</div>
<div class="dropdown-content">
<a class="dropdown-item" id="button--deleteWorkOrder" href="#">
<span class="icon is-small">
<i class="fas fa-trash has-text-danger" aria-hidden="true"></i>
</span>
<span>Delete Work Order</span>
</a>
</div>
</div>
</div>
</div>
@ -128,201 +128,197 @@
</div>
</div>
<div class="columns is-desktop">
<div class="column">
<form id="form--workOrderEdit">
<input id="workOrderEdit--workOrderId" name="workOrderId" type="hidden" value="<%= workOrder.workOrderId %>" />
<div class="panel">
<div class="panel-block is-block">
<div class="columns">
<div class="column">
<label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label>
<div class="field has-addons">
<div class="control is-expanded">
<input class="input <%= (isCreate ? '' : ' is-readonly') %>" id="workOrderEdit--workOrderNumber" name="workOrderNumber" type="text" value="<%= workOrder.workOrderNumber %>" maxlength="50" readonly accesskey="f" <%= (isCreate ? "" : " required") %> />
</div>
<div class="control">
<button class="button is-unlock-field-button" data-tooltip="Unlock Field" type="button" aria-label="Unlock Field">
<span class="icon"><i class="fas fa-unlock" aria-hidden="true"></i></span>
</button>
</div>
<div class="columns">
<div class="column">
<form id="form--workOrderEdit">
<input id="workOrderEdit--workOrderId" name="workOrderId" type="hidden" value="<%= workOrder.workOrderId %>" />
<div class="panel">
<div class="panel-block is-block">
<div class="columns">
<div class="column">
<label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label>
<div class="field has-addons">
<div class="control is-expanded">
<input class="input <%= (isCreate ? '' : ' is-readonly') %>" id="workOrderEdit--workOrderNumber" name="workOrderNumber" type="text" value="<%= workOrder.workOrderNumber %>" maxlength="50" readonly accesskey="f" <%= (isCreate ? "" : " required") %> />
</div>
<div class="control">
<button class="button is-unlock-field-button" data-tooltip="Unlock Field" type="button" aria-label="Unlock Field">
<span class="icon"><i class="fas fa-unlock" aria-hidden="true"></i></span>
</button>
</div>
<% if (isCreate) { %>
<p class="help">Leave work order number blank to autopopulate.</p>
<% } %>
</div>
<div class="column">
<div class="field">
<label class="label" for="workOrderEdit--workOrderTypeId">Work Order Type</label>
<div class="control">
<div class="select is-fullwidth">
<select id="workOrderEdit--workOrderTypeId" name="workOrderTypeId" required <%= (isCreate ? " autofocus" : "") %>>
<% if (isCreate && workOrderTypes.length > 1) { %>
<option value="">(Select Type)</option>
<% } %>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>" <%= (workOrder.workOrderTypeId === workOrderType.workOrderTypeId ? " selected" : "") %>>
<%= workOrderType.workOrderType %>
</option>
<% } %>
</select>
</div>
<% if (isCreate) { %>
<p class="help">Leave work order number blank to autopopulate.</p>
<% } %>
</div>
<div class="column">
<div class="field">
<label class="label" for="workOrderEdit--workOrderTypeId">Work Order Type</label>
<div class="control">
<div class="select is-fullwidth">
<select id="workOrderEdit--workOrderTypeId" name="workOrderTypeId" required <%= (isCreate ? " autofocus" : "") %>>
<% if (isCreate && workOrderTypes.length > 1) { %>
<option value="">(Select Type)</option>
<% } %>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>" <%= (workOrder.workOrderTypeId === workOrderType.workOrderTypeId ? " selected" : "") %>>
<%= workOrderType.workOrderType %>
</option>
<% } %>
</select>
</div>
</div>
</div>
</div>
<div class="field">
<label class="label" for="workOrderEdit--workOrderDescription">Description</label>
<div class="control">
<textarea class="textarea" id="workOrderEdit--workOrderDescription" name="workOrderDescription"><%= workOrder.workOrderDescription %></textarea>
</div>
<div class="field">
<label class="label" for="workOrderEdit--workOrderDescription">Description</label>
<div class="control">
<textarea class="textarea" id="workOrderEdit--workOrderDescription" name="workOrderDescription"><%= workOrder.workOrderDescription %></textarea>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="workOrderEdit--workOrderOpenDateString"><%= configFunctions.getConfigProperty("aliases.workOrderOpenDate") %></label>
<div class="control has-icons-left">
<%
const currentDateString = dateTimeFunctions.dateToString(new Date());
%>
<input class="input" id="workOrderEdit--workOrderOpenDateString" name="workOrderOpenDateString" type="date"
value="<%= workOrder.workOrderOpenDateString %>"
max="<%= workOrder.workOrderOpenDateString > currentDateString ? workOrder.workOrderOpenDateString : currentDateString %>"
required />
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="workOrderEdit--workOrderOpenDateString"><%= configFunctions.getConfigProperty("aliases.workOrderOpenDate") %></label>
<div class="control has-icons-left">
<%
const currentDateString = dateTimeFunctions.dateToString(new Date());
%>
<input class="input" id="workOrderEdit--workOrderOpenDateString" name="workOrderOpenDateString" type="date"
value="<%= workOrder.workOrderOpenDateString %>"
max="<%= workOrder.workOrderOpenDateString > currentDateString ? workOrder.workOrderOpenDateString : currentDateString %>"
required />
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
<div class="column">
<label class="label" for="workOrderEdit--workOrderCloseDateString"><%= configFunctions.getConfigProperty("aliases.workOrderCloseDate") %></label>
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" id="workOrderEdit--workOrderCloseDateString" name="workOrderCloseDateString" type="date" value="<%= workOrder.workOrderCloseDateString %>" disabled readonly />
</div>
<div class="control">
<button class="button is-light is-success" id="button--closeWorkOrder" type="button">
<span class="icon is-small"><i class="fas fa-stop-circle" aria-hidden="true"></i></span>
<span>
Close
</span>
</div>
</button>
</div>
</div>
<div class="column">
<label class="label" for="workOrderEdit--workOrderCloseDateString"><%= configFunctions.getConfigProperty("aliases.workOrderCloseDate") %></label>
<div class="field has-addons">
<div class="control is-expanded">
<input class="input" id="workOrderEdit--workOrderCloseDateString" name="workOrderCloseDateString" type="date" value="<%= workOrder.workOrderCloseDateString %>" disabled readonly />
</div>
<div class="control">
<button class="button is-light is-success" id="button--closeWorkOrder" type="button">
<span class="icon is-small"><i class="fas fa-stop-circle" aria-hidden="true"></i></span>
<span>
Close
</span>
</div>
</div>
</div>
</div>
</form>
<% if (!isCreate) { %>
<div class="panel mt-4">
<div class="panel-heading">
<div class="level">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-weight-bold has-text-white">Related Burial Sites</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<div class="dropdown is-right">
<div class="dropdown-trigger">
<button class="button is-success is-small" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add</span>
<span class="icon is-small"><i class="fas fa-angle-down" aria-hidden="true"></i></span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<% if (!isCreate) { %>
<div class="panel mt-4">
<h2 class="panel-heading">Related Burial Sites</h2>
<div class="panel-block is-block">
<%
const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
%>
<div class="tabs is-boxed">
<ul>
<li class="<%= (tabToSelect === 'contracts' ? 'is-active' : '') %>">
<a href="#relatedTab--contracts">
<span>Contracts</span>
<span class="ml-2 tag"></span>
</a>
</li>
<li class="<%= (tabToSelect === 'burialSites' ? 'is-active' : '') %>">
<a href="#relatedTab--burialSites">
<span>Burial Sites</span>
<span class="ml-2 tag"></span>
</a>
</li>
</ul>
</div>
<div class="tab-container">
<div class="<%= (tabToSelect === 'contracts' ? '' : 'is-hidden') %>" id="relatedTab--contracts">
<div class="box has-background-light has-text-right p-3">
<button class="button is-small is-success" id="button--addContract" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Related Contract</span>
</button>
</div>
<div id="container--contracts"></div>
</div>
<div class="<%= (tabToSelect === 'burialSites' ? '' : 'is-hidden') %>" id="relatedTab--burialSites">
<div class="box has-background-light has-text-right p-3">
<button class="button is-small is-success" id="button--addBurialSite" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Related Burial Site</span>
</button>
</div>
<div id="container--burialSites"></div>
</div>
</div>
</div>
</div>
<% } %>
<% if (!isCreate) { %>
<div class="panel">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="has-text-weight-bold is-size-5">
Comments
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-small is-success" id="workOrderComments--add" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add a Comment</span>
</button>
</div>
</div>
</div>
</div>
<div class="panel-block is-block" id="container--workOrderComments"></div>
</div>
<% } %>
</div>
<% if (!isCreate) { %>
<div class="column is-4-desktop">
<div class="panel" id="panel--milestones">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-white has-text-weight-bold">Milestones</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-small is-success" id="button--addMilestone" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Milestone</span>
</button>
</div>
<div class="level-item">
<div class="dropdown is-right has-text-weight-normal">
<div class="dropdown-trigger">
<button class="button is-small has-tooltip-left" data-tooltip="Milestone Options" type="button" aria-label="Options">
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
</button>
<div class="dropdown-menu">
<div class="dropdown-content has-text-weight-normal">
<a class="dropdown-item" id="button--addContract" href="#">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add a Related Contract</span>
</a>
<a class="dropdown-item" id="button--addBurialSite" href="#">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add a Related Burial Site</span>
</a>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
<span>Download iCalendar</span>
</a>
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download>
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export as CSV</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<%
const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
%>
<div class="tabs is-boxed">
<ul>
<li class="<%= (tabToSelect === 'contracts' ? 'is-active' : '') %>">
<a href="#relatedTab--contracts">
<span>Contracts</span>
<span class="ml-2 tag"></span>
</a>
</li>
<li class="<%= (tabToSelect === 'burialSites' ? 'is-active' : '') %>">
<a href="#relatedTab--burialSites">
<span>Burial Sites</span>
<span class="ml-2 tag"></span>
</a>
</li>
</ul>
</div>
<div class="tab-container">
<div class="<%= (tabToSelect === 'contracts' ? '' : 'is-hidden') %>" id="relatedTab--contracts">
<div id="container--contracts"></div>
</div>
<div class="<%= (tabToSelect === 'burialSites' ? '' : 'is-hidden') %>" id="relatedTab--burialSites">
<div id="container--burialSites"></div>
</div>
</div>
</div>
</div>
<% } %>
</div>
<% if (!isCreate) { %>
<div class="column is-full-desktop is-4-widescreen">
<div class="panel" id="panel--milestones">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-5 has-text-white has-text-weight-bold">Milestones</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-small is-success" id="button--addMilestone" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Milestone</span>
</button>
</div>
<div class="level-item">
<div class="dropdown is-right has-text-weight-normal">
<div class="dropdown-trigger">
<button class="button is-small has-tooltip-left" data-tooltip="Milestone Options" type="button" aria-label="Options">
<span class="icon is-small"><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
</button>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
<span>Download iCalendar</span>
</a>
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download>
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export as CSV</span>
</a>
</div>
</div>
</div>
@ -331,9 +327,34 @@
</div>
</div>
</div>
<% } %>
</div>
<% } %>
</div>
<% if (!isCreate) { %>
<div class="panel">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="has-text-weight-bold is-size-5">
Comments
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-small is-success" id="workOrderComments--add" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add a Comment</span>
</button>
</div>
</div>
</div>
</div>
<div class="panel-block is-block" id="container--workOrderComments"></div>
</div>
<% } %>
<%- include('_footerA'); -%>

View File

@ -35,81 +35,81 @@
<div class="box">
<form id="form--searchFilters">
<input id="searchFilter--limit" name="limit" type="hidden" value="50" />
<input id="searchFilter--offset" name="offset" type="hidden" value="0" />
<input id="searchFilter--limit" name="limit" type="hidden" value="50" />
<input id="searchFilter--offset" name="offset" type="hidden" value="0" />
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderTypeId">Work Order Type</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderTypeId" name="workOrderTypeId" accesskey="f">
<option value="">(All Work Order Types)</option>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>"><%= workOrderType.workOrderType || "(No Name)" %></option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenStatus">Open Status</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderOpenStatus" name="workOrderOpenStatus">
<option value="" <%= (workOrderOpenDateString ? " selected" : "") %>>(All Statuses)</option>
<option value="open" <%= (workOrderOpenDateString ? "" : " selected") %>>Open</option>
<option value="closed">Closed</option>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenDateString"><%= configFunctions.getConfigProperty("aliases.workOrderOpenDate") %></label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--workOrderOpenDateString" name="workOrderOpenDateString" type="date" value="<%= workOrderOpenDateString %>" max="<%= dateTimeFunctions.dateToString(new Date()) %>" />
<span class="icon is-small is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderTypeId">Work Order Type</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderTypeId" name="workOrderTypeId" accesskey="f">
<option value="">(All Work Order Types)</option>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>"><%= workOrderType.workOrderType || "(No Name)" %></option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--deceasedName">Related Interment Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--deceasedName" name="deceasedName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--burialSiteName">Related Burial Site Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--burialSiteName" name="burialSiteName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenStatus">Open Status</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderOpenStatus" name="workOrderOpenStatus">
<option value="" <%= (workOrderOpenDateString ? " selected" : "") %>>(All Statuses)</option>
<option value="open" <%= (workOrderOpenDateString ? "" : " selected") %>>Open</option>
<option value="closed">Closed</option>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenDateString"><%= configFunctions.getConfigProperty("aliases.workOrderOpenDate") %></label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--workOrderOpenDateString" name="workOrderOpenDateString" type="date" value="<%= workOrderOpenDateString %>" max="<%= dateTimeFunctions.dateToString(new Date()) %>" />
<span class="icon is-small is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--deceasedName">Related Interment Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--deceasedName" name="deceasedName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--burialSiteName">Related Burial Site Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--burialSiteName" name="burialSiteName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
</form>
</div>