show funeral details on work order view
parent
556a6a71b6
commit
afa0286a2a
|
|
@ -1,4 +1,4 @@
|
||||||
import { dateIntegerToString, dateStringToInteger, timeIntegerToString } from '@cityssm/utils-datetime';
|
import { dateIntegerToString, dateStringToInteger, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime';
|
||||||
import sqlite from 'better-sqlite3';
|
import sqlite from 'better-sqlite3';
|
||||||
import { getConfigProperty } from '../helpers/config.helpers.js';
|
import { getConfigProperty } from '../helpers/config.helpers.js';
|
||||||
import { sunriseDB } from '../helpers/database.helpers.js';
|
import { sunriseDB } from '../helpers/database.helpers.js';
|
||||||
|
|
@ -11,6 +11,7 @@ export default async function getContracts(filters, options, connectedDatabase)
|
||||||
const database = connectedDatabase ?? sqlite(sunriseDB);
|
const database = connectedDatabase ?? sqlite(sunriseDB);
|
||||||
database.function('userFn_dateIntegerToString', dateIntegerToString);
|
database.function('userFn_dateIntegerToString', dateIntegerToString);
|
||||||
database.function('userFn_timeIntegerToString', timeIntegerToString);
|
database.function('userFn_timeIntegerToString', timeIntegerToString);
|
||||||
|
database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString);
|
||||||
const { sqlParameters, sqlWhereClause } = buildWhereClause(filters);
|
const { sqlParameters, sqlWhereClause } = buildWhereClause(filters);
|
||||||
let count = typeof options.limit === 'string'
|
let count = typeof options.limit === 'string'
|
||||||
? Number.parseInt(options.limit, 10)
|
? Number.parseInt(options.limit, 10)
|
||||||
|
|
@ -40,7 +41,10 @@ export default async function getContracts(filters, options, connectedDatabase)
|
||||||
o.funeralHomeId, o.funeralDirectorName, f.funeralHomeName,
|
o.funeralHomeId, o.funeralDirectorName, f.funeralHomeName,
|
||||||
|
|
||||||
o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString,
|
o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString,
|
||||||
o.funeralTime, userFn_timeIntegerToString(o.funeralTime) as funeralTimeString,
|
o.funeralTime,
|
||||||
|
userFn_timeIntegerToString(o.funeralTime) as funeralTimeString,
|
||||||
|
userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString,
|
||||||
|
o.directionOfArrival,
|
||||||
o.committalTypeId, c.committalType
|
o.committalTypeId, c.committalType
|
||||||
from Contracts o
|
from Contracts o
|
||||||
left join ContractTypes t on o.contractTypeId = t.contractTypeId
|
left join ContractTypes t on o.contractTypeId = t.contractTypeId
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import {
|
||||||
type DateString,
|
type DateString,
|
||||||
dateIntegerToString,
|
dateIntegerToString,
|
||||||
dateStringToInteger,
|
dateStringToInteger,
|
||||||
|
timeIntegerToPeriodString,
|
||||||
timeIntegerToString
|
timeIntegerToString
|
||||||
} from '@cityssm/utils-datetime'
|
} from '@cityssm/utils-datetime'
|
||||||
import sqlite from 'better-sqlite3'
|
import sqlite from 'better-sqlite3'
|
||||||
|
|
@ -60,6 +61,8 @@ export default async function getContracts(
|
||||||
|
|
||||||
database.function('userFn_dateIntegerToString', dateIntegerToString)
|
database.function('userFn_dateIntegerToString', dateIntegerToString)
|
||||||
database.function('userFn_timeIntegerToString', timeIntegerToString)
|
database.function('userFn_timeIntegerToString', timeIntegerToString)
|
||||||
|
database.function(
|
||||||
|
'userFn_timeIntegerToPeriodString', timeIntegerToPeriodString)
|
||||||
|
|
||||||
const { sqlParameters, sqlWhereClause } = buildWhereClause(filters)
|
const { sqlParameters, sqlWhereClause } = buildWhereClause(filters)
|
||||||
|
|
||||||
|
|
@ -101,7 +104,10 @@ export default async function getContracts(
|
||||||
o.funeralHomeId, o.funeralDirectorName, f.funeralHomeName,
|
o.funeralHomeId, o.funeralDirectorName, f.funeralHomeName,
|
||||||
|
|
||||||
o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString,
|
o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString,
|
||||||
o.funeralTime, userFn_timeIntegerToString(o.funeralTime) as funeralTimeString,
|
o.funeralTime,
|
||||||
|
userFn_timeIntegerToString(o.funeralTime) as funeralTimeString,
|
||||||
|
userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString,
|
||||||
|
o.directionOfArrival,
|
||||||
o.committalTypeId, c.committalType
|
o.committalTypeId, c.committalType
|
||||||
from Contracts o
|
from Contracts o
|
||||||
left join ContractTypes t on o.contractTypeId = t.contractTypeId
|
left join ContractTypes t on o.contractTypeId = t.contractTypeId
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<h2 class="panel-heading">Related Burial Sites</h2>
|
<h2 class="panel-heading">Related Contracts</h2>
|
||||||
<div class="panel-block is-block">
|
<div class="panel-block is-block">
|
||||||
<%
|
<%
|
||||||
const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
|
const tabToSelect = (workOrder.workOrderContracts.length > 0 || workOrder.workOrderBurialSites.length === 0 ? "contracts" : "burialSites");
|
||||||
|
|
@ -312,76 +312,99 @@
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
<% if (workOrder.workOrderMilestones.length > 0) { %>
|
|
||||||
<div class="column is-4-desktop">
|
<div class="column is-4-desktop">
|
||||||
|
<% if (workOrder.workOrderContracts.length > 0) { %>
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<div class="panel-heading">
|
<h2 class="panel-heading">Contract Milestones</h2>
|
||||||
<div class="level is-mobile">
|
<% let hasContractMilestones = false; %>
|
||||||
<div class="level-left">
|
<% for (const contract of workOrder.workOrderContracts) { %>
|
||||||
<div class="level-item">
|
<% if (contract.funeralDate !== null && contract.funeralDate >= workOrder.workOrderOpenDate && (workOrder.workOrderCloseDate === null || workOrderCloseDate >= contract.funeralDate)) { %>
|
||||||
<h2 class="title is-5 has-text-white has-text-weight-bold">Milestones</h2>
|
<% hasContractMilestones = true; %>
|
||||||
</div>
|
<div class="panel-block is-block">
|
||||||
|
<strong>Funeral</strong><br />
|
||||||
|
<%= contract.funeralDateString %>
|
||||||
|
<% if (contract.funeralTime !== null && contract.funeralTime !== 0) { %>
|
||||||
|
<%= contract.funeralTimePeriodString %>
|
||||||
|
<% } %><br />
|
||||||
|
<%= contract.funeralHomeName %><br />
|
||||||
</div>
|
</div>
|
||||||
<div class="level-right">
|
<% } %>
|
||||||
<div class="level-item">
|
<% } %>
|
||||||
<div class="dropdown is-right has-text-weight-normal">
|
<% if (!hasContractMilestones) { %>
|
||||||
<div class="dropdown-trigger">
|
<div class="panel-block is-block">
|
||||||
<button class="button is-small has-tooltip-left" type="button" data-tooltip="Milestone Options" aria-label="Options">
|
<p class="has-text-grey">No relevant contract milestones available.</p>
|
||||||
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
|
</div>
|
||||||
</button>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-menu">
|
<% } %>
|
||||||
<div class="dropdown-content">
|
<div class="panel">
|
||||||
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
|
<div class="panel-heading">
|
||||||
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
|
<div class="level is-mobile">
|
||||||
<span>Download iCalendar</span>
|
<div class="level-left">
|
||||||
</a>
|
<div class="level-item">
|
||||||
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download>
|
<h2 class="title is-5 has-text-white has-text-weight-bold">Milestones</h2>
|
||||||
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
|
</div>
|
||||||
<span>Export as CSV</span>
|
</div>
|
||||||
</a>
|
<div class="level-right">
|
||||||
</div>
|
<div class="level-item">
|
||||||
|
<div class="dropdown is-right has-text-weight-normal">
|
||||||
|
<div class="dropdown-trigger">
|
||||||
|
<button class="button is-small has-tooltip-left" type="button" data-tooltip="Milestone Options" aria-label="Options">
|
||||||
|
<i class="fas fa-ellipsis-v" aria-hidden="true"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
<div class="dropdown-content">
|
||||||
|
<a class="dropdown-item" href="<%= urlPrefix %>/api/<%= user.userProperties.apiKey %>/milestoneICS/?workOrderId=<%= workOrder.workOrderId %>">
|
||||||
|
<span class="icon is-small"><i class="fas fa-calendar" aria-hidden="true"></i></span>
|
||||||
|
<span>Download iCalendar</span>
|
||||||
|
</a>
|
||||||
|
<a class="dropdown-item" href="<%= urlPrefix %>/reports/workOrderMilestones-byWorkOrderId/?workOrderId=<%= workOrder.workOrderId %>" target="_blank" download>
|
||||||
|
<span class="icon is-small"><i class="fas fa-download" aria-hidden="true"></i></span>
|
||||||
|
<span>Export as CSV</span>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% for (const milestone of workOrder.workOrderMilestones) { %>
|
</div>
|
||||||
<div class="panel-block is-block">
|
<% for (const milestone of workOrder.workOrderMilestones) { %>
|
||||||
<div class="columns is-mobile">
|
<div class="panel-block is-block">
|
||||||
<div class="column is-narrow">
|
<div class="columns is-mobile">
|
||||||
<% if (milestone.workOrderMilestoneCompletionDate) { %>
|
<div class="column is-narrow">
|
||||||
<span class="icon is-small" data-tooltip="Completed <%= milestone.workOrderMilestoneCompletionDateString %>">
|
<% if (milestone.workOrderMilestoneCompletionDate) { %>
|
||||||
<i class="fas fa-check" aria-label="Completed <%= milestone.workOrderMilestoneCompletionDateString %>"></i>
|
<span class="icon is-small" data-tooltip="Completed <%= milestone.workOrderMilestoneCompletionDateString %>">
|
||||||
</span>
|
<i class="fas fa-check" aria-label="Completed <%= milestone.workOrderMilestoneCompletionDateString %>"></i>
|
||||||
<% } else { %>
|
</span>
|
||||||
<span class="icon is-small">
|
<% } else { %>
|
||||||
<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>
|
<span class="icon is-small">
|
||||||
</span>
|
<i class="far fa-square has-text-grey" aria-label="Incomplete"></i>
|
||||||
<% } %>
|
</span>
|
||||||
</div>
|
<% } %>
|
||||||
<div class="column">
|
</div>
|
||||||
<% if (milestone.workOrderMilestoneTypeId) { %>
|
<div class="column">
|
||||||
<strong><%= milestone.workOrderMilestoneType %></strong><br />
|
<% if (milestone.workOrderMilestoneTypeId) { %>
|
||||||
<% } %>
|
<strong><%= milestone.workOrderMilestoneType %></strong><br />
|
||||||
<% if (milestone.workOrderMilestoneDate === 0) { %>
|
<% } %>
|
||||||
<span class="has-text-grey">(No Set Date)</span>
|
<% if (milestone.workOrderMilestoneDate === 0) { %>
|
||||||
<% } else { %>
|
<span class="has-text-grey">(No Set Date)</span>
|
||||||
<%= milestone.workOrderMilestoneDateString %>
|
<% } else { %>
|
||||||
<% } %>
|
<%= milestone.workOrderMilestoneDateString %>
|
||||||
<% if (milestone.workOrderMilestoneTime !== 0) { %>
|
<% } %>
|
||||||
<%= milestone.workOrderMilestoneTimePeriodString %>
|
<% if (milestone.workOrderMilestoneTime !== 0) { %>
|
||||||
<% } %>
|
<%= milestone.workOrderMilestoneTimePeriodString %>
|
||||||
<br />
|
<% } %>
|
||||||
<span class="is-size-7"><%= milestone.workOrderMilestoneDescription %></span>
|
<br />
|
||||||
</div>
|
<span class="is-size-7"><%= milestone.workOrderMilestoneDescription %></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
</div>
|
||||||
</div>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%- include('_footerA'); -%>
|
<%- include('_footerA'); -%>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue