smaller screen optimizations

deepsource-autofix-76c6eb20
Dan Gowans 2023-03-29 15:33:42 -04:00
parent d38bdf70a2
commit 80c7fe0607
33 changed files with 1347 additions and 1371 deletions

View File

@ -42,18 +42,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
let occupantsHTML = '';
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
occupantsHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
'<li class="has-tooltip-right" data-tooltip="' +
cityssm.escapeHTML((_a = occupant.lotOccupantType) !== null && _a !== void 0 ? _a : '') +
'">' +
('<i class="fas fa-fw fa-' +
('<span class="fa-li"><i class="fas fa-fw fa-' +
cityssm.escapeHTML(((_b = occupant.fontAwesomeIconClass) !== null && _b !== void 0 ? _b : '') === ''
? 'user'
: occupant.fontAwesomeIconClass) +
'" aria-hidden="true"></i> ') +
'" aria-hidden="true"></i></span> ') +
cityssm.escapeHTML((_c = occupant.occupantName) !== null && _c !== void 0 ? _c : '') +
' ' +
cityssm.escapeHTML((_d = occupant.occupantFamilyName) !== null && _d !== void 0 ? _d : '') +
'</span><br />';
'</li>';
}
const feeTotal = ((_f = (_e = lotOccupancy.lotOccupancyFees) === null || _e === void 0 ? void 0 : _e.reduce((soFar, currentFee) => {
var _a, _b, _c;
@ -107,7 +107,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
? lotOccupancy.occupancyEndDateString
: '<span class="has-text-grey">(No End Date)</span>') +
'</td>') +
('<td>' + occupantsHTML + '</td>') +
('<td>' +
(occupantsHTML === ''
? ''
: '<ul class="fa-ul">' + occupantsHTML + '</ul>') +
'</td>') +
('<td>' + feeIconHTML + '</td>') +
'<td>' +
(lotOccupancy.printEJS

View File

@ -72,20 +72,20 @@ declare const cityssm: cityssmGlobal
for (const occupant of lotOccupancy.lotOccupancyOccupants!) {
occupantsHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
'<li class="has-tooltip-right" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType ?? '') +
'">' +
('<i class="fas fa-fw fa-' +
('<span class="fa-li"><i class="fas fa-fw fa-' +
cityssm.escapeHTML(
(occupant.fontAwesomeIconClass ?? '') === ''
? 'user'
: occupant.fontAwesomeIconClass!
) +
'" aria-hidden="true"></i> ') +
'" aria-hidden="true"></i></span> ') +
cityssm.escapeHTML(occupant.occupantName ?? '') +
' ' +
cityssm.escapeHTML(occupant.occupantFamilyName ?? '') +
'</span><br />'
'</li>'
}
const feeTotal = (
@ -153,10 +153,14 @@ declare const cityssm: cityssmGlobal
('<td>' + lotOccupancy.occupancyStartDateString! + '</td>') +
('<td>' +
(lotOccupancy.occupancyEndDate
? lotOccupancy.occupancyEndDateString
? lotOccupancy.occupancyEndDateString!
: '<span class="has-text-grey">(No End Date)</span>') +
'</td>') +
('<td>' + occupantsHTML + '</td>') +
('<td>' +
(occupantsHTML === ''
? ''
: '<ul class="fa-ul">' + occupantsHTML + '</ul>') +
'</td>') +
('<td>' + feeIconHTML + '</td>') +
'<td>' +
(lotOccupancy.printEJS

View File

@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const limit = Number.parseInt(document.querySelector('#searchFilter--limit').value, 10);
const offsetElement = document.querySelector('#searchFilter--offset');
function renderLots(responseJSON) {
var _a, _b, _c, _d;
var _a, _b, _c, _d, _e;
if (responseJSON.lots.length === 0) {
searchResultsContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no ${los.escapedAliases.lots} that meet the search criteria.</p>
@ -40,7 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
? cityssm.escapeHTML(lot.lotStatus)
: '<span class="has-text-grey">(No Status)</span>') +
'<br />' +
(lot.lotOccupancyCount > 0
(((_c = lot.lotOccupancyCount) !== null && _c !== void 0 ? _c : 0) > 0
? '<span class="is-size-7">Currently Occupied</span>'
: '') +
'</td>') +
@ -58,10 +58,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
searchResultsContainerElement
.querySelector('table')
.append(resultsTbodyElement);
(_c = searchResultsContainerElement
.querySelector("button[data-page='previous']")) === null || _c === void 0 ? void 0 : _c.addEventListener('click', previousAndGetLots);
(_d = searchResultsContainerElement
.querySelector("button[data-page='next']")) === null || _d === void 0 ? void 0 : _d.addEventListener('click', nextAndGetLots);
.querySelector("button[data-page='previous']")) === null || _d === void 0 ? void 0 : _d.addEventListener('click', previousAndGetLots);
(_e = searchResultsContainerElement
.querySelector("button[data-page='next']")) === null || _e === void 0 ? void 0 : _e.addEventListener('click', nextAndGetLots);
}
function getLots() {
searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML(`Loading ${los.escapedAliases.Lots}...`);

View File

@ -66,7 +66,7 @@ declare const cityssm: cityssmGlobal
? cityssm.escapeHTML(lot.lotStatus!)
: '<span class="has-text-grey">(No Status)</span>') +
'<br />' +
(lot.lotOccupancyCount! > 0
((lot.lotOccupancyCount ?? 0) > 0
? '<span class="is-size-7">Currently Occupied</span>'
: '') +
'</td>') +

View File

@ -158,7 +158,7 @@ declare const bulmaJS: BulmaJS
})
// Get the datepicker container element
const datepickerElement = containerElement.querySelector('#' + cal._id)!
const datepickerElement = containerElement.querySelector('#' + (cal._id as string))!
// Override the previous and next month button styles
const datePickerNavButtonElements = datepickerElement.querySelectorAll(

View File

@ -251,22 +251,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = workOrderLotOccupancies.length.toString();
if (workOrderLotOccupancies.length === 0) {
occupanciesContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`;
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`;
return;
}
occupanciesContainerElement.innerHTML = `<table class="table is-fullwidth is-striped is-hoverable">
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`;
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`;
const currentDateString = cityssm.dateToString(new Date());
for (const lotOccupancy of workOrderLotOccupancies) {
const rowElement = document.createElement('tr');
@ -318,6 +318,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
else {
rowElement.insertAdjacentHTML('beforeend', `<td><span class="has-text-grey">(No ${los.escapedAliases.Lot})</span></td>`);
}
let occupantsHTML = '';
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
occupantsHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML(occupant.lotOccupantType)}">
<span class="fa-li">
<i class="fas fa-fw fa-${cityssm.escapeHTML(((_c = occupant.fontAwesomeIconClass) !== null && _c !== void 0 ? _c : '') === ''
? 'user'
: occupant.fontAwesomeIconClass)}" aria-label="${los.escapedAliases.Occupant}"></i>
</span>
${cityssm.escapeHTML(occupant.occupantName)}
${cityssm.escapeHTML(occupant.occupantFamilyName)}
</li>`;
}
rowElement.insertAdjacentHTML('beforeend', '<td>' +
lotOccupancy.occupancyStartDateString +
'</td>' +
@ -328,27 +341,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
'</td>') +
('<td>' +
(lotOccupancy.lotOccupancyOccupants.length === 0
? '<span class="has-text-grey">(No ' +
los.escapedAliases.Occupants +
')</span>'
: (_c = lotOccupancy.lotOccupancyOccupants) === null || _c === void 0 ? void 0 : _c.reduce((soFar, occupant) => {
var _a;
return (soFar +
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType) +
'">' +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(((_a = occupant.fontAwesomeIconClass) !== null && _a !== void 0 ? _a : '') === ''
? 'user'
: occupant.fontAwesomeIconClass) +
'" aria-label="' +
los.escapedAliases.Occupant +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName) +
' ' +
cityssm.escapeHTML(occupant.occupantFamilyName) +
'</span><br />');
}, '')) +
? `<span class="has-text-grey">(No ${los.escapedAliases.Occupants})</span>`
: `<ul class="fa-ul ml-5">${occupantsHTML}</ul>`) +
'</td>') +
('<td>' +
'<button class="button is-small is-light is-danger button--deleteLotOccupancy" data-tooltip="Delete Relationship" type="button">' +
@ -597,7 +591,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
.occupantFamilyName) +
(lotOccupancy.lotOccupancyOccupants.length > 1
? ' plus ' +
(lotOccupancy.lotOccupancyOccupants.length - 1)
(lotOccupancy.lotOccupancyOccupants.length - 1).toString()
: '')) +
'</td>'));
rowElement

View File

@ -95,22 +95,22 @@ function renderRelatedOccupancies() {
document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = workOrderLotOccupancies.length.toString();
if (workOrderLotOccupancies.length === 0) {
occupanciesContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`;
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`;
return;
}
occupanciesContainerElement.innerHTML = `<table class="table is-fullwidth is-striped is-hoverable">
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`;
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`;
const currentDateString = cityssm.dateToString(new Date());
for (const lotOccupancy of workOrderLotOccupancies) {
const rowElement = document.createElement('tr');
@ -162,6 +162,19 @@ function renderRelatedOccupancies() {
else {
rowElement.insertAdjacentHTML('beforeend', `<td><span class="has-text-grey">(No ${los.escapedAliases.Lot})</span></td>`);
}
let occupantsHTML = '';
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
occupantsHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML(occupant.lotOccupantType)}">
<span class="fa-li">
<i class="fas fa-fw fa-${cityssm.escapeHTML(((_c = occupant.fontAwesomeIconClass) !== null && _c !== void 0 ? _c : '') === ''
? 'user'
: occupant.fontAwesomeIconClass)}" aria-label="${los.escapedAliases.Occupant}"></i>
</span>
${cityssm.escapeHTML(occupant.occupantName)}
${cityssm.escapeHTML(occupant.occupantFamilyName)}
</li>`;
}
rowElement.insertAdjacentHTML('beforeend', '<td>' +
lotOccupancy.occupancyStartDateString +
'</td>' +
@ -172,27 +185,8 @@ function renderRelatedOccupancies() {
'</td>') +
('<td>' +
(lotOccupancy.lotOccupancyOccupants.length === 0
? '<span class="has-text-grey">(No ' +
los.escapedAliases.Occupants +
')</span>'
: (_c = lotOccupancy.lotOccupancyOccupants) === null || _c === void 0 ? void 0 : _c.reduce((soFar, occupant) => {
var _a;
return (soFar +
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType) +
'">' +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(((_a = occupant.fontAwesomeIconClass) !== null && _a !== void 0 ? _a : '') === ''
? 'user'
: occupant.fontAwesomeIconClass) +
'" aria-label="' +
los.escapedAliases.Occupant +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName) +
' ' +
cityssm.escapeHTML(occupant.occupantFamilyName) +
'</span><br />');
}, '')) +
? `<span class="has-text-grey">(No ${los.escapedAliases.Occupants})</span>`
: `<ul class="fa-ul ml-5">${occupantsHTML}</ul>`) +
'</td>') +
('<td>' +
'<button class="button is-small is-light is-danger button--deleteLotOccupancy" data-tooltip="Delete Relationship" type="button">' +
@ -441,7 +435,7 @@ function doAddLotOccupancy(clickEvent) {
.occupantFamilyName) +
(lotOccupancy.lotOccupancyOccupants.length > 1
? ' plus ' +
(lotOccupancy.lotOccupancyOccupants.length - 1)
(lotOccupancy.lotOccupancyOccupants.length - 1).toString()
: '')) +
'</td>'));
rowElement

View File

