diff --git a/handlers/admin-get/tables.js b/handlers/admin-get/tables.js index c4b12261..d75f2dac 100644 --- a/handlers/admin-get/tables.js +++ b/handlers/admin-get/tables.js @@ -1,15 +1,18 @@ import { getLotOccupantTypes, getLotStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from "../../helpers/functions.cache.js"; -export const handler = (_request, response) => { +import { getSolidIconClasses } from "../../helpers/functions.icons.js"; +export const handler = async (_request, response) => { const workOrderTypes = getWorkOrderTypes(); const workOrderMilestoneTypes = getWorkOrderMilestoneTypes(); const lotStatuses = getLotStatuses(); const lotOccupantTypes = getLotOccupantTypes(); + const fontAwesomeIconClasses = await getSolidIconClasses(); response.render("admin-tables", { headTitle: "Config Table Management", workOrderTypes, workOrderMilestoneTypes, lotStatuses, - lotOccupantTypes + lotOccupantTypes, + fontAwesomeIconClasses }); }; export default handler; diff --git a/handlers/admin-get/tables.ts b/handlers/admin-get/tables.ts index a2f85429..f40a5c1b 100644 --- a/handlers/admin-get/tables.ts +++ b/handlers/admin-get/tables.ts @@ -7,18 +7,23 @@ import { getWorkOrderTypes } from "../../helpers/functions.cache.js"; -export const handler: RequestHandler = (_request, response) => { +import { getSolidIconClasses } from "../../helpers/functions.icons.js"; + +export const handler: RequestHandler = async (_request, response) => { const workOrderTypes = getWorkOrderTypes(); const workOrderMilestoneTypes = getWorkOrderMilestoneTypes(); const lotStatuses = getLotStatuses(); const lotOccupantTypes = getLotOccupantTypes(); + const fontAwesomeIconClasses = await getSolidIconClasses(); + response.render("admin-tables", { headTitle: "Config Table Management", workOrderTypes, workOrderMilestoneTypes, lotStatuses, - lotOccupantTypes + lotOccupantTypes, + fontAwesomeIconClasses }); }; diff --git a/helpers/functions.icons.d.ts b/helpers/functions.icons.d.ts new file mode 100644 index 00000000..c890b9d8 --- /dev/null +++ b/helpers/functions.icons.d.ts @@ -0,0 +1 @@ +export declare const getSolidIconClasses: () => Promise; diff --git a/helpers/functions.icons.js b/helpers/functions.icons.js new file mode 100644 index 00000000..fbfd1ce7 --- /dev/null +++ b/helpers/functions.icons.js @@ -0,0 +1,15 @@ +import faIcons from "font-awesome-v5-icons"; +let solidIcons = []; +export const getSolidIconClasses = async () => { + if (solidIcons.length === 0) { + const allIcons = await faIcons.getList(); + const list = []; + for (const icon of allIcons) { + if (icon.styles.includes("solid")) { + list.push(icon.name); + } + } + solidIcons = list; + } + return solidIcons; +}; diff --git a/helpers/functions.icons.ts b/helpers/functions.icons.ts new file mode 100644 index 00000000..54b9f35d --- /dev/null +++ b/helpers/functions.icons.ts @@ -0,0 +1,21 @@ +import faIcons from "font-awesome-v5-icons"; + +let solidIcons: string[] = []; + +export const getSolidIconClasses = async () => { + if (solidIcons.length === 0) { + const allIcons = await faIcons.getList(); + + const list: string[] = []; + + for (const icon of allIcons) { + if ((icon.styles as string[]).includes("solid")) { + list.push(icon.name); + } + } + + solidIcons = list; + } + + return solidIcons; +}; diff --git a/helpers/initializer.database.js b/helpers/initializer.database.js index 429b87bf..90e9e8a3 100644 --- a/helpers/initializer.database.js +++ b/helpers/initializer.database.js @@ -155,6 +155,7 @@ export const initializeDatabase = () => { .prepare("create table if not exists LotOccupantTypes (" + "lotOccupantTypeId integer not null primary key autoincrement," + " lotOccupantType varchar(100) not null," + + " fontAwesomeIconClass varchar(50) not null default ''," + " orderNumber smallint not null default 0," + recordColumns + ")") diff --git a/helpers/initializer.database.ts b/helpers/initializer.database.ts index 9953082f..799c6e16 100644 --- a/helpers/initializer.database.ts +++ b/helpers/initializer.database.ts @@ -213,6 +213,7 @@ export const initializeDatabase = (): boolean => { "create table if not exists LotOccupantTypes (" + "lotOccupantTypeId integer not null primary key autoincrement," + " lotOccupantType varchar(100) not null," + + " fontAwesomeIconClass varchar(50) not null default ''," + " orderNumber smallint not null default 0," + recordColumns + ")" diff --git a/helpers/lotOccupancyDB/addLotOccupantType.d.ts b/helpers/lotOccupancyDB/addLotOccupantType.d.ts index ce5707b6..d0a3f431 100644 --- a/helpers/lotOccupancyDB/addLotOccupantType.d.ts +++ b/helpers/lotOccupancyDB/addLotOccupantType.d.ts @@ -1,6 +1,7 @@ import type * as recordTypes from "../../types/recordTypes"; interface AddLotOccupantTypeForm { lotOccupantType: string; + fontAwesomeIconClass?: string; orderNumber?: number; } export declare const addLotOccupantType: (lotOccupantTypeForm: AddLotOccupantTypeForm, requestSession: recordTypes.PartialSession) => number; diff --git a/helpers/lotOccupancyDB/addLotOccupantType.js b/helpers/lotOccupancyDB/addLotOccupantType.js index b1c21dfd..ad2814d7 100644 --- a/helpers/lotOccupancyDB/addLotOccupantType.js +++ b/helpers/lotOccupancyDB/addLotOccupantType.js @@ -6,11 +6,11 @@ export const addLotOccupantType = (lotOccupantTypeForm, requestSession) => { const rightNowMillis = Date.now(); const result = database .prepare("insert into LotOccupantTypes (" + - "lotOccupantType, orderNumber," + + "lotOccupantType, fontAwesomeIconClass, orderNumber," + " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + - " values (?, ?, ?, ?, ?, ?)") - .run(lotOccupantTypeForm.lotOccupantType, lotOccupantTypeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); + " values (?, ?, ?, ?, ?, ?, ?)") + .run(lotOccupantTypeForm.lotOccupantType, lotOccupantTypeForm.fontAwesomeIconClass || "", lotOccupantTypeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); database.close(); clearLotOccupantTypesCache(); return result.lastInsertRowid; diff --git a/helpers/lotOccupancyDB/addLotOccupantType.ts b/helpers/lotOccupancyDB/addLotOccupantType.ts index e231ac2b..de986f5c 100644 --- a/helpers/lotOccupancyDB/addLotOccupantType.ts +++ b/helpers/lotOccupancyDB/addLotOccupantType.ts @@ -7,6 +7,7 @@ import { clearLotOccupantTypesCache } from "../functions.cache.js"; interface AddLotOccupantTypeForm { lotOccupantType: string; + fontAwesomeIconClass?: string; orderNumber?: number; } @@ -21,13 +22,14 @@ export const addLotOccupantType = ( const result = database .prepare( "insert into LotOccupantTypes (" + - "lotOccupantType, orderNumber," + + "lotOccupantType, fontAwesomeIconClass, orderNumber," + " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + - " values (?, ?, ?, ?, ?, ?)" + " values (?, ?, ?, ?, ?, ?, ?)" ) .run( lotOccupantTypeForm.lotOccupantType, + lotOccupantTypeForm.fontAwesomeIconClass || "", lotOccupantTypeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, diff --git a/helpers/lotOccupancyDB/getLotOccupancyOccupants.js b/helpers/lotOccupancyDB/getLotOccupancyOccupants.js index 3a18f2ca..1b16e7fa 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyOccupants.js +++ b/helpers/lotOccupancyDB/getLotOccupancyOccupants.js @@ -10,7 +10,7 @@ export const getLotOccupancyOccupants = (lotOccupancyId, connectedDatabase) => { " o.occupantName, o.occupantAddress1, o.occupantAddress2," + " o.occupantCity, o.occupantProvince, o.occupantPostalCode," + " o.occupantPhoneNumber, o.occupantEmailAddress, o.occupantComment," + - " o.lotOccupantTypeId, t.lotOccupantType" + + " o.lotOccupantTypeId, t.lotOccupantType, t.fontAwesomeIconClass" + " from LotOccupancyOccupants o" + " left join LotOccupantTypes t on o.lotOccupantTypeId = t.lotOccupantTypeId" + " where o.recordDelete_timeMillis is null" + diff --git a/helpers/lotOccupancyDB/getLotOccupancyOccupants.ts b/helpers/lotOccupancyDB/getLotOccupancyOccupants.ts index 85811c45..dfd477ea 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyOccupants.ts +++ b/helpers/lotOccupancyDB/getLotOccupancyOccupants.ts @@ -20,7 +20,7 @@ export const getLotOccupancyOccupants = ( " o.occupantName, o.occupantAddress1, o.occupantAddress2," + " o.occupantCity, o.occupantProvince, o.occupantPostalCode," + " o.occupantPhoneNumber, o.occupantEmailAddress, o.occupantComment," + - " o.lotOccupantTypeId, t.lotOccupantType" + + " o.lotOccupantTypeId, t.lotOccupantType, t.fontAwesomeIconClass" + " from LotOccupancyOccupants o" + " left join LotOccupantTypes t on o.lotOccupantTypeId = t.lotOccupantTypeId" + " where o.recordDelete_timeMillis is null" + diff --git a/helpers/lotOccupancyDB/getLotOccupantTypes.js b/helpers/lotOccupancyDB/getLotOccupantTypes.js index 47e9ee7a..5f4b3ff8 100644 --- a/helpers/lotOccupancyDB/getLotOccupantTypes.js +++ b/helpers/lotOccupancyDB/getLotOccupantTypes.js @@ -3,7 +3,7 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; export const getLotOccupantTypes = () => { const database = sqlite(databasePath); const lotOccupantTypes = database - .prepare("select lotOccupantTypeId, lotOccupantType" + + .prepare("select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass" + " from LotOccupantTypes" + " where recordDelete_timeMillis is null" + " order by orderNumber, lotOccupantType") diff --git a/helpers/lotOccupancyDB/getLotOccupantTypes.ts b/helpers/lotOccupancyDB/getLotOccupantTypes.ts index 9c506c1d..c649042d 100644 --- a/helpers/lotOccupancyDB/getLotOccupantTypes.ts +++ b/helpers/lotOccupancyDB/getLotOccupantTypes.ts @@ -9,7 +9,7 @@ export const getLotOccupantTypes = (): recordTypes.LotOccupantType[] => { const lotOccupantTypes: recordTypes.LotOccupantType[] = database .prepare( - "select lotOccupantTypeId, lotOccupantType" + + "select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass" + " from LotOccupantTypes" + " where recordDelete_timeMillis is null" + " order by orderNumber, lotOccupantType" diff --git a/helpers/lotOccupancyDB/updateLotOccupantType.d.ts b/helpers/lotOccupancyDB/updateLotOccupantType.d.ts index bd5a7c49..0c563f22 100644 --- a/helpers/lotOccupancyDB/updateLotOccupantType.d.ts +++ b/helpers/lotOccupancyDB/updateLotOccupantType.d.ts @@ -2,6 +2,7 @@ import type * as recordTypes from "../../types/recordTypes"; interface UpdateLotOccupantTypeForm { lotOccupantTypeId: number | string; lotOccupantType: string; + fontAwesomeIconClass?: string; } export declare const updateLotOccupantType: (lotOccupantTypeForm: UpdateLotOccupantTypeForm, requestSession: recordTypes.PartialSession) => boolean; export default updateLotOccupantType; diff --git a/helpers/lotOccupancyDB/updateLotOccupantType.js b/helpers/lotOccupancyDB/updateLotOccupantType.js index 7bdb4e27..17be432c 100644 --- a/helpers/lotOccupancyDB/updateLotOccupantType.js +++ b/helpers/lotOccupancyDB/updateLotOccupantType.js @@ -7,11 +7,12 @@ export const updateLotOccupantType = (lotOccupantTypeForm, requestSession) => { const result = database .prepare("update LotOccupantTypes" + " set lotOccupantType = ?," + + " fontAwesomeIconClass = ?," + " recordUpdate_userName = ?," + " recordUpdate_timeMillis = ?" + " where lotOccupantTypeId = ?" + " and recordDelete_timeMillis is null") - .run(lotOccupantTypeForm.lotOccupantType, requestSession.user.userName, rightNowMillis, lotOccupantTypeForm.lotOccupantTypeId); + .run(lotOccupantTypeForm.lotOccupantType, lotOccupantTypeForm.fontAwesomeIconClass || "", requestSession.user.userName, rightNowMillis, lotOccupantTypeForm.lotOccupantTypeId); database.close(); clearLotOccupantTypesCache(); return result.changes > 0; diff --git a/helpers/lotOccupancyDB/updateLotOccupantType.ts b/helpers/lotOccupancyDB/updateLotOccupantType.ts index 2b61850e..0e1e7f5b 100644 --- a/helpers/lotOccupancyDB/updateLotOccupantType.ts +++ b/helpers/lotOccupancyDB/updateLotOccupantType.ts @@ -9,6 +9,7 @@ import type * as recordTypes from "../../types/recordTypes"; interface UpdateLotOccupantTypeForm { lotOccupantTypeId: number | string; lotOccupantType: string; + fontAwesomeIconClass?: string; } export const updateLotOccupantType = ( @@ -23,6 +24,7 @@ export const updateLotOccupantType = ( .prepare( "update LotOccupantTypes" + " set lotOccupantType = ?," + + " fontAwesomeIconClass = ?," + " recordUpdate_userName = ?," + " recordUpdate_timeMillis = ?" + " where lotOccupantTypeId = ?" + @@ -30,6 +32,7 @@ export const updateLotOccupantType = ( ) .run( lotOccupantTypeForm.lotOccupantType, + lotOccupantTypeForm.fontAwesomeIconClass || "", requestSession.user.userName, rightNowMillis, lotOccupantTypeForm.lotOccupantTypeId diff --git a/public-typescript/adminTables.js b/public-typescript/adminTables.js index da841e24..cb88e961 100644 --- a/public-typescript/adminTables.js +++ b/public-typescript/adminTables.js @@ -2,6 +2,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); (() => { const los = exports.los; + const refreshFontAwesomeIcon = (changeEvent) => { + const inputElement = changeEvent.currentTarget; + const fontAwesomeIconClass = inputElement.value; + inputElement.closest(".field").querySelectorAll(".button.is-static")[1].innerHTML = + ""; + }; let workOrderTypes = exports.workOrderTypes; delete exports.workOrderTypes; const updateWorkOrderType = (submitEvent) => { @@ -694,7 +700,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); if (workOrderTypes.length === 0) { containerElement.innerHTML = "" + - '' + + '' + '
' + '

There are no active ' + cityssm.escapeHTML(exports.aliases.lot.toLowerCase()) + @@ -711,27 +717,46 @@ Object.defineProperty(exports, "__esModule", { value: true }); const tableRowElement = document.createElement("tr"); tableRowElement.dataset.lotOccupantTypeId = lotOccupantType.lotOccupantTypeId.toString(); + const formId = "form--lotOccupantType-" + lotOccupantType.lotOccupantTypeId; tableRowElement.innerHTML = "" + - "

" + - '' + - ('
' + + ('
' + '
' + '' + "
" + - '
' + - '' + - "
" + "
") + - "" + "" + + "" + + ('
' + + '
fa-
' + + '
' + + '' + + "
" + + '
' + + '
' + + "
") + + "" + + ("" + + ('
') + + '" + + '' + + "
" + + "") + '' + '
' + '
' + @@ -761,6 +786,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); "
" + "
" + ""; + tableRowElement + .querySelector("input[name='fontAwesomeIconClass']") + .addEventListener("keyup", refreshFontAwesomeIcon); tableRowElement .querySelector("form") .addEventListener("submit", updateLotOccupantType); diff --git a/public-typescript/adminTables.ts b/public-typescript/adminTables.ts index d3c53031..aa6efc22 100644 --- a/public-typescript/adminTables.ts +++ b/public-typescript/adminTables.ts @@ -13,6 +13,15 @@ declare const bulmaJS: BulmaJS; (() => { const los = exports.los as globalTypes.LOS; + const refreshFontAwesomeIcon = (changeEvent: Event) => { + const inputElement = changeEvent.currentTarget as HTMLInputElement; + + const fontAwesomeIconClass = inputElement.value; + + inputElement.closest(".field")!.querySelectorAll(".button.is-static")[1].innerHTML = + ""; + }; + /* * Work Order Types */ @@ -1018,7 +1027,7 @@ declare const bulmaJS: BulmaJS; if (workOrderTypes.length === 0) { containerElement.innerHTML = "" + - '' + + '' + '
' + '

There are no active ' + cityssm.escapeHTML(exports.aliases.lot.toLowerCase()) + @@ -1040,27 +1049,47 @@ declare const bulmaJS: BulmaJS; tableRowElement.dataset.lotOccupantTypeId = lotOccupantType.lotOccupantTypeId.toString(); + const formId = "form--lotOccupantType-" + lotOccupantType.lotOccupantTypeId; + tableRowElement.innerHTML = "" + - "

" + - '' + - ('
' + + ('
' + '
' + '' + "
" + - '
' + - '' + - "
" + "
") + - "" + "" + + "" + + ('
' + + '
fa-
' + + '
' + + '' + + "
" + + '
' + + '
' + + "
") + + "" + + ("" + + ('
') + + '" + + '' + + "
" + + "") + '' + '
' + '
' + @@ -1091,6 +1120,10 @@ declare const bulmaJS: BulmaJS; "
" + ""; + tableRowElement + .querySelector("input[name='fontAwesomeIconClass']")! + .addEventListener("keyup", refreshFontAwesomeIcon); + tableRowElement .querySelector("form")! .addEventListener("submit", updateLotOccupantType); diff --git a/public-typescript/lotOccupancySearch.js b/public-typescript/lotOccupancySearch.js index 9cf0f85c..0e60b076 100644 --- a/public-typescript/lotOccupancySearch.js +++ b/public-typescript/lotOccupancySearch.js @@ -68,6 +68,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); '' + + (' ') + cityssm.escapeHTML(occupant.occupantName || "") + "
"; } diff --git a/public-typescript/lotOccupancySearch.ts b/public-typescript/lotOccupancySearch.ts index 2c5b0e96..0fbaebcd 100644 --- a/public-typescript/lotOccupancySearch.ts +++ b/public-typescript/lotOccupancySearch.ts @@ -99,6 +99,9 @@ declare const cityssm: cityssmGlobal; '' + + (' ') + cityssm.escapeHTML(occupant.occupantName || "") + "
"; } diff --git a/public-typescript/workOrderEdit.js b/public-typescript/workOrderEdit.js index d8c123a5..3a9748b9 100644 --- a/public-typescript/workOrderEdit.js +++ b/public-typescript/workOrderEdit.js @@ -303,6 +303,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); '' + + ' ' + cityssm.escapeHTML(occupant.occupantName) + "
"); }, "")) + diff --git a/public-typescript/workOrderEdit.ts b/public-typescript/workOrderEdit.ts index f59c91bb..ed2f99ee 100644 --- a/public-typescript/workOrderEdit.ts +++ b/public-typescript/workOrderEdit.ts @@ -426,6 +426,13 @@ declare const bulmaJS: BulmaJS; '' + + ' ' + cityssm.escapeHTML(occupant.occupantName!) + "
" ); diff --git a/public-typescript/workOrderSearch.js b/public-typescript/workOrderSearch.js index d81ae63f..2ce6f40c 100644 --- a/public-typescript/workOrderSearch.js +++ b/public-typescript/workOrderSearch.js @@ -43,7 +43,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); '' + - ' ' + cityssm.escapeHTML(occupant.occupantName || "(No Name)") + diff --git a/public-typescript/workOrderSearch.ts b/public-typescript/workOrderSearch.ts index 3bdead25..4862dc24 100644 --- a/public-typescript/workOrderSearch.ts +++ b/public-typescript/workOrderSearch.ts @@ -73,7 +73,7 @@ declare const cityssm: cityssmGlobal; '' + - ' ' + cityssm.escapeHTML(occupant.occupantName || "(No Name)") + diff --git a/public/javascripts/adminTables.min.js b/public/javascripts/adminTables.min.js index dfcfc805..55a9a1da 100644 --- a/public/javascripts/adminTables.min.js +++ b/public/javascripts/adminTables.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los;let t=exports.workOrderTypes;delete exports.workOrderTypes;const s=s=>{s.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderType",s.currentTarget,e=>{e.success?(t=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},o=s=>{const o=s.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(t=e.workOrderTypes).length?l():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},r=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},a=s=>{const o=s.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:s.shiftKey?"1":"0"},e=>{e.success?(t=e.workOrderTypes,l()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},l=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==t.length){e.innerHTML="";for(const l of t){const t=document.createElement("tr");t.dataset.workOrderTypeId=l.workOrderTypeId.toString(),t.innerHTML='
',t.querySelector("form").addEventListener("submit",s),t.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",r),t.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",a),t.querySelector(".button--deleteWorkOrderType").addEventListener("click",o),e.append(t)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",s=>{s.preventDefault();const o=s.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderType",o,e=>{e.success?(t=e.workOrderTypes,l(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),l();let n=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(n=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},d=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(n=e.workOrderMilestoneTypes).length?p():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},c=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(n=e.workOrderMilestoneTypes,p()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},p=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==n.length){e.innerHTML="";for(const t of n){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",i),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",c),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",u),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",d),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(n=e.workOrderMilestoneTypes,p(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),p();let m=exports.lotStatuses;delete exports.lotStatuses;const y=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(m=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},v=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(m=e.lotStatuses).length?g():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},T=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},b=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(m=e.lotStatuses,g()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},g=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==t.length){e.innerHTML="";for(const t of m){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",y),s.querySelector(".button--moveLotStatusUp").addEventListener("click",T),s.querySelector(".button--moveLotStatusDown").addEventListener("click",b),s.querySelector(".button--deleteLotStatus").addEventListener("click",v),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotStatus",s,e=>{e.success?(m=e.lotStatuses,g(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}),g();let S=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(S=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},f=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(S=e.lotOccupantTypes).length?k():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},M=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,k()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},x=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(S=e.lotOccupantTypes,k()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},k=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==t.length){e.innerHTML="";for(const t of S){const s=document.createElement("tr");s.dataset.lotOccupantTypeId=t.lotOccupantTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",O),s.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",M),s.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",x),s.querySelector(".button--deleteLotOccupantType").addEventListener("click",f),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotOccupantType",s,e=>{e.success?(S=e.lotOccupantTypes,k(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),k()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=e=>{const t=e.currentTarget,s=t.value;t.closest(".field").querySelectorAll(".button.is-static")[1].innerHTML=''};let s=exports.workOrderTypes;delete exports.workOrderTypes;const o=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderType",t.currentTarget,e=>{e.success?(s=e.workOrderTypes,bulmaJS.alert({message:"Work Order Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},r=t=>{const o=t.currentTarget.closest("tr"),r=o.dataset.workOrderTypeId;bulmaJS.confirm({title:"Delete Work Order Type",message:"Are you sure you want to delete this work order type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderType",{workOrderTypeId:r},e=>{e.success?(0===(s=e.workOrderTypes).length?n():o.remove(),bulmaJS.alert({message:"Work Order Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},a=t=>{const o=t.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeUp",{workOrderTypeId:o,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(s=e.workOrderTypes,n()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},l=t=>{const o=t.currentTarget.closest("tr").dataset.workOrderTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderTypeDown",{workOrderTypeId:o,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(s=e.workOrderTypes,n()):bulmaJS.alert({title:"Error Moving Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})},n=()=>{const e=document.querySelector("#container--workOrderTypes");if(0!==s.length){e.innerHTML="";for(const t of s){const s=document.createElement("tr");s.dataset.workOrderTypeId=t.workOrderTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",o),s.querySelector(".button--moveWorkOrderTypeUp").addEventListener("click",a),s.querySelector(".button--moveWorkOrderTypeDown").addEventListener("click",l),s.querySelector(".button--deleteWorkOrderType").addEventListener("click",r),e.append(s)}}else e.innerHTML='

There are no active work order types.

'};document.querySelector("#form--addWorkOrderType").addEventListener("submit",t=>{t.preventDefault();const o=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderType",o,e=>{e.success?(s=e.workOrderTypes,n(),o.reset(),o.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),n();let i=exports.workOrderMilestoneTypes;delete exports.workOrderMilestoneTypes;const c=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateWorkOrderMilestoneType",t.currentTarget,e=>{e.success?(i=e.workOrderMilestoneTypes,bulmaJS.alert({message:"Work Order Milestone Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},d=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.workOrderMilestoneTypeId;bulmaJS.confirm({title:"Delete Work Order Milestone Type",message:"Are you sure you want to delete this work order milestone type?
Note that no work orders will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order Milestone Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteWorkOrderMilestoneType",{workOrderMilestoneTypeId:o},e=>{e.success?(0===(i=e.workOrderMilestoneTypes).length?m():s.remove(),bulmaJS.alert({message:"Work Order Milestone Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},u=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeUp",{workOrderMilestoneTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(i=e.workOrderMilestoneTypes,m()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},p=t=>{const s=t.currentTarget.closest("tr").dataset.workOrderMilestoneTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveWorkOrderMilestoneTypeDown",{workOrderMilestoneTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(i=e.workOrderMilestoneTypes,m()):bulmaJS.alert({title:"Error Moving Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})},m=()=>{const e=document.querySelector("#container--workOrderMilestoneTypes");if(0!==i.length){e.innerHTML="";for(const t of i){const s=document.createElement("tr");s.dataset.workOrderMilestoneTypeId=t.workOrderMilestoneTypeId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",c),s.querySelector(".button--moveWorkOrderMilestoneTypeUp").addEventListener("click",u),s.querySelector(".button--moveWorkOrderMilestoneTypeDown").addEventListener("click",p),s.querySelector(".button--deleteWorkOrderMilestoneType").addEventListener("click",d),e.append(s)}}else e.innerHTML='

There are no active work order milestone types.

'};document.querySelector("#form--addWorkOrderMilestoneType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddWorkOrderMilestoneType",s,e=>{e.success?(i=e.workOrderMilestoneTypes,m(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding Work Order Milestone Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),m();let y=exports.lotStatuses;delete exports.lotStatuses;const v=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotStatus",t.currentTarget,e=>{e.success?(y=e.lotStatuses,bulmaJS.alert({message:exports.aliases.lot+" Status Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},T=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotStatusId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" Status",message:"Are you sure you want to delete this status?
Note that no "+exports.aliases.lots.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete Status",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotStatus",{lotStatusId:o},e=>{e.success?(0===(y=e.lotStatuses).length?S():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" Status Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},b=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusUp",{lotStatusId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(y=e.lotStatuses,S()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},g=t=>{const s=t.currentTarget.closest("tr").dataset.lotStatusId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotStatusDown",{lotStatusId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(y=e.lotStatuses,S()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})},S=()=>{const e=document.querySelector("#container--lotStatuses");if(0!==s.length){e.innerHTML="";for(const t of y){const s=document.createElement("tr");s.dataset.lotStatusId=t.lotStatusId.toString(),s.innerHTML='
',s.querySelector("form").addEventListener("submit",v),s.querySelector(".button--moveLotStatusUp").addEventListener("click",b),s.querySelector(".button--moveLotStatusDown").addEventListener("click",g),s.querySelector(".button--deleteLotStatus").addEventListener("click",T),e.append(s)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" statuses.

"};document.querySelector("#form--addLotStatus").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotStatus",s,e=>{e.success?(y=e.lotStatuses,S(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" Status",message:e.errorMessage||"",contextualColorName:"danger"})})}),S();let f=exports.lotOccupantTypes;delete exports.lotOccupantTypes;const O=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/admin/doUpdateLotOccupantType",t.currentTarget,e=>{e.success?(f=e.lotOccupantTypes,bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},M=t=>{const s=t.currentTarget.closest("tr"),o=s.dataset.lotOccupantTypeId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:"Are you sure you want to delete this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupant.toLowerCase()+" type?
Note that no "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" will be removed.",messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Delete "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/admin/doDeleteLotOccupantType",{lotOccupantTypeId:o},e=>{e.success?(0===(f=e.lotOccupantTypes).length?w():s.remove(),bulmaJS.alert({message:exports.aliases.lot+" "+exports.aliases.occupant+" Type Deleted Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Deleting "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},x=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeUp",{lotOccupantTypeId:s,moveToTop:t.shiftKey?"1":"0"},e=>{e.success?(f=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},k=t=>{const s=t.currentTarget.closest("tr").dataset.lotOccupantTypeId;cityssm.postJSON(e.urlPrefix+"/admin/doMoveLotOccupantTypeDown",{lotOccupantTypeId:s,moveToBottom:t.shiftKey?"1":"0"},e=>{e.success?(f=e.lotOccupantTypes,w()):bulmaJS.alert({title:"Error Moving "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})},w=()=>{const e=document.querySelector("#container--lotOccupantTypes");if(0!==s.length){e.innerHTML="";for(const s of f){const o=document.createElement("tr");o.dataset.lotOccupantTypeId=s.lotOccupantTypeId.toString();const r="form--lotOccupantType-"+s.lotOccupantTypeId;o.innerHTML='
fa-
',o.querySelector("input[name='fontAwesomeIconClass']").addEventListener("keyup",t),o.querySelector("form").addEventListener("submit",O),o.querySelector(".button--moveLotOccupantTypeUp").addEventListener("click",x),o.querySelector(".button--moveLotOccupantTypeDown").addEventListener("click",k),o.querySelector(".button--deleteLotOccupantType").addEventListener("click",M),e.append(o)}}else e.innerHTML='

There are no active '+cityssm.escapeHTML(exports.aliases.lot.toLowerCase())+" "+cityssm.escapeHTML(exports.aliases.occupant.toLowerCase())+" types.

"};document.querySelector("#form--addLotOccupantType").addEventListener("submit",t=>{t.preventDefault();const s=t.currentTarget;cityssm.postJSON(e.urlPrefix+"/admin/doAddLotOccupantType",s,e=>{e.success?(f=e.lotOccupantTypes,w(),s.reset(),s.querySelector("input").focus()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot+" "+exports.aliases.occupant+" Type",message:e.errorMessage||"",contextualColorName:"danger"})})}),w()})(); \ No newline at end of file diff --git a/public/javascripts/lotOccupancySearch.min.js b/public/javascripts/lotOccupancySearch.min.js index 405719c4..47020421 100644 --- a/public/javascripts/lotOccupancySearch.min.js +++ b/public/javascripts/lotOccupancySearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,a=exports.lotOccupancyPrints,e=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),c=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),l=()=>{const l=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.occupancies+"...
",cityssm.postJSON(t.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",e,e=>{if(0===e.lotOccupancies.length)return void(s.innerHTML='

There are no '+cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase())+" records that meet the search criteria.

");const i=document.createElement("tbody"),o=cityssm.dateToString(new Date);for(const s of e.lotOccupancies){let e="";e=s.occupancyStartDateString<=o&&(""===s.occupancyEndDateString||s.occupancyEndDateString>=o)?'':s.occupancyStartDateString>o?'':'';let c="";for(const t of s.lotOccupancyOccupants)c+=''+cityssm.escapeHTML(t.occupantName||"")+"
";i.insertAdjacentHTML("beforeend",''+e+''+cityssm.escapeHTML(s.occupancyType)+""+(s.lotName?''+cityssm.escapeHTML(s.lotName)+"":'(No '+cityssm.escapeHTML(exports.aliases.lot)+")")+'
'+cityssm.escapeHTML(s.mapName||"")+""+s.occupancyStartDateString+""+(s.occupancyEndDate?s.occupancyEndDateString:'(No End Date)')+""+c+""+(a.length>0?'':"")+"")}s.innerHTML='"+(a.length>0?'':"")+'
'+cityssm.escapeHTML(exports.aliases.occupancy)+" Type"+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.occupancyStartDate)+"End Date"+cityssm.escapeHTML(exports.aliases.occupants)+"Print
Displaying '+(l+1).toString()+" to "+Math.min(e.count,c+l)+" of "+e.count+'
'+(l>0?'
':"")+(c+l
':"")+"
",s.querySelector("table").append(i),l>0&&s.querySelector("button[data-page='previous']").addEventListener("click",r),c+l{i.value="0",l()},r=()=>{i.value=Math.max(Number.parseInt(i.value,10)-c,0).toString(),l()},n=()=>{i.value=(Number.parseInt(i.value,10)+c).toString(),l()},p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",o);e.addEventListener("submit",t=>{t.preventDefault(),o()}),l()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const t=exports.los,a=exports.lotOccupancyPrints,e=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),c=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),i=document.querySelector("#searchFilter--offset"),o=()=>{const o=Number.parseInt(i.value,10);s.innerHTML='

Loading '+exports.aliases.occupancies+"...
",cityssm.postJSON(t.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",e,e=>{if(0===e.lotOccupancies.length)return void(s.innerHTML='

There are no '+cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase())+" records that meet the search criteria.

");const i=document.createElement("tbody"),r=cityssm.dateToString(new Date);for(const s of e.lotOccupancies){let e="";e=s.occupancyStartDateString<=r&&(""===s.occupancyEndDateString||s.occupancyEndDateString>=r)?'':s.occupancyStartDateString>r?'':'';let c="";for(const t of s.lotOccupancyOccupants)c+=' '+cityssm.escapeHTML(t.occupantName||"")+"
";i.insertAdjacentHTML("beforeend",'
"+(a.length>0?'':"")+"")}s.innerHTML='
'+e+''+cityssm.escapeHTML(s.occupancyType)+""+(s.lotName?''+cityssm.escapeHTML(s.lotName)+"":'(No '+cityssm.escapeHTML(exports.aliases.lot)+")")+'
'+cityssm.escapeHTML(s.mapName||"")+"
"+s.occupancyStartDateString+""+(s.occupancyEndDate?s.occupancyEndDateString:'(No End Date)')+""+c+"
"+(a.length>0?'':"")+'
'+cityssm.escapeHTML(exports.aliases.occupancy)+" Type"+cityssm.escapeHTML(exports.aliases.lot)+""+cityssm.escapeHTML(exports.aliases.occupancyStartDate)+"End Date"+cityssm.escapeHTML(exports.aliases.occupants)+"Print
Displaying '+(o+1).toString()+" to "+Math.min(e.count,c+o)+" of "+e.count+'
'+(o>0?'
':"")+(c+o
':"")+"
",s.querySelector("table").append(i),o>0&&s.querySelector("button[data-page='previous']").addEventListener("click",l),c+o{i.value="0",o()},l=()=>{i.value=Math.max(Number.parseInt(i.value,10)-c,0).toString(),o()},n=()=>{i.value=(Number.parseInt(i.value,10)+c).toString(),o()},p=e.querySelectorAll("input, select");for(const t of p)t.addEventListener("change",r);e.addEventListener("submit",t=>{t.preventDefault(),r()}),o()})(); \ No newline at end of file diff --git a/public/javascripts/workOrderEdit.min.js b/public/javascripts/workOrderEdit.min.js index a05b33bb..8fefef15 100644 --- a/public/javascripts/workOrderEdit.min.js +++ b/public/javascripts/workOrderEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#workOrderEdit--workOrderId").value,o=""===t,r=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(r.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(r),r.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/"+(o?"doCreateWorkOrder":"doUpdateWorkOrder"),t.currentTarget,t=>{t.success?(cityssm.disableNavBlocker(),o?window.location.href=e.urlPrefix+"/workOrders/"+t.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})});const s=r.querySelectorAll("input, select");for(const e of s)e.addEventListener("change",cityssm.enableNavBlocker);let a;if(!o){const o=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:t},o=>{o.success?window.location.href=e.urlPrefix+"/workOrders/"+encodeURIComponent(t):bulmaJS.alert({title:"Error Closing Work Order",message:o.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{a.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.confirm({title:"Close Work Order with Outstanding Milestones",message:"Are you sure you want to close this work order with outstanding milestones?",contextualColorName:"danger",okButton:{text:"Yes, Close Work Order",callbackFunction:o}}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:o}})});const r=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:t},t=>{t.success?window.location.href=e.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:r}})})}if(!o){let o=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;delete exports.workOrderLotOccupancies;const s=o=>{const s=o.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:s},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},a=(r,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:t,lotId:r},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},n=(o,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:o},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},l=e=>{const t=e.currentTarget.dataset.lotId;a(t)},i=()=>{var t;const a=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(a.innerHTML='

There are no '+exports.aliases.occupancies.toLowerCase()+" associated with this work order.

");a.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+""+exports.aliases.occupancyStartDate+"End Date"+exports.aliases.occupants+'
';const n=cityssm.dateToString(new Date);for(const i of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=i.lotOccupancyId.toString();const c=!(i.occupancyEndDate&&i.occupancyEndDateStringi.lotId===e.lotId);r.innerHTML=''+(c?'':'')+''+cityssm.escapeHTML(i.occupancyType||"")+"",i.lotId?r.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(i.lotName||"")+(d?"":' ')+""):r.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),r.insertAdjacentHTML("beforeend",""+i.occupancyStartDateString+""+(i.occupancyEndDate?i.occupancyEndDateString:'(No End Date)')+""+(0===i.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":null===(t=i.lotOccupancyOccupants)||void 0===t?void 0:t.reduce((e,t)=>e+''+cityssm.escapeHTML(t.occupantName)+"
",""))+''),i.lotId&&!d&&r.querySelector(".button--addLot").addEventListener("click",l),r.querySelector(".button--deleteLotOccupancy").addEventListener("click",s),a.querySelector("tbody").append(r)}},c=r=>{const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),a=o.find(e=>e.lotId===s);let n;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateLotStatus",t.currentTarget,e=>{e.success?(o=e.workOrderLots,m(),n()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editLotStatus",{onshow:o=>{e.populateAliases(o),o.querySelector("#lotStatusEdit--lotId").value=s.toString(),o.querySelector("#lotStatusEdit--lotName").value=a.lotName;const r=o.querySelector("#lotStatusEdit--lotStatusId");let n=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===a.lotStatusId&&(n=!0),r.append(t)}if(!n&&a.lotStatusId){const e=document.createElement("option");e.value=a.lotStatusId.toString(),e.textContent=a.lotStatus,r.append(e)}a.lotStatusId&&(r.value=a.lotStatusId.toString()),o.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown:(e,t)=>{n=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=r=>{const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:t,lotId:s},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},u=()=>{const t=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=o.length.toString(),0!==o.length){t.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+' TypeStatus
';for(const r of o){const o=document.createElement("tr");o.className="container--lot",o.dataset.lotId=r.lotId.toString(),o.innerHTML=''+cityssm.escapeHTML(r.lotName||"")+""+cityssm.escapeHTML(r.mapName||"")+""+cityssm.escapeHTML(r.lotType||"")+""+(r.lotStatusId?cityssm.escapeHTML(r.lotStatus||""):'(No Status)')+' ',o.querySelector(".button--editLotStatus").addEventListener("click",c),o.querySelector(".button--deleteLot").addEventListener("click",d),t.querySelector("tbody").append(o)}}else t.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" associated with this work order.

"},m=()=>{i(),u()};m();const p=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotOccupancyId;n(o,e=>{e&&t.remove()})};document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",o,e=>{if(0!==e.lotOccupancies.length){r.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+"Start DateEnd Date"+exports.aliases.occupants+"
";for(const t of e.lotOccupancies){const e=document.createElement("tr");e.className="container--lotOccupancy",e.dataset.lotOccupancyId=t.lotOccupancyId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.occupancyType||"")+"",t.lotId?e.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(t.lotName||"")+""):e.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),e.insertAdjacentHTML("beforeend",""+t.occupancyStartDateString+""+(t.occupancyEndDate?t.occupancyEndDateString:'(No End Date)')+""+(0===t.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(t.lotOccupancyOccupants[0].occupantName)+(t.lotOccupancyOccupants.length>1?" plus "+(t.lotOccupancyOccupants.length-1):""))+""),e.querySelector(".button--addLotOccupancy").addEventListener("click",p),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotOccupancyAdd"),a.querySelector("#lotOccupancySearch--notWorkOrderId").value=t,a.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",s),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const y=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotId;a(o,e=>{e&&t.remove()})};document.querySelector("#button--addLot").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",o,e=>{if(0!==e.lots.length){r.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+" TypeStatus
";for(const t of e.lots){const e=document.createElement("tr");e.className="container--lot",e.dataset.lotId=t.lotId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.lotName||"")+""+cityssm.escapeHTML(t.mapName||"")+""+cityssm.escapeHTML(t.lotType||"")+""+cityssm.escapeHTML(t.lotStatus||"")+"",e.querySelector(".button--addLot").addEventListener("click",y),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLot",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotAdd"),a.querySelector("#lotSearch--notWorkOrderId").value=t;const n=a.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,n.append(t)}s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",s),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}let n=exports.workOrderComments;delete exports.workOrderComments;const l=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10),s=n.find(e=>e.workOrderCommentId===r);let a,l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderComment",a,e=>{e.success?(n=e.workOrderComments,l(),c()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("workOrder-editComment",{onshow:e=>{e.querySelector("#workOrderCommentEdit--workOrderId").value=t,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=r.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=s.workOrderComment;const o=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");o.value=s.workOrderCommentDateString;const a=cityssm.dateToString(new Date);o.max=s.workOrderCommentDateString<=a?a:s.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=s.workOrderCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(a=t.querySelector("form")).addEventListener("submit",i),l=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderComment",{workOrderId:t,workOrderCommentId:r},e=>{e.success?(n=e.workOrderComments,c()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},c=()=>{const e=document.querySelector("#container--workOrderComments");if(0===n.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of n){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",l),o.querySelector(".button--delete").addEventListener("click",i),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},d=()=>{let o;const r=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderComment",t.currentTarget,e=>{e.success&&(n=e.workOrderComments,c(),o())})};cityssm.openHtmlModal("workOrder-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#workOrderCommentAdd--workOrderId").value=t,o.querySelector("form").addEventListener("submit",r)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})};if(o||(document.querySelector("#workOrderComments--add").addEventListener("click",d),c()),!o){a=exports.workOrderMilestones,delete exports.workOrderMilestones;const o=e=>{e.success?(a=e.workOrderMilestones,i()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage||"",contextualColorName:"danger"})},r=r=>{r.preventDefault();const s=cityssm.dateToString(new Date),n=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=a.find(e=>e.workOrderMilestoneId===n);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(l.workOrderMilestoneDateString>s?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:n},o)}}})},s=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:s},o)}}})},n=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:s,workOrderId:t},o)}}})},l=r=>{r.preventDefault();const s=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=a.find(e=>e.workOrderMilestoneId===s);let l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",t.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=t,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=n.workOrderMilestoneId.toString();const o=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===n.workOrderMilestoneTypeId&&(t.selected=!0,r=!0),o.append(t)}if(!r&&n.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=n.workOrderMilestoneTypeId.toString(),e.textContent=n.workOrderMilestoneType,e.selected=!0,o.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=n.workOrderMilestoneDateString,n.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=n.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=n.workOrderMilestoneDescription},onshown:(t,o)=>{l=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("form").addEventListener("submit",i)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=()=>{const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of a){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType||"")+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription||"")+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",s):(o.querySelector(".button--editMilestone").addEventListener("click",l),o.querySelector(".button--completeMilestone").addEventListener("click",r)),o.querySelector(".button--deleteMilestone").addEventListener("click",n),e.append(o)}bulmaJS.init(e)};i(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let r,s,a;const n=t=>{t&&t.preventDefault();const n=cityssm.dateToString(new Date),l=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderMilestone",s,e=>{o(e),e.success&&a()})};r.querySelector("#milestoneAdd--workOrderMilestoneDateString").value{e.querySelector("#milestoneAdd--workOrderId").value=t;const o=e.querySelector("#milestoneAdd--workOrderMilestoneTypeId");for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,o.append(t)}e.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate=new Date},onshown:(t,o)=>{r=t,a=o,e.initializeDatePickers(t),e.initializeTimePickers(t),bulmaJS.toggleHtmlClipped(),(s=t.querySelector("form")).addEventListener("submit",n)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("#workOrderEdit--workOrderId").value,o=""===t,r=document.querySelector("#form--workOrderEdit");e.initializeDatePickers(r.querySelector("#workOrderEdit--workOrderOpenDateString").closest(".field")),e.initializeUnlockFieldButtons(r),r.addEventListener("submit",t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/"+(o?"doCreateWorkOrder":"doUpdateWorkOrder"),t.currentTarget,t=>{t.success?(cityssm.disableNavBlocker(),o?window.location.href=e.urlPrefix+"/workOrders/"+t.workOrderId+"/edit":bulmaJS.alert({message:"Work Order Updated Successfully",contextualColorName:"success"})):bulmaJS.alert({title:"Error Updating Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})});const s=r.querySelectorAll("input, select");for(const e of s)e.addEventListener("change",cityssm.enableNavBlocker);let a;if(!o){const o=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCloseWorkOrder",{workOrderId:t},o=>{o.success?window.location.href=e.urlPrefix+"/workOrders/"+encodeURIComponent(t):bulmaJS.alert({title:"Error Closing Work Order",message:o.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--closeWorkOrder").addEventListener("click",()=>{a.some(e=>!e.workOrderMilestoneCompletionDate)?bulmaJS.confirm({title:"Close Work Order with Outstanding Milestones",message:"Are you sure you want to close this work order with outstanding milestones?",contextualColorName:"danger",okButton:{text:"Yes, Close Work Order",callbackFunction:o}}):bulmaJS.confirm({title:"Close Work Order",message:"Are you sure you want to close this work order?",contextualColorName:"info",okButton:{text:"Yes, Close Work Order",callbackFunction:o}})});const r=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrder",{workOrderId:t},t=>{t.success?window.location.href=e.urlPrefix+"/workOrders":bulmaJS.alert({title:"Error Deleting Work Order",message:t.errorMessage||"",contextualColorName:"danger"})})};document.querySelector("#button--deleteWorkOrder").addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:"Delete Work Order",message:"Are you sure you want to delete this work order?",contextualColorName:"warning",okButton:{text:"Yes, Delete Work Order",callbackFunction:r}})})}if(!o){let o=exports.workOrderLots;delete exports.workOrderLots;let r=exports.workOrderLotOccupancies;delete exports.workOrderLotOccupancies;const s=o=>{const s=o.currentTarget.closest(".container--lotOccupancy").dataset.lotOccupancyId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:s},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},a=(r,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLot",{workOrderId:t,lotId:r},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.lot,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},n=(o,s)=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderLotOccupancy",{workOrderId:t,lotOccupancyId:o},e=>{e.success?(r=e.workOrderLotOccupancies,m()):bulmaJS.alert({title:"Error Adding "+exports.aliases.occupancy,message:e.errorMessage||"",contextualColorName:"danger"}),s&&s(e.success)})},l=e=>{const t=e.currentTarget.dataset.lotId;a(t)},i=()=>{var t;const a=document.querySelector("#container--lotOccupancies");if(document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent=r.length.toString(),0===r.length)return void(a.innerHTML='

There are no '+exports.aliases.occupancies.toLowerCase()+" associated with this work order.

");a.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+""+exports.aliases.occupancyStartDate+"End Date"+exports.aliases.occupants+'
';const n=cityssm.dateToString(new Date);for(const i of r){const r=document.createElement("tr");r.className="container--lotOccupancy",r.dataset.lotOccupancyId=i.lotOccupancyId.toString();const c=!(i.occupancyEndDate&&i.occupancyEndDateStringi.lotId===e.lotId);r.innerHTML=''+(c?'':'')+''+cityssm.escapeHTML(i.occupancyType||"")+"",i.lotId?r.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(i.lotName||"")+(d?"":' ')+""):r.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),r.insertAdjacentHTML("beforeend",""+i.occupancyStartDateString+""+(i.occupancyEndDate?i.occupancyEndDateString:'(No End Date)')+""+(0===i.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":null===(t=i.lotOccupancyOccupants)||void 0===t?void 0:t.reduce((e,t)=>e+' '+cityssm.escapeHTML(t.occupantName)+"
",""))+''),i.lotId&&!d&&r.querySelector(".button--addLot").addEventListener("click",l),r.querySelector(".button--deleteLotOccupancy").addEventListener("click",s),a.querySelector("tbody").append(r)}},c=r=>{const s=Number.parseInt(r.currentTarget.closest(".container--lot").dataset.lotId,10),a=o.find(e=>e.lotId===s);let n;const l=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateLotStatus",t.currentTarget,e=>{e.success?(o=e.workOrderLots,m(),n()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("lot-editLotStatus",{onshow:o=>{e.populateAliases(o),o.querySelector("#lotStatusEdit--lotId").value=s.toString(),o.querySelector("#lotStatusEdit--lotName").value=a.lotName;const r=o.querySelector("#lotStatusEdit--lotStatusId");let n=!1;for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,e.lotStatusId===a.lotStatusId&&(n=!0),r.append(t)}if(!n&&a.lotStatusId){const e=document.createElement("option");e.value=a.lotStatusId.toString(),e.textContent=a.lotStatus,r.append(e)}a.lotStatusId&&(r.value=a.lotStatusId.toString()),o.querySelector("form").insertAdjacentHTML("beforeend",'')},onshown:(e,t)=>{n=t,bulmaJS.toggleHtmlClipped(),e.querySelector("form").addEventListener("submit",l)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=r=>{const s=r.currentTarget.closest(".container--lot").dataset.lotId;bulmaJS.confirm({title:"Delete "+exports.aliases.lot+" "+exports.aliases.occupancy+" Relationship",message:"Are you sure you want to remove the relationship to this "+exports.aliases.lot.toLowerCase()+" "+exports.aliases.occupancy.toLowerCase()+" record from this work order? Note that the record will remain.",contextualColorName:"warning",okButton:{text:"Yes, Delete Relationship",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderLot",{workOrderId:t,lotId:s},e=>{e.success?(o=e.workOrderLots,m()):bulmaJS.alert({title:"Error Deleting Relationship",message:e.errorMessage||"",contextualColorName:"danger"})})}}})},u=()=>{const t=document.querySelector("#container--lots");if(document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent=o.length.toString(),0!==o.length){t.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+' TypeStatus
';for(const r of o){const o=document.createElement("tr");o.className="container--lot",o.dataset.lotId=r.lotId.toString(),o.innerHTML=''+cityssm.escapeHTML(r.lotName||"")+""+cityssm.escapeHTML(r.mapName||"")+""+cityssm.escapeHTML(r.lotType||"")+""+(r.lotStatusId?cityssm.escapeHTML(r.lotStatus||""):'(No Status)')+' ',o.querySelector(".button--editLotStatus").addEventListener("click",c),o.querySelector(".button--deleteLot").addEventListener("click",d),t.querySelector("tbody").append(o)}}else t.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" associated with this work order.

"},m=()=>{i(),u()};m();const p=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotOccupancyId;n(o,e=>{e&&t.remove()})};document.querySelector("#button--addLotOccupancy").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lotOccupancies/doSearchLotOccupancies",o,e=>{if(0!==e.lotOccupancies.length){r.innerHTML='
'+exports.aliases.occupancy+" Type"+exports.aliases.lot+"Start DateEnd Date"+exports.aliases.occupants+"
";for(const t of e.lotOccupancies){const e=document.createElement("tr");e.className="container--lotOccupancy",e.dataset.lotOccupancyId=t.lotOccupancyId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.occupancyType||"")+"",t.lotId?e.insertAdjacentHTML("beforeend",""+cityssm.escapeHTML(t.lotName||"")+""):e.insertAdjacentHTML("beforeend",'(No '+exports.aliases.lot+")"),e.insertAdjacentHTML("beforeend",""+t.occupancyStartDateString+""+(t.occupancyEndDate?t.occupancyEndDateString:'(No End Date)')+""+(0===t.lotOccupancyOccupants.length?'(No '+cityssm.escapeHTML(exports.aliases.occupants)+")":cityssm.escapeHTML(t.lotOccupancyOccupants[0].occupantName)+(t.lotOccupancyOccupants.length>1?" plus "+(t.lotOccupancyOccupants.length-1):""))+""),e.querySelector(".button--addLotOccupancy").addEventListener("click",p),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLotOccupancy",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotOccupancyAdd"),a.querySelector("#lotOccupancySearch--notWorkOrderId").value=t,a.querySelector("#lotOccupancySearch--occupancyEffectiveDateString").value=document.querySelector("#workOrderEdit--workOrderOpenDateString").value,s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancySearch--occupantName").addEventListener("change",s),e.querySelector("#lotOccupancySearch--lotName").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const y=e=>{const t=e.currentTarget.closest("tr"),o=t.dataset.lotId;a(o,e=>{e&&t.remove()})};document.querySelector("#button--addLot").addEventListener("click",()=>{let o,r;const s=t=>{t&&t.preventDefault(),r.innerHTML='


Searching...

',cityssm.postJSON(e.urlPrefix+"/lots/doSearchLots",o,e=>{if(0!==e.lots.length){r.innerHTML='
'+exports.aliases.lot+""+exports.aliases.map+""+exports.aliases.lot+" TypeStatus
";for(const t of e.lots){const e=document.createElement("tr");e.className="container--lot",e.dataset.lotId=t.lotId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.lotName||"")+""+cityssm.escapeHTML(t.mapName||"")+""+cityssm.escapeHTML(t.lotType||"")+""+cityssm.escapeHTML(t.lotStatus||"")+"",e.querySelector(".button--addLot").addEventListener("click",y),r.querySelector("tbody").append(e)}}else r.innerHTML='

There are no records that meet the search criteria.

'})};cityssm.openHtmlModal("workOrder-addLot",{onshow:a=>{e.populateAliases(a),o=a.querySelector("form"),r=a.querySelector("#resultsContainer--lotAdd"),a.querySelector("#lotSearch--notWorkOrderId").value=t;const n=a.querySelector("#lotSearch--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,n.append(t)}s()},onshown:e=>{bulmaJS.toggleHtmlClipped(),e.querySelector("#lotSearch--lotName").addEventListener("change",s),e.querySelector("#lotSearch--lotStatusId").addEventListener("change",s),o.addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}let n=exports.workOrderComments;delete exports.workOrderComments;const l=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10),s=n.find(e=>e.workOrderCommentId===r);let a,l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderComment",a,e=>{e.success?(n=e.workOrderComments,l(),c()):bulmaJS.alert({title:"Error Updating Comment",message:e.errorMessage||"",contextualColorName:"danger"})})};cityssm.openHtmlModal("workOrder-editComment",{onshow:e=>{e.querySelector("#workOrderCommentEdit--workOrderId").value=t,e.querySelector("#workOrderCommentEdit--workOrderCommentId").value=r.toString(),e.querySelector("#workOrderCommentEdit--workOrderComment").value=s.workOrderComment;const o=e.querySelector("#workOrderCommentEdit--workOrderCommentDateString");o.value=s.workOrderCommentDateString;const a=cityssm.dateToString(new Date);o.max=s.workOrderCommentDateString<=a?a:s.workOrderCommentDateString,e.querySelector("#workOrderCommentEdit--workOrderCommentTimeString").value=s.workOrderCommentTimeString},onshown:(t,o)=>{bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("#workOrderCommentEdit--workOrderComment").focus(),(a=t.querySelector("form")).addEventListener("submit",i),l=o},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=o=>{const r=Number.parseInt(o.currentTarget.closest("tr").dataset.workOrderCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderComment",{workOrderId:t,workOrderCommentId:r},e=>{e.success?(n=e.workOrderComments,c()):bulmaJS.alert({title:"Error Removing Comment",message:e.errorMessage||"",contextualColorName:"danger"})})}},contextualColorName:"warning"})},c=()=>{const e=document.querySelector("#container--workOrderComments");if(0===n.length)return void(e.innerHTML='

There are no comments to display.

');const t=document.createElement("table");t.className="table is-fullwidth is-striped is-hoverable",t.innerHTML='CommentorComment DateCommentOptions';for(const e of n){const o=document.createElement("tr");o.dataset.workOrderCommentId=e.workOrderCommentId.toString(),o.innerHTML=""+cityssm.escapeHTML(e.recordCreate_userName||"")+""+e.workOrderCommentDateString+(0===e.workOrderCommentTime?"":" "+e.workOrderCommentTimeString)+""+cityssm.escapeHTML(e.workOrderComment||"")+'
',o.querySelector(".button--edit").addEventListener("click",l),o.querySelector(".button--delete").addEventListener("click",i),t.querySelector("tbody").append(o)}e.innerHTML="",e.append(t)},d=()=>{let o;const r=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderComment",t.currentTarget,e=>{e.success&&(n=e.workOrderComments,c(),o())})};cityssm.openHtmlModal("workOrder-addComment",{onshow(o){e.populateAliases(o),o.querySelector("#workOrderCommentAdd--workOrderId").value=t,o.querySelector("form").addEventListener("submit",r)},onshown(e,t){bulmaJS.toggleHtmlClipped(),o=t,e.querySelector("#workOrderCommentAdd--workOrderComment").focus()},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#workOrderComments--add").focus()}})};if(o||(document.querySelector("#workOrderComments--add").addEventListener("click",d),c()),!o){a=exports.workOrderMilestones,delete exports.workOrderMilestones;const o=e=>{e.success?(a=e.workOrderMilestones,i()):bulmaJS.alert({title:"Error Reopening Milestone",message:e.errorMessage||"",contextualColorName:"danger"})},r=r=>{r.preventDefault();const s=cityssm.dateToString(new Date),n=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),l=a.find(e=>e.workOrderMilestoneId===n);bulmaJS.confirm({title:"Complete Milestone",message:"Are you sure you want to complete this milestone?"+(l.workOrderMilestoneDateString>s?"
Note that this milestone is expected to be completed in the future.":""),messageIsHtml:!0,contextualColorName:"warning",okButton:{text:"Yes, Complete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doCompleteWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:n},o)}}})},s=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Reopen Milestone",message:"Are you sure you want to remove the completion status from this milestone, and reopen it?",contextualColorName:"warning",okButton:{text:"Yes, Reopen Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doReopenWorkOrderMilestone",{workOrderId:t,workOrderMilestoneId:s},o)}}})},n=r=>{r.preventDefault();const s=r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId;bulmaJS.confirm({title:"Delete Milestone",message:"Are you sure you want to delete this milestone?",contextualColorName:"warning",okButton:{text:"Yes, Delete Milestone",callbackFunction:()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doDeleteWorkOrderMilestone",{workOrderMilestoneId:s,workOrderId:t},o)}}})},l=r=>{r.preventDefault();const s=Number.parseInt(r.currentTarget.closest(".container--milestone").dataset.workOrderMilestoneId,10),n=a.find(e=>e.workOrderMilestoneId===s);let l;const i=t=>{t.preventDefault(),cityssm.postJSON(e.urlPrefix+"/workOrders/doUpdateWorkOrderMilestone",t.currentTarget,e=>{o(e),e.success&&l()})};cityssm.openHtmlModal("workOrder-editMilestone",{onshow:e=>{e.querySelector("#milestoneEdit--workOrderId").value=t,e.querySelector("#milestoneEdit--workOrderMilestoneId").value=n.workOrderMilestoneId.toString();const o=e.querySelector("#milestoneEdit--workOrderMilestoneTypeId");let r=!1;for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,e.workOrderMilestoneTypeId===n.workOrderMilestoneTypeId&&(t.selected=!0,r=!0),o.append(t)}if(!r&&n.workOrderMilestoneTypeId){const e=document.createElement("option");e.value=n.workOrderMilestoneTypeId.toString(),e.textContent=n.workOrderMilestoneType,e.selected=!0,o.append(e)}e.querySelector("#milestoneEdit--workOrderMilestoneDateString").value=n.workOrderMilestoneDateString,n.workOrderMilestoneTime&&(e.querySelector("#milestoneEdit--workOrderMilestoneTimeString").value=n.workOrderMilestoneTimeString),e.querySelector("#milestoneEdit--workOrderMilestoneDescription").value=n.workOrderMilestoneDescription},onshown:(t,o)=>{l=o,bulmaJS.toggleHtmlClipped(),e.initializeDatePickers(t),e.initializeTimePickers(t),t.querySelector("form").addEventListener("submit",i)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},i=()=>{const e=document.querySelector("#panel--milestones"),t=e.querySelectorAll(".panel-block");for(const e of t)e.remove();for(const t of a){const o=document.createElement("div");o.className="panel-block is-block container--milestone",o.dataset.workOrderMilestoneId=t.workOrderMilestoneId.toString(),o.innerHTML='
'+(t.workOrderMilestoneCompletionDate?'':'')+'
'+(t.workOrderMilestoneTypeId?""+cityssm.escapeHTML(t.workOrderMilestoneType||"")+"
":"")+t.workOrderMilestoneDateString+(t.workOrderMilestoneTime?" "+t.workOrderMilestoneTimeString:"")+'
'+cityssm.escapeHTML(t.workOrderMilestoneDescription||"")+'
',t.workOrderMilestoneCompletionDate?o.querySelector(".button--reopenMilestone").addEventListener("click",s):(o.querySelector(".button--editMilestone").addEventListener("click",l),o.querySelector(".button--completeMilestone").addEventListener("click",r)),o.querySelector(".button--deleteMilestone").addEventListener("click",n),e.append(o)}bulmaJS.init(e)};i(),document.querySelector("#button--addMilestone").addEventListener("click",()=>{let r,s,a;const n=t=>{t&&t.preventDefault();const n=cityssm.dateToString(new Date),l=()=>{cityssm.postJSON(e.urlPrefix+"/workOrders/doAddWorkOrderMilestone",s,e=>{o(e),e.success&&a()})};r.querySelector("#milestoneAdd--workOrderMilestoneDateString").value{e.querySelector("#milestoneAdd--workOrderId").value=t;const o=e.querySelector("#milestoneAdd--workOrderMilestoneTypeId");for(const e of exports.workOrderMilestoneTypes){const t=document.createElement("option");t.value=e.workOrderMilestoneTypeId.toString(),t.textContent=e.workOrderMilestoneType,o.append(t)}e.querySelector("#milestoneAdd--workOrderMilestoneDateString").valueAsDate=new Date},onshown:(t,o)=>{r=t,a=o,e.initializeDatePickers(t),e.initializeTimePickers(t),bulmaJS.toggleHtmlClipped(),(s=t.querySelector("form")).addEventListener("submit",n)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})})}})(); \ No newline at end of file diff --git a/public/javascripts/workOrderSearch.min.js b/public/javascripts/workOrderSearch.min.js index 34cbe7ca..4cb76d6b 100644 --- a/public/javascripts/workOrderSearch.min.js +++ b/public/javascripts/workOrderSearch.min.js @@ -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"),i=()=>{const i=Number.parseInt(o.value,10);a.innerHTML='

Loading Work Orders...
',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,s=>{if(0===s.workOrders.length)return void(a.innerHTML='

There are no work orders that meet the search criteria.

');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+=' '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"
";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+=' '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"
";o.insertAdjacentHTML("beforeend",''+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+""+cityssm.escapeHTML(a.workOrderType||"")+'
'+cityssm.escapeHTML(a.workOrderDescription||"")+''+s+' '+a.workOrderOpenDateString+'
'+(a.workOrderCloseDate?a.workOrderCloseDateString:'(No '+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+")")+""+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+""+(t.length>0?'':"")+"")}a.innerHTML=''+(t.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(i+1).toString()+" to "+Math.min(s.count,r+i)+" of "+s.count+'
'+(i>0?'
':"")+(r+i
':"")+"
",a.querySelector("table").append(o),i>0&&a.querySelector("button[data-page='previous']").addEventListener("click",n),r+i{o.value="0",i()},n=()=>{o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()},c=()=>{o.value=(Number.parseInt(o.value,10)+r).toString(),i()},d=s.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",l);s.addEventListener("submit",e=>{e.preventDefault(),l()}),i()})(); \ No newline at end of file +"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"),i=()=>{const i=Number.parseInt(o.value,10);a.innerHTML='

Loading Work Orders...
',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,s=>{if(0===s.workOrders.length)return void(a.innerHTML='

There are no work orders that meet the search criteria.

');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+=' '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"
";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+=' '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"
";o.insertAdjacentHTML("beforeend",'
"+(t.length>0?'':"")+"")}a.innerHTML='
'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+""+cityssm.escapeHTML(a.workOrderType||"")+'
'+cityssm.escapeHTML(a.workOrderDescription||"")+'
'+s+' '+a.workOrderOpenDateString+'
'+(a.workOrderCloseDate?a.workOrderCloseDateString:'(No '+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+")")+"
"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"
'+(t.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(i+1).toString()+" to "+Math.min(s.count,r+i)+" of "+s.count+'
'+(i>0?'
':"")+(r+i
':"")+"
",a.querySelector("table").append(o),i>0&&a.querySelector("button[data-page='previous']").addEventListener("click",c),r+i{o.value="0",i()},c=()=>{o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()},n=()=>{o.value=(Number.parseInt(o.value,10)+r).toString(),i()},d=s.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",l);s.addEventListener("submit",e=>{e.preventDefault(),l()}),i()})(); \ No newline at end of file diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 5f321ddc..b5dc3d25 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -95,6 +95,7 @@ export interface OccupancyTypeField { export interface LotOccupantType extends Record { lotOccupantTypeId: number; lotOccupantType: string; + fontAwesomeIconClass: string; orderNumber?: number; } export interface FeeCategory extends Record { @@ -146,6 +147,7 @@ export interface LotOccupancyOccupant extends Record { lotOccupantIndex?: number; lotOccupantTypeId?: number; lotOccupantType?: string; + fontAwesomeIconClass?: string; occupantName?: string; occupantAddress1?: string; occupantAddress2?: string; diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 7818492f..074b64e5 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -125,6 +125,7 @@ export interface OccupancyTypeField { export interface LotOccupantType extends Record { lotOccupantTypeId: number; lotOccupantType: string; + fontAwesomeIconClass: string; orderNumber?: number; } @@ -193,7 +194,8 @@ export interface LotOccupancyOccupant extends Record { lotOccupantTypeId?: number; lotOccupantType?: string; - + fontAwesomeIconClass?: string; + occupantName?: string; occupantAddress1?: string; occupantAddress2?: string; diff --git a/views/admin-tables.ejs b/views/admin-tables.ejs index c734d7e7..53901651 100644 --- a/views/admin-tables.ejs +++ b/views/admin-tables.ejs @@ -152,13 +152,16 @@ + + -
<%= configFunctions.getProperty("aliases.lot") %> <%= configFunctions.getProperty("aliases.occupant") %> TypeIcon Class  Options
+
+
<%= configFunctions.getProperty("aliases.occupant") %> Type" required /> @@ -177,6 +180,11 @@
+ + <% for (const iconClass of fontAwesomeIconClasses) { %> + + <% } %> +
diff --git a/views/dashboard.ejs b/views/dashboard.ejs index befcd419..f6e922d5 100644 --- a/views/dashboard.ejs +++ b/views/dashboard.ejs @@ -62,7 +62,7 @@ for (const lot of milestone.workOrderLots) { %> - "> + "> <%= lot.lotName %>
<% @@ -74,7 +74,7 @@ for (const occupant of occupancy.lotOccupancyOccupants) { %> - "> + "> <%= occupant.occupantName %>
<% diff --git a/views/lot-edit.ejs b/views/lot-edit.ejs index fd80cb0a..546fc32f 100644 --- a/views/lot-edit.ejs +++ b/views/lot-edit.ejs @@ -353,7 +353,10 @@ (No <%= configFunctions.getProperty("aliases.occupants") %>) <% } else { %> <% for (const occupant of lotOccupancy.lotOccupancyOccupants) { %> - <%= occupant.occupantName %>
+ + + <%= occupant.occupantName %> +
<% } %> <% } %> diff --git a/views/lot-view.ejs b/views/lot-view.ejs index 2b9f6f78..573d2e20 100644 --- a/views/lot-view.ejs +++ b/views/lot-view.ejs @@ -175,7 +175,10 @@ (No <%= configFunctions.getProperty("aliases.occupants") %>) <% } else { %> <% for (const occupant of lotOccupancy.lotOccupancyOccupants) { %> - <%= occupant.occupantName %>
+ + + <%= occupant.occupantName %> +
<% } %> <% } %> diff --git a/views/workOrder-view.ejs b/views/workOrder-view.ejs index cf5da865..49ba87aa 100644 --- a/views/workOrder-view.ejs +++ b/views/workOrder-view.ejs @@ -201,7 +201,10 @@ (No <%= configFunctions.getProperty("aliases.occupants") %>) <% } else { %> <% for (const occupant of lotOccupancy.lotOccupancyOccupants) { %> - <%= occupant.occupantName %>
+ + + <%= occupant.occupantName %> +
<% } %> <% } %>