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. No separate database server is required either.
The whole application could run on a current, modest workstation. 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 ### ✔️ Sunrise CMS is Free and Open Source
There's no cost to use it. There's no cost to use it.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,28 +1,28 @@
export interface Sunrise { export interface Sunrise {
urlPrefix: string; urlPrefix: string;
apiKey: 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; initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
populateAliases: (containerElement: HTMLElement) => void; populateAliases: (containerElement: HTMLElement) => void;
escapedAliases: { escapedAliases: {
ExternalReceiptNumber: string; ExternalReceiptNumber: string;
externalReceiptNumber: string; externalReceiptNumber: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
WorkOrderCloseDate: string; WorkOrderCloseDate: string;
workOrderCloseDate: string; workOrderCloseDate: string;
WorkOrderOpenDate: string;
workOrderOpenDate: string;
}; };
dynamicsGPIntegrationIsEnabled: boolean; dynamicsGPIntegrationIsEnabled: boolean;
getRandomColor: (seedString: string) => string; getRandomColor: (seedString: string) => string;
setUnsavedChanges: () => void;
clearUnsavedChanges: () => void; clearUnsavedChanges: () => void;
hasUnsavedChanges: () => boolean; hasUnsavedChanges: () => boolean;
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string; setUnsavedChanges: () => void;
getLoadingParagraphHTML: (captionText?: string) => string; getLoadingParagraphHTML: (captionText?: string) => string;
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string;
getSearchResultsPagerHTML: (limit: number, offset: number, count: number) => 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; 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; getWorkOrderURL: (workOrderId?: number | string, edit?: boolean, time?: boolean) => string;
} }

View File

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

View File

@ -382,7 +382,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
<div class="dropdown is-right"> <div class="dropdown is-right">
<div class="dropdown-trigger"> <div class="dropdown-trigger">
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options"> <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> </button>
</div> </div>
<div class="dropdown-menu"> <div class="dropdown-menu">

View File

@ -559,6 +559,7 @@ declare const exports: Record<string, unknown>
conflictingMilestonePanelElement conflictingMilestonePanelElement
) )
}, },
onremoved() { onremoved() {
bulmaJS.toggleHtmlClipped() bulmaJS.toggleHtmlClipped()
} }
@ -622,7 +623,7 @@ declare const exports: Record<string, unknown>
<div class="dropdown is-right"> <div class="dropdown is-right">
<div class="dropdown-trigger"> <div class="dropdown-trigger">
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options"> <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> </button>
</div> </div>
<div class="dropdown-menu"> <div class="dropdown-menu">

View File

@ -127,7 +127,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
<span>Edit</span> <span>Edit</span>
</button> </button>
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete"> <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> </button>
</div> </div>
</td>`; </td>`;

View File

@ -211,7 +211,7 @@ declare const exports: Record<string, unknown>
<span>Edit</span> <span>Edit</span>
</button> </button>
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete"> <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> </button>
</div> </div>
</td>` </td>`

View File

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

View File

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

View File

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

View File

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

View File

@ -40,81 +40,81 @@
</a> </a>
</div> </div>
<div class="navbar-menu"> <div class="navbar-menu">
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="<%= urlPrefix %>/workOrders" accesskey="1"> <a class="navbar-item" href="<%= urlPrefix %>/workOrders" accesskey="1">
<span class="icon"> <span class="icon">
<i class="fas fa-hard-hat" aria-hidden="true"></i> <i class="fas fa-hard-hat" aria-hidden="true"></i>
</span> </span>
<span>Work Orders</span> <span>Work Orders</span>
</a> </a>
<a class="navbar-item" href="<%= urlPrefix %>/contracts" accesskey="2"> <a class="navbar-item" href="<%= urlPrefix %>/contracts" accesskey="2">
<span class="icon"> <span class="icon">
<span class="fa-layers fa-fw" aria-hidden="true"> <span class="fa-layers fa-fw" aria-hidden="true">
<i class="fas fa-vector-square"></i> <i class="fas fa-vector-square"></i>
<i class="fas fa-user" data-fa-transform="shrink-10"></i> <i class="fas fa-user" data-fa-transform="shrink-10"></i>
</span> </span>
</span>
<span>Contracts</span>
</a>
<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> </span>
<span>Contracts</span>
</a> </a>
<div class="navbar-dropdown">
<div class="navbar-item has-dropdown"> <a class="navbar-item" href="<%= urlPrefix %>/funeralHomes">
<a class="navbar-link is-arrowless" href="#">
<span>More</span>
<span class="icon"> <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>
<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> </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> </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>
<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> </div>
</nav> </nav>