@ -155,24 +155,24 @@ function renderRelatedOccupancies(): void {
if (workOrderLotOccupancies.length === 0) {
occupanciesContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`
<p class="message-body">There are no ${los.escapedAliases.occupancies} associated with this work order.</p>
</div>`
return
}
occupanciesContainerElement.innerHTML = `<table class="table is-fullwidth is-striped is-hoverable">
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`
<thead><tr>
<th class="has-width-1"></th>
<th>${los.escapedAliases.Occupancy} Type</th>
<th>${los.escapedAliases.Lot}</th>
<th>${los.escapedAliases.OccupancyStartDate}</th>
<th>End Date</th>
<th>${los.escapedAliases.Occupants}</th>
<th class="has-width-1"></th>
</tr></thead>
<tbody></tbody>
</table>`
const currentDateString = cityssm.dateToString(new Date())
@ -239,42 +239,37 @@ function renderRelatedOccupancies(): void {
)
}
let occupantsHTML = ''
for (const occupant of lotOccupancy.lotOccupancyOccupants!) {
occupantsHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML(occupant.lotOccupantType!)}">
<span class="fa-li">
<i class="fas fa-fw fa-${cityssm.escapeHTML(
(occupant.fontAwesomeIconClass ?? '') === ''
? 'user'
: occupant.fontAwesomeIconClass!
)}" aria-label="${los.escapedAliases.Occupant}"></i>
</span>
${cityssm.escapeHTML(occupant.occupantName!)}
${cityssm.escapeHTML(occupant.occupantFamilyName!)}
</li>`
}
rowElement.insertAdjacentHTML(
'beforeend',
'<td>' +
lotOccupancy.occupancyStartDateString +
lotOccupancy.occupancyStartDateString! +
'</td>' +
('<td>' +
(lotOccupancy.occupancyEndDate
? lotOccupancy.occupancyEndDateString
? lotOccupancy.occupancyEndDateString!
: '<span class="has-text-grey">(No End Date)</span>') +
'</td>') +
('<td>' +
(lotOccupancy.lotOccupancyOccupants!.length === 0
? '<span class="has-text-grey">(No ' +
los.escapedAliases.Occupants +
')</span>'
: lotOccupancy.lotOccupancyOccupants?.reduce((soFar, occupant) => {
return (
soFar +
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType!) +
'">' +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(
(occupant.fontAwesomeIconClass ?? '') === ''
? 'user'
: occupant.fontAwesomeIconClass!
) +
'" aria-label="' +
los.escapedAliases.Occupant +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName!) +
' ' +
cityssm.escapeHTML(occupant.occupantFamilyName!) +
'</span><br />'
)
}, '')) +
? `<span class="has-text-grey">(No ${los.escapedAliases.Occupants})</span>`
: `<ul class="fa-ul ml-5">${occupantsHTML}</ul>`) +
'</td>') +
('<td>' +
'<button class="button is-small is-light is-danger button--deleteLotOccupancy" data-tooltip="Delete Relationship" type="button">' +
@ -631,7 +626,7 @@ document
) +
(lotOccupancy.lotOccupancyOccupants!.length > 1
? ' plus ' +
(lotOccupancy.lotOccupancyOccupants!.length - 1)
(lotOccupancy.lotOccupancyOccupants!.length - 1).toString()
: '')) +
'</td>')
)

View File

@ -42,31 +42,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
let lotOccupancyHTML = '';
for (const lot of milestone.workOrderLots) {
lotOccupancyHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML((_a = lot.mapName) !== null && _a !== void 0 ? _a : '') +
'">' +
'<i class="fas fa-vector-square" aria-label="' +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML((_b = lot.lotName) !== null && _b !== void 0 ? _b : '') +
'</span>' +
'<br />';
lotOccupancyHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML((_a = lot.mapName) !== null && _a !== void 0 ? _a : '')}">
<span class="fa-li">
<i class="fas fa-vector-square"
aria-label="${los.escapedAliases.Lot}"></i>
</span>
${cityssm.escapeHTML((_b = lot.lotName) !== null && _b !== void 0 ? _b : '')}
</li>`;
}
for (const lotOccupancy of milestone.workOrderLotOccupancies) {
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
lotOccupancyHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML((_c = occupant.lotOccupantType) !== null && _c !== void 0 ? _c : '') +
'">' +
'<i class="fas fa-user" aria-label="' +
los.escapedAliases.Occupancy +
'"></i> ' +
cityssm.escapeHTML((_d = occupant.occupantName) !== null && _d !== void 0 ? _d : '') +
' ' +
cityssm.escapeHTML((_e = occupant.occupantFamilyName) !== null && _e !== void 0 ? _e : '') +
'</span>' +
'<br />';
lotOccupancyHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML((_c = occupant.lotOccupantType) !== null && _c !== void 0 ? _c : '')}">
<span class="fa-li">
<i class="fas fa-user"
aria-label="${los.escapedAliases.Occupancy}"></i>
</span>
${cityssm.escapeHTML((_d = occupant.occupantName) !== null && _d !== void 0 ? _d : '')}
${cityssm.escapeHTML((_e = occupant.occupantFamilyName) !== null && _e !== void 0 ? _e : '')}
</li>`;
}
}
panelBlockElement.innerHTML =
@ -104,7 +99,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML((_h = milestone.workOrderDescription) !== null && _h !== void 0 ? _h : '') +
'</span>' +
'</div>') +
('<div class="column is-size-7">' + lotOccupancyHTML + '</div>') +
('<div class="column is-size-7">' +
(lotOccupancyHTML === ''
? ''
: '<ul class="fa-ul ml-4">' + lotOccupancyHTML + '</ul>') +
'</div>') +
'</div>';
currentPanelElement.append(panelBlockElement);
}

View File

@ -78,32 +78,29 @@ declare const cityssm: cityssmGlobal
let lotOccupancyHTML = ''
for (const lot of milestone.workOrderLots!) {
lotOccupancyHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(lot.mapName ?? '') +
'">' +
'<i class="fas fa-vector-square" aria-label="' +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(lot.lotName ?? '') +
'</span>' +
'<br />'
lotOccupancyHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML(lot.mapName ?? '')}">
<span class="fa-li">
<i class="fas fa-vector-square"
aria-label="${los.escapedAliases.Lot}"></i>
</span>
${cityssm.escapeHTML(lot.lotName ?? '')}
</li>`
}
for (const lotOccupancy of milestone.workOrderLotOccupancies!) {
for (const occupant of lotOccupancy.lotOccupancyOccupants!) {
lotOccupancyHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType ?? '') +
'">' +
'<i class="fas fa-user" aria-label="' +
los.escapedAliases.Occupancy +
'"></i> ' +
cityssm.escapeHTML(occupant.occupantName ?? '') +
' ' +
cityssm.escapeHTML(occupant.occupantFamilyName ?? '') +
'</span>' +
'<br />'
lotOccupancyHTML += `<li class="has-tooltip-left"
data-tooltip="${cityssm.escapeHTML(
occupant.lotOccupantType ?? ''
)}">
<span class="fa-li">
<i class="fas fa-user"
aria-label="${los.escapedAliases.Occupancy}"></i>
</span>
${cityssm.escapeHTML(occupant.occupantName ?? '')}
${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')}
</li>`
}
}
@ -142,7 +139,11 @@ declare const cityssm: cityssmGlobal
cityssm.escapeHTML(milestone.workOrderDescription ?? '') +
'</span>' +
'</div>') +
('<div class="column is-size-7">' + lotOccupancyHTML + '</div>') +
('<div class="column is-size-7">' +
(lotOccupancyHTML === ''
? ''
: '<ul class="fa-ul ml-4">' + lotOccupancyHTML + '</ul>') +
'</div>') +
'</div>'
;(currentPanelElement as HTMLElement).append(panelBlockElement)
}
@ -162,10 +163,14 @@ declare const cityssm: cityssmGlobal
cityssm.postJSON(
los.urlPrefix + '/workOrders/doGetWorkOrderMilestones',
workOrderSearchFiltersFormElement,
(responseJSON: {
workOrderMilestones: recordTypes.WorkOrderMilestone[]
}) => {
renderMilestones(responseJSON.workOrderMilestones)
(responseJSON) => {
renderMilestones(
(
responseJSON as {
workOrderMilestones: recordTypes.WorkOrderMilestone[]
}
).workOrderMilestones
)
}
)
}

View File

@ -12,45 +12,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
function renderWorkOrders(responseJSON) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
if (responseJSON.workOrders.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no work orders that meet the search criteria.</p>' +
'</div>';
searchResultsContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no work orders that meet the search criteria.</p>
</div>`;
return;
}
const resultsTbodyElement = document.createElement('tbody');
for (const workOrder of responseJSON.workOrders) {
let relatedHTML = '';
for (const lot of workOrder.workOrderLots) {
relatedHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML((_a = lot.mapName) !== null && _a !== void 0 ? _a : '') +
'">' +
'<i class="fas fa-fw fa-vector-square" aria-label="' +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(((_b = lot.lotName) !== null && _b !== void 0 ? _b : '') === ''
? '(No ' + los.escapedAliases.Lot + ' Name)'
: lot.lotName) +
'</span><br />';
relatedHTML += `<li class="has-tooltip-right"
data-tooltip="${cityssm.escapeHTML((_a = lot.mapName) !== null && _a !== void 0 ? _a : '')}">
<span class="fa-li">
<i class="fas fa-fw fa-vector-square"
aria-label="${los.escapedAliases.Lot}"></i>
</span>
${cityssm.escapeHTML(((_b = lot.lotName) !== null && _b !== void 0 ? _b : '') === ''
? '(No ' + los.escapedAliases.Lot + ' Name)'
: lot.lotName)}
</li>`;
}
for (const occupancy of workOrder.workOrderLotOccupancies) {
for (const occupant of occupancy.lotOccupancyOccupants) {
relatedHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML((_c = occupant.lotOccupantType) !== null && _c !== void 0 ? _c : '') +
'">' +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(((_d = occupant.fontAwesomeIconClass) !== null && _d !== void 0 ? _d : '') === ''
? 'user'
: occupant.fontAwesomeIconClass) +
'" aria-label="' +
los.escapedAliases.occupant +
'"></i> ' +
cityssm.escapeHTML(((_e = occupant.occupantName) !== null && _e !== void 0 ? _e : '') === '' && ((_f = occupant.occupantFamilyName) !== null && _f !== void 0 ? _f : '') === ''
? '(No Name)'
: occupant.occupantName + ' ' + occupant.occupantFamilyName) +
'</span><br />';
relatedHTML += `<li class="has-tooltip-right"
data-tooltip="${cityssm.escapeHTML((_c = occupant.lotOccupantType) !== null && _c !== void 0 ? _c : '')}">
<span class="fa-li">
<i class="fas fa-fw fa-${cityssm.escapeHTML(((_d = occupant.fontAwesomeIconClass) !== null && _d !== void 0 ? _d : '') === ''
? 'user'
: occupant.fontAwesomeIconClass)}" aria-label="${los.escapedAliases.occupant}"></i></span>
${cityssm.escapeHTML(((_e = occupant.occupantName) !== null && _e !== void 0 ? _e : '') === '' &&
((_f = occupant.occupantFamilyName) !== null && _f !== void 0 ? _f : '') === ''
? '(No Name)'
: occupant.occupantName + ' ' + occupant.occupantFamilyName)}
</li>`;
}
}
resultsTbodyElement.insertAdjacentHTML('beforeend', '<tr>' +
@ -58,9 +52,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
'<a class="has-text-weight-bold" href="' +
los.getWorkOrderURL(workOrder.workOrderId) +
'">' +
(workOrder.workOrderNumber.trim()
? cityssm.escapeHTML((_g = workOrder.workOrderNumber) !== null && _g !== void 0 ? _g : '')
: '(No Number)') +
(workOrder.workOrderNumber.trim() === ''
? '(No Number)'
: cityssm.escapeHTML((_g = workOrder.workOrderNumber) !== null && _g !== void 0 ? _g : '')) +
'</a>' +
'</td>') +
('<td>' +
@ -70,37 +64,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML((_j = workOrder.workOrderDescription) !== null && _j !== void 0 ? _j : '') +
'</span>' +
'</td>') +
('<td class="is-nowrap"><span class="is-size-7">' +
relatedHTML +
'</span></td>') +
('<td class="is-nowrap">' +
('<span class="has-tooltip-left" data-tooltip="' +
('<td>' +
(relatedHTML === ''
? ''
: '<ul class="fa-ul ml-5 is-size-7">' + relatedHTML + '</ul>') +
'</td>') +
('<td>' +
'<ul class="fa-ul ml-5 is-size-7">' +
('<li class="has-tooltip-right" data-tooltip="' +
los.escapedAliases.WorkOrderOpenDate +
'">' +
'<span class="fa-li">' +
'<i class="fas fa-fw fa-play" aria-label="' +
los.escapedAliases.WorkOrderOpenDate +
'"></i> ' +
'"></i></span> ' +
workOrder.workOrderOpenDateString +
'</span><br />') +
('<span class="has-tooltip-left" data-tooltip="' +
'</li>') +
('<li class="has-tooltip-right" data-tooltip="' +
los.escapedAliases.WorkOrderCloseDate +
'">' +
'<span class="fa-li">' +
'<i class="fas fa-fw fa-stop" aria-label="' +
los.escapedAliases.WorkOrderCloseDate +
'"></i> ' +
'"></i></span> ' +
(workOrder.workOrderCloseDate
? workOrder.workOrderCloseDateString
: '<span class="has-text-grey">(No ' +
los.escapedAliases.WorkOrderCloseDate +
')</span>') +
'</span>') +
'</li>') +
'</ul>' +
'</td>') +
('<td>' +
(workOrder.workOrderMilestoneCount === 0
? '-'
: workOrder.workOrderMilestoneCompletionCount +
: workOrder.workOrderMilestoneCompletionCount.toString() +
' / ' +
workOrder.workOrderMilestoneCount) +
workOrder.workOrderMilestoneCount.toString()) +
'</td>') +
(workOrderPrints.length > 0
? '<td>' +
@ -109,7 +109,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
'/print/' +
workOrderPrints[0] +
'/?workOrderId=' +
workOrder.workOrderId +
workOrder.workOrderId.toString() +
'" target="_blank">' +
'<i class="fas fa-print" aria-label="Print"></i>' +
'</a>' +
@ -117,17 +117,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
: '') +
'</tr>');
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
'<thead><tr>' +
'<th>Work Order Number</th>' +
'<th>Description</th>' +
'<th>Related</th>' +
'<th>Date</th>' +
'<th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>' +
(workOrderPrints.length > 0 ? '<th class="has-width-1"></th>' : '') +
'</tr></thead>' +
'<table>';
searchResultsContainerElement.innerHTML = `<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">
<thead><tr>
<th>Work Order Number</th>
<th>Description</th>
<th>Related</th>
<th>Date</th>
<th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>
${workOrderPrints.length > 0 ? '<th class="has-width-1"></th>' : ''}
</tr></thead>
<table>`;
searchResultsContainerElement.insertAdjacentHTML('beforeend', los.getSearchResultsPagerHTML(limit, responseJSON.offset, responseJSON.count));
searchResultsContainerElement
.querySelector('table')

View File

@ -35,10 +35,9 @@ declare const cityssm: cityssmGlobal
workOrders: recordTypes.WorkOrder[]
}): void {
if (responseJSON.workOrders.length === 0) {
searchResultsContainerElement.innerHTML =
'<div class="message is-info">' +
'<p class="message-body">There are no work orders that meet the search criteria.</p>' +
'</div>'
searchResultsContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no work orders that meet the search criteria.</p>
</div>`
return
}
@ -49,42 +48,39 @@ declare const cityssm: cityssmGlobal
let relatedHTML = ''
for (const lot of workOrder.workOrderLots!) {
relatedHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(lot.mapName ?? '') +
'">' +
'<i class="fas fa-fw fa-vector-square" aria-label="' +
los.escapedAliases.Lot +
'"></i> ' +
cityssm.escapeHTML(
relatedHTML += `<li class="has-tooltip-right"
data-tooltip="${cityssm.escapeHTML(lot.mapName ?? '')}">
<span class="fa-li">
<i class="fas fa-fw fa-vector-square"
aria-label="${los.escapedAliases.Lot}"></i>
</span>
${cityssm.escapeHTML(
(lot.lotName ?? '') === ''
? '(No ' + los.escapedAliases.Lot + ' Name)'
: lot.lotName!
) +
'</span><br />'
)}
</li>`
}
for (const occupancy of workOrder.workOrderLotOccupancies!) {
for (const occupant of occupancy.lotOccupancyOccupants!) {
relatedHTML +=
'<span class="has-tooltip-left" data-tooltip="' +
cityssm.escapeHTML(occupant.lotOccupantType ?? '') +
'">' +
'<i class="fas fa-fw fa-' +
cityssm.escapeHTML(
(occupant.fontAwesomeIconClass ?? '') === ''
? 'user'
: occupant.fontAwesomeIconClass!
) +
'" aria-label="' +
los.escapedAliases.occupant +
'"></i> ' +
cityssm.escapeHTML(
(occupant.occupantName ?? '') === '' && (occupant.occupantFamilyName ?? '') === ''
relatedHTML += `<li class="has-tooltip-right"
data-tooltip="${cityssm.escapeHTML(
occupant.lotOccupantType ?? ''
)}">
<span class="fa-li">
<i class="fas fa-fw fa-${cityssm.escapeHTML(
(occupant.fontAwesomeIconClass ?? '') === ''
? 'user'
: occupant.fontAwesomeIconClass!
)}" aria-label="${los.escapedAliases.occupant}"></i></span>
${cityssm.escapeHTML(
(occupant.occupantName ?? '') === '' &&
(occupant.occupantFamilyName ?? '') === ''
? '(No Name)'
: occupant.occupantName! + ' ' + occupant.occupantFamilyName!
) +
'</span><br />'
)}
</li>`
}
}
@ -95,9 +91,9 @@ declare const cityssm: cityssmGlobal
'<a class="has-text-weight-bold" href="' +
los.getWorkOrderURL(workOrder.workOrderId) +
'">' +
(workOrder.workOrderNumber!.trim()
? cityssm.escapeHTML(workOrder.workOrderNumber ?? '')
: '(No Number)') +
(workOrder.workOrderNumber!.trim() === ''
? '(No Number)'
: cityssm.escapeHTML(workOrder.workOrderNumber ?? '')) +
'</a>' +
'</td>') +
('<td>' +
@ -107,37 +103,43 @@ declare const cityssm: cityssmGlobal
cityssm.escapeHTML(workOrder.workOrderDescription ?? '') +
'</span>' +
'</td>') +
('<td class="is-nowrap"><span class="is-size-7">' +
relatedHTML +
'</span></td>') +
('<td class="is-nowrap">' +
('<span class="has-tooltip-left" data-tooltip="' +
('<td>' +
(relatedHTML === ''
? ''
: '<ul class="fa-ul ml-5 is-size-7">' + relatedHTML + '</ul>') +
'</td>') +
('<td>' +
'<ul class="fa-ul ml-5 is-size-7">' +
('<li class="has-tooltip-right" data-tooltip="' +
los.escapedAliases.WorkOrderOpenDate +
'">' +
'<span class="fa-li">' +
'<i class="fas fa-fw fa-play" aria-label="' +
los.escapedAliases.WorkOrderOpenDate +
'"></i> ' +
workOrder.workOrderOpenDateString +
'</span><br />') +
('<span class="has-tooltip-left" data-tooltip="' +
'"></i></span> ' +
workOrder.workOrderOpenDateString! +
'</li>') +
('<li class="has-tooltip-right" data-tooltip="' +
los.escapedAliases.WorkOrderCloseDate +
'">' +
'<span class="fa-li">' +
'<i class="fas fa-fw fa-stop" aria-label="' +
los.escapedAliases.WorkOrderCloseDate +
'"></i> ' +
'"></i></span> ' +
(workOrder.workOrderCloseDate
? workOrder.workOrderCloseDateString
? workOrder.workOrderCloseDateString!
: '<span class="has-text-grey">(No ' +
los.escapedAliases.WorkOrderCloseDate +
')</span>') +
'</span>') +
'</li>') +
'</ul>' +
'</td>') +
('<td>' +
(workOrder.workOrderMilestoneCount === 0
? '-'
: workOrder.workOrderMilestoneCompletionCount +
: workOrder.workOrderMilestoneCompletionCount!.toString() +
' / ' +
workOrder.workOrderMilestoneCount) +
workOrder.workOrderMilestoneCount!.toString()) +
'</td>') +
(workOrderPrints.length > 0
? '<td>' +
@ -146,7 +148,7 @@ declare const cityssm: cityssmGlobal
'/print/' +
workOrderPrints[0] +
'/?workOrderId=' +
workOrder.workOrderId +
workOrder.workOrderId!.toString() +
'" target="_blank">' +
'<i class="fas fa-print" aria-label="Print"></i>' +
'</a>' +
@ -156,17 +158,16 @@ declare const cityssm: cityssmGlobal
)
}
searchResultsContainerElement.innerHTML =
'<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">' +
'<thead><tr>' +
'<th>Work Order Number</th>' +
'<th>Description</th>' +
'<th>Related</th>' +
'<th>Date</th>' +
'<th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>' +
(workOrderPrints.length > 0 ? '<th class="has-width-1"></th>' : '') +
'</tr></thead>' +
'<table>'
searchResultsContainerElement.innerHTML = `<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">
<thead><tr>
<th>Work Order Number</th>
<th>Description</th>
<th>Related</th>
<th>Date</th>
<th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>
${workOrderPrints.length > 0 ? '<th class="has-width-1"></th>' : ''}
</tr></thead>
<table>`
searchResultsContainerElement.insertAdjacentHTML(
'beforeend',

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),n=document.querySelector("#searchFilter--offset");function r(t){var n,r,o,c;if(0===t.lots.length)return void(s.innerHTML=`<div class="message is-info">\n <p class="message-body">There are no ${e.escapedAliases.lots} that meet the search criteria.</p>\n </div>`);const d=document.createElement("tbody");for(const s of t.lots)d.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.getLotURL(s.lotId)+'">'+cityssm.escapeHTML(null!==(n=s.lotName)&&void 0!==n?n:"")+'</a></td><td><a href="'+e.getMapURL(s.mapId)+'">'+(s.mapName?cityssm.escapeHTML(s.mapName):'<span class="has-text-grey">(No Name)</span>')+"</a></td><td>"+cityssm.escapeHTML(null!==(r=s.lotType)&&void 0!==r?r:"")+"</td><td>"+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus):'<span class="has-text-grey">(No Status)</span>')+"<br />"+(s.lotOccupancyCount>0?'<span class="is-size-7">Currently Occupied</span>':"")+"</td></tr>");s.innerHTML=`<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">\n <thead><tr>\n <th>${e.escapedAliases.Lot}</th>\n <th>${e.escapedAliases.Map}</th>\n <th>${e.escapedAliases.Lot} Type</th>\n <th>Status</th>\n </tr></thead>\n <table>`,s.insertAdjacentHTML("beforeend",e.getSearchResultsPagerHTML(a,t.offset,t.count)),s.querySelector("table").append(d),null===(o=s.querySelector("button[data-page='previous']"))||void 0===o||o.addEventListener("click",l),null===(c=s.querySelector("button[data-page='next']"))||void 0===c||c.addEventListener("click",i)}function o(){s.innerHTML=e.getLoadingParagraphHTML(`Loading ${e.escapedAliases.Lots}...`),cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",t,r)}function c(){n.value="0",o()}function l(){n.value=Math.max(Number.parseInt(n.value,10)-a,0).toString(),o()}function i(){n.value=(Number.parseInt(n.value,10)+a).toString(),o()}const d=t.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",c);t.addEventListener("submit",e=>{e.preventDefault()}),o()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),n=document.querySelector("#searchFilter--offset");function r(t){var n,r,o,l,d;if(0===t.lots.length)return void(s.innerHTML=`<div class="message is-info">\n <p class="message-body">There are no ${e.escapedAliases.lots} that meet the search criteria.</p>\n </div>`);const u=document.createElement("tbody");for(const s of t.lots)u.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.getLotURL(s.lotId)+'">'+cityssm.escapeHTML(null!==(n=s.lotName)&&void 0!==n?n:"")+'</a></td><td><a href="'+e.getMapURL(s.mapId)+'">'+(s.mapName?cityssm.escapeHTML(s.mapName):'<span class="has-text-grey">(No Name)</span>')+"</a></td><td>"+cityssm.escapeHTML(null!==(r=s.lotType)&&void 0!==r?r:"")+"</td><td>"+(s.lotStatusId?cityssm.escapeHTML(s.lotStatus):'<span class="has-text-grey">(No Status)</span>')+"<br />"+((null!==(o=s.lotOccupancyCount)&&void 0!==o?o:0)>0?'<span class="is-size-7">Currently Occupied</span>':"")+"</td></tr>");s.innerHTML=`<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">\n <thead><tr>\n <th>${e.escapedAliases.Lot}</th>\n <th>${e.escapedAliases.Map}</th>\n <th>${e.escapedAliases.Lot} Type</th>\n <th>Status</th>\n </tr></thead>\n <table>`,s.insertAdjacentHTML("beforeend",e.getSearchResultsPagerHTML(a,t.offset,t.count)),s.querySelector("table").append(u),null===(l=s.querySelector("button[data-page='previous']"))||void 0===l||l.addEventListener("click",c),null===(d=s.querySelector("button[data-page='next']"))||void 0===d||d.addEventListener("click",i)}function o(){s.innerHTML=e.getLoadingParagraphHTML(`Loading ${e.escapedAliases.Lots}...`),cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",t,r)}function l(){n.value="0",o()}function c(){n.value=Math.max(Number.parseInt(n.value,10)-a,0).toString(),o()}function i(){n.value=(Number.parseInt(n.value,10)+a).toString(),o()}const d=t.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",l);t.addEventListener("submit",e=>{e.preventDefault()}),o()})();

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("#form--searchFilters"),r=s.querySelector("#searchFilter--workOrderMilestoneDateFilter"),a=s.querySelector("#searchFilter--workOrderMilestoneDateString"),t=document.querySelector("#container--milestoneCalendar");function i(r){r&&r.preventDefault(),t.innerHTML=e.getLoadingParagraphHTML("Loading Milestones..."),cityssm.postJSON(e.urlPrefix+"/workOrders/doGetWorkOrderMilestones",s,s=>{!function(s){var r,a,i,o,n,l,c,d;if(0===s.length)return void(t.innerHTML='<div class="message is-info">\n <p class="message-body">There are no milestones that meet the search criteria.</p>\n </div>');t.innerHTML="";const p=cityssm.dateToString(new Date);let m,u="x";for(const M of s){u!==M.workOrderMilestoneDateString&&(m&&t.append(m),(m=document.createElement("div")).className="panel",m.innerHTML=`<h2 class="panel-heading">\n ${0===M.workOrderMilestoneDate?"No Set Date":M.workOrderMilestoneDateString}\n </h2>`,u=M.workOrderMilestoneDateString);const s=document.createElement("div");s.className="panel-block is-block",!M.workOrderMilestoneCompletionDate&&""!==M.workOrderMilestoneDateString&&M.workOrderMilestoneDateString<p&&s.classList.add("has-background-warning-light");let O="";for(const s of M.workOrderLots)O+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(null!==(r=s.mapName)&&void 0!==r?r:"")+'"><i class="fas fa-vector-square" aria-label="'+e.escapedAliases.Lot+'"></i> '+cityssm.escapeHTML(null!==(a=s.lotName)&&void 0!==a?a:"")+"</span><br />";for(const s of M.workOrderLotOccupancies)for(const r of s.lotOccupancyOccupants)O+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(null!==(i=r.lotOccupantType)&&void 0!==i?i:"")+'"><i class="fas fa-user" aria-label="'+e.escapedAliases.Occupancy+'"></i> '+cityssm.escapeHTML(null!==(o=r.occupantName)&&void 0!==o?o:"")+" "+cityssm.escapeHTML(null!==(n=r.occupantFamilyName)&&void 0!==n?n:"")+"</span><br />";s.innerHTML='<div class="columns"><div class="column is-narrow"><span class="icon is-small">'+(M.workOrderMilestoneCompletionDate?'<i class="fas fa-check" aria-label="Completed"></i>':'<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>')+'</span></div><div class="column">'+(0===M.workOrderMilestoneTime?"":M.workOrderMilestoneTimePeriodString+"<br />")+(M.workOrderMilestoneTypeId?"<strong>"+cityssm.escapeHTML(M.workOrderMilestoneType)+"</strong><br />":"")+'<span class="is-size-7">'+cityssm.escapeHTML(M.workOrderMilestoneDescription)+'</span></div><div class="column"><i class="fas fa-circle" style="color:'+e.getRandomColor(null!==(l=M.workOrderNumber)&&void 0!==l?l:"")+'" aria-hidden="true"></i> <a class="has-text-weight-bold" href="'+e.getWorkOrderURL(M.workOrderId)+'">'+cityssm.escapeHTML(null!==(c=M.workOrderNumber)&&void 0!==c?c:"")+'</a><br /><span class="is-size-7">'+cityssm.escapeHTML(null!==(d=M.workOrderDescription)&&void 0!==d?d:"")+'</span></div><div class="column is-size-7">'+O+"</div></div>",m.append(s)}t.append(m)}(s.workOrderMilestones)})}r.addEventListener("change",()=>{a.closest("fieldset").disabled="date"!==r.value,i()}),e.initializeDatePickers(s),a.addEventListener("change",i),s.addEventListener("submit",i),i()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,s=document.querySelector("#form--searchFilters"),r=s.querySelector("#searchFilter--workOrderMilestoneDateFilter"),a=s.querySelector("#searchFilter--workOrderMilestoneDateString"),t=document.querySelector("#container--milestoneCalendar");function i(r){r&&r.preventDefault(),t.innerHTML=e.getLoadingParagraphHTML("Loading Milestones..."),cityssm.postJSON(e.urlPrefix+"/workOrders/doGetWorkOrderMilestones",s,s=>{!function(s){var r,a,i,n,o,l,c,d;if(0===s.length)return void(t.innerHTML='<div class="message is-info">\n <p class="message-body">There are no milestones that meet the search criteria.</p>\n </div>');t.innerHTML="";const p=cityssm.dateToString(new Date);let m,u="x";for(const M of s){u!==M.workOrderMilestoneDateString&&(m&&t.append(m),(m=document.createElement("div")).className="panel",m.innerHTML=`<h2 class="panel-heading">\n ${0===M.workOrderMilestoneDate?"No Set Date":M.workOrderMilestoneDateString}\n </h2>`,u=M.workOrderMilestoneDateString);const s=document.createElement("div");s.className="panel-block is-block",!M.workOrderMilestoneCompletionDate&&""!==M.workOrderMilestoneDateString&&M.workOrderMilestoneDateString<p&&s.classList.add("has-background-warning-light");let f="";for(const s of M.workOrderLots)f+=`<li class="has-tooltip-left"\n data-tooltip="${cityssm.escapeHTML(null!==(r=s.mapName)&&void 0!==r?r:"")}">\n <span class="fa-li">\n <i class="fas fa-vector-square"\n aria-label="${e.escapedAliases.Lot}"></i>\n </span>\n ${cityssm.escapeHTML(null!==(a=s.lotName)&&void 0!==a?a:"")}\n </li>`;for(const s of M.workOrderLotOccupancies)for(const r of s.lotOccupancyOccupants)f+=`<li class="has-tooltip-left"\n data-tooltip="${cityssm.escapeHTML(null!==(i=r.lotOccupantType)&&void 0!==i?i:"")}">\n <span class="fa-li">\n <i class="fas fa-user"\n aria-label="${e.escapedAliases.Occupancy}"></i>\n </span>\n ${cityssm.escapeHTML(null!==(n=r.occupantName)&&void 0!==n?n:"")}\n ${cityssm.escapeHTML(null!==(o=r.occupantFamilyName)&&void 0!==o?o:"")}\n </li>`;s.innerHTML='<div class="columns"><div class="column is-narrow"><span class="icon is-small">'+(M.workOrderMilestoneCompletionDate?'<i class="fas fa-check" aria-label="Completed"></i>':'<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>')+'</span></div><div class="column">'+(0===M.workOrderMilestoneTime?"":M.workOrderMilestoneTimePeriodString+"<br />")+(M.workOrderMilestoneTypeId?"<strong>"+cityssm.escapeHTML(M.workOrderMilestoneType)+"</strong><br />":"")+'<span class="is-size-7">'+cityssm.escapeHTML(M.workOrderMilestoneDescription)+'</span></div><div class="column"><i class="fas fa-circle" style="color:'+e.getRandomColor(null!==(l=M.workOrderNumber)&&void 0!==l?l:"")+'" aria-hidden="true"></i> <a class="has-text-weight-bold" href="'+e.getWorkOrderURL(M.workOrderId)+'">'+cityssm.escapeHTML(null!==(c=M.workOrderNumber)&&void 0!==c?c:"")+'</a><br /><span class="is-size-7">'+cityssm.escapeHTML(null!==(d=M.workOrderDescription)&&void 0!==d?d:"")+'</span></div><div class="column is-size-7">'+(""===f?"":'<ul class="fa-ul ml-4">'+f+"</ul>")+"</div></div>",m.append(s)}t.append(m)}(s.workOrderMilestones)})}r.addEventListener("change",()=>{a.closest("fieldset").disabled="date"!==r.value,i()}),e.initializeDatePickers(s),a.addEventListener("change",i),s.addEventListener("submit",i),i()})();

View File

@ -1 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset");function l(s){var o,l,i,n,p,u,f,m,h,O,k;if(0===s.workOrders.length)return void(a.innerHTML='<div class="message is-info"><p class="message-body">There are no work orders that meet the search criteria.</p></div>');const b=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const t of a.workOrderLots)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(null!==(o=t.mapName)&&void 0!==o?o:"")+'"><i class="fas fa-fw fa-vector-square" aria-label="'+e.escapedAliases.Lot+'"></i> '+cityssm.escapeHTML(""===(null!==(l=t.lotName)&&void 0!==l?l:"")?"(No "+e.escapedAliases.Lot+" Name)":t.lotName)+"</span><br />";for(const t of a.workOrderLotOccupancies)for(const a of t.lotOccupancyOccupants)s+='<span class="has-tooltip-left" data-tooltip="'+cityssm.escapeHTML(null!==(i=a.lotOccupantType)&&void 0!==i?i:"")+'"><i class="fas fa-fw fa-'+cityssm.escapeHTML(""===(null!==(n=a.fontAwesomeIconClass)&&void 0!==n?n:"")?"user":a.fontAwesomeIconClass)+'" aria-label="'+e.escapedAliases.occupant+'"></i> '+cityssm.escapeHTML(""===(null!==(p=a.occupantName)&&void 0!==p?p:"")&&""===(null!==(u=a.occupantFamilyName)&&void 0!==u?u:"")?"(No Name)":a.occupantName+" "+a.occupantFamilyName)+"</span><br />";b.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.getWorkOrderURL(a.workOrderId)+'">'+(a.workOrderNumber.trim()?cityssm.escapeHTML(null!==(f=a.workOrderNumber)&&void 0!==f?f:""):"(No Number)")+"</a></td><td>"+cityssm.escapeHTML(null!==(m=a.workOrderType)&&void 0!==m?m:"")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(null!==(h=a.workOrderDescription)&&void 0!==h?h:"")+'</span></td><td class="is-nowrap"><span class="is-size-7">'+s+'</span></td><td class="is-nowrap"><span class="has-tooltip-left" data-tooltip="'+e.escapedAliases.WorkOrderOpenDate+'"><i class="fas fa-fw fa-play" aria-label="'+e.escapedAliases.WorkOrderOpenDate+'"></i> '+a.workOrderOpenDateString+'</span><br /><span class="has-tooltip-left" data-tooltip="'+e.escapedAliases.WorkOrderCloseDate+'"><i class="fas fa-fw fa-stop" aria-label="'+e.escapedAliases.WorkOrderCloseDate+'"></i> '+(a.workOrderCloseDate?a.workOrderCloseDateString:'<span class="has-text-grey">(No '+e.escapedAliases.WorkOrderCloseDate+")</span>")+"</span></td><td>"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"</td>"+(t.length>0?'<td><a class="button is-small" data-tooltip="Print" href="'+e.urlPrefix+"/print/"+t[0]+"/?workOrderId="+a.workOrderId+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a></td>':"")+"</tr>")}a.innerHTML='<table class="table is-fullwidth is-striped is-hoverable has-sticky-header"><thead><tr><th>Work Order Number</th><th>Description</th><th>Related</th><th>Date</th><th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>'+(t.length>0?'<th class="has-width-1"></th>':"")+"</tr></thead><table>",a.insertAdjacentHTML("beforeend",e.getSearchResultsPagerHTML(r,s.offset,s.count)),a.querySelector("table").append(b),null===(O=a.querySelector("button[data-page='previous']"))||void 0===O||O.addEventListener("click",c),null===(k=a.querySelector("button[data-page='next']"))||void 0===k||k.addEventListener("click",d)}function i(){a.innerHTML=e.getLoadingParagraphHTML("Loading Work Orders..."),cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,l)}function n(){o.value="0",i()}function c(){o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()}function d(){o.value=(Number.parseInt(o.value,10)+r).toString(),i()}const p=s.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",n);s.addEventListener("submit",e=>{e.preventDefault()}),i()})();
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,a=document.querySelector("#form--searchFilters");e.initializeDatePickers(a);const s=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset");function l(a){var o,l,i,n,p,u,f,h,m,O,k;if(0===a.workOrders.length)return void(s.innerHTML='<div class="message is-info">\n <p class="message-body">There are no work orders that meet the search criteria.</p>\n </div>');const b=document.createElement("tbody");for(const s of a.workOrders){let a="";for(const t of s.workOrderLots)a+=`<li class="has-tooltip-right"\n data-tooltip="${cityssm.escapeHTML(null!==(o=t.mapName)&&void 0!==o?o:"")}">\n <span class="fa-li">\n <i class="fas fa-fw fa-vector-square"\n aria-label="${e.escapedAliases.Lot}"></i>\n </span>\n ${cityssm.escapeHTML(""===(null!==(l=t.lotName)&&void 0!==l?l:"")?"(No "+e.escapedAliases.Lot+" Name)":t.lotName)}\n </li>`;for(const t of s.workOrderLotOccupancies)for(const s of t.lotOccupancyOccupants)a+=`<li class="has-tooltip-right"\n data-tooltip="${cityssm.escapeHTML(null!==(i=s.lotOccupantType)&&void 0!==i?i:"")}">\n <span class="fa-li">\n <i class="fas fa-fw fa-${cityssm.escapeHTML(""===(null!==(n=s.fontAwesomeIconClass)&&void 0!==n?n:"")?"user":s.fontAwesomeIconClass)}" aria-label="${e.escapedAliases.occupant}"></i></span>\n ${cityssm.escapeHTML(""===(null!==(p=s.occupantName)&&void 0!==p?p:"")&&""===(null!==(u=s.occupantFamilyName)&&void 0!==u?u:"")?"(No Name)":s.occupantName+" "+s.occupantFamilyName)}\n </li>`;b.insertAdjacentHTML("beforeend",'<tr><td><a class="has-text-weight-bold" href="'+e.getWorkOrderURL(s.workOrderId)+'">'+(""===s.workOrderNumber.trim()?"(No Number)":cityssm.escapeHTML(null!==(f=s.workOrderNumber)&&void 0!==f?f:""))+"</a></td><td>"+cityssm.escapeHTML(null!==(h=s.workOrderType)&&void 0!==h?h:"")+'<br /><span class="is-size-7">'+cityssm.escapeHTML(null!==(m=s.workOrderDescription)&&void 0!==m?m:"")+"</span></td><td>"+(""===a?"":'<ul class="fa-ul ml-5 is-size-7">'+a+"</ul>")+'</td><td><ul class="fa-ul ml-5 is-size-7"><li class="has-tooltip-right" data-tooltip="'+e.escapedAliases.WorkOrderOpenDate+'"><span class="fa-li"><i class="fas fa-fw fa-play" aria-label="'+e.escapedAliases.WorkOrderOpenDate+'"></i></span> '+s.workOrderOpenDateString+'</li><li class="has-tooltip-right" data-tooltip="'+e.escapedAliases.WorkOrderCloseDate+'"><span class="fa-li"><i class="fas fa-fw fa-stop" aria-label="'+e.escapedAliases.WorkOrderCloseDate+'"></i></span> '+(s.workOrderCloseDate?s.workOrderCloseDateString:'<span class="has-text-grey">(No '+e.escapedAliases.WorkOrderCloseDate+")</span>")+"</li></ul></td><td>"+(0===s.workOrderMilestoneCount?"-":s.workOrderMilestoneCompletionCount.toString()+" / "+s.workOrderMilestoneCount.toString())+"</td>"+(t.length>0?'<td><a class="button is-small" data-tooltip="Print" href="'+e.urlPrefix+"/print/"+t[0]+"/?workOrderId="+s.workOrderId.toString()+'" target="_blank"><i class="fas fa-print" aria-label="Print"></i></a></td>':"")+"</tr>")}s.innerHTML=`<table class="table is-fullwidth is-striped is-hoverable has-sticky-header">\n <thead><tr>\n <th>Work Order Number</th>\n <th>Description</th>\n <th>Related</th>\n <th>Date</th>\n <th class="has-tooltip-bottom" data-tooltip="Completed / Total Milestones">Progress</th>\n ${t.length>0?'<th class="has-width-1"></th>':""}\n </tr></thead>\n <table>`,s.insertAdjacentHTML("beforeend",e.getSearchResultsPagerHTML(r,a.offset,a.count)),s.querySelector("table").append(b),null===(O=s.querySelector("button[data-page='previous']"))||void 0===O||O.addEventListener("click",c),null===(k=s.querySelector("button[data-page='next']"))||void 0===k||k.addEventListener("click",d)}function i(){s.innerHTML=e.getLoadingParagraphHTML("Loading Work Orders..."),cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",a,l)}function n(){o.value="0",i()}function c(){o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()}function d(){o.value=(Number.parseInt(o.value,10)+r).toString(),i()}const p=a.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",n);a.addEventListener("submit",e=>{e.preventDefault()}),i()})();

View File

@ -1,43 +1,43 @@
<aside class="menu">
<h2 class="menu-label">
<h2 class="menu-label is-hidden-touch">
Administrator Tools
</h2>
<ul class="menu-list">
<li>
<a class="<%= (headTitle === "Fee Management" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/fees">
<span class="icon"><i class="fas fa-fw fa-dollar-sign" aria-hidden="true"></i></span>
<span>Fee Management</span>
<span class="is-hidden-touch">Fee Management</span>
</a>
</li>
<li>
<a class="<%= (headTitle === configFunctions.getProperty("aliases.occupancy") + " Type Management" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/occupancyTypes">
<span class="icon"><i class="fas fa-fw fa-user-friends" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.occupancy") %> Type Management</span>
<span class="is-hidden-touch"><%= configFunctions.getProperty("aliases.occupancy") %> Type Management</span>
</a>
</li>
<li>
<a class="<%= (headTitle === configFunctions.getProperty("aliases.lot") + " Type Management" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/lotTypes">
<span class="icon"><i class="fas fa-fw fa-vector-square" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.lot") %> Type Management</span>
<span class="is-hidden-touch"><%= configFunctions.getProperty("aliases.lot") %> Type Management</span>
</a>
</li>
<li>
<a class="<%= (headTitle === "Config Table Management" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/tables">
<span class="icon"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
<span>Config Table Management</span>
<span class="is-hidden-touch">Config Table Management</span>
</a>
</li>
<li>
<a class="<%= (headTitle === "Database Maintenance" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/database">
<span class="icon"><i class="fas fa-fw fa-database" aria-hidden="true"></i></span>
<span>Database Maintenance</span>
<span class="is-hidden-touch">Database Maintenance</span>
</a>
</li>
<% if (configFunctions.getProperty("application.ntfyStartup")) { %>
<li>
<a class="<%= (headTitle === "Ntfy Startup Notification" ? "is-active" : "") %>" href="<%= urlPrefix %>/admin/ntfyStartup">
<span class="icon"><i class="far fa-fw fa-comment-alt" aria-hidden="true"></i></span>
<span>Ntfy Startup Notification</span>
<span class="is-hidden-touch">Ntfy Startup Notification</span>
</a>
</li>
<% } %>

View File

@ -1,36 +1,36 @@
<aside class="menu">
<h2 class="menu-label">
<h2 class="menu-label is-hidden-touch">
Work Orders
</h2>
<ul class="menu-list">
<li>
<a class="<%= (headTitle === "Work Order Search" ? "is-active" : "") %>" href="<%= urlPrefix %>/workOrders">
<span class="icon"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Order Search</span>
<span class="is-hidden-touch">Work Order Search</span>
</a>
</li>
</ul>
<h2 class="menu-label">
<h2 class="menu-label is-hidden-touch">
Milestones
</h2>
<ul class="menu-list">
<li>
<a class="<%= (headTitle.endsWith("Milestone Calendar") ? "is-active" : "") %>" href="<%= urlPrefix %>/workOrders/milestoneCalendar">
<span class="icon"><i class="fas fa-fw fa-calendar" aria-hidden="true"></i></span>
<span>Milestone Calendar</span>
<span class="is-hidden-touch">Milestone Calendar</span>
</a>
</li>
<li>
<a class="<%= (headTitle.endsWith("Outlook Integration") ? "is-active" : "") %>" href="<%= urlPrefix %>/workOrders/outlook">
<span class="icon"><i class="fas fa-fw fa-envelope-open-text" aria-hidden="true"></i></span>
<span>Outlook Integration</span>
<span class="is-hidden-touch">Outlook Integration</span>
</a>
</li>
</ul>
<h2 class="menu-label">
<h2 class="menu-label is-hidden-touch">
Help
</h2>
<ul class="menu-list">
<ul class="menu-list is-hidden-touch">
<li>
<a href="https://cityssm.github.io/lot-occupancy-system/docs/workOrders.html" target="_blank" rel="noopener noreferrer">
<span class="icon"><i class="fas fa-fw fa-question-circle" aria-hidden="true"></i></span>

View File

@ -1,80 +1,80 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Database Maintenance
</a>
</li>
</ul>
</nav>
<h1 class="title is-1">
Database Maintenance
</h1>
<h2 class="title is-3">
Database Backup
</h2>
<div class="message is-info">
<div class="message-body">
<p>
Before making significant changes to the records in the database,
it is a good idea to back up first!
</p>
</div>
</div>
<p class="has-text-right">
<button class="button is-success" id="button--backupDatabase" data-cy="backup" type="button">
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Backup Database</span>
</button>
</p>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Database Maintenance
</a>
</li>
</ul>
</nav>
<h2 class="title is-3">
Database Cleanup
</h2>
<h1 class="title is-1">
Database Maintenance
</h1>
<div class="message is-warning">
<div class="message-header">
Important Note about Cleanup
</div>
<div class="message-body">
<p>
When records are deleted in this application, they are not removed entirely.
This gives systems administrators the ability to recover deleted records.
This also can leave a small amount of garbage behind in the database.
</p>
<p class="mt-2">
This process permanently deletes records that have already been deleted over
<%= configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") %> days ago.
Note that no active records will be affected by the cleanup process.
</p>
</div>
<h2 class="title is-3">
Database Backup
</h2>
<div class="message is-info">
<div class="message-body">
<p>
Before making significant changes to the records in the database,
it is a good idea to back up first!
</p>
</div>
<p class="has-text-right">
<button class="button is-success" id="button--cleanupDatabase" data-cy="cleanup" type="button">
<span class="icon"><i class="fas fa-broom" aria-hidden="true"></i></span>
<span>Cleanup Database</span>
</button>
</p>
</div>
<p class="has-text-right">
<button class="button is-success" id="button--backupDatabase" data-cy="backup" type="button">
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Backup Database</span>
</button>
</p>
<h2 class="title is-3">
Database Cleanup
</h2>
<div class="message is-warning">
<div class="message-header">
Important Note about Cleanup
</div>
<div class="message-body">
<p>
When records are deleted in this application, they are not removed entirely.
This gives systems administrators the ability to recover deleted records.
This also can leave a small amount of garbage behind in the database.
</p>
<p class="mt-2">
This process permanently deletes records that have already been deleted over
<%= configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") %> days ago.
Note that no active records will be affected by the cleanup process.
</p>
</div>
</div>
<p class="has-text-right">
<button class="button is-success" id="button--cleanupDatabase" data-cy="cleanup" type="button">
<span class="icon"><i class="fas fa-broom" aria-hidden="true"></i></span>
<span>Cleanup Database</span>
</button>
</p>
</div>
</div>
<%- include('_footerA'); -%>

View File

@ -1,7 +1,7 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
@ -22,21 +22,17 @@
</ul>
</nav>
<div class="level">
<div class="level-left">
<div class="level-item is-justify-content-start">
<h1 class="title is-1">
Fee Management
</h1>
</div>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
Fee Management
</h1>
</div>
<div class="level-right">
<div class="level-item is-justify-content-end">
<button class="button is-success" id="button--addFeeCategory" data-cy="addFeeCategory" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Fee Category</span>
</button>
</div>
<div class="column has-text-right is-narrow">
<button class="button is-success" id="button--addFeeCategory" data-cy="addFeeCategory" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Fee Category</span>
</button>
</div>
</div>

View File

@ -1,44 +1,39 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-admin'); -%>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
<%= configFunctions.getProperty("aliases.lot") %> Type Management
</a>
<a href="#" aria-current="page">
<%= configFunctions.getProperty("aliases.lot") %> Type Management
</a>
</li>
</ul>
</nav>
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h1 class="title is-1">
<%= configFunctions.getProperty("aliases.lot") %> Type Management
</h1>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-success" id="button--addLotType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <%= configFunctions.getProperty("aliases.lot") %> Type</span>
</button>
</div>
</div>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
<%= configFunctions.getProperty("aliases.lot") %> Type Management
</h1>
</div>
<div class="column has-text-right is-narrow">
<button class="button is-success" id="button--addLotType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <%= configFunctions.getProperty("aliases.lot") %> Type</span>
</button>
</div>
</div>
<div id="container--lotTypes"></div>

View File

@ -1,7 +1,7 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">

View File

@ -1,97 +1,92 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
<%= configFunctions.getProperty("aliases.occupancy") %> Type Management
</a>
</li>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="#">
<span class="icon is-small"><i class="fas fa-cog" aria-hidden="true"></i></span>
<span>Administrator Tools</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
<%= configFunctions.getProperty("aliases.occupancy") %> Type Management
</a>
</li>
</ul>
</nav>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
<%= configFunctions.getProperty("aliases.occupancy") %> Type Management
</h1>
</div>
<div class="column has-text-right is-narrow">
<button class="button is-success" id="button--addOccupancyType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <%= configFunctions.getProperty("aliases.occupancy") %> Type</span>
</button>
</div>
</div>
<div class="tabs is-boxed" role="tablist">
<ul role="presentation">
<li class="is-active" role="presentation">
<a href="#tab--occupancyTypes">
<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--occupancyTypePrints">
<i class="fas fa-print" aria-hidden="true"></i>
<span class="ml-2">Prints</span>
</a>
</li>
</ul>
</nav>
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h1 class="title is-1">
<%= configFunctions.getProperty("aliases.occupancy") %> Type Management
</h1>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-success" id="button--addOccupancyType" type="button" accesskey="n">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <%= configFunctions.getProperty("aliases.occupancy") %> Type</span>
</button>
</div>
</div>
</div>
<div class="tabs is-boxed" role="tablist">
<ul role="presentation">
<li class="is-active" role="presentation">
<a href="#tab--occupancyTypes">
<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--occupancyTypePrints">
<i class="fas fa-print" aria-hidden="true"></i>
<span class="ml-2">Prints</span>
</a>
</li>
</ul>
</div>
<div class="tab-container">
<div id="tab--occupancyTypes">
<div id="container--occupancyTypes"></div>
</div>
<div class="is-hidden" id="tab--occupancyTypePrints">
<div class="columns">
<div class="column">
<div id="container--occupancyTypePrints"></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(occupancyTypePrintTitles)) { %>
<% 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 class="tab-container">
<div id="tab--occupancyTypes">
<div id="container--occupancyTypes"></div>
</div>
<div class="is-hidden" id="tab--occupancyTypePrints">
<div class="columns">
<div class="column">
<div id="container--occupancyTypePrints"></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(occupancyTypePrintTitles)) { %>
<% 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>
<%- include('_footerA'); -%>
<script>
exports.occupancyTypes = <%- JSON.stringify(occupancyTypes) %>;
exports.allOccupancyTypeFields = <%- JSON.stringify(allOccupancyTypeFields) %>;
exports.occupancyTypePrintTitles = <%- JSON.stringify(occupancyTypePrintTitles) %>;
exports.occupancyTypes = <%- JSON.stringify(occupancyTypes) %>;
exports.allOccupancyTypeFields = <%- JSON.stringify(allOccupancyTypeFields) %>;
exports.occupancyTypePrintTitles = <%- JSON.stringify(occupancyTypePrintTitles) %>;
</script>
<script src="<%= urlPrefix %>/javascripts/adminOccupancyTypes.min.js"></script>

View File

@ -1,7 +1,7 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-admin'); -%>
</div>
<div class="column">

View File

@ -106,12 +106,12 @@
<% } %>
</span>
</div>
<div class="media-content has-text-black">
<a class="media-content" href="<%= urlPrefix %>/workOrders">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/workOrders">Work Orders</a>
<h2 class="title is-4 is-marginless has-text-link">
Work Orders
</h2>
</div>
</div>
@ -125,20 +125,17 @@
</div>
</div>
<p>View and maintain work orders.</p>
</div>
</div>
</div>
<div class="card-footer">
</a>
<% if (user.userProperties.canUpdate) { %>
<a class="card-footer-item" href="<%= urlPrefix %>/workOrders/new">
<a class="button is-fullwidth is-success is-light mb-2" href="<%= urlPrefix %>/workOrders/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New Work Order</span>
</a>
<% } %>
<a class="card-footer-item" href="<%= urlPrefix %>/workOrders/milestoneCalendar">
<a class="button is-fullwidth is-link is-light" href="<%= urlPrefix %>/workOrders/milestoneCalendar">
<span class="icon">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
@ -147,6 +144,7 @@
</div>
</div>
</div>
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
@ -160,14 +158,12 @@
<% } %>
</span>
</div>
<div class="media-content has-text-black">
<a class="media-content" href="<%= urlPrefix %>/lotOccupancies">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/lotOccupancies">
<%= configFunctions.getProperty("aliases.occupancies") %>
</a>
<h2 class="title is-4 is-marginless has-text-link">
<%= configFunctions.getProperty("aliases.occupancies") %>
</h2>
</div>
</div>
@ -185,108 +181,102 @@
<%= configFunctions.getProperty("aliases.occupancies").toLowerCase() %>.
</p>
</div>
</div>
</div>
<% if (user.userProperties.canUpdate) { %>
<div class="card-footer">
<a class="card-footer-item" href="<%= urlPrefix %>/lotOccupancies/new">
</a>
<% if (user.userProperties.canUpdate) { %>
<a class="button is-fullwidth is-success is-light" href="<%= urlPrefix %>/lotOccupancies/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New <%= configFunctions.getProperty("aliases.occupancy") %></span>
</a>
</div>
<% } %>
<% } %>
</div>
</div>
</div>
</div>
<div class="columns is-desktop">
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-vector-square" aria-hidden="true"></i>
</div>
<div class="media-content has-text-black">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/lots"><%= configFunctions.getProperty("aliases.lots") %></a>
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">3</kbd>
</div>
</div>
</div>
</div>
<p>
View and maintain
<%= configFunctions.getProperty("aliases.lots").toLowerCase() %> within a
<%= configFunctions.getProperty("aliases.map").toLowerCase() %>.
</p>
</div>
</div>
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-vector-square" aria-hidden="true"></i>
</div>
<% if (user.userProperties.canUpdate) { %>
<div class="card-footer">
<a class="card-footer-item" href="<%= urlPrefix %>/lots/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New <%= configFunctions.getProperty("aliases.lot") %></span>
</a>
</div>
<% } %>
</div>
</div>
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="far fa-4x fa-fw fa-map" aria-hidden="true"></i>
</div>
<div class="media-content has-text-black">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/maps"><%= configFunctions.getProperty("aliases.maps") %></a>
</h2>
</div>
<a class="media-content" href="<%= urlPrefix %>/lots">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless has-text-link">
<%= configFunctions.getProperty("aliases.lots") %>
</h2>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">4</kbd>
</div>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">3</kbd>
</div>
</div>
</div>
<p>View and maintain <%= configFunctions.getProperty("aliases.maps").toLowerCase() %>.</p>
</div>
</div>
<p>
View and maintain
<%= configFunctions.getProperty("aliases.lots").toLowerCase() %> within a
<%= configFunctions.getProperty("aliases.map").toLowerCase() %>.
</p>
</a>
</div>
<% if (user.userProperties.canUpdate) { %>
<div class="card-footer">
<a class="card-footer-item" href="<%= urlPrefix %>/maps/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New <%= configFunctions.getProperty("aliases.map") %></span>
</a>
</div>
<a class="button is-fullwidth is-success is-light" href="<%= urlPrefix %>/lots/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New <%= configFunctions.getProperty("aliases.lot") %></span>
</a>
<% } %>
</div>
</div>
</div>
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="far fa-4x fa-fw fa-map" aria-hidden="true"></i>
</div>
<a class="media-content" href="<%= urlPrefix %>/maps">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless has-text-link">
<%= configFunctions.getProperty("aliases.maps") %>
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">4</kbd>
</div>
</div>
</div>
</div>
<p>View and maintain <%= configFunctions.getProperty("aliases.maps").toLowerCase() %>.</p>
</a>
</div>
<% if (user.userProperties.canUpdate) { %>
<a class="button is-fullwidth is-success is-light" href="<%= urlPrefix %>/maps/new">
<span class="icon">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
<span>New <%= configFunctions.getProperty("aliases.map") %></span>
</a>
<% } %>
</div>
</div>
</div>
</div>
<div class="columns is-desktop">
<div class="column">
@ -294,58 +284,55 @@
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-file" aria-hidden="true"></i>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/reports">Report Library</a>
</h2>
<p>Produce reports and export data.</p>
<i class="fas fa-4x fa-fw fa-file" aria-hidden="true"></i>
</div>
<a class="media-content" href="<%= urlPrefix %>/reports">
<h2 class="title is-4 is-marginless has-text-link">
Report Library
</h2>
<p>Produce reports and export data.</p>
</a>
</div>
</div>
</div>
</div>
<div class="column">
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-question-circle" aria-hidden="true"></i>
<div class="card is-hover-container">
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-question-circle" aria-hidden="true"></i>
</div>
<a class="media-content" href="https://cityssm.github.io/lot-occupancy-system/docs" target="_blank" rel="noopener noreferrer">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless has-text-link">
Help
</h2>
</div>
</div>
<div class="media-content has-text-black">
<div class="level is-marginless is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4 is-marginless">
<a href="https://cityssm.github.io/lot-occupancy-system/docs" target="_blank"
rel="noopener noreferrer">Help</a>
</h2>
</div>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">H</kbd>
</div>
</div>
<div class="level-right">
<div class="level-item is-invisible is-visible-hover">
<div class="tags has-addons">
<span class="tag is-link is-light">Shortcut</span>
<kbd class="tag">H</kbd>
</div>
</div>
<p>Instructions on how to use this application.</p>
</div>
</div>
</div>
<div class="card-footer">
<a class="card-footer-item has-tooltip-bottom" data-tooltip="Latest Updates, Issue Tracker, Say Hello"
href="https://github.com/cityssm/lot-occupancy-system" target="_blank" rel="noreferrer">
<span class="icon">
<i class="fab fa-github" aria-hidden="true"></i>
</span>
GitHub
</a>
</div>
<p>Instructions on how to use this application.</p>
</a>
</div>
<a class="button is-fullwidth is-link is-light has-tooltip-bottom" data-tooltip="Latest Updates, Issue Tracker, Say Hello"
href="https://github.com/cityssm/lot-occupancy-system" target="_blank" rel="noreferrer">
<span class="icon">
<i class="fab fa-github" aria-hidden="true"></i>
</span>
<span>GitHub</span>
</a>
</div>
</div>
</div>
</div>
@ -353,123 +340,123 @@
<h2 class="title is-3">Administrator Tools</h2>
<div class="card">
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-dollar-sign"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/fees">
<h2 class="title is-4 is-marginless has-text-link">
Fee Management
</h2>
<p>
Manage fees for
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %>
<%= configFunctions.getProperty("aliases.occupancy").toLowerCase() %>
and specific
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> types.
</p>
</a>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-user-friends"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/occupancyTypes">
<h2 class="title is-4 is-marginless has-text-link">
<%= configFunctions.getProperty("aliases.occupancy") %> Type Management
</h2>
<p>
Manage
<%= configFunctions.getProperty("aliases.occupancy").toLowerCase() %> types,
the fields associated with them,
and their available print options.
</p>
</a>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-vector-square"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/lotTypes">
<h2 class="title is-4 is-marginless has-text-link">
<%= configFunctions.getProperty("aliases.lot") %> Type Management
</h2>
<p>
Manage
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> types
and fields associated with them.
</p>
</a>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-table"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/tables">
<h2 class="title is-4 is-marginless has-text-link">
Config Table Management
</h2>
<p>
Manage simple configuration tables fees for
work order types,
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> statuses,
and <%= configFunctions.getProperty("aliases.lot").toLowerCase() %> <%= configFunctions.getProperty("aliases.occupant").toLowerCase() %> types.
</p>
</a>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-database" aria-hidden="true"></i>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/database">
<h2 class="title is-4 is-marginless has-text-link">
Database Maintenance
</h2>
<p>
Backup the database before making significant updates.
Permanently delete records that have been previously deleted from the database.
</p>
</a>
</div>
</div>
<% if (configFunctions.getProperty("application.ntfyStartup")) { %>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-dollar-sign"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/fees">Fee Management</a>
</h2>
<p>
Manage fees for
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %>
<%= configFunctions.getProperty("aliases.occupancy").toLowerCase() %>
and specific
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> types.
</p>
<i class="far fa-4x fa-fw fa-comment-alt" aria-hidden="true"></i>
</div>
<a class="media-content" href="<%= urlPrefix %>/admin/ntfyStartup">
<h2 class="title is-4 is-marginless has-text-link">
Ntfy Startup Notification
</h2>
<p>
Subscribe to application startup notifications on a phone or a desktop computer.
</p>
</a>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-user-friends"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/occupancyTypes"><%= configFunctions.getProperty("aliases.occupancy") %> Type Management</a>
</h2>
<p>
Manage
<%= configFunctions.getProperty("aliases.occupancy").toLowerCase() %> types,
the fields associated with them,
and their available print options.
</p>
</div>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-vector-square"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/lotTypes"><%= configFunctions.getProperty("aliases.lot") %> Type Management</a>
</h2>
<p>
Manage
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> types
and fields associated with them.
</p>
</div>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<span class="fa-layers fa-4x fa-fw" aria-hidden="true">
<i class="fas fa-table"></i>
<i class="fas fa-cog" data-fa-transform="shrink-8 right-8 down-5" data-fa-glow="10"></i>
</span>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/tables">Config Table Management</a>
</h2>
<p>
Manage simple configuration tables fees for
work order types,
<%= configFunctions.getProperty("aliases.lot").toLowerCase() %> statuses,
and <%= configFunctions.getProperty("aliases.lot").toLowerCase() %> <%= configFunctions.getProperty("aliases.occupant").toLowerCase() %> types.
</p>
</div>
</div>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="fas fa-4x fa-fw fa-database" aria-hidden="true"></i>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/database">Database Maintenance</a>
</h2>
<p>
Backup the database before making significant updates.
Permanently delete records that have been previously deleted from the database.
</p>
</div>
</div>
</div>
<% if (configFunctions.getProperty("application.ntfyStartup")) { %>
<div class="card-content">
<div class="media">
<div class="media-left">
<i class="far fa-4x fa-fw fa-comment-alt" aria-hidden="true"></i>
</div>
<div class="media-content has-text-black">
<h2 class="title is-4 is-marginless">
<a href="<%= urlPrefix %>/admin/ntfyStartup">Ntfy Startup Notification</a>
</h2>
<p>
Subscribe to application startup notifications on a phone or a desktop computer.
</p>
</div>
</div>
</div>
<% } %>
<% } %>
</div>
<% } %>
</div>

View File

@ -21,64 +21,70 @@
<main class="box mx-3 my-3">
<div class="columns is-vcentered">
<div class="column has-text-centered">
<img src="<%= urlPrefix + configFunctions.getProperty("application.logoURL") %>" alt="" style="max-height:400px" />
<img src="<%= urlPrefix + configFunctions.getProperty("application.logoURL") %>" alt="" style="max-height:400px" />
</div>
<div class="column">
<h1 class="title is-3 has-text-centered">
<%= configFunctions.getProperty("application.applicationName") %>
</h1>
<form id="form--login" method="post" action="<%= urlPrefix %>/login">
<input name="_csrf" type="hidden" value="<%= csrfToken %>" />
<input name="redirect" type="hidden" value="<%= redirect %>" />
<input name="_csrf" type="hidden" value="<%= csrfToken %>" />
<input name="redirect" type="hidden" value="<%= redirect %>" />
<div class="field has-addons">
<div class="control">
<span class="button is-static"><%= configFunctions.getProperty("application.userDomain") %>\</span>
</div>
<div class="control is-expanded">
<input class="input" id="login--userName" name="userName" type="text" placeholder="User Name" value="<%= userName %>" aria-label="User Name" autofocus required />
</div>
<div class="field has-addons">
<div class="control">
<span class="button is-static"><%= configFunctions.getProperty("application.userDomain") %>\</span>
</div>
<div class="field">
<label class="sr-only" for="login--password">Password</label>
<div class="control has-icons-left has-tooltip-right" data-tooltip="Password" >
<input class="input" id="login--password" name="password" type="password" placeholder="Password" required />
<span class="icon is-small is-left">
<i class="fas fa-key" aria-hidden="true"></i>
</span>
</div>
<div class="control is-expanded">
<input class="input" id="login--userName" name="userName" type="text" placeholder="User Name" value="<%= userName %>" aria-label="User Name" autofocus required />
</div>
<% if (useTestDatabases) { %>
<div class="message is-small is-warning">
<p class="message-body has-text-centered">
Testing databases in use!
</p>
</div>
<% } %>
<div class="level is-mobile">
<div class="level-left has-text-danger">
<% if (message !== "") { %>
<span class="icon">
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
</span>
<span><%= message %></span>
<% } %>
</div>
<div class="level-right has-text-right">
<button class="button is-link" type="submit">
<span class="icon">
<i class="fas fa-sign-in-alt" aria-hidden="true"></i>
</span>
<span>Log In</span>
</button>
</div>
</div>
<div class="field">
<label class="sr-only" for="login--password">Password</label>
<div class="control has-icons-left has-tooltip-right" data-tooltip="Password" >
<input class="input" id="login--password" name="password" type="password" placeholder="Password" required />
<span class="icon is-small is-left">
<i class="fas fa-key" aria-hidden="true"></i>
</span>
</div>
</div>
<% if (useTestDatabases) { %>
<div class="message is-small is-warning">
<p class="message-body has-text-centered">
Testing databases in use!
</p>
</div>
<% } %>
<div class="level is-mobile">
<div class="level-left has-text-danger">
<% if (message !== "") { %>
<span class="icon">
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
</span>
<span><%= message %></span>
<% } %>
</div>
<div class="level-right has-text-right">
<button class="button is-link" type="submit">
<span class="icon">
<i class="fas fa-sign-in-alt" aria-hidden="true"></i>
</span>
<span>Log In</span>
</button>
</div>
</div>
</form>
<hr />
<div class="has-text-right has-text-grey-dark is-size-7">
Build <%= buildNumber %><br />
<a class="has-text-grey-dark" href="https://cityssm.github.io/lot-occupancy-system/docs" target="_blank" rel="nofollow noreferrer" accesskey="h">Help</a>
<a class="has-text-grey-dark ml-4" href="https://github.com/cityssm/lot-occupancy-system" target="_blank" rel="noreferrer">GitHub</a>
Build <%= buildNumber %><br />
<a class="has-text-grey-dark" href="https://cityssm.github.io/lot-occupancy-system/docs" target="_blank" rel="nofollow noreferrer" accesskey="h">
<i class="fas fa-question-circle" aria-hidden="true"></i>
Help
</a>
<a class="has-text-grey-dark ml-4" href="https://github.com/cityssm/lot-occupancy-system" target="_blank" rel="noreferrer">
<i class="fab fa-github" aria-hidden="true"></i>
GitHub
</a>
</div>
</div>
</div>
@ -89,7 +95,7 @@
<script src="<%= urlPrefix %>/lib/fa/js/all.min.js" defer></script>
<script>
try {
window.localStorage.clear();
window.localStorage.clear();
} catch (e) {}
</script>
</body>

View File

@ -12,21 +12,17 @@
</ul>
</nav>
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h1 class="title is-1">
Find a <%= configFunctions.getProperty("aliases.map") %>
</h1>
</div>
<div class="columns is-vcentered">
<div class="column">
<h1 class="title is-1">
Find a <%= configFunctions.getProperty("aliases.map") %>
</h1>
</div>
<div class="level-right">
<div class="level-item">
<a class="button" href="<%= urlPrefix %>/reports/maps-formatted" target="_blank" download>
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export</span>
</a>
</div>
<div class="column has-text-right is-narrow">
<a class="button" href="<%= urlPrefix %>/reports/maps-formatted" target="_blank" download>
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
<span>Export</span>
</a>
</div>
</div>

View File

@ -1,52 +1,52 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3">
<div class="columns is-mobile">
<div class="column is-3-desktop is-narrow-touch">
<aside class="menu">
<h2 class="menu-label">
<h2 class="menu-label is-hidden-touch">
Reports
</h2>
<ul class="menu-list">
<li>
<a class="is-active" href="#tab--workOrders">
<span class="icon"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
<a class="is-active" href="#tab--workOrders">
<span class="icon"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
<span class="is-hidden-touch">Work Orders</span>
</a>
</li>
<li>
<a href="#tab--lotOccupancies">
<span class="icon"><i class="fas fa-fw fa-user" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.occupancies") %></span>
</a>
<a href="#tab--lotOccupancies">
<span class="icon"><i class="fas fa-fw fa-user" aria-hidden="true"></i></span>
<span class="is-hidden-touch"><%= configFunctions.getProperty("aliases.occupancies") %></span>
</a>
</li>
<li>
<a href="#tab--lots">
<span class="icon"><i class="fas fa-fw fa-vector-square" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.lots") %></span>
</a>
<a href="#tab--lots">
<span class="icon"><i class="fas fa-fw fa-vector-square" aria-hidden="true"></i></span>
<span class="is-hidden-touch"><%= configFunctions.getProperty("aliases.lots") %></span>
</a>
</li>
<li>
<a href="#tab--maps">
<span class="icon"><i class="far fa-fw fa-map" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.maps") %></span>
</a>
<a href="#tab--maps">
<span class="icon"><i class="far fa-fw fa-map" aria-hidden="true"></i></span>
<span class="is-hidden-touch"><%= configFunctions.getProperty("aliases.maps") %></span>
</a>
</li>
</ul>
<h2 class="menu-label">
Table Exports
<h2 class="menu-label is-hidden-touch">
Table Exports
</h2>
<ul class="menu-list">
<li>
<a href="#tab--dataTableExports">
<span class="icon"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
<span>Data Tables</span>
</a>
<a href="#tab--dataTableExports">
<span class="icon"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
<span class="is-hidden-touch">Data Tables</span>
</a>
</li>
<li>
<a href="#tab--configTableExports">
<span class="icon"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
<span>Config Tables</span>
</a>
<a href="#tab--configTableExports">
<span class="icon"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
<span class="is-hidden-touch">Config Tables</span>
</a>
</li>
</ul>
</aside>
@ -66,140 +66,72 @@
<div class="tabs-container">
<div id="tab--workOrders">
<h1 class="title is-1">Work Order Reports</h1>
<div class="columns">
<div class="column">
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrders-open" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Open Work Orders</h2>
<p>
All active work orders without completion dates.
</p>
</div>
</a>
</div>
</div>
<div class="column">
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/workOrders/outlook">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-calendar" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">ICS</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Work Order Milestone Calendar</h2>
<p>
Upcoming and recently passed work order milestones,
compatible with Microsoft Outlook and other calendar tools.
</p>
</div>
</a>
</div>
<h1 class="title is-1">Work Order Reports</h1>
<div class="columns">
<div class="column">
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrders-open" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Open Work Orders</h2>
<p>
All active work orders without completion dates.
</p>
</div>
</a>
</div>
</div>
<div class="column">
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/workOrders/outlook">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-calendar" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">ICS</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Work Order Milestone Calendar</h2>
<p>
Upcoming and recently passed work order milestones,
compatible with Microsoft Outlook and other calendar tools.
</p>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="is-hidden" id="tab--lotOccupancies">
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.occupancy") %> Reports</h1>
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.occupancy") %> Reports</h1>
<div class="panel">
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lotOccupancies-current-byMapId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">
Current <%= configFunctions.getProperty("aliases.occupancy") %> By <%= configFunctions.getProperty("aliases.map") %>
</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lotOccupancies-current-byMapId--mapId">
<%= configFunctions.getProperty("aliases.map") %>
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lotOccupancies-current-byMapId--mapId" name="mapId">
<% for (const map of maps) { %>
<option value="<%= map.mapId %>">
<%= map.mapName || "(No Name)" %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lotOccupancyTransactions-byTransactionDateString">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Transactions by Date</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lotOccupancyTransactions-byTransactionDateString--transactionDateString">
Transaction Date
</label>
</div>
<div class="control is-expanded">
<input class="input is-small" id="lotOccupancyTransactions-byTransactionDateString--transactionDateString" name="transactionDateString" type="date" value="<%= dateTimeFunctions.dateToString(new Date()) %>" required />
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="is-hidden" id="tab--lots">
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.lot") %> Reports</h1>
<div class="panel">
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byMapId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<div class="panel">
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lotOccupancies-current-byMapId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">
<%= configFunctions.getProperty("aliases.lots") %> By <%= configFunctions.getProperty("aliases.map") %>
Current <%= configFunctions.getProperty("aliases.occupancy") %> By <%= configFunctions.getProperty("aliases.map") %>
</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byMapId--mapId">
<label class="button is-small is-static" for="lotOccupancies-current-byMapId--mapId">
<%= configFunctions.getProperty("aliases.map") %>
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byMapId--mapId" name="mapId">
<select id="lotOccupancies-current-byMapId--mapId" name="mapId">
<% for (const map of maps) { %>
<option value="<%= map.mapId %>">
<%= map.mapName || "(No Name)" %>
@ -214,82 +146,9 @@
</button>
</div>
</div>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byLotTypeId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless"><%= configFunctions.getProperty("aliases.lots") %> By Type</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byLotTypeId--lotTypeId">
<%= configFunctions.getProperty("aliases.lot") %> Type
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byLotTypeId--lotTypeId" name="lotTypeId">
<% for (const lotType of lotTypes) { %>
<option value="<%= lotType.lotTypeId %>">
<%= lotType.lotType %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byLotStatusId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless"><%= configFunctions.getProperty("aliases.lots") %> By Status</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byLotStatusId--lotStatusId">
<%= configFunctions.getProperty("aliases.lot") %> Status
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byLotStatusId--lotStatusId" name="lotStatusId">
<% for (const lotStatus of lotStatuses) { %>
<option value="<%= lotStatus.lotStatusId %>">
<%= lotStatus.lotStatus %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="is-hidden" id="tab--maps">
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.map") %> Reports</h1>
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-formatted" download>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lotOccupancyTransactions-byTransactionDateString">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
@ -297,13 +156,154 @@
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Full <%= configFunctions.getProperty("aliases.map") %> List</h2>
<p>
All active <%= configFunctions.getProperty("aliases.maps").toLowerCase() %>.
</p>
<h2 class="title is-5 is-marginless">Transactions by Date</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lotOccupancyTransactions-byTransactionDateString--transactionDateString">
Transaction Date
</label>
</div>
<div class="control is-expanded">
<input class="input is-small" id="lotOccupancyTransactions-byTransactionDateString--transactionDateString" name="transactionDateString" type="date" value="<%= dateTimeFunctions.dateToString(new Date()) %>" required />
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</a>
</div>
</form>
</div>
</div>
<div class="is-hidden" id="tab--lots">
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.lot") %> Reports</h1>
<div class="panel">
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byMapId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">
<%= configFunctions.getProperty("aliases.lots") %> By <%= configFunctions.getProperty("aliases.map") %>
</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byMapId--mapId">
<%= configFunctions.getProperty("aliases.map") %>
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byMapId--mapId" name="mapId">
<% for (const map of maps) { %>
<option value="<%= map.mapId %>">
<%= map.mapName || "(No Name)" %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byLotTypeId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless"><%= configFunctions.getProperty("aliases.lots") %> By Type</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byLotTypeId--lotTypeId">
<%= configFunctions.getProperty("aliases.lot") %> Type
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byLotTypeId--lotTypeId" name="lotTypeId">
<% for (const lotType of lotTypes) { %>
<option value="<%= lotType.lotTypeId %>">
<%= lotType.lotType %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
<form class="panel-block align-items-flex-start" method="get" action="<%= urlPrefix %>/reports/lots-byLotStatusId">
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless"><%= configFunctions.getProperty("aliases.lots") %> By Status</h2>
<div class="field has-addons mt-2">
<div class="control">
<label class="button is-small is-static" for="lots-byLotStatusId--lotStatusId">
<%= configFunctions.getProperty("aliases.lot") %> Status
</label>
</div>
<div class="control is-expanded">
<div class="select is-small is-fullwidth">
<select id="lots-byLotStatusId--lotStatusId" name="lotStatusId">
<% for (const lotStatus of lotStatuses) { %>
<option value="<%= lotStatus.lotStatusId %>">
<%= lotStatus.lotStatus %>
</option>
<% } %>
</select>
</div>
</div>
<div class="control">
<button class="button is-small is-primary" type="submit">
Export
</button>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="is-hidden" id="tab--maps">
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.map") %> Reports</h1>
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-formatted" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h2 class="title is-5 is-marginless">Full <%= configFunctions.getProperty("aliases.map") %> List</h2>
<p>
All active <%= configFunctions.getProperty("aliases.maps").toLowerCase() %>.
</p>
</div>
</a>
</div>
</div>
<div class="is-hidden" id="tab--dataTableExports">
@ -387,100 +387,100 @@
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Work Order Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrders-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrders Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderComments-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderComments Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderLots-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderLots Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderMilestones-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderMilestones Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Lot (<%= configFunctions.getProperty("aliases.lot") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Maps Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lots-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Lots Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotComments-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotComments Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotFields Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Work Order Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrders-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrders Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderComments-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderComments Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderLots-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderLots Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderMilestones-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderMilestones Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Lot (<%= configFunctions.getProperty("aliases.lot") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Maps Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lots-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Lots Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotComments-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotComments Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotFields Table</h3>
</div>
</a>
</div>
</div>
</div>
</div>
@ -494,130 +494,130 @@
</div>
<div class="columns">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Fee Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/fees-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Fees Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/feeCategories-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full FeeCategories Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Lot (<%= configFunctions.getProperty("aliases.lot") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotTypeFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotTypeFields Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotStatuses-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotStatuses Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Fee Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/fees-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full Fees Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/feeCategories-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full FeeCategories Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Lot (<%= configFunctions.getProperty("aliases.lot") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotTypeFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotTypeFields Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotStatuses-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotStatuses Table</h3>
</div>
</a>
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Occupancy (<%= configFunctions.getProperty("aliases.occupancy") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/occupancyTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full OccupancyTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/occupancyTypeFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full OccupancyTypeFields Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotOccupantTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotOccupantTypes Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Work Order Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<div class="panel">
<h2 class="panel-heading">Occupancy (<%= configFunctions.getProperty("aliases.occupancy") %>) Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/occupancyTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full OccupancyTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/occupancyTypeFields-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full OccupancyTypeFields Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/lotOccupantTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full LotOccupantTypes Table</h3>
</div>
</a>
</div>
<div class="panel">
<h2 class="panel-heading">Work Order Tables</h2>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderMilestoneTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderTypes Table</h3>
<h3 class="title is-5 is-marginless">Full WorkOrderMilestoneTypes Table</h3>
</div>
</a>
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrderMilestoneTypes-all" download>
<div class="has-text-centered my-2 ml-2 mr-3">
<span class="icon has-text-info">
<i class="fas fa-2x fa-table" aria-hidden="true"></i>
</span><br />
<span class="tag is-info">CSV</span>
</div>
<div>
<h3 class="title is-5 is-marginless">Full WorkOrderMilestoneTypes Table</h3>
</div>
</a>
</div>
</a>
</div>
</div>
</div>
</div>

View File

@ -1,7 +1,7 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-workOrders'); -%>
</div>
<div class="column">

View File

@ -1,8 +1,8 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-workOrders'); -%>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-workOrders'); -%>
</div>
<div class="column">
<nav class="breadcrumb">

View File

@ -1,117 +1,117 @@
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-workOrders'); -%>
<div class="columns is-mobile">
<div class="column is-2-desktop is-narrow-touch">
<%- include('_menu-workOrders'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li class="is-active">
<a href="#" aria-current="page">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</li>
</ul>
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li class="is-active">
<a href="#" aria-current="page">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</li>
</ul>
</nav>
<h1 class="title is-1">
Work Order Search
Work Order Search
</h1>
<% if (user.userProperties.canUpdate) { %>
<div class="fixed-container is-fixed-bottom-right mx-4 my-4 has-text-right is-hidden-print">
<a class="button is-circle is-primary has-tooltip-left"
data-tooltip="Create a New Work Order"
href="<%= urlPrefix %>/workOrders/new"
accesskey="n">
<i class="fas fa-plus" aria-hidden="true"></i>
<span class="is-sr-only">Create a New Work Order</span>
</a>
<a class="button is-circle is-primary has-tooltip-left"
data-tooltip="Create a New Work Order"
href="<%= urlPrefix %>/workOrders/new"
accesskey="n">
<i class="fas fa-plus" aria-hidden="true"></i>
<span class="is-sr-only">Create a New Work Order</span>
</a>
</div>
<% } %>
<div class="box">
<form id="form--searchFilters">
<input id="searchFilter--limit" name="limit" type="hidden" value="50" />
<input id="searchFilter--offset" name="offset" type="hidden" value="0" />
<form id="form--searchFilters">
<input id="searchFilter--limit" name="limit" type="hidden" value="50" />
<input id="searchFilter--offset" name="offset" type="hidden" value="0" />
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderTypeId">Work Order Type</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderTypeId" name="workOrderTypeId" accesskey="f">
<option value="">(All Work Order Types)</option>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>"><%= workOrderType.workOrderType || "(No Name)" %></option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderTypeId">Work Order Type</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderTypeId" name="workOrderTypeId" accesskey="f">
<option value="">(All Work Order Types)</option>
<% for (const workOrderType of workOrderTypes) { %>
<option value="<%= workOrderType.workOrderTypeId %>"><%= workOrderType.workOrderType || "(No Name)" %></option>
<% } %>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenStatus">Open Status</label>
<div class="control has-icons-left">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderOpenStatus" name="workOrderOpenStatus">
<option value="" <%= (workOrderOpenDateString ? " selected" : "") %>>(All Statuses)</option>
<option value="open" <%= (workOrderOpenDateString ? "" : " selected") %>>Open</option>
<option value="closed">Closed</option>
</select>
</div>
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
<div 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.getProperty("aliases.workOrderOpenDate") %></label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--workOrderOpenDateString" name="workOrderOpenDateString" type="date" value="<%= workOrderOpenDateString %>" max="<%= dateTimeFunctions.dateToString(new Date()) %>" />
<span class="icon is-small is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderOpenDateString"><%= configFunctions.getProperty("aliases.workOrderOpenDate") %></label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--workOrderOpenDateString" name="workOrderOpenDateString" type="date" value="<%= workOrderOpenDateString %>" max="<%= dateTimeFunctions.dateToString(new Date()) %>" />
<span class="icon is-small is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--occupantName">Related <%= configFunctions.getProperty("aliases.occupant") %> Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--occupantName" name="occupantName" 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--lotName">Related <%= configFunctions.getProperty("aliases.lot") %> Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--lotName" name="lotName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--occupantName">Related <%= configFunctions.getProperty("aliases.occupant") %> Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--occupantName" name="occupantName" 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--lotName">Related <%= configFunctions.getProperty("aliases.lot") %> Name</label>
<div class="control is-expanded has-icons-left">
<input class="input" id="searchFilter--lotName" name="lotName" type="text" />
<span class="icon is-small is-left">
<i class="fas fa-search" aria-hidden="true"></i>
</span>
</div>
</div>
</div>
</div>
</form>
</div>
<div id="container--searchResults"></div>

View File

@ -205,17 +205,23 @@
<% } %>
</td>
<td>
<% if (lotOccupancy.lotOccupancyOccupants.length === 0) { %>
<span class="has-text-grey">(No <%= configFunctions.getProperty("aliases.occupants") %>)</span>
<% } else { %>
<% for (const occupant of lotOccupancy.lotOccupancyOccupants) { %>
<span class="has-tooltip-left" data-tooltip="<%= occupant.lotOccupantType %>">
<i class="fas fa-fw fa-<%= occupant.fontAwesomeIconClass || 'user' %>" aria-hidden="true"></i>
<%= occupant.occupantName %>
<%= occupant.occupantFamilyName %>
</span><br />
<% } %>
<% } %>
<% if (lotOccupancy.lotOccupancyOccupants.length === 0) { %>
<span class="has-text-grey">(
No <%= configFunctions.getProperty("aliases.occupants") %>)
</span>
<% } else { %>
<ul class="fa-ul ml-5">
<% for (const occupant of lotOccupancy.lotOccupancyOccupants) { %>
<li class="has-tooltip-right" data-tooltip="<%= occupant.lotOccupantType %>">
<span class="fa-li">
<i class="fas fa-fw fa-<%= occupant.fontAwesomeIconClass || 'user' %>" aria-hidden="true"></i>
</span>
<%= occupant.occupantName %>
<%= occupant.occupantFamilyName %>
</li>
<% } %>
</ul>
<% } %>
</td>
</tr>
<% } %>