open work orders report

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-26 15:48:43 -04:00
parent d5106b9784
commit d93fef5dab
4 changed files with 115 additions and 24 deletions

View File

@ -78,6 +78,24 @@ export const getReportData = (reportName, reportParameters) => {
case "workOrders-all":
sql = "select * from WorkOrders";
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":
sql = "select * from WorkOrderComments";
break;

View File

@ -106,6 +106,25 @@ export const getReportData = (
sql = "select * from WorkOrders";
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":
sql = "select * from WorkOrderComments";
break;
@ -166,14 +185,8 @@ export const getReportData = (
readonly: true
});
database.function(
"userFn_dateIntegerToString",
dateTimeFunctions.dateIntegerToString
);
database.function(
"userFn_timeIntegerToString",
dateTimeFunctions.timeIntegerToString
);
database.function("userFn_dateIntegerToString", dateTimeFunctions.dateIntegerToString);
database.function("userFn_timeIntegerToString", dateTimeFunctions.timeIntegerToString);
const rows = database.prepare(sql).all(sqlParameters);

View File

@ -1,7 +1,8 @@
(() => {
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) => {
clickEvent.preventDefault();
@ -19,10 +20,11 @@
// 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) {
if (tabContainerElement.id === selectedTabContainerId) {
tabContainerElement.classList.remove("is-hidden");
} else {
@ -31,7 +33,6 @@
}
};
for (const menuTabElement of menuTabElements) {
menuTabElement.addEventListener("click", selectTab);
}

View File

@ -9,9 +9,15 @@
</h2>
<ul class="menu-list">
<li>
<a class="is-active" 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 class="is-active" href="#tab--workOrders">
<span class="icon is-small"><i class="fas fa-fw fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</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>
@ -20,6 +26,12 @@
<span><%= configFunctions.getProperty("aliases.lots") %></span>
</a>
</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>
<h2 class="menu-label">
Table Exports
@ -33,7 +45,7 @@
</li>
<li>
<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>
</a>
</li>
@ -54,7 +66,56 @@
</nav>
<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>
<div class="panel">
<a class="panel-block align-items-flex-start" href="<%= urlPrefix %>/reports/maps-formatted" download>
@ -73,9 +134,7 @@
</a>
</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">
<h1 class="title is-1">Data Table Exports</h1>
<div class="message is-info">