sunrise-cms/public/javascripts/contract.editWorkOrders.ts

122 lines
3.8 KiB
TypeScript

import type { BulmaJS } from '@cityssm/bulma-js/types.js'
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { WorkOrderType } from '../../types/record.types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS
declare const exports: Record<string, unknown>
;(() => {
const sunrise = exports.sunrise as Sunrise
const contractId = (
document.querySelector('#contract--contractId') as HTMLInputElement
).value
document
.querySelector('#button--createWorkOrder')
?.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault()
let createCloseModalFunction: () => void
function doCreate(formEvent: SubmitEvent): void {
formEvent.preventDefault()
cityssm.postJSON(
`${sunrise.urlPrefix}/workOrders/doCreateWorkOrder`,
formEvent.currentTarget,
(rawResponseJSON) => {
const responseJSON = rawResponseJSON as {
success: boolean
errorMessage?: string
workOrderId?: number
}
if (responseJSON.success) {
createCloseModalFunction()
bulmaJS.confirm({
title: 'Work Order Created Successfully',
message: 'Would you like to open the work order now?',
contextualColorName: 'success',
okButton: {
text: 'Yes, Open the Work Order',
callbackFunction() {
globalThis.location.href = sunrise.getWorkOrderURL(
responseJSON.workOrderId,
true
)
}
}
})
} else {
bulmaJS.alert({
title: 'Error Creating Work Order',
message: responseJSON.errorMessage as string,
contextualColorName: 'danger'
})
}
}
)
}
cityssm.openHtmlModal('contract-createWorkOrder', {
onshow(modalElement) {
;(
modalElement.querySelector(
'#workOrderCreate--contractId'
) as HTMLInputElement
).value = contractId
;(
modalElement.querySelector(
'#workOrderCreate--workOrderOpenDateString'
) as HTMLInputElement
).value = cityssm.dateToString(new Date())
const workOrderTypeSelectElement = modalElement.querySelector(
'#workOrderCreate--workOrderTypeId'
) as HTMLSelectElement
const workOrderTypes = (exports as Record<string, unknown>)
.workOrderTypes as WorkOrderType[]
if (workOrderTypes.length === 1) {
workOrderTypeSelectElement.innerHTML = ''
}
for (const workOrderType of workOrderTypes) {
const optionElement = document.createElement('option')
optionElement.value = workOrderType.workOrderTypeId.toString()
optionElement.textContent = workOrderType.workOrderType ?? ''
workOrderTypeSelectElement.append(optionElement)
}
},
onshown(modalElement, closeModalFunction) {
createCloseModalFunction = closeModalFunction
bulmaJS.toggleHtmlClipped()
;(
modalElement.querySelector(
'#workOrderCreate--workOrderTypeId'
) as HTMLSelectElement
).focus()
modalElement
.querySelector('form')
?.addEventListener('submit', doCreate)
},
onremoved() {
bulmaJS.toggleHtmlClipped()
;(
document.querySelector(
'#button--createWorkOrder'
) as HTMLButtonElement
).focus()
}
})
})
})()