linting
parent
4a1f6b42b0
commit
b2da12dac1
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"reject": ["puppeteer"]
|
||||
}
|
||||
|
|
@ -31,6 +31,15 @@ Sunrise CMS does not need an expensive server to run.
|
|||
No separate database server is required either.
|
||||
The whole application could run on a current, modest workstation.
|
||||
|
||||
### ✔️ Track Unlimited Cemeteries and Burial Sites
|
||||
|
||||
There are no limits to the number of records that can be tracked in Sunrise CMS.
|
||||
|
||||
### ✔️ Includes a Built-In Work Order System
|
||||
|
||||
In addition to tracking data related to cemetery plots,
|
||||
Sunrise CMS can also track work order activities, like grave maintenance.
|
||||
|
||||
### ✔️ Sunrise CMS is Free and Open Source
|
||||
|
||||
There's no cost to use it.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import type { Request, Response } from 'express';
|
||||
export default function handler(request: Request<unknown, unknown, {
|
||||
burialSiteStatus: string;
|
||||
orderNumber?: string | number;
|
||||
orderNumber?: number | string;
|
||||
}>, response: Response): Promise<void>;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ export default async function handler(request, response) {
|
|||
const burialSiteStatuses = await getBurialSiteStatuses();
|
||||
response.json({
|
||||
success: true,
|
||||
burialSiteStatusId,
|
||||
burialSiteStatuses
|
||||
burialSiteStatuses,
|
||||
burialSiteStatusId
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ export default async function handler(
|
|||
request: Request<
|
||||
unknown,
|
||||
unknown,
|
||||
{ burialSiteStatus: string; orderNumber?: string | number }
|
||||
{ burialSiteStatus: string; orderNumber?: number | string }
|
||||
>,
|
||||
response: Response
|
||||
): Promise<void> {
|
||||
|
|
@ -22,7 +22,8 @@ export default async function handler(
|
|||
|
||||
response.json({
|
||||
success: true,
|
||||
burialSiteStatusId,
|
||||
burialSiteStatuses
|
||||
|
||||
burialSiteStatuses,
|
||||
burialSiteStatusId
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import type { Request, Response } from 'express';
|
||||
export default function handler(request: Request<unknown, unknown, {
|
||||
burialSiteType: string;
|
||||
orderNumber?: string | number;
|
||||
orderNumber?: number | string;
|
||||
}>, response: Response): Promise<void>;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ export default async function handler(
|
|||
request: Request<
|
||||
unknown,
|
||||
unknown,
|
||||
{ burialSiteType: string; orderNumber?: string | number }
|
||||
{ burialSiteType: string; orderNumber?: number | string }
|
||||
>,
|
||||
response: Response
|
||||
): Promise<void> {
|
||||
|
|
@ -22,6 +22,7 @@ export default async function handler(
|
|||
|
||||
response.json({
|
||||
success: true,
|
||||
|
||||
burialSiteTypeId,
|
||||
burialSiteTypes
|
||||
})
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ export default async function handler(
|
|||
|
||||
response.json({
|
||||
success: true,
|
||||
|
||||
burialSiteTypeFieldId,
|
||||
burialSiteTypes
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ export default async function handler(request, response) {
|
|||
const allContractTypeFields = await getAllContractTypeFields();
|
||||
response.json({
|
||||
success: true,
|
||||
allContractTypeFields,
|
||||
contractTypeId,
|
||||
contractTypes,
|
||||
allContractTypeFields
|
||||
contractTypes
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,9 @@ export default async function handler(
|
|||
|
||||
response.json({
|
||||
success: true,
|
||||
|
||||
allContractTypeFields,
|
||||
contractTypeId,
|
||||
contractTypes,
|
||||
allContractTypeFields
|
||||
contractTypes
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,11 +192,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
<strong>Birth:</strong>
|
||||
</div>
|
||||
<div class="column">
|
||||
${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}<br />
|
||||
${cityssm.escapeHTML((interment.birthDateString ?? '') === ''
|
||||
? '(No Birth Date)'
|
||||
: interment.birthDateString ?? '')}<br />
|
||||
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="columns mb-0">
|
||||
<div class="column">
|
||||
<strong>Death:</strong>
|
||||
</div>
|
||||
|
|
@ -205,12 +207,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="columns mb-0">
|
||||
<div class="column">
|
||||
<strong>Age:</strong>
|
||||
</div>
|
||||
<div class="column">
|
||||
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}<br />
|
||||
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
|
||||
${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -291,11 +291,15 @@ declare const exports: Record<string, unknown>
|
|||
<strong>Birth:</strong>
|
||||
</div>
|
||||
<div class="column">
|
||||
${cityssm.escapeHTML(interment.birthDateString ?? '(No Birth Date)')}<br />
|
||||
${cityssm.escapeHTML(
|
||||
(interment.birthDateString ?? '') === ''
|
||||
? '(No Birth Date)'
|
||||
: interment.birthDateString ?? ''
|
||||
)}<br />
|
||||
${cityssm.escapeHTML(interment.birthPlace ?? '(No Birth Place)')}
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="columns mb-0">
|
||||
<div class="column">
|
||||
<strong>Death:</strong>
|
||||
</div>
|
||||
|
|
@ -304,12 +308,12 @@ declare const exports: Record<string, unknown>
|
|||
${cityssm.escapeHTML(interment.deathPlace ?? '(No Death Place)')}
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="columns mb-0">
|
||||
<div class="column">
|
||||
<strong>Age:</strong>
|
||||
</div>
|
||||
<div class="column">
|
||||
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}<br />
|
||||
${cityssm.escapeHTML((interment.deathAge ?? '') === '' ? '(No Age)' : interment.deathAge?.toString() ?? '')}
|
||||
${cityssm.escapeHTML(interment.deathAgePeriod ?? '')}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -103,10 +103,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
actualSeedString += 'a1';
|
||||
}
|
||||
return exports.randomColor({
|
||||
seed: actualSeedString + actualSeedString,
|
||||
hue: hues[actualSeedString.codePointAt(actualSeedString.length - 1) %
|
||||
hues.length],
|
||||
luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length]
|
||||
luminosity: luminosity[actualSeedString.codePointAt(actualSeedString.length - 2) % luminosity.length],
|
||||
seed: actualSeedString + actualSeedString
|
||||
});
|
||||
}
|
||||
/*
|
||||
|
|
@ -202,24 +202,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
* Declare sunrise
|
||||
*/
|
||||
const sunrise = {
|
||||
urlPrefix,
|
||||
apiKey: document.querySelector('main')?.dataset.apiKey ?? '',
|
||||
dynamicsGPIntegrationIsEnabled,
|
||||
urlPrefix,
|
||||
highlightMap,
|
||||
initializeUnlockFieldButtons,
|
||||
populateAliases,
|
||||
escapedAliases,
|
||||
populateAliases,
|
||||
getRandomColor,
|
||||
setUnsavedChanges,
|
||||
clearUnsavedChanges,
|
||||
hasUnsavedChanges,
|
||||
getMoveUpDownButtonFieldHTML,
|
||||
setUnsavedChanges,
|
||||
getLoadingParagraphHTML,
|
||||
getMoveUpDownButtonFieldHTML,
|
||||
getSearchResultsPagerHTML,
|
||||
getCemeteryURL,
|
||||
getBurialSiteURL,
|
||||
getFuneralHomeURL,
|
||||
getCemeteryURL,
|
||||
getContractURL,
|
||||
getFuneralHomeURL,
|
||||
getWorkOrderURL
|
||||
};
|
||||
exports.sunrise = sunrise;
|
||||
|
|
|
|||
|
|
@ -3,26 +3,26 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
|
|||
import type { Sunrise } from './types.js'
|
||||
|
||||
type RandomColorHue =
|
||||
| 'red'
|
||||
| 'orange'
|
||||
| 'yellow'
|
||||
| 'green'
|
||||
| 'blue'
|
||||
| 'purple'
|
||||
| 'pink'
|
||||
| 'green'
|
||||
| 'monochrome'
|
||||
type RandomColorLuminosity = 'bright' | 'light' | 'dark'
|
||||
| 'orange'
|
||||
| 'pink'
|
||||
| 'purple'
|
||||
| 'red'
|
||||
| 'yellow'
|
||||
type RandomColorLuminosity = 'bright' | 'dark' | 'light'
|
||||
|
||||
declare const cityssm: cityssmGlobal
|
||||
declare const exports: Record<string, unknown> & {
|
||||
aliases: Record<string, string>
|
||||
randomColor: (options?: {
|
||||
alpha?: number
|
||||
count?: number
|
||||
format?: 'hex' | 'hsl' | 'hsla' | 'hslArray' | 'rgb' | 'rgba' | 'rgbArray'
|
||||
hue?: RandomColorHue
|
||||
luminosity?: RandomColorLuminosity
|
||||
count?: number
|
||||
seed?: number | string
|
||||
format?: 'rgb' | 'rgba' | 'rgbArray' | 'hsl' | 'hsla' | 'hslArray' | 'hex'
|
||||
alpha?: number
|
||||
}) => string
|
||||
}
|
||||
;(() => {
|
||||
|
|
@ -55,7 +55,7 @@ declare const exports: Record<string, unknown> & {
|
|||
function highlightMap(
|
||||
mapContainerElement: HTMLElement,
|
||||
mapKey: string,
|
||||
contextualClass: 'success' | 'danger'
|
||||
contextualClass: 'danger' | 'success'
|
||||
): void {
|
||||
// Search for ID
|
||||
let svgId = mapKey
|
||||
|
|
@ -175,7 +175,6 @@ declare const exports: Record<string, unknown> & {
|
|||
}
|
||||
|
||||
return exports.randomColor({
|
||||
seed: actualSeedString + actualSeedString,
|
||||
hue: hues[
|
||||
(actualSeedString.codePointAt(actualSeedString.length - 1) as number) %
|
||||
hues.length
|
||||
|
|
@ -185,7 +184,8 @@ declare const exports: Record<string, unknown> & {
|
|||
(actualSeedString.codePointAt(
|
||||
actualSeedString.length - 2
|
||||
) as number) % luminosity.length
|
||||
]
|
||||
],
|
||||
seed: actualSeedString + actualSeedString
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -271,10 +271,10 @@ declare const exports: Record<string, unknown> & {
|
|||
|
||||
function getRecordURL(
|
||||
recordTypePlural:
|
||||
| 'cemeteries'
|
||||
| 'burialSites'
|
||||
| 'funeralHomes'
|
||||
| 'cemeteries'
|
||||
| 'contracts'
|
||||
| 'funeralHomes'
|
||||
| 'workOrders',
|
||||
recordId: number | string,
|
||||
edit: boolean,
|
||||
|
|
@ -342,29 +342,30 @@ declare const exports: Record<string, unknown> & {
|
|||
*/
|
||||
|
||||
const sunrise: Sunrise = {
|
||||
urlPrefix,
|
||||
apiKey: document.querySelector('main')?.dataset.apiKey ?? '',
|
||||
dynamicsGPIntegrationIsEnabled,
|
||||
urlPrefix,
|
||||
|
||||
highlightMap,
|
||||
initializeUnlockFieldButtons,
|
||||
|
||||
populateAliases,
|
||||
escapedAliases,
|
||||
populateAliases,
|
||||
|
||||
getRandomColor,
|
||||
|
||||
setUnsavedChanges,
|
||||
clearUnsavedChanges,
|
||||
hasUnsavedChanges,
|
||||
setUnsavedChanges,
|
||||
|
||||
getMoveUpDownButtonFieldHTML,
|
||||
getLoadingParagraphHTML,
|
||||
getMoveUpDownButtonFieldHTML,
|
||||
getSearchResultsPagerHTML,
|
||||
|
||||
getCemeteryURL,
|
||||
getBurialSiteURL,
|
||||
getFuneralHomeURL,
|
||||
getCemeteryURL,
|
||||
getContractURL,
|
||||
getFuneralHomeURL,
|
||||
getWorkOrderURL
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
export interface Sunrise {
|
||||
urlPrefix: string;
|
||||
apiKey: string;
|
||||
highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'success' | 'danger') => void;
|
||||
highlightMap: (mapContainerElement: HTMLElement, mapKey: string, contextualClass: 'danger' | 'success') => void;
|
||||
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void;
|
||||
populateAliases: (containerElement: HTMLElement) => void;
|
||||
escapedAliases: {
|
||||
ExternalReceiptNumber: string;
|
||||
externalReceiptNumber: string;
|
||||
WorkOrderOpenDate: string;
|
||||
workOrderOpenDate: string;
|
||||
WorkOrderCloseDate: string;
|
||||
workOrderCloseDate: string;
|
||||
WorkOrderOpenDate: string;
|
||||
workOrderOpenDate: string;
|
||||
};
|
||||
dynamicsGPIntegrationIsEnabled: boolean;
|
||||
getRandomColor: (seedString: string) => string;
|
||||
setUnsavedChanges: () => void;
|
||||
clearUnsavedChanges: () => void;
|
||||
hasUnsavedChanges: () => boolean;
|
||||
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string;
|
||||
setUnsavedChanges: () => void;
|
||||
getLoadingParagraphHTML: (captionText?: string) => string;
|
||||
getMoveUpDownButtonFieldHTML: (upButtonClassNames: string, downButtonClassNames: string, isSmall?: boolean) => string;
|
||||
getSearchResultsPagerHTML: (limit: number, offset: number, count: number) => string;
|
||||
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getContractURL: (contractId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
getWorkOrderURL: (workOrderId?: number | string, edit?: boolean, time?: boolean) => string;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ export interface Sunrise {
|
|||
highlightMap: (
|
||||
mapContainerElement: HTMLElement,
|
||||
mapKey: string,
|
||||
contextualClass: 'success' | 'danger'
|
||||
contextualClass: 'danger' | 'success'
|
||||
) => void
|
||||
|
||||
initializeUnlockFieldButtons: (containerElement: HTMLElement) => void
|
||||
|
|
@ -15,40 +15,52 @@ export interface Sunrise {
|
|||
escapedAliases: {
|
||||
ExternalReceiptNumber: string
|
||||
externalReceiptNumber: string
|
||||
WorkOrderOpenDate: string
|
||||
workOrderOpenDate: string
|
||||
WorkOrderCloseDate: string
|
||||
workOrderCloseDate: string
|
||||
WorkOrderOpenDate: string
|
||||
workOrderOpenDate: string
|
||||
}
|
||||
|
||||
dynamicsGPIntegrationIsEnabled: boolean
|
||||
|
||||
getRandomColor: (seedString: string) => string
|
||||
|
||||
setUnsavedChanges: () => void
|
||||
clearUnsavedChanges: () => void
|
||||
hasUnsavedChanges: () => boolean
|
||||
setUnsavedChanges: () => void
|
||||
|
||||
getLoadingParagraphHTML: (captionText?: string) => string
|
||||
getMoveUpDownButtonFieldHTML: (
|
||||
upButtonClassNames: string,
|
||||
downButtonClassNames: string,
|
||||
isSmall?: boolean
|
||||
) => string
|
||||
getLoadingParagraphHTML: (captionText?: string) => string
|
||||
getSearchResultsPagerHTML: (
|
||||
limit: number,
|
||||
offset: number,
|
||||
count: number
|
||||
) => string
|
||||
|
||||
getFuneralHomeURL: (funeralHomeId?: number | string, edit?: boolean, time?: boolean) => string
|
||||
getCemeteryURL: (cemeteryId?: number | string, edit?: boolean, time?: boolean) => string
|
||||
getBurialSiteURL: (burialSiteId?: number | string, edit?: boolean, time?: boolean) => string
|
||||
getBurialSiteURL: (
|
||||
burialSiteId?: number | string,
|
||||
edit?: boolean,
|
||||
time?: boolean
|
||||
) => string
|
||||
getCemeteryURL: (
|
||||
cemeteryId?: number | string,
|
||||
edit?: boolean,
|
||||
time?: boolean
|
||||
) => string
|
||||
getContractURL: (
|
||||
contractId?: number | string,
|
||||
edit?: boolean,
|
||||
time?: boolean
|
||||
) => string
|
||||
getFuneralHomeURL: (
|
||||
funeralHomeId?: number | string,
|
||||
edit?: boolean,
|
||||
time?: boolean
|
||||
) => string
|
||||
getWorkOrderURL: (
|
||||
workOrderId?: number | string,
|
||||
edit?: boolean,
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
<div class="dropdown is-right">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options">
|
||||
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
|
|
|
|||
|
|
@ -559,6 +559,7 @@ declare const exports: Record<string, unknown>
|
|||
conflictingMilestonePanelElement
|
||||
)
|
||||
},
|
||||
|
||||
onremoved() {
|
||||
bulmaJS.toggleHtmlClipped()
|
||||
}
|
||||
|
|
@ -622,7 +623,7 @@ declare const exports: Record<string, unknown>
|
|||
<div class="dropdown is-right">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button is-small" data-tooltip="Options" type="button" aria-label="Options">
|
||||
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-ellipsis-v" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
<span>Edit</span>
|
||||
</button>
|
||||
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
</td>`;
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ declare const exports: Record<string, unknown>
|
|||
<span>Edit</span>
|
||||
</button>
|
||||
<button class="button is-light is-danger button--delete" data-tooltip="Delete Comment" type="button" aria-label="Delete">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
</td>`
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
: `<ul class="fa-ul ml-5">${intermentsHTML}</ul>`}
|
||||
</td><td>
|
||||
<button class="button is-small is-light is-danger button--deleteContract" data-tooltip="Delete Relationship" type="button">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</td>`);
|
||||
rowElement
|
||||
|
|
@ -317,12 +317,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
${burialSite.burialSiteStatusId
|
||||
? cityssm.escapeHTML(burialSite.burialSiteStatus ?? '')
|
||||
: '<span class="has-text-grey">(No Status)</span>'}
|
||||
</td><td class="is-nowrap">
|
||||
</td><td class="has-text-right is-nowrap">
|
||||
<button class="button is-small is-light is-info button--editBurialSiteStatus" data-tooltip="Update Status" type="button">
|
||||
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
<button class="button is-small is-light is-danger button--deleteBurialSite" data-tooltip="Delete Relationship" type="button">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</td>`;
|
||||
rowElement
|
||||
|
|
@ -350,13 +350,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
document
|
||||
.querySelector('#button--addContract')
|
||||
?.addEventListener('click', () => {
|
||||
?.addEventListener('click', (addClickEvent) => {
|
||||
addClickEvent.preventDefault();
|
||||
let searchFormElement;
|
||||
let searchResultsContainerElement;
|
||||
function doSearch(event) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
event?.preventDefault();
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
searchResultsContainerElement.innerHTML =
|
||||
sunrise.getLoadingParagraphHTML('Searching...');
|
||||
|
|
@ -459,13 +458,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
}
|
||||
document
|
||||
.querySelector('#button--addBurialSite')
|
||||
?.addEventListener('click', () => {
|
||||
?.addEventListener('click', (addClickEvent) => {
|
||||
addClickEvent.preventDefault();
|
||||
let searchFormElement;
|
||||
let searchResultsContainerElement;
|
||||
function doSearch(event) {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
event?.preventDefault();
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
searchResultsContainerElement.innerHTML =
|
||||
sunrise.getLoadingParagraphHTML('Searching...');
|
||||
|
|
@ -490,7 +488,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
for (const burialSite of responseJSON.burialSites) {
|
||||
const rowElement = document.createElement('tr');
|
||||
rowElement.className = 'container--burialSite';
|
||||
rowElement.dataset.burialSiteId = burialSite.burialSiteId.toString();
|
||||
rowElement.dataset.burialSiteId =
|
||||
burialSite.burialSiteId.toString();
|
||||
rowElement.innerHTML = `<td class="has-text-centered">
|
||||
<button class="button is-small is-success button--addBurialSite" data-tooltip="Add" type="button" aria-label="Add">
|
||||
<i class="fas fa-plus" aria-hidden="true"></i>
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ declare const exports: Record<string, unknown>
|
|||
}
|
||||
</td><td>
|
||||
<button class="button is-small is-light is-danger button--deleteContract" data-tooltip="Delete Relationship" type="button">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</td>`
|
||||
)
|
||||
|
|
@ -502,12 +502,12 @@ declare const exports: Record<string, unknown>
|
|||
? cityssm.escapeHTML(burialSite.burialSiteStatus ?? '')
|
||||
: '<span class="has-text-grey">(No Status)</span>'
|
||||
}
|
||||
</td><td class="is-nowrap">
|
||||
</td><td class="has-text-right is-nowrap">
|
||||
<button class="button is-small is-light is-info button--editBurialSiteStatus" data-tooltip="Update Status" type="button">
|
||||
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
<button class="button is-small is-light is-danger button--deleteBurialSite" data-tooltip="Delete Relationship" type="button">
|
||||
<i class="fas fa-trash" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</td>`
|
||||
|
||||
|
|
@ -546,14 +546,14 @@ declare const exports: Record<string, unknown>
|
|||
|
||||
document
|
||||
.querySelector('#button--addContract')
|
||||
?.addEventListener('click', () => {
|
||||
?.addEventListener('click', (addClickEvent) => {
|
||||
addClickEvent.preventDefault()
|
||||
|
||||
let searchFormElement: HTMLFormElement
|
||||
let searchResultsContainerElement: HTMLElement
|
||||
|
||||
function doSearch(event?: Event): void {
|
||||
if (event) {
|
||||
event.preventDefault()
|
||||
}
|
||||
event?.preventDefault()
|
||||
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
searchResultsContainerElement.innerHTML =
|
||||
|
|
@ -703,6 +703,7 @@ declare const exports: Record<string, unknown>
|
|||
|
||||
searchFormElement.addEventListener('submit', doSearch)
|
||||
},
|
||||
|
||||
onremoved() {
|
||||
bulmaJS.toggleHtmlClipped()
|
||||
;(
|
||||
|
|
@ -728,14 +729,14 @@ declare const exports: Record<string, unknown>
|
|||
|
||||
document
|
||||
.querySelector('#button--addBurialSite')
|
||||
?.addEventListener('click', () => {
|
||||
?.addEventListener('click', (addClickEvent) => {
|
||||
addClickEvent.preventDefault()
|
||||
|
||||
let searchFormElement: HTMLFormElement
|
||||
let searchResultsContainerElement: HTMLElement
|
||||
|
||||
function doSearch(event?: Event): void {
|
||||
if (event) {
|
||||
event.preventDefault()
|
||||
}
|
||||
event?.preventDefault()
|
||||
|
||||
// eslint-disable-next-line no-unsanitized/property
|
||||
searchResultsContainerElement.innerHTML =
|
||||
|
|
@ -745,7 +746,9 @@ declare const exports: Record<string, unknown>
|
|||
`${sunrise.urlPrefix}/burialSites/doSearchBurialSites`,
|
||||
searchFormElement,
|
||||
(rawResponseJSON) => {
|
||||
const responseJSON = rawResponseJSON as { burialSites: BurialSite[] }
|
||||
const responseJSON = rawResponseJSON as {
|
||||
burialSites: BurialSite[]
|
||||
}
|
||||
|
||||
if (responseJSON.burialSites.length === 0) {
|
||||
searchResultsContainerElement.innerHTML = `<div class="message is-info">
|
||||
|
|
@ -769,7 +772,8 @@ declare const exports: Record<string, unknown>
|
|||
for (const burialSite of responseJSON.burialSites) {
|
||||
const rowElement = document.createElement('tr')
|
||||
rowElement.className = 'container--burialSite'
|
||||
rowElement.dataset.burialSiteId = burialSite.burialSiteId.toString()
|
||||
rowElement.dataset.burialSiteId =
|
||||
burialSite.burialSiteId.toString()
|
||||
|
||||
rowElement.innerHTML = `<td class="has-text-centered">
|
||||
<button class="button is-small is-success button--addBurialSite" data-tooltip="Add" type="button" aria-label="Add">
|
||||
|
|
@ -843,6 +847,7 @@ declare const exports: Record<string, unknown>
|
|||
|
||||
searchFormElement.addEventListener('submit', doSearch)
|
||||
},
|
||||
|
||||
onremoved() {
|
||||
bulmaJS.toggleHtmlClipped()
|
||||
;(
|
||||
|
|
|
|||
|
|
@ -127,8 +127,9 @@ async function importFromMasterCSV() {
|
|||
burialSiteNameSegment2,
|
||||
burialSiteNameSegment3,
|
||||
burialSiteNameSegment4,
|
||||
burialSiteTypeId,
|
||||
burialSiteStatusId: importIds.availableBurialSiteStatusId,
|
||||
burialSiteTypeId,
|
||||
burialSiteImage: '',
|
||||
cemeteryId,
|
||||
cemeterySvgId: '',
|
||||
burialSiteLatitude: '',
|
||||
|
|
|
|||
|
|
@ -322,10 +322,14 @@ async function importFromMasterCSV(): Promise<void> {
|
|||
burialSiteNameSegment2,
|
||||
burialSiteNameSegment3,
|
||||
burialSiteNameSegment4,
|
||||
burialSiteTypeId,
|
||||
|
||||
burialSiteStatusId: importIds.availableBurialSiteStatusId,
|
||||
burialSiteTypeId,
|
||||
|
||||
burialSiteImage: '',
|
||||
cemeteryId,
|
||||
cemeterySvgId: '',
|
||||
|
||||
burialSiteLatitude: '',
|
||||
burialSiteLongitude: ''
|
||||
},
|
||||
|
|
|
|||
|
|
@ -338,7 +338,20 @@
|
|||
<div class="columns">
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Geographic Location</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<div class="field">
|
||||
<label class="label" for="burialSite--burialSiteLatitude">Latitude</label>
|
||||
|
|
@ -363,7 +376,20 @@
|
|||
</div>
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Image</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-image" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<div class="field">
|
||||
<label class="label" for="burialSite--cemeterySvgId">
|
||||
|
|
|
|||
|
|
@ -101,7 +101,20 @@
|
|||
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Image</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-image" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<% if (burialSite.burialSiteImage) { %>
|
||||
<div class="image">
|
||||
|
|
|
|||
|
|
@ -125,7 +125,20 @@
|
|||
</div>
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Address</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">Address</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-location-arrow" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<div class="field">
|
||||
<label class="label" for="cemetery--cemeteryAddress1">Address</label>
|
||||
|
|
@ -181,7 +194,20 @@
|
|||
<div class="columns">
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Geographic Location</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<div class="field">
|
||||
<label class="label" for="cemetery--cemeteryLatitude">Latitude</label>
|
||||
|
|
@ -206,7 +232,20 @@
|
|||
</div>
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Image</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-image" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<div class="field">
|
||||
<label class="label" for="cemetery--cemeterySvg">SVG File</label>
|
||||
|
|
|
|||
|
|
@ -96,7 +96,20 @@
|
|||
<div class="columns">
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Geographic Location</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Geographic Location</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-map-marker-alt" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<% if (cemetery.cemeteryLatitude && cemetery.cemeteryLongitude) { %>
|
||||
<div id="cemetery--leaflet" data-cemetery-latitude="<%= cemetery.cemeteryLatitude %>" data-cemetery-longitude="<%= cemetery.cemeteryLongitude %>" style="height:300px"></div>
|
||||
|
|
@ -112,7 +125,20 @@
|
|||
</div>
|
||||
<div class="column">
|
||||
<div class="panel">
|
||||
<h2 class="panel-heading">Image</h2>
|
||||
<div class="panel-heading">
|
||||
<div class="level">
|
||||
<div class="level-left">
|
||||
<div class="level-item">
|
||||
<h2 class="title is-5 has-text-weight-bold has-text-white">Image</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<i class="fas fa-image" aria-hidden="true"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<% if (cemetery.cemeterySvg) { %>
|
||||
<% const imageURL = urlPrefix + "/internal/images/cemeteries/" + cemetery.cemeterySvg %>
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
<% if (workOrderPrints.length > 0) { %>
|
||||
<span class="is-pulled-right">
|
||||
<a class="button is-small" data-tooltip="Print Work Order" href="<%=urlPrefix %>/print/<%= workOrderPrints[0] %>/?workOrderId=<%= milestone.workOrderId %>" target="_blank" aria-label="Print">
|
||||
<i class="fas fa-print" aria-hidden="true"></i>
|
||||
<span class="icon is-small"><i class="fas fa-print" aria-hidden="true"></i></span>
|
||||
</a>
|
||||
</span>
|
||||
<% } %>
|
||||
|
|
@ -228,8 +228,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns is-desktop">
|
||||
<div class="column">
|
||||
<div class="columns is-multiline">
|
||||
<div class="column is-6-widescreen is-full-desktop is-full-tablet">
|
||||
<div class="panel">
|
||||
<a class="panel-block" href="<%= urlPrefix %>/reports">
|
||||
<div class="media">
|
||||
|
|
@ -246,7 +246,7 @@
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="column is-6-widescreen is-full-desktop is-full-tablet">
|
||||
<div class="panel">
|
||||
<a class="panel-block" href="https://cityssm.github.io/sunrise-cms/docs" rel="noopener noreferrer" target="_blank">
|
||||
<div class="media">
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<form id="form--funeralHome">
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
</table>
|
||||
<% } %>
|
||||
|
||||
|
||||
<p class="has-text-right is-italic is-8pt" style="position:absolute;bottom:10px;right:10px">
|
||||
<%
|
||||
const recordCreateDate = new Date(workOrder.recordCreate_timeMillis);
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="columns is-desktop">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<form id="form--workOrderEdit">
|
||||
<input id="workOrderEdit--workOrderId" name="workOrderId" type="hidden" value="<%= workOrder.workOrderId %>" />
|
||||
|
|
@ -218,7 +218,40 @@
|
|||
|
||||
<% if (!isCreate) { %>
|
||||
<div class="panel mt-4">
|
||||
<h2 class="panel-heading">Related Burial Sites</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">Related Burial Sites</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="level-item">
|
||||
<div class="dropdown is-right">
|
||||
<div class="dropdown-trigger">
|
||||
<button class="button is-success is-small" type="button">
|
||||
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
|
||||
<span>Add</span>
|
||||
<span class="icon is-small"><i class="fas fa-angle-down" aria-hidden="true"></i></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-menu">
|
||||
<div class="dropdown-content has-text-weight-normal">
|
||||
<a class="dropdown-item" id="button--addContract" href="#">
|
||||
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
|
||||
<span>Add a Related Contract</span>
|
||||
</a>
|
||||
<a class="dropdown-item" id="button--addBurialSite" href="#">
|
||||
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
|
||||
<span>Add a Related Burial Site</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-block is-block">
|
||||
<%
|
||||
const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
|
||||
|
|
@ -241,27 +274,62 @@
|
|||
</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>
|
||||
<% } %>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
<% if (!isCreate) { %>
|
||||
<div class="panel">
|
||||
|
|
@ -287,53 +355,6 @@
|
|||
<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 class="dropdown-menu">
|
||||
<div class="dropdown-content">
|
||||
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
|
||||
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
|
||||
<span>Download iCalendar</span>
|
||||
</a>
|
||||
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download>
|
||||
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
|
||||
<span>Export as CSV</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
|
||||
|
||||
<%- include('_footerA'); -%>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue