show work orders on occupancy views

deepsource-autofix-76c6eb20
Dan Gowans 2022-12-16 10:22:39 -05:00
parent e7e84ef499
commit 926e20d3d5
9 changed files with 179 additions and 17 deletions

View File

@ -6,6 +6,7 @@ import { getLotOccupancyComments } from "./getLotOccupancyComments.js";
import { getLotOccupancyFields } from "./getLotOccupancyFields.js";
import { getLotOccupancyFees } from "./getLotOccupancyFees.js";
import { getLotOccupancyTransactions } from "./getLotOccupancyTransactions.js";
import { getWorkOrders } from "./getWorkOrders.js";
export const getLotOccupancy = (lotOccupancyId, connectedDatabase) => {
const database = connectedDatabase ||
sqlite(databasePath, {
@ -33,6 +34,12 @@ export const getLotOccupancy = (lotOccupancyId, connectedDatabase) => {
lotOccupancy.lotOccupancyComments = getLotOccupancyComments(lotOccupancyId, database);
lotOccupancy.lotOccupancyFees = getLotOccupancyFees(lotOccupancyId, database);
lotOccupancy.lotOccupancyTransactions = getLotOccupancyTransactions(lotOccupancyId, database);
lotOccupancy.workOrders = getWorkOrders({
lotOccupancyId
}, {
limit: -1,
offset: 0
}, database).workOrders;
}
if (!connectedDatabase) {
database.close();

View File

@ -14,6 +14,8 @@ import { getLotOccupancyFees } from "./getLotOccupancyFees.js";
import { getLotOccupancyTransactions } from "./getLotOccupancyTransactions.js";
import { getWorkOrders } from "./getWorkOrders.js";
import type * as recordTypes from "../../types/recordTypes";
export const getLotOccupancy = (
@ -55,6 +57,17 @@ export const getLotOccupancy = (
lotOccupancyId,
database
);
lotOccupancy.workOrders = getWorkOrders(
{
lotOccupancyId
},
{
limit: -1,
offset: 0
},
database
).workOrders;
}
if (!connectedDatabase) {

View File

@ -1,3 +1,4 @@
import sqlite from "better-sqlite3";
import type * as recordTypes from "../../types/recordTypes";
interface GetWorkOrdersFilters {
workOrderTypeId?: number | string;
@ -5,6 +6,7 @@ interface GetWorkOrdersFilters {
workOrderOpenDateString?: string;
occupantName?: string;
lotName?: string;
lotOccupancyId?: number | string;
}
interface GetWorkOrdersOptions {
limit: number;
@ -13,7 +15,7 @@ interface GetWorkOrdersOptions {
includeComments?: boolean;
includeMilestones?: boolean;
}
export declare const getWorkOrders: (filters: GetWorkOrdersFilters, options?: GetWorkOrdersOptions) => {
export declare const getWorkOrders: (filters: GetWorkOrdersFilters, options?: GetWorkOrdersOptions, connectedDatabase?: sqlite.Database) => {
count: number;
workOrders: recordTypes.WorkOrder[];
};

View File

@ -42,15 +42,21 @@ const buildWhereClause = (filters) => {
sqlParameters.push(lotNamePiece);
}
}
if (filters.lotOccupancyId) {
sqlWhereClause +=
" and w.workOrderId in (select workOrderId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and lotOccupancyId = ?)";
sqlParameters.push(filters.lotOccupancyId);
}
return {
sqlWhereClause,
sqlParameters
};
};
export const getWorkOrders = (filters, options) => {
const database = sqlite(databasePath, {
readonly: true
});
export const getWorkOrders = (filters, options, connectedDatabase) => {
const database = connectedDatabase ||
sqlite(databasePath, {
readonly: true
});
database.function("userFn_dateIntegerToString", dateIntegerToString);
const { sqlWhereClause, sqlParameters } = buildWhereClause(filters);
const count = database
@ -111,7 +117,9 @@ export const getWorkOrders = (filters, options) => {
}
}
}
database.close();
if (!connectedDatabase) {
database.close();
}
return {
count,
workOrders

View File

@ -20,6 +20,7 @@ interface GetWorkOrdersFilters {
workOrderOpenDateString?: string;
occupantName?: string;
lotName?: string;
lotOccupancyId?: number | string;
}
interface GetWorkOrdersOptions {
@ -74,6 +75,12 @@ const buildWhereClause = (
}
}
if (filters.lotOccupancyId) {
sqlWhereClause +=
" and w.workOrderId in (select workOrderId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and lotOccupancyId = ?)";
sqlParameters.push(filters.lotOccupancyId);
}
return {
sqlWhereClause,
sqlParameters
@ -82,14 +89,17 @@ const buildWhereClause = (
export const getWorkOrders = (
filters: GetWorkOrdersFilters,
options?: GetWorkOrdersOptions
options?: GetWorkOrdersOptions,
connectedDatabase?: sqlite.Database
): {
count: number;
workOrders: recordTypes.WorkOrder[];
} => {
const database = sqlite(databasePath, {
readonly: true
});
const database =
connectedDatabase ||
sqlite(databasePath, {
readonly: true
});
database.function("userFn_dateIntegerToString", dateIntegerToString);
@ -134,7 +144,10 @@ export const getWorkOrders = (
) {
for (const workOrder of workOrders) {
if (options.includeComments) {
workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId as number, database);
workOrder.workOrderComments = getWorkOrderComments(
workOrder.workOrderId as number,
database
);
}
if (options.includeLotsAndLotOccupancies) {
@ -176,7 +189,9 @@ export const getWorkOrders = (
}
}
database.close();
if (!connectedDatabase) {
database.close();
}
return {
count,

View File

@ -195,6 +195,7 @@ export interface LotOccupancy extends Record {
lotOccupancyOccupants?: LotOccupancyOccupant[];
lotOccupancyFees?: LotOccupancyFee[];
lotOccupancyTransactions?: LotOccupancyTransaction[];
workOrders?: WorkOrder[];
}
export interface WorkOrderType extends Record {
workOrderTypeId?: number;

View File

@ -258,6 +258,7 @@ export interface LotOccupancy extends Record {
lotOccupancyOccupants?: LotOccupancyOccupant[];
lotOccupancyFees?: LotOccupancyFee[];
lotOccupancyTransactions?: LotOccupancyTransaction[];
workOrders?: WorkOrder[];
}
/*

View File

@ -381,11 +381,6 @@
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" id="button--createWorkOrder" href="#">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Create a Work Order</span>
</a>
<hr class="dropdown-divider" />
<a class="dropdown-item" id="button--copyLotOccupancy" href="#">
<span class="icon is-small"><i class="far fa-copy" aria-hidden="true"></i></span>
<span>Copy <%= configFunctions.getProperty("aliases.occupancy") %> Record as New</span>
@ -449,6 +444,76 @@
<div class="panel-block is-block" id="container--lotOccupancyComments"></div>
</div>
<%
const workOrderOpenDateAlias = configFunctions.getProperty("aliases.workOrderOpenDate");
const workOrderCloseDateAlias = configFunctions.getProperty("aliases.workOrderCloseDate");
%>
<div class="panel">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<h2 class="title is-4">Work Orders</h2>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-small is-success is-hidden-print" id="button--createWorkOrder" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Create a Work Order</span>
</button>
</div>
</div>
</div>
</div>
<div class="panel-block is-block">
<% if (lotOccupancy.workOrders.length === 0) { %>
<div class="message is-info">
<p class="message-body">
There are no work orders associated with this record.
</p>
</div>
<% } else { %>
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Work Order Number</th>
<th>Description</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<% for (const workOrder of lotOccupancy.workOrders) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= urlPrefix %>/workOrders/<%= workOrder.workOrderId %>">
<%= workOrder.workOrderNumber %>
</a>
</td>
<td>
<%= workOrder.workOrderType %><br />
<span class="is-size-7"><%= workOrder.workOrderDescription %></span>
</td>
<td class="is-nowrap">
<span class="has-tooltip-left" data-tooltip="<%= workOrderOpenDateAlias %>">
<i class="fas fa-fw fa-play" aria-label="<%= workOrderOpenDateAlias %>"></i>
<%= workOrder.workOrderOpenDateString %>
</span><br />
<span class="has-tooltip-left" data-tooltip="<%= workOrderCloseDateAlias %>">
<i class="fas fa-fw fa-stop" aria-label="<%= workOrderCloseDateAlias %>"></i>
<% if (workOrder.workOrderCloseDate) { %>
<%= workOrder.workOrderCloseDateString %>
<% } else { %>
<span class="has-text-grey">(No <%= workOrderCloseDateAlias %>)</span>
<% } %>
</span>
</td>
</tr>
<% } %>
</tbody>
</table>
<% } %>
</div>
</div>
<div class="columns">
<div class="column">
<div class="panel">

View File

@ -230,6 +230,56 @@
</div>
<% } %>
<% if (lotOccupancy.workOrders.length > 0) { %>
<%
const workOrderOpenDateAlias = configFunctions.getProperty("aliases.workOrderOpenDate");
const workOrderCloseDateAlias = configFunctions.getProperty("aliases.workOrderCloseDate");
%>
<div class="panel">
<h2 class="panel-heading">Work Orders</h2>
<div class="panel-block is-block">
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th>Work Order Number</th>
<th>Description</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<% for (const workOrder of lotOccupancy.workOrders) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= urlPrefix %>/workOrders/<%= workOrder.workOrderId %>">
<%= workOrder.workOrderNumber %>
</a>
</td>
<td>
<%= workOrder.workOrderType %><br />
<span class="is-size-7"><%= workOrder.workOrderDescription %></span>
</td>
<td class="is-nowrap">
<span class="has-tooltip-left" data-tooltip="<%= workOrderOpenDateAlias %>">
<i class="fas fa-fw fa-play" aria-label="<%= workOrderOpenDateAlias %>"></i>
<%= workOrder.workOrderOpenDateString %>
</span><br />
<span class="has-tooltip-left" data-tooltip="<%= workOrderCloseDateAlias %>">
<i class="fas fa-fw fa-stop" aria-label="<%= workOrderCloseDateAlias %>"></i>
<% if (workOrder.workOrderCloseDate) { %>
<%= workOrder.workOrderCloseDateString %>
<% } else { %>
<span class="has-text-grey">(No <%= workOrderCloseDateAlias %>)</span>
<% } %>
</span>
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
</div>
<% } %>
<div class="columns">
<div class="column">
<div class="panel">