View File

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

View File

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

View File

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

View File

@ -338,7 +338,20 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<div class="field"> <div class="field">
<label class="label" for="burialSite--burialSiteLatitude">Latitude</label> <label class="label" for="burialSite--burialSiteLatitude">Latitude</label>
@ -363,7 +376,20 @@
</div> </div>
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<div class="field"> <div class="field">
<label class="label" for="burialSite--cemeterySvgId"> <label class="label" for="burialSite--cemeterySvgId">

View File

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

View File

@ -101,7 +101,20 @@
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<% if (burialSite.burialSiteImage) { %> <% if (burialSite.burialSiteImage) { %>
<div class="image"> <div class="image">

View File

@ -125,63 +125,89 @@
</div> </div>
<div class="column"> <div class="column">
<div class="panel"> <div class="panel">
<h2 class="panel-heading">Address</h2> <div class="panel-heading">
<div class="panel-block is-block"> <div class="level">
<div class="field"> <div class="level-left">
<label class="label" for="cemetery--cemeteryAddress1">Address</label> <div class="level-item">
<div class="control"> <h2 class="title is-5 has-text-weight-bold has-text-white">Address</h2>
<input class="input" id="cemetery--cemeteryAddress1" name="cemeteryAddress1" type="text" value="<%= cemetery.cemeteryAddress1 %>" maxlength="50" placeholder="Line 1" />
</div>
</div> </div>
<div class="field"> </div>
<div class="control"> <div class="level-right">
<input class="input" id="cemetery--cemeteryAddress2" name="cemeteryAddress2" type="text" value="<%= cemetery.cemeteryAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" /> <div class="level-item">
</div> <i class="fas fa-location-arrow" aria-hidden="true"></i>
</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>
<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>
</div> </div>
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<div class="field"> <div class="field">
<label class="label" for="cemetery--cemeteryLatitude">Latitude</label> <label class="label" for="cemetery--cemeteryLatitude">Latitude</label>
@ -206,7 +232,20 @@
</div> </div>
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<div class="field"> <div class="field">
<label class="label" for="cemetery--cemeterySvg">SVG File</label> <label class="label" for="cemetery--cemeterySvg">SVG File</label>
@ -232,107 +271,107 @@
<% if (!isCreate) { %> <% if (!isCreate) { %>
<% const burialSiteSearchUrl = urlPrefix + "/burialSites?cemeteryId=" + cemetery.cemeteryId; %> <% const burialSiteSearchUrl = urlPrefix + "/burialSites?cemeteryId=" + cemetery.cemeteryId; %>
<div class="panel mt-4"> <div class="panel mt-4">
<div class="panel-heading"> <div class="panel-heading">
<div class="level is-mobile"> <div class="level is-mobile">
<div class="level-left"> <div class="level-left">
<div class="level-item"> <div class="level-item">
<h2 class="title is-5 has-text-white has-text-weight-bold"> <h2 class="title is-5 has-text-white has-text-weight-bold">
Burial Site Summaries Burial Site Summaries
<a class="tag is-link ml-2" href="<%= burialSiteSearchUrl %>"> <a class="tag is-link ml-2" href="<%= burialSiteSearchUrl %>">
<%= cemetery.burialSiteCount %> <%= 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>
</a> </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>
</div> </div>
<div class="panel-block is-block"> </div>
<% if (cemetery.burialSiteCount === 0) { %> <div class="panel-block is-block">
<div class="message is-info"> <% if (cemetery.burialSiteCount === 0) { %>
<p class="message-body"> <div class="message is-info">
There are no burial sites <p class="message-body">
associated with this cemetery. There are no burial sites
</p> associated with this cemetery.
</div> </p>
<% } else { %> </div>
<div class="columns"> <% } else { %>
<div class="column"> <div class="columns">
<table class="table is-fullwidth is-striped is-hoverable"> <div class="column">
<thead> <table class="table is-fullwidth is-striped is-hoverable">
<tr> <thead>
<th>Type</th> <tr>
<th class="has-text-right"> <th>Type</th>
Burial Site Count <th class="has-text-right">
</th> Burial Site Count
<th class="has-text-right">Percentage</th> </th>
</tr> <th class="has-text-right">Percentage</th>
</thead> </tr>
<tbody> </thead>
<% for (const burialSiteType of burialSiteTypeSummary) { %> <tbody>
<tr> <% for (const burialSiteType of burialSiteTypeSummary) { %>
<td> <tr>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteTypeId=<%= burialSiteType.burialSiteTypeId %>"> <td>
<%= burialSiteType.burialSiteType %> <a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteTypeId=<%= burialSiteType.burialSiteTypeId %>">
</a> <%= burialSiteType.burialSiteType %>
</td> </a>
<td class="has-text-right"> </td>
<%= burialSiteType.burialSiteCount %> <td class="has-text-right">
</td> <%= burialSiteType.burialSiteCount %>
<td class="has-text-right"> </td>
<%= ((burialSiteType.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>% <td class="has-text-right">
</td> <%= ((burialSiteType.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</tr> </td>
<% } %> </tr>
</tbody> <% } %>
</table> </tbody>
</div> </table>
<div class="column"> </div>
<table class="table is-fullwidth is-striped is-hoverable"> <div class="column">
<thead> <table class="table is-fullwidth is-striped is-hoverable">
<tr> <thead>
<th>Status</th> <tr>
<th class="has-text-right"> <th>Status</th>
Burial Site Count <th class="has-text-right">
</th> Burial Site Count
<th class="has-text-right">Percentage</th> </th>
</tr> <th class="has-text-right">Percentage</th>
</thead> </tr>
<tbody> </thead>
<% for (const burialSiteStatus of burialSiteStatusSummary) { %> <tbody>
<tr> <% for (const burialSiteStatus of burialSiteStatusSummary) { %>
<td> <tr>
<a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteStatusId=<%= burialSiteStatus.burialSiteStatusId %>"> <td>
<%= burialSiteStatus.burialSiteStatus %> <a class="has-text-weight-bold" href="<%= burialSiteSearchUrl %>&burialSiteStatusId=<%= burialSiteStatus.burialSiteStatusId %>">
</a> <%= burialSiteStatus.burialSiteStatus %>
</td> </a>
<td class="has-text-right"> </td>
<%= burialSiteStatus.burialSiteCount %> <td class="has-text-right">
</td> <%= burialSiteStatus.burialSiteCount %>
<td class="has-text-right"> </td>
<%= ((burialSiteStatus.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>% <td class="has-text-right">
</td> <%= ((burialSiteStatus.burialSiteCount / cemetery.burialSiteCount) * 100).toFixed(1) %>%
</tr> </td>
<% } %> </tr>
</tbody> <% } %>
</table> </tbody>
</div> </table>
</div> </div>
<% } %> </div>
</div> <% } %>
</div>
</div> </div>
<% } %> <% } %>

View File

@ -96,7 +96,20 @@
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<% if (cemetery.cemeteryLatitude && cemetery.cemeteryLongitude) { %> <% if (cemetery.cemeteryLatitude && cemetery.cemeteryLongitude) { %>
<div id="cemetery--leaflet" data-cemetery-latitude="<%= cemetery.cemeteryLatitude %>" data-cemetery-longitude="<%= cemetery.cemeteryLongitude %>" style="height:300px"></div> <div id="cemetery--leaflet" data-cemetery-latitude="<%= cemetery.cemeteryLatitude %>" data-cemetery-longitude="<%= cemetery.cemeteryLongitude %>" style="height:300px"></div>
@ -112,7 +125,20 @@
</div> </div>
<div class="column"> <div class="column">
<div class="panel"> <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="panel-block is-block">
<% if (cemetery.cemeterySvg) { %> <% if (cemetery.cemeterySvg) { %>
<% const imageURL = urlPrefix + "/internal/images/cemeteries/" + cemetery.cemeterySvg %> <% const imageURL = urlPrefix + "/internal/images/cemeteries/" + cemetery.cemeterySvg %>

View File

@ -43,7 +43,7 @@
<% if (workOrderPrints.length > 0) { %> <% if (workOrderPrints.length > 0) { %>
<span class="is-pulled-right"> <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"> <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> </a>
</span> </span>
<% } %> <% } %>
@ -228,8 +228,8 @@
</div> </div>
</div> </div>
</div> </div>
<div class="columns is-desktop"> <div class="columns is-multiline">
<div class="column"> <div class="column is-6-widescreen is-full-desktop is-full-tablet">
<div class="panel"> <div class="panel">
<a class="panel-block" href="<%= urlPrefix %>/reports"> <a class="panel-block" href="<%= urlPrefix %>/reports">
<div class="media"> <div class="media">
@ -246,7 +246,7 @@
</a> </a>
</div> </div>
</div> </div>
<div class="column"> <div class="column is-6-widescreen is-full-desktop is-full-tablet">
<div class="panel"> <div class="panel">
<a class="panel-block" href="https://cityssm.github.io/sunrise-cms/docs" rel="noopener noreferrer" target="_blank"> <a class="panel-block" href="https://cityssm.github.io/sunrise-cms/docs" rel="noopener noreferrer" target="_blank">
<div class="media"> <div class="media">

View File

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

View File

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

View File

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

View File

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

View File

@ -69,55 +69,55 @@
<h2 class="mb-0">Milestones</h2> <h2 class="mb-0">Milestones</h2>
<table class="data-table"> <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> <tr>
<th class="is-width-1"></th> <td class="is-width-1">
<th>Milestone Description</th> <% if (milestone.workOrderMilestoneCompletionDate) { %>
<th>Due Date</th> <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> </tr>
</thead> <% } %>
<tbody> </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>
</table> </table>
<% } %> <% } %>
<h2 class="mb-0">Notes</h2> <h2 class="mb-0">Notes</h2>
<p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px"> <p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px">
<% <%
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis); const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
const currentDate = new Date(); const currentDate = new Date();
%> %>
Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(recordCreateDate) %>. Work order created <%= dateTimeFunctions.dateToString(recordCreateDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(recordCreateDate) %>.
Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(currentDate) %>.<br /> Printed <%= dateTimeFunctions.dateToString(currentDate) %> at <%= dateTimeFunctions.dateToTimePeriodString(currentDate) %>.<br />
workOrderId = <%= workOrder.workOrderId %> workOrderId = <%= workOrder.workOrderId %>
</p> </p>
</body> </body>
</html> </html>

View File

@ -104,14 +104,14 @@
</button> </button>
</div> </div>
<div class="dropdown-menu"> <div class="dropdown-menu">
<div class="dropdown-content"> <div class="dropdown-content">
<a class="dropdown-item" id="button--deleteWorkOrder" href="#"> <a class="dropdown-item" id="button--deleteWorkOrder" href="#">
<span class="icon is-small"> <span class="icon is-small">
<i class="fas fa-trash has-text-danger" aria-hidden="true"></i> <i class="fas fa-trash has-text-danger" aria-hidden="true"></i>
</span> </span>
<span>Delete Work Order</span> <span>Delete Work Order</span>
</a> </a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@ -128,201 +128,197 @@
</div> </div>
</div> </div>
<div class="columns is-desktop"> <div class="columns">
<div class="column"> <div class="column">
<form id="form--workOrderEdit"> <form id="form--workOrderEdit">
<input id="workOrderEdit--workOrderId" name="workOrderId" type="hidden" value="<%= workOrder.workOrderId %>" /> <input id="workOrderEdit--workOrderId" name="workOrderId" type="hidden" value="<%= workOrder.workOrderId %>" />
<div class="panel"> <div class="panel">
<div class="panel-block is-block"> <div class="panel-block is-block">
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label> <label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label>
<div class="field has-addons"> <div class="field has-addons">
<div class="control is-expanded"> <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") %> /> <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>
<div class="control"> <div class="control">
<button class="button is-unlock-field-button" data-tooltip="Unlock Field" type="button" aria-label="Unlock Field"> <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> <span class="icon"><i class="fas fa-unlock" aria-hidden="true"></i></span>
</button> </button>
</div>
</div> </div>
<% if (isCreate) { %>
<p class="help">Leave work order number blank to autopopulate.</p>
<% } %>
</div> </div>
<div class="column"> <% if (isCreate) { %>
<div class="field"> <p class="help">Leave work order number blank to autopopulate.</p>
<label class="label" for="workOrderEdit--workOrderTypeId">Work Order Type</label> <% } %>
<div class="control"> </div>
<div class="select is-fullwidth"> <div class="column">
<select id="workOrderEdit--workOrderTypeId" name="workOrderTypeId" required <%= (isCreate ? " autofocus" : "") %>> <div class="field">
<% if (isCreate && workOrderTypes.length > 1) { %> <label class="label" for="workOrderEdit--workOrderTypeId">Work Order Type</label>
<option value="">(Select Type)</option> <div class="control">
<% } %> <div class="select is-fullwidth">
<% for (const workOrderType of workOrderTypes) { %> <select id="workOrderEdit--workOrderTypeId" name="workOrderTypeId" required <%= (isCreate ? " autofocus" : "") %>>
<option value="<%= workOrderType.workOrderTypeId %>" <%= (workOrder.workOrderTypeId === workOrderType.workOrderTypeId ? " selected" : "") %>> <% if (isCreate && workOrderTypes.length > 1) { %>
<%= workOrderType.workOrderType %> <option value="">(Select Type)</option>
</option> <% } %>
<% } %> <% for (const workOrderType of workOrderTypes) { %>
</select> <option value="<%= workOrderType.workOrderTypeId %>" <%= (workOrder.workOrderTypeId === workOrderType.workOrderTypeId ? " selected" : "") %>>
</div> <%= workOrderType.workOrderType %>
</option>
<% } %>
</select>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="field"> </div>
<label class="label" for="workOrderEdit--workOrderDescription">Description</label> <div class="field">
<div class="control"> <label class="label" for="workOrderEdit--workOrderDescription">Description</label>
<textarea class="textarea" id="workOrderEdit--workOrderDescription" name="workOrderDescription"><%= workOrder.workOrderDescription %></textarea> <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> </div>
<div class="columns"> <div class="column">
<div class="column"> <label class="label" for="workOrderEdit--workOrderCloseDateString"><%= configFunctions.getConfigProperty("aliases.workOrderCloseDate") %></label>
<div class="field"> <div class="field has-addons">
<label class="label" for="workOrderEdit--workOrderOpenDateString"><%= configFunctions.getConfigProperty("aliases.workOrderOpenDate") %></label> <div class="control is-expanded">
<div class="control has-icons-left"> <input class="input" id="workOrderEdit--workOrderCloseDateString" name="workOrderCloseDateString" type="date" value="<%= workOrder.workOrderCloseDateString %>" disabled readonly />
<% </div>
const currentDateString = dateTimeFunctions.dateToString(new Date()); <div class="control">
%> <button class="button is-light is-success" id="button--closeWorkOrder" type="button">
<input class="input" id="workOrderEdit--workOrderOpenDateString" name="workOrderOpenDateString" type="date" <span class="icon is-small"><i class="fas fa-stop-circle" aria-hidden="true"></i></span>
value="<%= workOrder.workOrderOpenDateString %>" <span>
max="<%= workOrder.workOrderOpenDateString > currentDateString ? workOrder.workOrderOpenDateString : currentDateString %>" Close
required />
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span> </span>
</div> </button>
</div> </div>
</div> </div>
<div class="column"> </div>
<label class="label" for="workOrderEdit--workOrderCloseDateString"><%= configFunctions.getConfigProperty("aliases.workOrderCloseDate") %></label> </div>
<div class="field has-addons"> </div>
<div class="control is-expanded"> </div>
<input class="input" id="workOrderEdit--workOrderCloseDateString" name="workOrderCloseDateString" type="date" value="<%= workOrder.workOrderCloseDateString %>" disabled readonly /> </form>
</div>
<div class="control"> <% if (!isCreate) { %>
<button class="button is-light is-success" id="button--closeWorkOrder" type="button"> <div class="panel mt-4">
<span class="icon is-small"><i class="fas fa-stop-circle" aria-hidden="true"></i></span> <div class="panel-heading">
<span> <div class="level">
Close <div class="level-left">
</span> <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> </button>
</div> </div>
</div> <div class="dropdown-menu">
</div> <div class="dropdown-content has-text-weight-normal">
</div> <a class="dropdown-item" id="button--addContract" href="#">
</div> <span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
</div> <span>Add a Related Contract</span>
</form> </a>
<a class="dropdown-item" id="button--addBurialSite" href="#">
<% if (!isCreate) { %> <span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<div class="panel mt-4"> <span>Add a Related Burial Site</span>
<h2 class="panel-heading">Related Burial Sites</h2> </a>
<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> </div>
<div class="dropdown-menu"> </div>
<div class="dropdown-content"> </div>
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>"> </div>
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span> </div>
<span>Download iCalendar</span> </div>
</a> </div>
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download> <div class="panel-block is-block">
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span> <%
<span>Export as CSV</span> const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
</a> %>
</div> <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> </div>
</div> </div>
@ -331,9 +327,34 @@
</div> </div>
</div> </div>
</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'); -%> <%- include('_footerA'); -%>

View File

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