allow milestones with no set date

deepsource-autofix-76c6eb20
Dan Gowans 2023-02-02 11:35:03 -05:00
parent 539ab54e85
commit f7b8874b0d
22 changed files with 154 additions and 92 deletions

View File

@ -195,6 +195,7 @@ export async function handler(request, response) {
};
if (request.query.workOrderId) {
workOrderMilestoneFilters.workOrderId = request.query.workOrderId;
workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'notBlank';
}
else {
workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'recent';

View File

@ -294,6 +294,7 @@ export async function handler(
if (request.query.workOrderId) {
workOrderMilestoneFilters.workOrderId = request.query.workOrderId as string
workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'notBlank'
} else {
workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'recent'
}

View File

@ -53,7 +53,7 @@ const createStatements = [
`create table if not exists WorkOrderComments (workOrderCommentId integer not null primary key autoincrement, workOrderId integer not null, workOrderCommentDate integer not null check (workOrderCommentDate > 0), workOrderCommentTime integer not null check (workOrderCommentTime >= 0), workOrderComment text not null, ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId))`,
'create index if not exists idx_workordercomments_datetime on WorkOrderComments (workOrderId, workOrderCommentDate, workOrderCommentTime)',
`create table if not exists WorkOrderMilestoneTypes (workOrderMilestoneTypeId integer not null primary key autoincrement, workOrderMilestoneType varchar(100) not null, orderNumber smallint not null default 0, ${recordColumns})`,
`create table if not exists WorkOrderMilestones (workOrderMilestoneId integer not null primary key autoincrement, workOrderId integer not null, workOrderMilestoneTypeId integer, workOrderMilestoneDate integer not null check (workOrderMilestoneDate > 0), workOrderMilestoneTime integer not null check (workOrderMilestoneTime >= 0), workOrderMilestoneDescription text not null, workOrderMilestoneCompletionDate integer check (workOrderMilestoneCompletionDate > 0), workOrderMilestoneCompletionTime integer check (workOrderMilestoneCompletionTime >= 0), ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId), foreign key (workOrderMilestoneTypeId) references WorkOrderMilestoneTypes (workOrderMilestoneTypeId))`
`create table if not exists WorkOrderMilestones (workOrderMilestoneId integer not null primary key autoincrement, workOrderId integer not null, workOrderMilestoneTypeId integer, workOrderMilestoneDate integer not null check (workOrderMilestoneDate >= 0), workOrderMilestoneTime integer not null check (workOrderMilestoneTime >= 0), workOrderMilestoneDescription text not null, workOrderMilestoneCompletionDate integer check (workOrderMilestoneCompletionDate > 0), workOrderMilestoneCompletionTime integer check (workOrderMilestoneCompletionTime >= 0), ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId), foreign key (workOrderMilestoneTypeId) references WorkOrderMilestoneTypes (workOrderMilestoneTypeId))`
];
export function initializeDatabase() {
const lotOccupancyDB = sqlite(databasePath);

View File

@ -68,7 +68,7 @@ const createStatements = [
`create table if not exists WorkOrderComments (workOrderCommentId integer not null primary key autoincrement, workOrderId integer not null, workOrderCommentDate integer not null check (workOrderCommentDate > 0), workOrderCommentTime integer not null check (workOrderCommentTime >= 0), workOrderComment text not null, ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId))`,
'create index if not exists idx_workordercomments_datetime on WorkOrderComments (workOrderId, workOrderCommentDate, workOrderCommentTime)',
`create table if not exists WorkOrderMilestoneTypes (workOrderMilestoneTypeId integer not null primary key autoincrement, workOrderMilestoneType varchar(100) not null, orderNumber smallint not null default 0, ${recordColumns})`,
`create table if not exists WorkOrderMilestones (workOrderMilestoneId integer not null primary key autoincrement, workOrderId integer not null, workOrderMilestoneTypeId integer, workOrderMilestoneDate integer not null check (workOrderMilestoneDate > 0), workOrderMilestoneTime integer not null check (workOrderMilestoneTime >= 0), workOrderMilestoneDescription text not null, workOrderMilestoneCompletionDate integer check (workOrderMilestoneCompletionDate > 0), workOrderMilestoneCompletionTime integer check (workOrderMilestoneCompletionTime >= 0), ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId), foreign key (workOrderMilestoneTypeId) references WorkOrderMilestoneTypes (workOrderMilestoneTypeId))`
`create table if not exists WorkOrderMilestones (workOrderMilestoneId integer not null primary key autoincrement, workOrderId integer not null, workOrderMilestoneTypeId integer, workOrderMilestoneDate integer not null check (workOrderMilestoneDate >= 0), workOrderMilestoneTime integer not null check (workOrderMilestoneTime >= 0), workOrderMilestoneDescription text not null, workOrderMilestoneCompletionDate integer check (workOrderMilestoneCompletionDate > 0), workOrderMilestoneCompletionTime integer check (workOrderMilestoneCompletionTime >= 0), ${recordColumns}, foreign key (workOrderId) references WorkOrders (workOrderId), foreign key (workOrderMilestoneTypeId) references WorkOrderMilestoneTypes (workOrderMilestoneTypeId))`
]
export function initializeDatabase(): boolean {

View File

@ -12,7 +12,9 @@ export async function addWorkOrderMilestone(milestoneForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
.run(milestoneForm.workOrderId, milestoneForm.workOrderMilestoneTypeId ?? undefined, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), milestoneForm.workOrderMilestoneTimeString
.run(milestoneForm.workOrderId, milestoneForm.workOrderMilestoneTypeId ?? undefined, milestoneForm.workOrderMilestoneDateString === ''
? 0
: dateStringToInteger(milestoneForm.workOrderMilestoneDateString), milestoneForm.workOrderMilestoneTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString)
: 0, milestoneForm.workOrderMilestoneDescription, milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString)

View File

@ -41,7 +41,9 @@ export async function addWorkOrderMilestone(
.run(
milestoneForm.workOrderId,
milestoneForm.workOrderMilestoneTypeId ?? undefined,
dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
milestoneForm.workOrderMilestoneDateString === ''
? 0
: dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
milestoneForm.workOrderMilestoneTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString)
: 0,

View File

@ -2,7 +2,7 @@ import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../../types/recordTypes';
export interface WorkOrderMilestoneFilters {
workOrderId?: number | string;
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date';
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank';
workOrderMilestoneDateString?: string;
workOrderTypeIds?: string;
workOrderMilestoneTypeIds?: string;

View File

@ -33,6 +33,14 @@ function buildWhereClause(filters) {
sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber);
break;
}
case 'blank': {
sqlWhereClause += ' and m.workOrderMilestoneDate = 0';
break;
}
case 'notBlank': {
sqlWhereClause += ' and m.workOrderMilestoneDate > 0';
break;
}
}
if ((filters.workOrderMilestoneDateString ?? '') !== '') {
sqlWhereClause += ' and m.workOrderMilestoneDate = ?';

View File

@ -17,7 +17,7 @@ import type * as recordTypes from '../../types/recordTypes'
export interface WorkOrderMilestoneFilters {
workOrderId?: number | string
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date'
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank'
workOrderMilestoneDateString?: string
workOrderTypeIds?: string
workOrderMilestoneTypeIds?: string
@ -81,6 +81,16 @@ function buildWhereClause(filters: WorkOrderMilestoneFilters): {
sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber)
break
}
case 'blank': {
sqlWhereClause += ' and m.workOrderMilestoneDate = 0'
break
}
case 'notBlank': {
sqlWhereClause += ' and m.workOrderMilestoneDate > 0'
break
}
}
if ((filters.workOrderMilestoneDateString ?? '') !== '') {

View File

@ -14,7 +14,9 @@ export async function updateWorkOrderMilestone(milestoneForm, requestSession) {
where workOrderMilestoneId = ?`)
.run(milestoneForm.workOrderMilestoneTypeId === ''
? undefined
: milestoneForm.workOrderMilestoneTypeId, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), (milestoneForm.workOrderMilestoneTimeString ?? '') === ''
: milestoneForm.workOrderMilestoneTypeId, milestoneForm.workOrderMilestoneDateString === ''
? 0
: dateStringToInteger(milestoneForm.workOrderMilestoneDateString), (milestoneForm.workOrderMilestoneTimeString ?? '') === ''
? 0
: timeStringToInteger(milestoneForm.workOrderMilestoneTimeString), milestoneForm.workOrderMilestoneDescription, requestSession.user.userName, rightNow.getTime(), milestoneForm.workOrderMilestoneId);
database.release();

View File

@ -38,7 +38,9 @@ export async function updateWorkOrderMilestone(
milestoneForm.workOrderMilestoneTypeId === ''
? undefined
: milestoneForm.workOrderMilestoneTypeId,
dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
milestoneForm.workOrderMilestoneDateString === ''
? 0
: dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
(milestoneForm.workOrderMilestoneTimeString ?? '') === ''
? 0
: timeStringToInteger(milestoneForm.workOrderMilestoneTimeString!),

View File

@ -929,7 +929,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
bulmaJS.confirm({
title: 'Complete Milestone',
message: 'Are you sure you want to complete this milestone?' +
(workOrderMilestone.workOrderMilestoneDateString > currentDateString
(workOrderMilestone.workOrderMilestoneDateString !== '' &&
workOrderMilestone.workOrderMilestoneDateString > currentDateString
? '<br /><strong>Note that this milestone is expected to be completed in the future.</strong>'
: ''),
messageIsHtml: true,
@ -1077,7 +1078,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML((_a = milestone.workOrderMilestoneType) !== null && _a !== void 0 ? _a : '') +
'</strong><br />'
: '') +
milestone.workOrderMilestoneDateString +
(milestone.workOrderMilestoneDate === 0
? '<span class="has-text-grey">(No Set Date)</span>'
: milestone.workOrderMilestoneDateString) +
(milestone.workOrderMilestoneTime
? ' ' + milestone.workOrderMilestoneTimeString
: '') +
@ -1150,7 +1153,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
if (addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value < currentDateString) {
const milestoneDateString = addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value;
if (milestoneDateString !== '' &&
milestoneDateString < currentDateString) {
bulmaJS.confirm({
title: 'Milestone Date in the Past',
message: 'Are you sure you want to create a milestone with a date in the past?',

View File

@ -174,7 +174,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
bulmaJS.confirm({
title: 'Complete Milestone',
message: 'Are you sure you want to complete this milestone?' +
(workOrderMilestone.workOrderMilestoneDateString > currentDateString
(workOrderMilestone.workOrderMilestoneDateString !== '' &&
workOrderMilestone.workOrderMilestoneDateString > currentDateString
? '<br /><strong>Note that this milestone is expected to be completed in the future.</strong>'
: ''),
messageIsHtml: true,
@ -322,7 +323,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
cityssm.escapeHTML((_a = milestone.workOrderMilestoneType) !== null && _a !== void 0 ? _a : '') +
'</strong><br />'
: '') +
milestone.workOrderMilestoneDateString +
(milestone.workOrderMilestoneDate === 0
? '<span class="has-text-grey">(No Set Date)</span>'
: milestone.workOrderMilestoneDateString) +
(milestone.workOrderMilestoneTime
? ' ' + milestone.workOrderMilestoneTimeString
: '') +
@ -395,7 +398,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
if (addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value < currentDateString) {
const milestoneDateString = addModalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString').value;
if (milestoneDateString !== '' &&
milestoneDateString < currentDateString) {
bulmaJS.confirm({
title: 'Milestone Date in the Past',
message: 'Are you sure you want to create a milestone with a date in the past?',

View File

@ -244,7 +244,8 @@ declare const bulmaJS: BulmaJS
title: 'Complete Milestone',
message:
'Are you sure you want to complete this milestone?' +
(workOrderMilestone.workOrderMilestoneDateString! > currentDateString
(workOrderMilestone.workOrderMilestoneDateString !== '' &&
workOrderMilestone.workOrderMilestoneDateString! > currentDateString
? '<br /><strong>Note that this milestone is expected to be completed in the future.</strong>'
: ''),
messageIsHtml: true,
@ -481,7 +482,9 @@ declare const bulmaJS: BulmaJS
cityssm.escapeHTML(milestone.workOrderMilestoneType ?? '') +
'</strong><br />'
: '') +
milestone.workOrderMilestoneDateString +
(milestone.workOrderMilestoneDate === 0
? '<span class="has-text-grey">(No Set Date)</span>'
: milestone.workOrderMilestoneDateString) +
(milestone.workOrderMilestoneTime
? ' ' + milestone.workOrderMilestoneTimeString
: '') +
@ -579,12 +582,15 @@ declare const bulmaJS: BulmaJS
)
}
if (
(
const milestoneDateString = (
addModalElement.querySelector(
'#milestoneAdd--workOrderMilestoneDateString'
) as HTMLInputElement
).value < currentDateString
).value
if (
milestoneDateString !== '' &&
milestoneDateString < currentDateString
) {
bulmaJS.confirm({
title: 'Milestone Date in the Past',

View File

@ -18,7 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
milestoneCalendarContainerElement.innerHTML = '';
const currentDate = cityssm.dateToString(new Date());
let currentPanelElement;
let currentPanelDateString = '';
let currentPanelDateString = 'x';
for (const milestone of workOrderMilestones) {
if (currentPanelDateString !== milestone.workOrderMilestoneDateString) {
if (currentPanelElement) {
@ -26,12 +26,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
currentPanelElement = document.createElement('div');
currentPanelElement.className = 'panel';
currentPanelElement.innerHTML = `<h2 class="panel-heading">${milestone.workOrderMilestoneDateString}</h2>`;
currentPanelElement.innerHTML = `<h2 class="panel-heading">
${milestone.workOrderMilestoneDate === 0
? 'No Set Date'
: milestone.workOrderMilestoneDateString}
</h2>`;
currentPanelDateString = milestone.workOrderMilestoneDateString;
}
const panelBlockElement = document.createElement('div');
panelBlockElement.className = 'panel-block is-block';
if (!milestone.workOrderMilestoneCompletionDate &&
milestone.workOrderMilestoneDateString !== '' &&
milestone.workOrderMilestoneDateString < currentDate) {
panelBlockElement.classList.add('has-background-warning-light');
}

View File

@ -41,7 +41,7 @@ declare const cityssm: cityssmGlobal
const currentDate = cityssm.dateToString(new Date())
let currentPanelElement: HTMLElement | undefined
let currentPanelDateString = ''
let currentPanelDateString = 'x'
for (const milestone of workOrderMilestones) {
if (currentPanelDateString !== milestone.workOrderMilestoneDateString) {
@ -52,7 +52,13 @@ declare const cityssm: cityssmGlobal
currentPanelElement = document.createElement('div')
currentPanelElement.className = 'panel'
currentPanelElement.innerHTML = `<h2 class="panel-heading">${milestone.workOrderMilestoneDateString!}</h2>`
currentPanelElement.innerHTML = `<h2 class="panel-heading">
${
milestone.workOrderMilestoneDate === 0
? 'No Set Date'
: milestone.workOrderMilestoneDateString!
}
</h2>`
currentPanelDateString = milestone.workOrderMilestoneDateString!
}
@ -63,6 +69,7 @@ declare const cityssm: cityssmGlobal
if (
!milestone.workOrderMilestoneCompletionDate &&
milestone.workOrderMilestoneDateString !== '' &&
milestone.workOrderMilestoneDateString! < currentDate
) {
panelBlockElement.classList.add('has-background-warning-light')

View File

@ -47,7 +47,6 @@
id="milestoneAdd--workOrderMilestoneDateString"
name="workOrderMilestoneDateString"
type="date"
required
/>
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>

View File

@ -53,7 +53,6 @@
id="milestoneEdit--workOrderMilestoneDateString"
name="workOrderMilestoneDateString"
type="date"
required
/>
<span class="icon is-left">
<i class="fas fa-calendar" aria-hidden="true"></i>

File diff suppressed because one or more lines are too long

View File

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

View File

@ -94,7 +94,11 @@
<%= milestone.workOrderMilestoneDescription %>
</td>
<td>
<% if (milestone.workOrderMilestoneDate === 0) { %>
(No Set Date)
<% } else { %>
<%= milestone.workOrderMilestoneDateString %>
<% } %>
<% if (milestone.workOrderMilestoneTime) { %>
<%= milestone.workOrderMilestoneTimeString %>
<% } %>

View File

@ -338,7 +338,11 @@
<% if (milestone.workOrderMilestoneTypeId) { %>
<strong><%= milestone.workOrderMilestoneType %></strong><br />
<% } %>
<% if (milestone.workOrderMilestoneDate === 0) { %>
<span class="has-text-grey">(No Set Date)</span>
<% } else { %>
<%= milestone.workOrderMilestoneDateString %>
<% } %>
<% if (milestone.workOrderMilestoneTime !== 0) { %>
<%= milestone.workOrderMilestoneTimeString %>
<% } %>