open work orders report
parent
d5106b9784
commit
d93fef5dab
|
|
@ -78,6 +78,24 @@ export const getReportData = (reportName, reportParameters) => {
|
||||||
case "workOrders-all":
|
case "workOrders-all":
|
||||||
sql = "select * from WorkOrders";
|
sql = "select * from WorkOrders";
|
||||||
break;
|
break;
|
||||||
|
case "workOrders-open":
|
||||||
|
sql =
|
||||||
|
"select w.workOrderId, w.workOrderNumber," +
|
||||||
|
" t.workOrderType, w.workOrderDescription," +
|
||||||
|
" m.workOrderMilestoneCount, m.workOrderMilestoneCompletionCount" +
|
||||||
|
" from WorkOrders w" +
|
||||||
|
" left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId" +
|
||||||
|
(" left join (" +
|
||||||
|
"select m.workOrderId," +
|
||||||
|
" count(m.workOrderMilestoneId) as workOrderMilestoneCount," +
|
||||||
|
" sum(case when m.workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount" +
|
||||||
|
" from WorkOrderMilestones m" +
|
||||||
|
" where m.recordDelete_timeMillis is null" +
|
||||||
|
" group by m.workOrderId" +
|
||||||
|
") m on w.workOrderId = m.workOrderId") +
|
||||||
|
" where w.recordDelete_timeMillis is null" +
|
||||||
|
" and w.workOrderCloseDate is null";
|
||||||
|
break;
|
||||||
case "workOrderComments-all":
|
case "workOrderComments-all":
|
||||||
sql = "select * from WorkOrderComments";
|
sql = "select * from WorkOrderComments";
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,25 @@ export const getReportData = (
|
||||||
sql = "select * from WorkOrders";
|
sql = "select * from WorkOrders";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "workOrders-open":
|
||||||
|
sql =
|
||||||
|
"select w.workOrderId, w.workOrderNumber," +
|
||||||
|
" t.workOrderType, w.workOrderDescription," +
|
||||||
|
" m.workOrderMilestoneCount, m.workOrderMilestoneCompletionCount" +
|
||||||
|
" from WorkOrders w" +
|
||||||
|
" left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId" +
|
||||||
|
(" left join (" +
|
||||||
|
"select m.workOrderId," +
|
||||||
|
" count(m.workOrderMilestoneId) as workOrderMilestoneCount," +
|
||||||
|
" sum(case when m.workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount" +
|
||||||
|
" from WorkOrderMilestones m" +
|
||||||
|
" where m.recordDelete_timeMillis is null" +
|
||||||
|
" group by m.workOrderId" +
|
||||||
|
") m on w.workOrderId = m.workOrderId") +
|
||||||
|
" where w.recordDelete_timeMillis is null" +
|
||||||
|
" and w.workOrderCloseDate is null";
|
||||||
|
break;
|
||||||
|
|
||||||
case "workOrderComments-all":
|
case "workOrderComments-all":
|
||||||
sql = "select * from WorkOrderComments";
|
sql = "select * from WorkOrderComments";
|
||||||
break;
|
break;
|
||||||
|
|
@ -157,7 +176,7 @@ export const getReportData = (
|
||||||
case "workOrderMilestoneTypes-all":
|
case "workOrderMilestoneTypes-all":
|
||||||
sql = "select * from WorkOrderMilestoneTypes";
|
sql = "select * from WorkOrderMilestoneTypes";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
@ -166,14 +185,8 @@ export const getReportData = (
|
||||||
readonly: true
|
readonly: true
|
||||||
});
|
});
|
||||||
|
|
||||||
database.function(
|
database.function("userFn_dateIntegerToString", dateTimeFunctions.dateIntegerToString);
|
||||||
"userFn_dateIntegerToString",
|
database.function("userFn_timeIntegerToString", dateTimeFunctions.timeIntegerToString);
|
||||||
dateTimeFunctions.dateIntegerToString
|
|
||||||
);
|
|
||||||
database.function(
|
|
||||||
"userFn_timeIntegerToString",
|
|
||||||
dateTimeFunctions.timeIntegerToString
|
|
||||||
);
|
|
||||||
|
|
||||||
const rows = database.prepare(sql).all(sqlParameters);
|
const rows = database.prepare(sql).all(sqlParameters);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
(() => {
|
(() => {
|
||||||
|
|
||||||
const menuTabElements = document.querySelectorAll(".menu a") as NodeListOf<HTMLAnchorElement>;
|
const menuTabElements = document.querySelectorAll(".menu a") as NodeListOf<HTMLAnchorElement>;
|
||||||
const tabContainerElements = document.querySelectorAll(".tabs-container > div") as NodeListOf<HTMLElement>;
|
const tabContainerElements = document.querySelectorAll(
|
||||||
|
".tabs-container > div"
|
||||||
|
) as NodeListOf<HTMLElement>;
|
||||||
|
|
||||||
const selectTab = (clickEvent: Event) => {
|
const selectTab = (clickEvent: Event) => {
|
||||||
clickEvent.preventDefault();
|
clickEvent.preventDefault();
|
||||||
|
|
@ -19,10 +20,11 @@
|
||||||
|
|
||||||
// Hide all but selected tab
|
// Hide all but selected tab
|
||||||
|
|
||||||
const selectedTabContainerId = selectedTabElement.href.slice(Math.max(0, selectedTabElement.href.indexOf("#") + 1));
|
const selectedTabContainerId = selectedTabElement.href.slice(
|
||||||
|
Math.max(0, selectedTabElement.href.indexOf("#") + 1)
|
||||||
|
);
|
||||||
|
|
||||||
for (const tabContainerElement of tabContainerElements) {
|
for (const tabContainerElement of tabContainerElements) {
|
||||||
|
|
||||||
if (tabContainerElement.id === selectedTabContainerId) {
|
if (tabContainerElement.id === selectedTabContainerId) {
|
||||||
tabContainerElement.classList.remove("is-hidden");
|
tabContainerElement.classList.remove("is-hidden");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -31,8 +33,7 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
for (const menuTabElement of menuTabElements) {
|
for (const menuTabElement of menuTabElements) {
|
||||||
menuTabElement.addEventListener("click", selectTab);
|
menuTabElement.addEventListener("click", selectTab);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -9,17 +9,29 @@
|
||||||
</h2>
|
</h2>
|
||||||
<ul class="menu-list">
|
<ul class="menu-list">
|
||||||
<li>
|
<li>
|
||||||
<a class="is-active" href="#tab--maps">
|
<a class="is-active" href="#tab--workOrders">
|
||||||
<span class="icon is-small"><i class="far fa-fw fa-map" aria-hidden="true"></i></span>
|
<span class="icon is-small"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
|
||||||
<span><%= configFunctions.getProperty("aliases.maps") %></span>
|
<span>Work Orders</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#tab--lotOccupancies">
|
||||||
|
<span class="icon is-small"><i class="fas fa-fw fa-user" aria-hidden="true"></i></span>
|
||||||
|
<span><%= configFunctions.getProperty("aliases.occupancies") %></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#tab--lots">
|
<a href="#tab--lots">
|
||||||
<span class="icon is-small"><i class="fas fa-fw fa-vector-square" aria-hidden="true"></i></span>
|
<span class="icon is-small"><i class="fas fa-fw fa-vector-square" aria-hidden="true"></i></span>
|
||||||
<span><%= configFunctions.getProperty("aliases.lots") %></span>
|
<span><%= configFunctions.getProperty("aliases.lots") %></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#tab--maps">
|
||||||
|
<span class="icon is-small"><i class="far fa-fw fa-map" aria-hidden="true"></i></span>
|
||||||
|
<span><%= configFunctions.getProperty("aliases.maps") %></span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2 class="menu-label">
|
<h2 class="menu-label">
|
||||||
Table Exports
|
Table Exports
|
||||||
|
|
@ -33,7 +45,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#tab--configTableExports">
|
<a href="#tab--configTableExports">
|
||||||
<span class="icon is-small"><i class="fas fa-fw fa-tablet" aria-hidden="true"></i></span>
|
<span class="icon is-small"><i class="fas fa-fw fa-table" aria-hidden="true"></i></span>
|
||||||
<span>Config Tables</span>
|
<span>Config Tables</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -54,7 +66,56 @@
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="tabs-container">
|
<div class="tabs-container">
|
||||||
<div id="tab--maps">
|
<div id="tab--workOrders">
|
||||||
|
<h1 class="title is-1">Work Order Reports</h1>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<div class="panel">
|
||||||
|
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/workOrders-open" download>
|
||||||
|
<div class="has-text-centered my-2 ml-2 mr-3">
|
||||||
|
<span class="icon has-text-info">
|
||||||
|
<i class="fas fa-2x fa-file" aria-hidden="true"></i>
|
||||||
|
</span><br />
|
||||||
|
<span class="tag is-info">CSV</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="title is-5 is-marginless">Open Work Orders</h3>
|
||||||
|
<p>
|
||||||
|
All active work orders without completion dates.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="panel">
|
||||||
|
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/workOrders/outlook">
|
||||||
|
<div class="has-text-centered my-2 ml-2 mr-3">
|
||||||
|
<span class="icon has-text-info">
|
||||||
|
<i class="fas fa-2x fa-calendar" aria-hidden="true"></i>
|
||||||
|
</span><br />
|
||||||
|
<span class="tag is-info">ICS</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 class="title is-5 is-marginless">Work Order Milestone Calendar</h3>
|
||||||
|
<p>
|
||||||
|
Upcoming and recently passed work order milestones,
|
||||||
|
compatible with Microsoft Outlook and other calendar tools.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="is-hidden" id="tab--lotOccupancies">
|
||||||
|
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.occupancy") %> Reports</h1>
|
||||||
|
</div>
|
||||||
|
<div class="is-hidden" id="tab--lots">
|
||||||
|
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.lot") %> Reports</h1>
|
||||||
|
</div>
|
||||||
|
<div class="is-hidden" id="tab--maps">
|
||||||
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.map") %> Reports</h1>
|
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.map") %> Reports</h1>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-formatted" download>
|
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-formatted" download>
|
||||||
|
|
@ -73,9 +134,7 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="is-hidden" id="tab--lots">
|
|
||||||
<h1 class="title is-1"><%= configFunctions.getProperty("aliases.lot") %> Reports</h1>
|
|
||||||
</div>
|
|
||||||
<div class="is-hidden" id="tab--dataTableExports">
|
<div class="is-hidden" id="tab--dataTableExports">
|
||||||
<h1 class="title is-1">Data Table Exports</h1>
|
<h1 class="title is-1">Data Table Exports</h1>
|
||||||
<div class="message is-info">
|
<div class="message is-info">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue