parent
5a4de85190
commit
20d3d89558
|
|
@ -1,9 +1,10 @@
|
||||||
|
import { type DateString } from '@cityssm/utils-datetime';
|
||||||
import type { PoolConnection } from 'better-sqlite-pool';
|
import type { PoolConnection } from 'better-sqlite-pool';
|
||||||
import type { WorkOrderMilestone } from '../types/recordTypes.js';
|
import type { WorkOrderMilestone } from '../types/recordTypes.js';
|
||||||
export interface WorkOrderMilestoneFilters {
|
export interface WorkOrderMilestoneFilters {
|
||||||
workOrderId?: number | string;
|
workOrderId?: number | string;
|
||||||
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank';
|
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank';
|
||||||
workOrderMilestoneDateString?: string;
|
workOrderMilestoneDateString?: '' | DateString;
|
||||||
workOrderTypeIds?: string;
|
workOrderTypeIds?: string;
|
||||||
workOrderMilestoneTypeIds?: string;
|
workOrderMilestoneTypeIds?: string;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,12 @@ function buildWhereClause(filters) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((filters.workOrderMilestoneDateString ?? '') !== '') {
|
if (filters.workOrderMilestoneDateString !== undefined && filters.workOrderMilestoneDateString !== '') {
|
||||||
sqlWhereClause += ' and m.workOrderMilestoneDate = ?';
|
sqlWhereClause += ' and m.workOrderMilestoneDate = ?';
|
||||||
sqlParameters.push(dateStringToInteger(filters.workOrderMilestoneDateString));
|
sqlParameters.push(dateStringToInteger(filters.workOrderMilestoneDateString));
|
||||||
}
|
}
|
||||||
if ((filters.workOrderTypeIds ?? '') !== '' &&
|
if (filters.workOrderTypeIds !== undefined &&
|
||||||
|
filters.workOrderTypeIds !== '' &&
|
||||||
commaSeparatedNumbersRegex.test(filters.workOrderTypeIds)) {
|
commaSeparatedNumbersRegex.test(filters.workOrderTypeIds)) {
|
||||||
sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`;
|
sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ export interface WorkOrderMilestoneFilters {
|
||||||
| 'date'
|
| 'date'
|
||||||
| 'blank'
|
| 'blank'
|
||||||
| 'notBlank'
|
| 'notBlank'
|
||||||
workOrderMilestoneDateString?: string
|
workOrderMilestoneDateString?: '' | DateString
|
||||||
workOrderTypeIds?: string
|
workOrderTypeIds?: string
|
||||||
workOrderMilestoneTypeIds?: string
|
workOrderMilestoneTypeIds?: string
|
||||||
}
|
}
|
||||||
|
|
@ -33,6 +33,7 @@ interface WorkOrderMilestoneOptions {
|
||||||
orderBy: 'completion' | 'date'
|
orderBy: 'completion' | 'date'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line security/detect-unsafe-regex
|
||||||
const commaSeparatedNumbersRegex = /^\d+(?:,\d+)*$/
|
const commaSeparatedNumbersRegex = /^\d+(?:,\d+)*$/
|
||||||
|
|
||||||
function buildWhereClause(filters: WorkOrderMilestoneFilters): {
|
function buildWhereClause(filters: WorkOrderMilestoneFilters): {
|
||||||
|
|
@ -98,16 +99,17 @@ function buildWhereClause(filters: WorkOrderMilestoneFilters): {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((filters.workOrderMilestoneDateString ?? '') !== '') {
|
if (filters.workOrderMilestoneDateString !== undefined && filters.workOrderMilestoneDateString !== '') {
|
||||||
sqlWhereClause += ' and m.workOrderMilestoneDate = ?'
|
sqlWhereClause += ' and m.workOrderMilestoneDate = ?'
|
||||||
sqlParameters.push(
|
sqlParameters.push(
|
||||||
dateStringToInteger(filters.workOrderMilestoneDateString as DateString)
|
dateStringToInteger(filters.workOrderMilestoneDateString)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(filters.workOrderTypeIds ?? '') !== '' &&
|
filters.workOrderTypeIds !== undefined &&
|
||||||
commaSeparatedNumbersRegex.test(filters.workOrderTypeIds!)
|
filters.workOrderTypeIds !== '' &&
|
||||||
|
commaSeparatedNumbersRegex.test(filters.workOrderTypeIds)
|
||||||
) {
|
) {
|
||||||
sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`
|
sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +117,7 @@ function buildWhereClause(filters: WorkOrderMilestoneFilters): {
|
||||||
if (
|
if (
|
||||||
filters.workOrderMilestoneTypeIds !== undefined &&
|
filters.workOrderMilestoneTypeIds !== undefined &&
|
||||||
filters.workOrderMilestoneTypeIds !== '' &&
|
filters.workOrderMilestoneTypeIds !== '' &&
|
||||||
commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds!)
|
commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds)
|
||||||
) {
|
) {
|
||||||
sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})`
|
sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
import type { Request, Response } from 'express'
|
import type { Request, Response } from 'express'
|
||||||
|
|
||||||
import getWorkOrderMilestones from '../../database/getWorkOrderMilestones.js'
|
import getWorkOrderMilestones, {
|
||||||
|
type WorkOrderMilestoneFilters
|
||||||
|
} from '../../database/getWorkOrderMilestones.js'
|
||||||
|
|
||||||
export default async function handler(
|
export default async function handler(
|
||||||
request: Request,
|
request: Request,
|
||||||
response: Response
|
response: Response
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const workOrderMilestones = await getWorkOrderMilestones(request.body, {
|
const workOrderMilestones = await getWorkOrderMilestones(
|
||||||
includeWorkOrders: true,
|
request.body as WorkOrderMilestoneFilters,
|
||||||
orderBy: 'date'
|
{
|
||||||
})
|
includeWorkOrders: true,
|
||||||
|
orderBy: 'date'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
response.json({
|
response.json({
|
||||||
workOrderMilestones
|
workOrderMilestones
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
/* eslint-disable spaced-comment, @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */
|
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
|
||||||
|
/* eslint-disable unicorn/prefer-module */
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
(() => {
|
(() => {
|
||||||
var _a, _b, _c;
|
var _a, _b, _c, _d;
|
||||||
const los = exports.los;
|
const los = exports.los;
|
||||||
const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value;
|
const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value;
|
||||||
const isCreate = workOrderId === '';
|
const isCreate = workOrderId === '';
|
||||||
const workOrderFormElement = document.querySelector('#form--workOrderEdit');
|
const workOrderFormElement = document.querySelector('#form--workOrderEdit');
|
||||||
los.initializeDatePickers(workOrderFormElement
|
los.initializeDatePickers((_a = workOrderFormElement
|
||||||
.querySelector('#workOrderEdit--workOrderOpenDateString')
|
.querySelector('#workOrderEdit--workOrderOpenDateString')) === null || _a === void 0 ? void 0 : _a.closest('.field'));
|
||||||
.closest('.field'));
|
|
||||||
los.initializeUnlockFieldButtons(workOrderFormElement);
|
los.initializeUnlockFieldButtons(workOrderFormElement);
|
||||||
function setUnsavedChanges() {
|
function setUnsavedChanges() {
|
||||||
var _a;
|
var _a;
|
||||||
|
|
@ -59,7 +59,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
* Work Order Options
|
* Work Order Options
|
||||||
*/
|
*/
|
||||||
function doClose() {
|
function doClose() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doCloseWorkOrder', {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doCloseWorkOrder`, {
|
||||||
workOrderId
|
workOrderId
|
||||||
}, (rawResponseJSON) => {
|
}, (rawResponseJSON) => {
|
||||||
var _a;
|
var _a;
|
||||||
|
|
@ -78,14 +78,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function doDelete() {
|
function doDelete() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrder', {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrder`, {
|
||||||
workOrderId
|
workOrderId
|
||||||
}, (rawResponseJSON) => {
|
}, (rawResponseJSON) => {
|
||||||
var _a;
|
var _a;
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
clearUnsavedChanges();
|
clearUnsavedChanges();
|
||||||
window.location.href = los.urlPrefix + '/workOrders';
|
window.location.href = `${los.urlPrefix}/workOrders`;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
|
|
@ -97,8 +97,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let workOrderMilestones;
|
let workOrderMilestones;
|
||||||
(_a = document
|
(_b = document
|
||||||
.querySelector('#button--closeWorkOrder')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => {
|
.querySelector('#button--closeWorkOrder')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', () => {
|
||||||
const hasOpenMilestones = workOrderMilestones.some((milestone) => {
|
const hasOpenMilestones = workOrderMilestones.some((milestone) => {
|
||||||
return !milestone.workOrderMilestoneCompletionDate;
|
return !milestone.workOrderMilestoneCompletionDate;
|
||||||
});
|
});
|
||||||
|
|
@ -137,8 +137,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
(_b = document
|
(_c = document
|
||||||
.querySelector('#button--deleteWorkOrder')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', (clickEvent) => {
|
.querySelector('#button--deleteWorkOrder')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', (clickEvent) => {
|
||||||
clickEvent.preventDefault();
|
clickEvent.preventDefault();
|
||||||
bulmaJS.confirm({
|
bulmaJS.confirm({
|
||||||
title: 'Delete Work Order',
|
title: 'Delete Work Order',
|
||||||
|
|
@ -914,6 +914,56 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
/*
|
/*
|
||||||
* Milestones
|
* Milestones
|
||||||
*/
|
*/
|
||||||
|
function clearPanelBlockElements(panelElement) {
|
||||||
|
for (const panelBlockElement of panelElement.querySelectorAll('.panel-block')) {
|
||||||
|
panelBlockElement.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function refreshConflictingMilestones(workOrderMilestoneDateString, targetPanelElement) {
|
||||||
|
// Clear panel-block elements
|
||||||
|
clearPanelBlockElements(targetPanelElement);
|
||||||
|
// eslint-disable-next-line no-unsanitized/method
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
${los.getLoadingParagraphHTML('Loading conflicting milestones...')}
|
||||||
|
</div>`);
|
||||||
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, {
|
||||||
|
workOrderMilestoneDateFilter: 'date',
|
||||||
|
workOrderMilestoneDateString
|
||||||
|
}, (rawResponseJSON) => {
|
||||||
|
var _a, _b, _c, _d;
|
||||||
|
const responseJSON = rawResponseJSON;
|
||||||
|
const workOrderMilestones = responseJSON.workOrderMilestones.filter((possibleMilestone) => {
|
||||||
|
return possibleMilestone.workOrderId.toString() !== workOrderId;
|
||||||
|
});
|
||||||
|
clearPanelBlockElements(targetPanelElement);
|
||||||
|
for (const milestone of workOrderMilestones) {
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-5">
|
||||||
|
${cityssm.escapeHTML(milestone.workOrderMilestoneTime === 0 ? 'No Time' : (_a = milestone.workOrderMilestoneTimePeriodString) !== null && _a !== void 0 ? _a : '')}<br />
|
||||||
|
<strong>${cityssm.escapeHTML((_b = milestone.workOrderMilestoneType) !== null && _b !== void 0 ? _b : '')}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
${cityssm.escapeHTML((_c = milestone.workOrderNumber) !== null && _c !== void 0 ? _c : '')}<br />
|
||||||
|
<span class="is-size-7">
|
||||||
|
${cityssm.escapeHTML((_d = milestone.workOrderDescription) !== null && _d !== void 0 ? _d : '')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`);
|
||||||
|
}
|
||||||
|
if (workOrderMilestones.length === 0) {
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
<div class="message is-info">
|
||||||
|
<p class="message-body">
|
||||||
|
There are no milestones on other work orders scheduled for
|
||||||
|
${cityssm.escapeHTML(workOrderMilestoneDateString)}.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
function processMilestoneResponse(rawResponseJSON) {
|
function processMilestoneResponse(rawResponseJSON) {
|
||||||
var _a;
|
var _a;
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
|
|
@ -1002,9 +1052,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
return currentMilestone.workOrderMilestoneId === workOrderMilestoneId;
|
return currentMilestone.workOrderMilestoneId === workOrderMilestoneId;
|
||||||
});
|
});
|
||||||
let editCloseModalFunction;
|
let editCloseModalFunction;
|
||||||
|
let workOrderMilestoneDateStringElement;
|
||||||
function doEdit(submitEvent) {
|
function doEdit(submitEvent) {
|
||||||
submitEvent.preventDefault();
|
submitEvent.preventDefault();
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doUpdateWorkOrderMilestone', submitEvent.currentTarget, (rawResponseJSON) => {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateWorkOrderMilestone`, submitEvent.currentTarget, (rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
processMilestoneResponse(responseJSON);
|
processMilestoneResponse(responseJSON);
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
|
|
@ -1014,9 +1065,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
cityssm.openHtmlModal('workOrder-editMilestone', {
|
cityssm.openHtmlModal('workOrder-editMilestone', {
|
||||||
onshow(modalElement) {
|
onshow(modalElement) {
|
||||||
|
var _a, _b, _c, _d, _e;
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId;
|
modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = workOrderMilestone.workOrderMilestoneId.toString();
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = (_b = (_a = workOrderMilestone.workOrderMilestoneId) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
|
||||||
const milestoneTypeElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneTypeId');
|
const milestoneTypeElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneTypeId');
|
||||||
let milestoneTypeFound = false;
|
let milestoneTypeFound = false;
|
||||||
for (const milestoneType of exports.workOrderMilestoneTypes) {
|
for (const milestoneType of exports.workOrderMilestoneTypes) {
|
||||||
|
|
@ -1040,21 +1092,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
optionElement.selected = true;
|
optionElement.selected = true;
|
||||||
milestoneTypeElement.append(optionElement);
|
milestoneTypeElement.append(optionElement);
|
||||||
}
|
}
|
||||||
;
|
workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString');
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString').value = workOrderMilestone.workOrderMilestoneDateString;
|
workOrderMilestoneDateStringElement.value = (_c = workOrderMilestone.workOrderMilestoneDateString) !== null && _c !== void 0 ? _c : '';
|
||||||
if (workOrderMilestone.workOrderMilestoneTime) {
|
if (workOrderMilestone.workOrderMilestoneTime) {
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = workOrderMilestone.workOrderMilestoneTimeString;
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = (_d = workOrderMilestone.workOrderMilestoneTimeString) !== null && _d !== void 0 ? _d : '';
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = workOrderMilestone.workOrderMilestoneDescription;
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = (_e = workOrderMilestone.workOrderMilestoneDescription) !== null && _e !== void 0 ? _e : '';
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
|
var _a;
|
||||||
editCloseModalFunction = closeModalFunction;
|
editCloseModalFunction = closeModalFunction;
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
los.initializeDatePickers(modalElement);
|
los.initializeDatePickers(modalElement);
|
||||||
// los.initializeTimePickers(modalElement);
|
// los.initializeTimePickers(modalElement);
|
||||||
modalElement.querySelector('form').addEventListener('submit', doEdit);
|
(_a = modalElement.querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doEdit);
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector('#milestoneEdit--conflictingMilestonesPanel');
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener('change', () => {
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
|
});
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
|
@ -1152,10 +1210,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.workOrderMilestones;
|
exports.workOrderMilestones;
|
||||||
delete exports.workOrderMilestones;
|
delete exports.workOrderMilestones;
|
||||||
renderMilestones();
|
renderMilestones();
|
||||||
(_c = document
|
(_d = document
|
||||||
.querySelector('#button--addMilestone')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', () => {
|
.querySelector('#button--addMilestone')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', () => {
|
||||||
let addModalElement;
|
|
||||||
let addFormElement;
|
let addFormElement;
|
||||||
|
let workOrderMilestoneDateStringElement;
|
||||||
let addCloseModalFunction;
|
let addCloseModalFunction;
|
||||||
function doAdd(submitEvent) {
|
function doAdd(submitEvent) {
|
||||||
if (submitEvent) {
|
if (submitEvent) {
|
||||||
|
|
@ -1163,7 +1221,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
const currentDateString = cityssm.dateToString(new Date());
|
const currentDateString = cityssm.dateToString(new Date());
|
||||||
function _doAdd() {
|
function _doAdd() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doAddWorkOrderMilestone', addFormElement, (rawResponseJSON) => {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderMilestone`, addFormElement, (rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
processMilestoneResponse(responseJSON);
|
processMilestoneResponse(responseJSON);
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
|
|
@ -1171,7 +1229,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const milestoneDateString = addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value;
|
const milestoneDateString = workOrderMilestoneDateStringElement.value;
|
||||||
if (milestoneDateString !== '' &&
|
if (milestoneDateString !== '' &&
|
||||||
milestoneDateString < currentDateString) {
|
milestoneDateString < currentDateString) {
|
||||||
bulmaJS.confirm({
|
bulmaJS.confirm({
|
||||||
|
|
@ -1200,11 +1258,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
optionElement.textContent = milestoneType.workOrderMilestoneType;
|
optionElement.textContent = milestoneType.workOrderMilestoneType;
|
||||||
milestoneTypeElement.append(optionElement);
|
milestoneTypeElement.append(optionElement);
|
||||||
}
|
}
|
||||||
;
|
workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString');
|
||||||
modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').valueAsDate = new Date();
|
workOrderMilestoneDateStringElement.valueAsDate = new Date();
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
addModalElement = modalElement;
|
|
||||||
addCloseModalFunction = closeModalFunction;
|
addCloseModalFunction = closeModalFunction;
|
||||||
los.initializeDatePickers(modalElement);
|
los.initializeDatePickers(modalElement);
|
||||||
// los.initializeTimePickers(modalElement);
|
// los.initializeTimePickers(modalElement);
|
||||||
|
|
@ -1212,6 +1269,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus();
|
modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus();
|
||||||
addFormElement = modalElement.querySelector('form');
|
addFormElement = modalElement.querySelector('form');
|
||||||
addFormElement.addEventListener('submit', doAdd);
|
addFormElement.addEventListener('submit', doAdd);
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector('#milestoneAdd--conflictingMilestonesPanel');
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener('change', () => {
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
|
});
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
/* eslint-disable spaced-comment, @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */
|
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
|
||||||
|
/* eslint-disable unicorn/prefer-module */
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
(() => {
|
(() => {
|
||||||
var _a, _b, _c;
|
var _a, _b, _c, _d;
|
||||||
const los = exports.los;
|
const los = exports.los;
|
||||||
const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value;
|
const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value;
|
||||||
const isCreate = workOrderId === '';
|
const isCreate = workOrderId === '';
|
||||||
const workOrderFormElement = document.querySelector('#form--workOrderEdit');
|
const workOrderFormElement = document.querySelector('#form--workOrderEdit');
|
||||||
los.initializeDatePickers(workOrderFormElement
|
los.initializeDatePickers((_a = workOrderFormElement
|
||||||
.querySelector('#workOrderEdit--workOrderOpenDateString')
|
.querySelector('#workOrderEdit--workOrderOpenDateString')) === null || _a === void 0 ? void 0 : _a.closest('.field'));
|
||||||
.closest('.field'));
|
|
||||||
los.initializeUnlockFieldButtons(workOrderFormElement);
|
los.initializeUnlockFieldButtons(workOrderFormElement);
|
||||||
function setUnsavedChanges() {
|
function setUnsavedChanges() {
|
||||||
var _a;
|
var _a;
|
||||||
|
|
@ -59,7 +59,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
* Work Order Options
|
* Work Order Options
|
||||||
*/
|
*/
|
||||||
function doClose() {
|
function doClose() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doCloseWorkOrder', {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doCloseWorkOrder`, {
|
||||||
workOrderId
|
workOrderId
|
||||||
}, (rawResponseJSON) => {
|
}, (rawResponseJSON) => {
|
||||||
var _a;
|
var _a;
|
||||||
|
|
@ -78,14 +78,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
function doDelete() {
|
function doDelete() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doDeleteWorkOrder', {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrder`, {
|
||||||
workOrderId
|
workOrderId
|
||||||
}, (rawResponseJSON) => {
|
}, (rawResponseJSON) => {
|
||||||
var _a;
|
var _a;
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
clearUnsavedChanges();
|
clearUnsavedChanges();
|
||||||
window.location.href = los.urlPrefix + '/workOrders';
|
window.location.href = `${los.urlPrefix}/workOrders`;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
|
|
@ -97,8 +97,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let workOrderMilestones;
|
let workOrderMilestones;
|
||||||
(_a = document
|
(_b = document
|
||||||
.querySelector('#button--closeWorkOrder')) === null || _a === void 0 ? void 0 : _a.addEventListener('click', () => {
|
.querySelector('#button--closeWorkOrder')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', () => {
|
||||||
const hasOpenMilestones = workOrderMilestones.some((milestone) => {
|
const hasOpenMilestones = workOrderMilestones.some((milestone) => {
|
||||||
return !milestone.workOrderMilestoneCompletionDate;
|
return !milestone.workOrderMilestoneCompletionDate;
|
||||||
});
|
});
|
||||||
|
|
@ -137,8 +137,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
(_b = document
|
(_c = document
|
||||||
.querySelector('#button--deleteWorkOrder')) === null || _b === void 0 ? void 0 : _b.addEventListener('click', (clickEvent) => {
|
.querySelector('#button--deleteWorkOrder')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', (clickEvent) => {
|
||||||
clickEvent.preventDefault();
|
clickEvent.preventDefault();
|
||||||
bulmaJS.confirm({
|
bulmaJS.confirm({
|
||||||
title: 'Delete Work Order',
|
title: 'Delete Work Order',
|
||||||
|
|
@ -163,6 +163,56 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
/*
|
/*
|
||||||
* Milestones
|
* Milestones
|
||||||
*/
|
*/
|
||||||
|
function clearPanelBlockElements(panelElement) {
|
||||||
|
for (const panelBlockElement of panelElement.querySelectorAll('.panel-block')) {
|
||||||
|
panelBlockElement.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function refreshConflictingMilestones(workOrderMilestoneDateString, targetPanelElement) {
|
||||||
|
// Clear panel-block elements
|
||||||
|
clearPanelBlockElements(targetPanelElement);
|
||||||
|
// eslint-disable-next-line no-unsanitized/method
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
${los.getLoadingParagraphHTML('Loading conflicting milestones...')}
|
||||||
|
</div>`);
|
||||||
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, {
|
||||||
|
workOrderMilestoneDateFilter: 'date',
|
||||||
|
workOrderMilestoneDateString
|
||||||
|
}, (rawResponseJSON) => {
|
||||||
|
var _a, _b, _c, _d;
|
||||||
|
const responseJSON = rawResponseJSON;
|
||||||
|
const workOrderMilestones = responseJSON.workOrderMilestones.filter((possibleMilestone) => {
|
||||||
|
return possibleMilestone.workOrderId.toString() !== workOrderId;
|
||||||
|
});
|
||||||
|
clearPanelBlockElements(targetPanelElement);
|
||||||
|
for (const milestone of workOrderMilestones) {
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-5">
|
||||||
|
${cityssm.escapeHTML(milestone.workOrderMilestoneTime === 0 ? 'No Time' : (_a = milestone.workOrderMilestoneTimePeriodString) !== null && _a !== void 0 ? _a : '')}<br />
|
||||||
|
<strong>${cityssm.escapeHTML((_b = milestone.workOrderMilestoneType) !== null && _b !== void 0 ? _b : '')}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
${cityssm.escapeHTML((_c = milestone.workOrderNumber) !== null && _c !== void 0 ? _c : '')}<br />
|
||||||
|
<span class="is-size-7">
|
||||||
|
${cityssm.escapeHTML((_d = milestone.workOrderDescription) !== null && _d !== void 0 ? _d : '')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`);
|
||||||
|
}
|
||||||
|
if (workOrderMilestones.length === 0) {
|
||||||
|
targetPanelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
|
||||||
|
<div class="message is-info">
|
||||||
|
<p class="message-body">
|
||||||
|
There are no milestones on other work orders scheduled for
|
||||||
|
${cityssm.escapeHTML(workOrderMilestoneDateString)}.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
function processMilestoneResponse(rawResponseJSON) {
|
function processMilestoneResponse(rawResponseJSON) {
|
||||||
var _a;
|
var _a;
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
|
|
@ -251,9 +301,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
return currentMilestone.workOrderMilestoneId === workOrderMilestoneId;
|
return currentMilestone.workOrderMilestoneId === workOrderMilestoneId;
|
||||||
});
|
});
|
||||||
let editCloseModalFunction;
|
let editCloseModalFunction;
|
||||||
|
let workOrderMilestoneDateStringElement;
|
||||||
function doEdit(submitEvent) {
|
function doEdit(submitEvent) {
|
||||||
submitEvent.preventDefault();
|
submitEvent.preventDefault();
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doUpdateWorkOrderMilestone', submitEvent.currentTarget, (rawResponseJSON) => {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateWorkOrderMilestone`, submitEvent.currentTarget, (rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
processMilestoneResponse(responseJSON);
|
processMilestoneResponse(responseJSON);
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
|
|
@ -263,9 +314,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
cityssm.openHtmlModal('workOrder-editMilestone', {
|
cityssm.openHtmlModal('workOrder-editMilestone', {
|
||||||
onshow(modalElement) {
|
onshow(modalElement) {
|
||||||
|
var _a, _b, _c, _d, _e;
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId;
|
modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = workOrderMilestone.workOrderMilestoneId.toString();
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = (_b = (_a = workOrderMilestone.workOrderMilestoneId) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
|
||||||
const milestoneTypeElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneTypeId');
|
const milestoneTypeElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneTypeId');
|
||||||
let milestoneTypeFound = false;
|
let milestoneTypeFound = false;
|
||||||
for (const milestoneType of exports.workOrderMilestoneTypes) {
|
for (const milestoneType of exports.workOrderMilestoneTypes) {
|
||||||
|
|
@ -289,21 +341,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
optionElement.selected = true;
|
optionElement.selected = true;
|
||||||
milestoneTypeElement.append(optionElement);
|
milestoneTypeElement.append(optionElement);
|
||||||
}
|
}
|
||||||
;
|
workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString');
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString').value = workOrderMilestone.workOrderMilestoneDateString;
|
workOrderMilestoneDateStringElement.value = (_c = workOrderMilestone.workOrderMilestoneDateString) !== null && _c !== void 0 ? _c : '';
|
||||||
if (workOrderMilestone.workOrderMilestoneTime) {
|
if (workOrderMilestone.workOrderMilestoneTime) {
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = workOrderMilestone.workOrderMilestoneTimeString;
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = (_d = workOrderMilestone.workOrderMilestoneTimeString) !== null && _d !== void 0 ? _d : '';
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = workOrderMilestone.workOrderMilestoneDescription;
|
modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = (_e = workOrderMilestone.workOrderMilestoneDescription) !== null && _e !== void 0 ? _e : '';
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
|
var _a;
|
||||||
editCloseModalFunction = closeModalFunction;
|
editCloseModalFunction = closeModalFunction;
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
los.initializeDatePickers(modalElement);
|
los.initializeDatePickers(modalElement);
|
||||||
// los.initializeTimePickers(modalElement);
|
// los.initializeTimePickers(modalElement);
|
||||||
modalElement.querySelector('form').addEventListener('submit', doEdit);
|
(_a = modalElement.querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doEdit);
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector('#milestoneEdit--conflictingMilestonesPanel');
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener('change', () => {
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
|
});
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
|
@ -401,10 +459,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.workOrderMilestones;
|
exports.workOrderMilestones;
|
||||||
delete exports.workOrderMilestones;
|
delete exports.workOrderMilestones;
|
||||||
renderMilestones();
|
renderMilestones();
|
||||||
(_c = document
|
(_d = document
|
||||||
.querySelector('#button--addMilestone')) === null || _c === void 0 ? void 0 : _c.addEventListener('click', () => {
|
.querySelector('#button--addMilestone')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', () => {
|
||||||
let addModalElement;
|
|
||||||
let addFormElement;
|
let addFormElement;
|
||||||
|
let workOrderMilestoneDateStringElement;
|
||||||
let addCloseModalFunction;
|
let addCloseModalFunction;
|
||||||
function doAdd(submitEvent) {
|
function doAdd(submitEvent) {
|
||||||
if (submitEvent) {
|
if (submitEvent) {
|
||||||
|
|
@ -412,7 +470,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
const currentDateString = cityssm.dateToString(new Date());
|
const currentDateString = cityssm.dateToString(new Date());
|
||||||
function _doAdd() {
|
function _doAdd() {
|
||||||
cityssm.postJSON(los.urlPrefix + '/workOrders/doAddWorkOrderMilestone', addFormElement, (rawResponseJSON) => {
|
cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderMilestone`, addFormElement, (rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON;
|
const responseJSON = rawResponseJSON;
|
||||||
processMilestoneResponse(responseJSON);
|
processMilestoneResponse(responseJSON);
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
|
|
@ -420,7 +478,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const milestoneDateString = addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value;
|
const milestoneDateString = workOrderMilestoneDateStringElement.value;
|
||||||
if (milestoneDateString !== '' &&
|
if (milestoneDateString !== '' &&
|
||||||
milestoneDateString < currentDateString) {
|
milestoneDateString < currentDateString) {
|
||||||
bulmaJS.confirm({
|
bulmaJS.confirm({
|
||||||
|
|
@ -449,11 +507,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
optionElement.textContent = milestoneType.workOrderMilestoneType;
|
optionElement.textContent = milestoneType.workOrderMilestoneType;
|
||||||
milestoneTypeElement.append(optionElement);
|
milestoneTypeElement.append(optionElement);
|
||||||
}
|
}
|
||||||
;
|
workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString');
|
||||||
modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').valueAsDate = new Date();
|
workOrderMilestoneDateStringElement.valueAsDate = new Date();
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
addModalElement = modalElement;
|
|
||||||
addCloseModalFunction = closeModalFunction;
|
addCloseModalFunction = closeModalFunction;
|
||||||
los.initializeDatePickers(modalElement);
|
los.initializeDatePickers(modalElement);
|
||||||
// los.initializeTimePickers(modalElement);
|
// los.initializeTimePickers(modalElement);
|
||||||
|
|
@ -461,6 +518,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus();
|
modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus();
|
||||||
addFormElement = modalElement.querySelector('form');
|
addFormElement = modalElement.querySelector('form');
|
||||||
addFormElement.addEventListener('submit', doAdd);
|
addFormElement.addEventListener('submit', doAdd);
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector('#milestoneAdd--conflictingMilestonesPanel');
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener('change', () => {
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
|
});
|
||||||
|
refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement);
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped();
|
bulmaJS.toggleHtmlClipped();
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,16 @@
|
||||||
/* eslint-disable spaced-comment, @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */
|
// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair
|
||||||
|
/* eslint-disable unicorn/prefer-module */
|
||||||
|
|
||||||
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types'
|
import type { BulmaJS } from '@cityssm/bulma-js/types.js'
|
||||||
import type { BulmaJS } from '@cityssm/bulma-js/types'
|
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
|
||||||
|
|
||||||
import type * as globalTypes from '../../types/globalTypes'
|
import type * as globalTypes from '../../types/globalTypes.js'
|
||||||
import type * as recordTypes from '../../types/recordTypes'
|
import type * as recordTypes from '../../types/recordTypes.js'
|
||||||
|
|
||||||
declare const cityssm: cityssmGlobal
|
declare const cityssm: cityssmGlobal
|
||||||
declare const bulmaJS: BulmaJS
|
declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
|
declare const exports: Record<string, unknown>
|
||||||
;(() => {
|
;(() => {
|
||||||
const los = exports.los as globalTypes.LOS
|
const los = exports.los as globalTypes.LOS
|
||||||
|
|
||||||
|
|
@ -23,8 +26,8 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
los.initializeDatePickers(
|
los.initializeDatePickers(
|
||||||
workOrderFormElement
|
workOrderFormElement
|
||||||
.querySelector('#workOrderEdit--workOrderOpenDateString')!
|
.querySelector('#workOrderEdit--workOrderOpenDateString')
|
||||||
.closest('.field') as HTMLElement
|
?.closest('.field') as HTMLElement
|
||||||
)
|
)
|
||||||
los.initializeUnlockFieldButtons(workOrderFormElement)
|
los.initializeUnlockFieldButtons(workOrderFormElement)
|
||||||
|
|
||||||
|
|
@ -96,7 +99,7 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
function doClose(): void {
|
function doClose(): void {
|
||||||
cityssm.postJSON(
|
cityssm.postJSON(
|
||||||
los.urlPrefix + '/workOrders/doCloseWorkOrder',
|
`${los.urlPrefix}/workOrders/doCloseWorkOrder`,
|
||||||
{
|
{
|
||||||
workOrderId
|
workOrderId
|
||||||
},
|
},
|
||||||
|
|
@ -122,7 +125,7 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
function doDelete(): void {
|
function doDelete(): void {
|
||||||
cityssm.postJSON(
|
cityssm.postJSON(
|
||||||
los.urlPrefix + '/workOrders/doDeleteWorkOrder',
|
`${los.urlPrefix}/workOrders/doDeleteWorkOrder`,
|
||||||
{
|
{
|
||||||
workOrderId
|
workOrderId
|
||||||
},
|
},
|
||||||
|
|
@ -134,7 +137,7 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
clearUnsavedChanges()
|
clearUnsavedChanges()
|
||||||
window.location.href = los.urlPrefix + '/workOrders'
|
window.location.href = `${los.urlPrefix}/workOrders`
|
||||||
} else {
|
} else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
title: 'Error Deleting Work Order',
|
title: 'Error Deleting Work Order',
|
||||||
|
|
@ -225,15 +228,94 @@ declare const bulmaJS: BulmaJS
|
||||||
* Milestones
|
* Milestones
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
function clearPanelBlockElements(panelElement: HTMLElement): void {
|
||||||
|
for (const panelBlockElement of panelElement.querySelectorAll(
|
||||||
|
'.panel-block'
|
||||||
|
)) {
|
||||||
|
panelBlockElement.remove()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshConflictingMilestones(
|
||||||
|
workOrderMilestoneDateString: string,
|
||||||
|
targetPanelElement: HTMLElement
|
||||||
|
): void {
|
||||||
|
// Clear panel-block elements
|
||||||
|
clearPanelBlockElements(targetPanelElement)
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-unsanitized/method
|
||||||
|
targetPanelElement.insertAdjacentHTML(
|
||||||
|
'beforeend',
|
||||||
|
`<div class="panel-block is-block">
|
||||||
|
${los.getLoadingParagraphHTML('Loading conflicting milestones...')}
|
||||||
|
</div>`
|
||||||
|
)
|
||||||
|
|
||||||
|
cityssm.postJSON(
|
||||||
|
`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`,
|
||||||
|
{
|
||||||
|
workOrderMilestoneDateFilter: 'date',
|
||||||
|
workOrderMilestoneDateString
|
||||||
|
},
|
||||||
|
(rawResponseJSON) => {
|
||||||
|
const responseJSON = rawResponseJSON as {
|
||||||
|
workOrderMilestones: recordTypes.WorkOrderMilestone[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const workOrderMilestones = responseJSON.workOrderMilestones.filter(
|
||||||
|
(possibleMilestone) => {
|
||||||
|
return possibleMilestone.workOrderId.toString() !== workOrderId
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
clearPanelBlockElements(targetPanelElement)
|
||||||
|
|
||||||
|
for (const milestone of workOrderMilestones) {
|
||||||
|
targetPanelElement.insertAdjacentHTML(
|
||||||
|
'beforeend',
|
||||||
|
`<div class="panel-block is-block">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-5">
|
||||||
|
${cityssm.escapeHTML(milestone.workOrderMilestoneTime === 0 ? 'No Time' : milestone.workOrderMilestoneTimePeriodString ?? '')}<br />
|
||||||
|
<strong>${cityssm.escapeHTML(milestone.workOrderMilestoneType ?? '')}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
${cityssm.escapeHTML(milestone.workOrderNumber ?? '')}<br />
|
||||||
|
<span class="is-size-7">
|
||||||
|
${cityssm.escapeHTML(milestone.workOrderDescription ?? '')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (workOrderMilestones.length === 0) {
|
||||||
|
targetPanelElement.insertAdjacentHTML(
|
||||||
|
'beforeend',
|
||||||
|
`<div class="panel-block is-block">
|
||||||
|
<div class="message is-info">
|
||||||
|
<p class="message-body">
|
||||||
|
There are no milestones on other work orders scheduled for
|
||||||
|
${cityssm.escapeHTML(workOrderMilestoneDateString)}.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
function processMilestoneResponse(rawResponseJSON: unknown): void {
|
function processMilestoneResponse(rawResponseJSON: unknown): void {
|
||||||
const responseJSON = rawResponseJSON as {
|
const responseJSON = rawResponseJSON as {
|
||||||
success: boolean
|
success: boolean
|
||||||
errorMessage?: string
|
errorMessage?: string
|
||||||
workOrderMilestones?: recordTypes.WorkOrderMilestone[]
|
workOrderMilestones: recordTypes.WorkOrderMilestone[]
|
||||||
}
|
}
|
||||||
|
|
||||||
if (responseJSON.success) {
|
if (responseJSON.success) {
|
||||||
workOrderMilestones = responseJSON.workOrderMilestones!
|
workOrderMilestones = responseJSON.workOrderMilestones
|
||||||
renderMilestones()
|
renderMilestones()
|
||||||
} else {
|
} else {
|
||||||
bulmaJS.alert({
|
bulmaJS.alert({
|
||||||
|
|
@ -370,12 +452,13 @@ declare const bulmaJS: BulmaJS
|
||||||
})!
|
})!
|
||||||
|
|
||||||
let editCloseModalFunction: () => void
|
let editCloseModalFunction: () => void
|
||||||
|
let workOrderMilestoneDateStringElement: HTMLInputElement
|
||||||
|
|
||||||
function doEdit(submitEvent: SubmitEvent): void {
|
function doEdit(submitEvent: SubmitEvent): void {
|
||||||
submitEvent.preventDefault()
|
submitEvent.preventDefault()
|
||||||
|
|
||||||
cityssm.postJSON(
|
cityssm.postJSON(
|
||||||
los.urlPrefix + '/workOrders/doUpdateWorkOrderMilestone',
|
`${los.urlPrefix}/workOrders/doUpdateWorkOrderMilestone`,
|
||||||
submitEvent.currentTarget,
|
submitEvent.currentTarget,
|
||||||
(rawResponseJSON) => {
|
(rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON as {
|
const responseJSON = rawResponseJSON as {
|
||||||
|
|
@ -403,7 +486,7 @@ declare const bulmaJS: BulmaJS
|
||||||
modalElement.querySelector(
|
modalElement.querySelector(
|
||||||
'#milestoneEdit--workOrderMilestoneId'
|
'#milestoneEdit--workOrderMilestoneId'
|
||||||
) as HTMLInputElement
|
) as HTMLInputElement
|
||||||
).value = workOrderMilestone.workOrderMilestoneId!.toString()
|
).value = workOrderMilestone.workOrderMilestoneId?.toString() ?? ''
|
||||||
|
|
||||||
const milestoneTypeElement = modalElement.querySelector(
|
const milestoneTypeElement = modalElement.querySelector(
|
||||||
'#milestoneEdit--workOrderMilestoneTypeId'
|
'#milestoneEdit--workOrderMilestoneTypeId'
|
||||||
|
|
@ -441,25 +524,27 @@ declare const bulmaJS: BulmaJS
|
||||||
milestoneTypeElement.append(optionElement)
|
milestoneTypeElement.append(optionElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
;(
|
workOrderMilestoneDateStringElement = (
|
||||||
modalElement.querySelector(
|
modalElement.querySelector(
|
||||||
'#milestoneEdit--workOrderMilestoneDateString'
|
'#milestoneEdit--workOrderMilestoneDateString'
|
||||||
) as HTMLInputElement
|
) as HTMLInputElement
|
||||||
).value = workOrderMilestone.workOrderMilestoneDateString!
|
)
|
||||||
|
|
||||||
|
workOrderMilestoneDateStringElement.value = workOrderMilestone.workOrderMilestoneDateString ?? ''
|
||||||
|
|
||||||
if (workOrderMilestone.workOrderMilestoneTime) {
|
if (workOrderMilestone.workOrderMilestoneTime) {
|
||||||
;(
|
;(
|
||||||
modalElement.querySelector(
|
modalElement.querySelector(
|
||||||
'#milestoneEdit--workOrderMilestoneTimeString'
|
'#milestoneEdit--workOrderMilestoneTimeString'
|
||||||
) as HTMLInputElement
|
) as HTMLInputElement
|
||||||
).value = workOrderMilestone.workOrderMilestoneTimeString!
|
).value = workOrderMilestone.workOrderMilestoneTimeString ?? ''
|
||||||
}
|
}
|
||||||
|
|
||||||
;(
|
;(
|
||||||
modalElement.querySelector(
|
modalElement.querySelector(
|
||||||
'#milestoneEdit--workOrderMilestoneDescription'
|
'#milestoneEdit--workOrderMilestoneDescription'
|
||||||
) as HTMLTextAreaElement
|
) as HTMLTextAreaElement
|
||||||
).value = workOrderMilestone.workOrderMilestoneDescription!
|
).value = workOrderMilestone.workOrderMilestoneDescription ?? ''
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
editCloseModalFunction = closeModalFunction
|
editCloseModalFunction = closeModalFunction
|
||||||
|
|
@ -468,7 +553,26 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
los.initializeDatePickers(modalElement)
|
los.initializeDatePickers(modalElement)
|
||||||
// los.initializeTimePickers(modalElement);
|
// los.initializeTimePickers(modalElement);
|
||||||
modalElement.querySelector('form')!.addEventListener('submit', doEdit)
|
modalElement.querySelector('form')?.addEventListener('submit', doEdit)
|
||||||
|
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector(
|
||||||
|
'#milestoneEdit--conflictingMilestonesPanel'
|
||||||
|
) as HTMLElement
|
||||||
|
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener(
|
||||||
|
'change',
|
||||||
|
() => {
|
||||||
|
refreshConflictingMilestones(
|
||||||
|
workOrderMilestoneDateStringElement.value,
|
||||||
|
conflictingMilestonePanelElement
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
refreshConflictingMilestones(
|
||||||
|
workOrderMilestoneDateStringElement.value,
|
||||||
|
conflictingMilestonePanelElement
|
||||||
|
)
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped()
|
bulmaJS.toggleHtmlClipped()
|
||||||
|
|
@ -588,8 +692,9 @@ declare const bulmaJS: BulmaJS
|
||||||
document
|
document
|
||||||
.querySelector('#button--addMilestone')
|
.querySelector('#button--addMilestone')
|
||||||
?.addEventListener('click', () => {
|
?.addEventListener('click', () => {
|
||||||
let addModalElement: HTMLElement
|
|
||||||
let addFormElement: HTMLFormElement
|
let addFormElement: HTMLFormElement
|
||||||
|
let workOrderMilestoneDateStringElement: HTMLInputElement
|
||||||
let addCloseModalFunction: () => void
|
let addCloseModalFunction: () => void
|
||||||
|
|
||||||
function doAdd(submitEvent: SubmitEvent): void {
|
function doAdd(submitEvent: SubmitEvent): void {
|
||||||
|
|
@ -601,7 +706,7 @@ declare const bulmaJS: BulmaJS
|
||||||
|
|
||||||
function _doAdd(): void {
|
function _doAdd(): void {
|
||||||
cityssm.postJSON(
|
cityssm.postJSON(
|
||||||
los.urlPrefix + '/workOrders/doAddWorkOrderMilestone',
|
`${los.urlPrefix}/workOrders/doAddWorkOrderMilestone`,
|
||||||
addFormElement,
|
addFormElement,
|
||||||
(rawResponseJSON) => {
|
(rawResponseJSON) => {
|
||||||
const responseJSON = rawResponseJSON as {
|
const responseJSON = rawResponseJSON as {
|
||||||
|
|
@ -619,11 +724,7 @@ declare const bulmaJS: BulmaJS
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const milestoneDateString = (
|
const milestoneDateString = workOrderMilestoneDateStringElement.value
|
||||||
addModalElement.querySelector(
|
|
||||||
'#milestoneAdd--workOrderMilestoneDateString'
|
|
||||||
) as HTMLInputElement
|
|
||||||
).value
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
milestoneDateString !== '' &&
|
milestoneDateString !== '' &&
|
||||||
|
|
@ -666,14 +767,14 @@ declare const bulmaJS: BulmaJS
|
||||||
milestoneTypeElement.append(optionElement)
|
milestoneTypeElement.append(optionElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
;(
|
workOrderMilestoneDateStringElement = modalElement.querySelector(
|
||||||
modalElement.querySelector(
|
'#milestoneAdd--workOrderMilestoneDateString'
|
||||||
'#milestoneAdd--workOrderMilestoneDateString'
|
) as HTMLInputElement
|
||||||
) as HTMLInputElement
|
|
||||||
).valueAsDate = new Date()
|
workOrderMilestoneDateStringElement.valueAsDate = new Date()
|
||||||
},
|
},
|
||||||
onshown(modalElement, closeModalFunction) {
|
onshown(modalElement, closeModalFunction) {
|
||||||
addModalElement = modalElement
|
|
||||||
addCloseModalFunction = closeModalFunction
|
addCloseModalFunction = closeModalFunction
|
||||||
|
|
||||||
los.initializeDatePickers(modalElement)
|
los.initializeDatePickers(modalElement)
|
||||||
|
|
@ -686,8 +787,29 @@ declare const bulmaJS: BulmaJS
|
||||||
) as HTMLSelectElement
|
) as HTMLSelectElement
|
||||||
).focus()
|
).focus()
|
||||||
|
|
||||||
addFormElement = modalElement.querySelector('form')!
|
addFormElement = modalElement.querySelector(
|
||||||
|
'form'
|
||||||
|
) as HTMLFormElement
|
||||||
addFormElement.addEventListener('submit', doAdd)
|
addFormElement.addEventListener('submit', doAdd)
|
||||||
|
|
||||||
|
const conflictingMilestonePanelElement = document.querySelector(
|
||||||
|
'#milestoneAdd--conflictingMilestonesPanel'
|
||||||
|
) as HTMLElement
|
||||||
|
|
||||||
|
workOrderMilestoneDateStringElement.addEventListener(
|
||||||
|
'change',
|
||||||
|
() => {
|
||||||
|
refreshConflictingMilestones(
|
||||||
|
workOrderMilestoneDateStringElement.value,
|
||||||
|
conflictingMilestonePanelElement
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
refreshConflictingMilestones(
|
||||||
|
workOrderMilestoneDateStringElement.value,
|
||||||
|
conflictingMilestonePanelElement
|
||||||
|
)
|
||||||
},
|
},
|
||||||
onremoved() {
|
onremoved() {
|
||||||
bulmaJS.toggleHtmlClipped()
|
bulmaJS.toggleHtmlClipped()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="modal" role="dialog">
|
<div class="modal" role="dialog">
|
||||||
<div class="modal-background"></div>
|
<div class="modal-background"></div>
|
||||||
<div class="modal-card">
|
<div class="modal-card" style="width:1000px">
|
||||||
<header class="modal-card-head">
|
<header class="modal-card-head">
|
||||||
<h3 class="modal-card-title">Add Milestone</h3>
|
<h3 class="modal-card-title">Add Milestone</h3>
|
||||||
<button
|
<button
|
||||||
|
|
@ -10,84 +10,95 @@
|
||||||
></button>
|
></button>
|
||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<form id="form--milestoneAdd">
|
<div class="columns">
|
||||||
<input
|
<div class="column">
|
||||||
id="milestoneAdd--workOrderId"
|
<form id="form--milestoneAdd">
|
||||||
name="workOrderId"
|
<input
|
||||||
type="hidden"
|
id="milestoneAdd--workOrderId"
|
||||||
value=""
|
name="workOrderId"
|
||||||
/>
|
type="hidden"
|
||||||
|
value=""
|
||||||
<div class="field">
|
/>
|
||||||
<label class="label" for="milestoneAdd--workOrderMilestoneTypeId"
|
|
||||||
>Milestone Type</label
|
|
||||||
>
|
|
||||||
<div class="control">
|
|
||||||
<div class="select is-fullwidth">
|
|
||||||
<select
|
|
||||||
id="milestoneAdd--workOrderMilestoneTypeId"
|
|
||||||
name="workOrderMilestoneTypeId"
|
|
||||||
>
|
|
||||||
<option value="">(No Milestone Type)</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column">
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label
|
<label class="label" for="milestoneAdd--workOrderMilestoneTypeId"
|
||||||
class="label"
|
>Milestone Type</label
|
||||||
for="milestoneAdd--workOrderMilestoneDateString"
|
|
||||||
>Milestone Date</label
|
|
||||||
>
|
>
|
||||||
<div class="control has-icons-left">
|
<div class="control">
|
||||||
<input
|
<div class="select is-fullwidth">
|
||||||
class="input"
|
<select
|
||||||
id="milestoneAdd--workOrderMilestoneDateString"
|
id="milestoneAdd--workOrderMilestoneTypeId"
|
||||||
name="workOrderMilestoneDateString"
|
name="workOrderMilestoneTypeId"
|
||||||
type="date"
|
>
|
||||||
/>
|
<option value="">(No Milestone Type)</option>
|
||||||
<span class="icon is-left">
|
</select>
|
||||||
<i class="fas fa-calendar" aria-hidden="true"></i>
|
</div>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label
|
<label
|
||||||
class="label"
|
class="label"
|
||||||
for="milestoneAdd--workOrderMilestoneTimeString"
|
for="milestoneAdd--workOrderMilestoneDateString"
|
||||||
>Milestone Time</label
|
>Milestone Date</label
|
||||||
>
|
>
|
||||||
<div class="control has-icons-left">
|
<div class="control has-icons-left">
|
||||||
<input
|
<input
|
||||||
class="input"
|
class="input"
|
||||||
id="milestoneAdd--workOrderMilestoneTimeString"
|
id="milestoneAdd--workOrderMilestoneDateString"
|
||||||
name="workOrderMilestoneTimeString"
|
name="workOrderMilestoneDateString"
|
||||||
type="time"
|
type="date"
|
||||||
/>
|
/>
|
||||||
<span class="icon is-left">
|
<span class="icon is-left">
|
||||||
<i class="fas fa-clock" aria-hidden="true"></i>
|
<i class="fas fa-calendar" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label
|
||||||
|
class="label"
|
||||||
|
for="milestoneAdd--workOrderMilestoneTimeString"
|
||||||
|
>Milestone Time</label
|
||||||
|
>
|
||||||
|
<div class="control has-icons-left">
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="milestoneAdd--workOrderMilestoneTimeString"
|
||||||
|
name="workOrderMilestoneTimeString"
|
||||||
|
type="time"
|
||||||
|
/>
|
||||||
|
<span class="icon is-left">
|
||||||
|
<i class="fas fa-clock" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label" for="milestoneAdd--workOrderMilestoneDescription"
|
||||||
|
>Description</label
|
||||||
|
>
|
||||||
|
<div class="control">
|
||||||
|
<textarea
|
||||||
|
class="textarea"
|
||||||
|
id="milestoneAdd--workOrderMilestoneDescription"
|
||||||
|
name="workOrderMilestoneDescription"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="panel is-info" id="milestoneAdd--conflictingMilestonesPanel">
|
||||||
|
<h4 class="panel-heading">
|
||||||
|
Potentially Conflicting Milestones
|
||||||
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
</div>
|
||||||
<label class="label" for="milestoneAdd--workOrderMilestoneDescription"
|
|
||||||
>Description</label
|
|
||||||
>
|
|
||||||
<div class="control">
|
|
||||||
<textarea
|
|
||||||
class="textarea"
|
|
||||||
id="milestoneAdd--workOrderMilestoneDescription"
|
|
||||||
name="workOrderMilestoneDescription"
|
|
||||||
></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</section>
|
</section>
|
||||||
<footer class="modal-card-foot justify-right">
|
<footer class="modal-card-foot justify-right">
|
||||||
<button class="button is-success" type="submit" form="form--milestoneAdd">
|
<button class="button is-success" type="submit" form="form--milestoneAdd">
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="modal" role="dialog">
|
<div class="modal" role="dialog">
|
||||||
<div class="modal-background"></div>
|
<div class="modal-background"></div>
|
||||||
<div class="modal-card">
|
<div class="modal-card" style="width:1000px">
|
||||||
<header class="modal-card-head">
|
<header class="modal-card-head">
|
||||||
<h3 class="modal-card-title">Edit Milestone</h3>
|
<h3 class="modal-card-title">Edit Milestone</h3>
|
||||||
<button
|
<button
|
||||||
|
|
@ -10,92 +10,103 @@
|
||||||
></button>
|
></button>
|
||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<form id="form--milestoneEdit">
|
<div class="columns">
|
||||||
<input
|
<div class="column">
|
||||||
id="milestoneEdit--workOrderId"
|
<form id="form--milestoneEdit">
|
||||||
name="workOrderId"
|
<input
|
||||||
type="hidden"
|
id="milestoneEdit--workOrderId"
|
||||||
value=""
|
name="workOrderId"
|
||||||
/>
|
type="hidden"
|
||||||
<input
|
value=""
|
||||||
id="milestoneEdit--workOrderMilestoneId"
|
/>
|
||||||
name="workOrderMilestoneId"
|
<input
|
||||||
type="hidden"
|
id="milestoneEdit--workOrderMilestoneId"
|
||||||
value=""
|
name="workOrderMilestoneId"
|
||||||
/>
|
type="hidden"
|
||||||
|
value=""
|
||||||
<div class="field">
|
/>
|
||||||
<label class="label" for="milestoneEdit--workOrderMilestoneTypeId"
|
|
||||||
>Milestone Type</label
|
<div class="field">
|
||||||
>
|
<label class="label" for="milestoneEdit--workOrderMilestoneTypeId"
|
||||||
<div class="control">
|
>Milestone Type</label
|
||||||
<div class="select is-fullwidth">
|
|
||||||
<select
|
|
||||||
id="milestoneEdit--workOrderMilestoneTypeId"
|
|
||||||
name="workOrderMilestoneTypeId"
|
|
||||||
>
|
>
|
||||||
<option value="">(No Milestone Type)</option>
|
<div class="control">
|
||||||
</select>
|
<div class="select is-fullwidth">
|
||||||
|
<select
|
||||||
|
id="milestoneEdit--workOrderMilestoneTypeId"
|
||||||
|
name="workOrderMilestoneTypeId"
|
||||||
|
>
|
||||||
|
<option value="">(No Milestone Type)</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label
|
||||||
|
class="label"
|
||||||
|
for="milestoneEdit--workOrderMilestoneDateString"
|
||||||
|
>Milestone Date</label
|
||||||
|
>
|
||||||
|
<div class="control has-icons-left">
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="milestoneEdit--workOrderMilestoneDateString"
|
||||||
|
name="workOrderMilestoneDateString"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
<span class="icon is-left">
|
||||||
|
<i class="fas fa-calendar" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="field">
|
||||||
|
<label
|
||||||
|
class="label"
|
||||||
|
for="milestoneEdit--workOrderMilestoneTimeString"
|
||||||
|
>Milestone Time</label
|
||||||
|
>
|
||||||
|
<div class="control has-icons-left">
|
||||||
|
<input
|
||||||
|
class="input"
|
||||||
|
id="milestoneEdit--workOrderMilestoneTimeString"
|
||||||
|
name="workOrderMilestoneTimeString"
|
||||||
|
type="time"
|
||||||
|
/>
|
||||||
|
<span class="icon is-left">
|
||||||
|
<i class="fas fa-clock" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column">
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label
|
<label
|
||||||
class="label"
|
class="label"
|
||||||
for="milestoneEdit--workOrderMilestoneDateString"
|
for="milestoneEdit--workOrderMilestoneDescription"
|
||||||
>Milestone Date</label
|
>Description</label
|
||||||
>
|
>
|
||||||
<div class="control has-icons-left">
|
<div class="control">
|
||||||
<input
|
<textarea
|
||||||
class="input"
|
class="textarea"
|
||||||
id="milestoneEdit--workOrderMilestoneDateString"
|
id="milestoneEdit--workOrderMilestoneDescription"
|
||||||
name="workOrderMilestoneDateString"
|
name="workOrderMilestoneDescription"
|
||||||
type="date"
|
></textarea>
|
||||||
/>
|
|
||||||
<span class="icon is-left">
|
|
||||||
<i class="fas fa-calendar" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column">
|
|
||||||
<div class="field">
|
|
||||||
<label
|
|
||||||
class="label"
|
|
||||||
for="milestoneEdit--workOrderMilestoneTimeString"
|
|
||||||
>Milestone Time</label
|
|
||||||
>
|
|
||||||
<div class="control has-icons-left">
|
|
||||||
<input
|
|
||||||
class="input"
|
|
||||||
id="milestoneEdit--workOrderMilestoneTimeString"
|
|
||||||
name="workOrderMilestoneTimeString"
|
|
||||||
type="time"
|
|
||||||
/>
|
|
||||||
<span class="icon is-left">
|
|
||||||
<i class="fas fa-clock" aria-hidden="true"></i>
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="panel is-info" id="milestoneEdit--conflictingMilestonesPanel">
|
||||||
|
<h4 class="panel-heading">
|
||||||
|
Potentially Conflicting Milestones
|
||||||
|
</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="field">
|
</div>
|
||||||
<label
|
|
||||||
class="label"
|
|
||||||
for="milestoneEdit--workOrderMilestoneDescription"
|
|
||||||
>Description</label
|
|
||||||
>
|
|
||||||
<div class="control">
|
|
||||||
<textarea
|
|
||||||
class="textarea"
|
|
||||||
id="milestoneEdit--workOrderMilestoneDescription"
|
|
||||||
name="workOrderMilestoneDescription"
|
|
||||||
></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</section>
|
</section>
|
||||||
<footer class="modal-card-foot justify-right">
|
<footer class="modal-card-foot justify-right">
|
||||||
<button
|
<button
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue