milestone calendar

under development
deepsource-autofix-76c6eb20
Dan Gowans 2022-09-13 16:03:06 -04:00
parent d5b58cd985
commit 754cf80a36
30 changed files with 329 additions and 99 deletions

View File

@ -0,0 +1,3 @@
import type { RequestHandler } from "express";
export declare const handler: RequestHandler;
export default handler;

View File

@ -0,0 +1,6 @@
export const handler = (request, response) => {
response.render("workOrder-milestoneCalendar", {
headTitle: "Work Order Milestone Calendar"
});
};
export default handler;

View File

@ -0,0 +1,9 @@
import type { RequestHandler } from "express";
export const handler: RequestHandler = (request, response) => {
response.render("workOrder-milestoneCalendar", {
headTitle: "Work Order Milestone Calendar"
});
};
export default handler;

View File

@ -2,7 +2,9 @@ import { addWorkOrderMilestone } from "../../helpers/lotOccupancyDB/addWorkOrder
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = addWorkOrderMilestone(request.body, request.session); const success = addWorkOrderMilestone(request.body, request.session);
const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); const workOrderMilestones = getWorkOrderMilestones({
workOrderId: request.body.workOrderId
});
response.json({ response.json({
success, success,
workOrderMilestones workOrderMilestones

View File

@ -6,9 +6,9 @@ import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrde
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = addWorkOrderMilestone(request.body, request.session); const success = addWorkOrderMilestone(request.body, request.session);
const workOrderMilestones = getWorkOrderMilestones( const workOrderMilestones = getWorkOrderMilestones({
request.body.workOrderId workOrderId: request.body.workOrderId
); });
response.json({ response.json({
success, success,

View File

@ -4,7 +4,9 @@ export const handler = async (request, response) => {
const success = completeWorkOrderMilestone({ const success = completeWorkOrderMilestone({
workOrderMilestoneId: request.body.workOrderMilestoneId workOrderMilestoneId: request.body.workOrderMilestoneId
}, request.session); }, request.session);
const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); const workOrderMilestones = getWorkOrderMilestones({
workOrderId: request.body.workOrderId
});
response.json({ response.json({
success, success,
workOrderMilestones workOrderMilestones

View File

@ -12,9 +12,9 @@ export const handler: RequestHandler = async (request, response) => {
request.session request.session
); );
const workOrderMilestones = getWorkOrderMilestones( const workOrderMilestones = getWorkOrderMilestones({
request.body.workOrderId workOrderId: request.body.workOrderId
); });
response.json({ response.json({
success, success,

View File

@ -2,7 +2,9 @@ import { deleteWorkOrderMilestone } from "../../helpers/lotOccupancyDB/deleteWor
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = deleteWorkOrderMilestone(request.body.workOrderMilestoneId, request.session); const success = deleteWorkOrderMilestone(request.body.workOrderMilestoneId, request.session);
const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); const workOrderMilestones = getWorkOrderMilestones({
workOrderId: request.body.workOrderId
});
response.json({ response.json({
success, success,
workOrderMilestones workOrderMilestones

View File

@ -10,9 +10,9 @@ export const handler: RequestHandler = async (request, response) => {
request.session request.session
); );
const workOrderMilestones = getWorkOrderMilestones( const workOrderMilestones = getWorkOrderMilestones({
request.body.workOrderId workOrderId: request.body.workOrderId
); });
response.json({ response.json({
success, success,

View File

@ -2,7 +2,9 @@ import { reopenWorkOrderMilestone } from "../../helpers/lotOccupancyDB/reopenWor
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = reopenWorkOrderMilestone(request.body.workOrderMilestoneId, request.session); const success = reopenWorkOrderMilestone(request.body.workOrderMilestoneId, request.session);
const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); const workOrderMilestones = getWorkOrderMilestones({
workOrderId: request.body.workOrderId
});
response.json({ response.json({
success, success,
workOrderMilestones workOrderMilestones

View File

@ -10,9 +10,9 @@ export const handler: RequestHandler = async (request, response) => {
request.session request.session
); );
const workOrderMilestones = getWorkOrderMilestones( const workOrderMilestones = getWorkOrderMilestones({
request.body.workOrderId workOrderId: request.body.workOrderId
); });
response.json({ response.json({
success, success,

View File

@ -2,7 +2,9 @@ import { updateWorkOrderMilestone } from "../../helpers/lotOccupancyDB/updateWor
import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
export const handler = async (request, response) => { export const handler = async (request, response) => {
const success = updateWorkOrderMilestone(request.body, request.session); const success = updateWorkOrderMilestone(request.body, request.session);
const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); const workOrderMilestones = getWorkOrderMilestones({
workOrderId: request.body.workOrderId
});
response.json({ response.json({
success, success,
workOrderMilestones workOrderMilestones

View File

@ -6,9 +6,9 @@ import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrde
export const handler: RequestHandler = async (request, response) => { export const handler: RequestHandler = async (request, response) => {
const success = updateWorkOrderMilestone(request.body, request.session); const success = updateWorkOrderMilestone(request.body, request.session);
const workOrderMilestones = getWorkOrderMilestones( const workOrderMilestones = getWorkOrderMilestones({
request.body.workOrderId workOrderId: request.body.workOrderId
); });
response.json({ response.json({
success, success,

View File

@ -36,7 +36,9 @@ const _getWorkOrder = (sql, workOrderId_or_workOrderNumber) => {
includeOccupants: true includeOccupants: true
}, database).lotOccupancies; }, database).lotOccupancies;
workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId, database); workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId, database);
workOrder.workOrderMilestones = getWorkOrderMilestones(workOrder.workOrderId, database); workOrder.workOrderMilestones = getWorkOrderMilestones({
workOrderId: workOrder.workOrderId
}, database);
} }
database.close(); database.close();
return workOrder; return workOrder;

View File

@ -68,7 +68,9 @@ const _getWorkOrder = (
); );
workOrder.workOrderMilestones = getWorkOrderMilestones( workOrder.workOrderMilestones = getWorkOrderMilestones(
workOrder.workOrderId, {
workOrderId: workOrder.workOrderId
},
database database
); );
} }

View File

@ -1,4 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from "better-sqlite3";
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from "../../types/recordTypes";
export declare const getWorkOrderMilestones: (workOrderId: number | string, connectedDatabase?: sqlite.Database) => recordTypes.WorkOrderMilestone[]; interface WorkOrderMilestoneFilters {
workOrderId?: number | string;
}
export declare const getWorkOrderMilestones: (filters: WorkOrderMilestoneFilters, connectedDatabase?: sqlite.Database) => recordTypes.WorkOrderMilestone[];
export default getWorkOrderMilestones; export default getWorkOrderMilestones;

View File

@ -1,13 +1,19 @@
import sqlite from "better-sqlite3"; import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { dateIntegerToString, timeIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateIntegerToString, timeIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js";
export const getWorkOrderMilestones = (workOrderId, connectedDatabase) => { export const getWorkOrderMilestones = (filters, connectedDatabase) => {
const database = connectedDatabase || const database = connectedDatabase ||
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function("userFn_dateIntegerToString", dateIntegerToString);
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function("userFn_timeIntegerToString", timeIntegerToString);
let sqlWhereClause = " where m.recordDelete_timeMillis is null";
const sqlParameters = [];
if (filters.workOrderId) {
sqlWhereClause += " and m.workOrderId = ?";
sqlParameters.push(filters.workOrderId);
}
const workOrderMilestones = database const workOrderMilestones = database
.prepare("select m.workOrderMilestoneId," + .prepare("select m.workOrderMilestoneId," +
" m.workOrderMilestoneTypeId, t.workORderMilestoneType," + " m.workOrderMilestoneTypeId, t.workORderMilestoneType," +
@ -19,13 +25,12 @@ export const getWorkOrderMilestones = (workOrderId, connectedDatabase) => {
" m.recordCreate_userName, m.recordUpdate_userName" + " m.recordCreate_userName, m.recordUpdate_userName" +
" from WorkOrderMilestones m" + " from WorkOrderMilestones m" +
" left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" + " left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" +
" where m.recordDelete_timeMillis is null" + sqlWhereClause +
" and m.workOrderId = ?" +
" order by" + " order by" +
" m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," + " m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," +
" m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," + " m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," +
" t.orderNumber, m.workOrderMilestoneId") " t.orderNumber, m.workOrderMilestoneId")
.all(workOrderId); .all(sqlParameters);
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close();
} }

View File

@ -9,8 +9,12 @@ import {
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from "../../types/recordTypes";
interface WorkOrderMilestoneFilters {
workOrderId?: number | string;
}
export const getWorkOrderMilestones = ( export const getWorkOrderMilestones = (
workOrderId: number | string, filters: WorkOrderMilestoneFilters,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.WorkOrderMilestone[] => { ): recordTypes.WorkOrderMilestone[] => {
const database = const database =
@ -22,6 +26,14 @@ export const getWorkOrderMilestones = (
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function("userFn_dateIntegerToString", dateIntegerToString);
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function("userFn_timeIntegerToString", timeIntegerToString);
let sqlWhereClause = " where m.recordDelete_timeMillis is null";
const sqlParameters = [];
if (filters.workOrderId) {
sqlWhereClause += " and m.workOrderId = ?";
sqlParameters.push(filters.workOrderId);
}
const workOrderMilestones = database const workOrderMilestones = database
.prepare( .prepare(
"select m.workOrderMilestoneId," + "select m.workOrderMilestoneId," +
@ -34,14 +46,13 @@ export const getWorkOrderMilestones = (
" m.recordCreate_userName, m.recordUpdate_userName" + " m.recordCreate_userName, m.recordUpdate_userName" +
" from WorkOrderMilestones m" + " from WorkOrderMilestones m" +
" left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" + " left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" +
" where m.recordDelete_timeMillis is null" + sqlWhereClause +
" and m.workOrderId = ?" +
" order by" + " order by" +
" m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," + " m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," +
" m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," + " m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," +
" t.orderNumber, m.workOrderMilestoneId" " t.orderNumber, m.workOrderMilestoneId"
) )
.all(workOrderId); .all(sqlParameters);
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close();

View File

@ -0,0 +1 @@
export {};

View File

@ -0,0 +1,25 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
const workOrderSearchFiltersFormElement = document.querySelector("#form--searchFilters");
const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateFilter");
const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateString");
const renderMilestones = (workOrderMilestones) => {
};
const getMilestones = (event) => {
if (event) {
event.preventDefault();
}
cityssm.postJSON(urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON) => {
renderMilestones(responseJSON.workOrderMilestones);
});
};
workOrderMilestoneDateFilterElement.addEventListener("change", () => {
workOrderMilestoneDateStringElement.disabled = (workOrderMilestoneDateFilterElement.value !== "date");
getMilestones();
});
workOrderMilestoneDateStringElement.addEventListener("change", getMilestones);
workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones);
getMilestones();
})();

View File

@ -0,0 +1,42 @@
/* eslint-disable unicorn/prefer-module */
import type * as recordTypes from "../types/recordTypes";
import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types";
declare const cityssm: cityssmGlobal;
(() => {
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
const workOrderSearchFiltersFormElement = document.querySelector("#form--searchFilters") as HTMLFormElement;
const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateFilter") as HTMLSelectElement;
const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateString") as HTMLInputElement;
const renderMilestones = (workOrderMilestones: recordTypes.WorkOrderMilestone[]) => {
};
const getMilestones = (event?: Event) => {
if (event) {
event.preventDefault();
}
cityssm.postJSON(urlPrefix + "/workOrders/doGetWorkOrderMilestones",
workOrderSearchFiltersFormElement,
(responseJSON: {workOrderMilestones: recordTypes.WorkOrderMilestone[]}) => {
renderMilestones(responseJSON.workOrderMilestones);
})
} ;
workOrderMilestoneDateFilterElement.addEventListener("change", () => {
workOrderMilestoneDateStringElement.disabled = (workOrderMilestoneDateFilterElement.value !== "date");
getMilestones();
});
workOrderMilestoneDateStringElement.addEventListener("change", getMilestones);
workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones);
getMilestones();
})();

View File

@ -0,0 +1 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,r=document.querySelector("#form--searchFilters"),t=r.querySelector("#searchFilter--workOrderMilestoneDateFilter"),s=r.querySelector("#searchFilter--workOrderMilestoneDateString"),o=t=>{t&&t.preventDefault(),cityssm.postJSON(e+"/workOrders/doGetWorkOrderMilestones",r,e=>{e.workOrderMilestones})};t.addEventListener("change",()=>{s.disabled="date"!==t.value,o()}),s.addEventListener("change",o),r.addEventListener("submit",o),o()})();

View File

@ -2,6 +2,7 @@ import { Router } from "express";
import * as permissionHandlers from "../handlers/permissions.js"; import * as permissionHandlers from "../handlers/permissions.js";
import handler_search from "../handlers/workOrders-get/search.js"; import handler_search from "../handlers/workOrders-get/search.js";
import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js"; import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js";
import handler_milestoneCalendar from "../handlers/workOrders-get/milestoneCalendar.js";
import handler_view from "../handlers/workOrders-get/view.js"; import handler_view from "../handlers/workOrders-get/view.js";
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js"; import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
import handler_new from "../handlers/workOrders-get/new.js"; import handler_new from "../handlers/workOrders-get/new.js";
@ -20,6 +21,7 @@ import handler_doDeleteWorkOrderMilestone from "../handlers/workOrders-post/doDe
export const router = Router(); export const router = Router();
router.get("/", handler_search); router.get("/", handler_search);
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders); router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
router.get("/milestoneCalendar", handler_milestoneCalendar);
router.get("/new", permissionHandlers.adminGetHandler, handler_new); router.get("/new", permissionHandlers.adminGetHandler, handler_new);
router.post("/doCreateWorkOrder", permissionHandlers.updatePostHandler, handler_doCreateWorkOrder); router.post("/doCreateWorkOrder", permissionHandlers.updatePostHandler, handler_doCreateWorkOrder);
router.get("/:workOrderId", handler_view); router.get("/:workOrderId", handler_view);

View File

@ -5,6 +5,8 @@ import * as permissionHandlers from "../handlers/permissions.js";
import handler_search from "../handlers/workOrders-get/search.js"; import handler_search from "../handlers/workOrders-get/search.js";
import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js"; import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js";
import handler_milestoneCalendar from "../handlers/workOrders-get/milestoneCalendar.js";
import handler_view from "../handlers/workOrders-get/view.js"; import handler_view from "../handlers/workOrders-get/view.js";
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js"; import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
@ -28,10 +30,18 @@ import handler_doDeleteWorkOrderMilestone from "../handlers/workOrders-post/doDe
export const router = Router(); export const router = Router();
// Search
router.get("/", handler_search); router.get("/", handler_search);
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders); router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
// Milestone Calendar
router.get("/milestoneCalendar", handler_milestoneCalendar);
// New
router.get("/new", permissionHandlers.adminGetHandler, handler_new); router.get("/new", permissionHandlers.adminGetHandler, handler_new);
router.post( router.post(
@ -40,6 +50,8 @@ router.post(
handler_doCreateWorkOrder handler_doCreateWorkOrder
); );
// View
router.get("/:workOrderId", handler_view); router.get("/:workOrderId", handler_view);
router.post( router.post(
@ -48,6 +60,8 @@ router.post(
handler_doReopenWorkOrder handler_doReopenWorkOrder
); );
// Edit
router.get( router.get(
"/:workOrderId/edit", "/:workOrderId/edit",
permissionHandlers.updateGetHandler, permissionHandlers.updateGetHandler,

View File

@ -0,0 +1,19 @@
<aside class="menu">
<h2 class="menu-label">
Work Orders
</h2>
<ul class="menu-list">
<li>
<a class="<%= (headTitle === "Work Order Search" ? "is-active" : "") %>" href="<%= urlPrefix %>/workOrders">
<span class="icon is-small"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Order Search</span>
</a>
</li>
<li>
<a class="<%= (headTitle.endsWith("Milestone Calendar") ? "is-active" : "") %>" href="<%= urlPrefix %>/workOrders/milestoneCalendar">
<span class="icon is-small"><i class="fas fa-fw fa-calendar" aria-hidden="true"></i></span>
<span>Milestone Calendar</span>
</a>
</li>
</ul>
</aside>

View File

@ -0,0 +1,66 @@
<%- include('_header'); -%>
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-workOrders'); -%>
</div>
<div class="column">
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="<%= urlPrefix %>/workOrders">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Milestone Calendar
</a>
</li>
</ul>
</nav>
<h1 class="title is-1">
Milestone Calendar
</h1>
<div class="box">
<form id="form--searchFilters">
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderMilestoneDateFilter">Miestone Date Filter Type</label>
<div class="control">
<div class="select is-fullwidth">
<select id="searchFilter--workOrderMilestoneDateFilter">
<option value="upcomingMissed" selected>Upcoming and Missed</option>
<option value="recent">Recent</option>
<option value="date">Specific Date</option>
</select>
</div>
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="searchFilter--workOrderMilestoneDateString">Milestone Date</label>
<div class="control">
<input class="input" id="searchFilter--workOrderMilestoneDateString" name="workOrderMilestoneDateString" type="date" value="<%= dateTimeFunctions.dateToString(new Date()) %>" disabled required />
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<%- include('_footerA'); -%>
<script src="<%= urlPrefix %>/javascripts/workOrderMilestoneCalendar.min.js"></script>
<%- include('_footerB'); -%>

View File

@ -1,5 +1,12 @@
<%- include('_header'); -%> <%- include('_header'); -%>
<%- include('_header'); -%>
<div class="columns">
<div class="column is-3 is-hidden-mobile">
<%- include('_menu-workOrders'); -%>
</div>
<div class="column">
<nav class="breadcrumb"> <nav class="breadcrumb">
<ul> <ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li> <li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
@ -71,6 +78,8 @@
</div> </div>
<div id="container--searchResults"></div> <div id="container--searchResults"></div>
</div>
</div>
<%- include('_footerA'); -%> <%- include('_footerA'); -%>