refactoring, plus funeral home maint

deepsource-autofix-76c6eb20
Dan Gowans 2025-03-03 15:46:18 -05:00
parent df6a7feddc
commit 44119638c2
156 changed files with 4047 additions and 4549 deletions

2
app.js
View File

@ -22,6 +22,7 @@ import routerBurialSites from './routes/burialSites.js';
import routerCemeteries from './routes/cemeteries.js';
import routerContracts from './routes/contracts.js';
import routerDashboard from './routes/dashboard.js';
import routerFuneralHomes from './routes/funeralHomes.js';
import routerLogin from './routes/login.js';
import routerPrint from './routes/print.js';
import routerReports from './routes/reports.js';
@ -142,6 +143,7 @@ app.use(`${urlPrefix}/api/:apiKey`, permissionHandlers.apiGetHandler, routerApi)
app.use(`${urlPrefix}/print`, sessionChecker, routerPrint);
app.use(`${urlPrefix}/cemeteries`, sessionChecker, routerCemeteries);
app.use(`${urlPrefix}/burialSites`, sessionChecker, routerBurialSites);
app.use(`${urlPrefix}/funeralHomes`, sessionChecker, routerFuneralHomes);
app.use(`${urlPrefix}/contracts`, sessionChecker, routerContracts);
app.use(`${urlPrefix}/workOrders`, sessionChecker, routerWorkOrders);
app.use(`${urlPrefix}/reports`, sessionChecker, routerReports);

2
app.ts
View File

@ -24,6 +24,7 @@ import routerBurialSites from './routes/burialSites.js'
import routerCemeteries from './routes/cemeteries.js'
import routerContracts from './routes/contracts.js'
import routerDashboard from './routes/dashboard.js'
import routerFuneralHomes from './routes/funeralHomes.js'
import routerLogin from './routes/login.js'
import routerPrint from './routes/print.js'
import routerReports from './routes/reports.js'
@ -233,6 +234,7 @@ app.use(`${urlPrefix}/api/:apiKey`, permissionHandlers.apiGetHandler, routerApi)
app.use(`${urlPrefix}/print`, sessionChecker, routerPrint)
app.use(`${urlPrefix}/cemeteries`, sessionChecker, routerCemeteries)
app.use(`${urlPrefix}/burialSites`, sessionChecker, routerBurialSites)
app.use(`${urlPrefix}/funeralHomes`, sessionChecker, routerFuneralHomes)
app.use(`${urlPrefix}/contracts`, sessionChecker, routerContracts)
app.use(`${urlPrefix}/workOrders`, sessionChecker, routerWorkOrders)

View File

@ -45,8 +45,8 @@ describe('Update - Cemeteries', () => {
.type(cemeteryData.cemeteryLongitude?.toString() ?? '');
});
cy.log('Ensure the default city and province are used');
cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cemeteries.cityDefault'));
cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.cemeteries.provinceDefault'));
cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cityDefault'));
cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.provinceDefault'));
cy.log('Submit the form');
cy.get('#form--cemetery').submit();
cy.wait(1000);
@ -58,8 +58,8 @@ describe('Update - Cemeteries', () => {
cy.get("textarea[name='cemeteryDescription']").should('have.value', cemeteryData.cemeteryDescription);
cy.get("input[name='cemeteryAddress1']").should('have.value', cemeteryData.cemeteryAddress1);
cy.get("input[name='cemeteryAddress2']").should('have.value', cemeteryData.cemeteryAddress2);
cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cemeteries.cityDefault'));
cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.cemeteries.provinceDefault'));
cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cityDefault'));
cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.provinceDefault'));
cy.get("input[name='cemeteryPostalCode']").should('have.value', cemeteryData.cemeteryPostalCode);
cy.get("input[name='cemeteryPhoneNumber']").should('have.value', cemeteryData.cemeteryPhoneNumber);
cy.get("input[name='cemeteryLatitude']").should('have.value', cemeteryData.cemeteryLatitude?.toString());

View File

@ -65,12 +65,12 @@ describe('Update - Cemeteries', () => {
cy.get("input[name='cemeteryCity']").should(
'have.value',
getConfigProperty('settings.cemeteries.cityDefault')
getConfigProperty('settings.cityDefault')
)
cy.get("input[name='cemeteryProvince']").should(
'have.value',
getConfigProperty('settings.cemeteries.provinceDefault')
getConfigProperty('settings.provinceDefault')
)
cy.log('Submit the form')
@ -106,12 +106,12 @@ describe('Update - Cemeteries', () => {
cy.get("input[name='cemeteryCity']").should(
'have.value',
getConfigProperty('settings.cemeteries.cityDefault')
getConfigProperty('settings.cityDefault')
)
cy.get("input[name='cemeteryProvince']").should(
'have.value',
getConfigProperty('settings.cemeteries.provinceDefault')
getConfigProperty('settings.provinceDefault')
)
cy.get("input[name='cemeteryPostalCode']").should(

View File

@ -1,6 +1,5 @@
import { config as baseConfig } from './config.base.js';
export const config = Object.assign({}, baseConfig);
config.settings.contracts.provinceDefault = 'ON';
config.settings.cemeteries.provinceDefault = 'ON';
config.settings.provinceDefault = 'ON';
config.settings.fees.taxPercentageDefault = 13;
export default config;

View File

@ -2,9 +2,7 @@ import { config as baseConfig } from './config.base.js'
export const config = Object.assign({}, baseConfig)
config.settings.contracts.provinceDefault = 'ON'
config.settings.cemeteries.provinceDefault = 'ON'
config.settings.provinceDefault = 'ON'
config.settings.fees.taxPercentageDefault = 13

View File

@ -35,12 +35,11 @@ config.settings.burialSites.burialSiteNameSegments = {
}
}
};
config.settings.contracts.cityDefault = 'Sault Ste. Marie';
config.settings.cityDefault = 'Sault Ste. Marie';
config.settings.contracts.prints = [
'pdf/ssm.cemetery.burialPermit',
'pdf/ssm.cemetery.contract'
];
config.settings.cemeteries.cityDefault = 'Sault Ste. Marie';
config.settings.workOrders.workOrderNumberLength = 6;
config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7;
config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30;

View File

@ -41,14 +41,13 @@ config.settings.burialSites.burialSiteNameSegments = {
}
}
config.settings.contracts.cityDefault = 'Sault Ste. Marie'
config.settings.cityDefault = 'Sault Ste. Marie'
config.settings.contracts.prints = [
'pdf/ssm.cemetery.burialPermit',
'pdf/ssm.cemetery.contract'
]
config.settings.cemeteries.cityDefault = 'Sault Ste. Marie'
config.settings.workOrders.workOrderNumberLength = 6
config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7
config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30

View File

@ -24,12 +24,10 @@ export declare const configDefaultValues: {
'aliases.externalReceiptNumber': string;
'aliases.workOrderOpenDate': string;
'aliases.workOrderCloseDate': string;
'settings.cemeteries.cityDefault': string;
'settings.cemeteries.provinceDefault': string;
'settings.cityDefault': string;
'settings.provinceDefault': string;
'settings.burialSites.burialSiteNameSegments': ConfigBurialSiteNameSegments;
'settings.contracts.burialSiteIdIsRequired': boolean;
'settings.contracts.cityDefault': string;
'settings.contracts.provinceDefault': string;
'settings.contracts.prints': string[];
'settings.fees.taxPercentageDefault': number;
'settings.workOrders.workOrderNumberLength': number;

View File

@ -23,8 +23,8 @@ export const configDefaultValues = {
'aliases.externalReceiptNumber': 'External Receipt Number',
'aliases.workOrderOpenDate': 'Order Date',
'aliases.workOrderCloseDate': 'Completion Date',
'settings.cemeteries.cityDefault': '',
'settings.cemeteries.provinceDefault': '',
'settings.cityDefault': '',
'settings.provinceDefault': '',
'settings.burialSites.burialSiteNameSegments': {
separator: '-',
segments: {
@ -38,8 +38,6 @@ export const configDefaultValues = {
}
},
'settings.contracts.burialSiteIdIsRequired': true,
'settings.contracts.cityDefault': '',
'settings.contracts.provinceDefault': '',
'settings.contracts.prints': ['screen/contract'],
'settings.fees.taxPercentageDefault': 0,
'settings.workOrders.workOrderNumberLength': 6,

View File

@ -39,8 +39,8 @@ export const configDefaultValues = {
'aliases.workOrderOpenDate': 'Order Date',
'aliases.workOrderCloseDate': 'Completion Date',
'settings.cemeteries.cityDefault': '',
'settings.cemeteries.provinceDefault': '',
'settings.cityDefault': '',
'settings.provinceDefault': '',
'settings.burialSites.burialSiteNameSegments': {
separator: '-',
@ -57,8 +57,6 @@ export const configDefaultValues = {
'settings.contracts.burialSiteIdIsRequired': true,
'settings.contracts.cityDefault': '',
'settings.contracts.provinceDefault': '',
'settings.contracts.prints': ['screen/contract'],
'settings.fees.taxPercentageDefault': 0,

10
database/addFuneralHome.d.ts vendored 100644
View File

@ -0,0 +1,10 @@
export interface AddForm {
funeralHomeName: string;
funeralHomeAddress1: string;
funeralHomeAddress2: string;
funeralHomeCity: string;
funeralHomeProvince: string;
funeralHomePostalCode: string;
funeralHomePhoneNumber: string;
}
export default function addFuneralHome(addForm: AddForm, user: User): Promise<number>;

View File

@ -0,0 +1,15 @@
import { acquireConnection } from './pool.js';
export default async function addFuneralHome(addForm, user) {
const database = await acquireConnection();
const rightNowMillis = Date.now();
const result = database
.prepare(`insert into FuneralHomes (
funeralHomeName, funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
.run(addForm.funeralHomeName, addForm.funeralHomeAddress1, addForm.funeralHomeAddress2, addForm.funeralHomeCity, addForm.funeralHomeProvince, addForm.funeralHomePostalCode, addForm.funeralHomePhoneNumber, user.userName, rightNowMillis, user.userName, rightNowMillis);
database.release();
return result.lastInsertRowid;
}

View File

@ -0,0 +1,47 @@
import { acquireConnection } from './pool.js'
export interface AddForm {
funeralHomeName: string
funeralHomeAddress1: string
funeralHomeAddress2: string
funeralHomeCity: string
funeralHomeProvince: string
funeralHomePostalCode: string
funeralHomePhoneNumber: string
}
export default async function addFuneralHome(
addForm: AddForm,
user: User
): Promise<number> {
const database = await acquireConnection()
const rightNowMillis = Date.now()
const result = database
.prepare(
`insert into FuneralHomes (
funeralHomeName, funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
)
.run(
addForm.funeralHomeName,
addForm.funeralHomeAddress1,
addForm.funeralHomeAddress2,
addForm.funeralHomeCity,
addForm.funeralHomeProvince,
addForm.funeralHomePostalCode,
addForm.funeralHomePhoneNumber,
user.userName,
rightNowMillis,
user.userName,
rightNowMillis
)
database.release()
return result.lastInsertRowid as number
}

View File

@ -23,7 +23,7 @@ export default async function cleanupDatabase(user) {
.prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
/*
* Work Order Burial Site Contracts
* Work Order Contracts
*/
inactivatedRecordCount += database
.prepare(`update WorkOrderContracts
@ -181,7 +181,7 @@ export default async function cleanupDatabase(user) {
and contractTypeFieldId not in (select contractTypeFieldId from ContractFields)`)
.run(recordDeleteTimeMillisMin).changes;
/*
* Occupancy Type Prints
* Contract Type Prints
*/
inactivatedRecordCount += database
.prepare(`update ContractTypePrints
@ -246,7 +246,7 @@ export default async function cleanupDatabase(user) {
and burialSiteId not in (select burialSiteId from BurialSiteComments)
and burialSiteId not in (select burialSiteId from BurialSiteFields)
and burialSiteId not in (select burialSiteId from Contracts)
and burialSiteId not in (select burialSiteId from WorkOrderLots)`)
and burialSiteId not in (select burialSiteId from WorkOrderBurialSites)`)
.run(recordDeleteTimeMillisMin).changes;
/*
* Burial Site Statuses

View File

@ -37,7 +37,7 @@ export default async function cleanupDatabase(
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Burial Site Contracts
* Work Order Contracts
*/
inactivatedRecordCount += database
@ -271,7 +271,7 @@ export default async function cleanupDatabase(
.run(recordDeleteTimeMillisMin).changes
/*
* Occupancy Type Prints
* Contract Type Prints
*/
inactivatedRecordCount += database
@ -364,7 +364,7 @@ export default async function cleanupDatabase(
and burialSiteId not in (select burialSiteId from BurialSiteComments)
and burialSiteId not in (select burialSiteId from BurialSiteFields)
and burialSiteId not in (select burialSiteId from Contracts)
and burialSiteId not in (select burialSiteId from WorkOrderLots)`
and burialSiteId not in (select burialSiteId from WorkOrderBurialSites)`
)
.run(recordDeleteTimeMillisMin).changes

View File

@ -1,3 +1,3 @@
type RecordTable = 'FeeCategories' | 'Fees' | 'BurialSites' | 'BurialSiteComments' | 'Contracts' | 'ContractComments' | 'BurialSiteStatuses' | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'Cemeteries' | 'ContractTypes' | 'ContractTypeFields' | 'WorkOrders' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
type RecordTable = 'FeeCategories' | 'Fees' | 'BurialSites' | 'BurialSiteComments' | 'Contracts' | 'ContractComments' | 'BurialSiteStatuses' | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'Cemeteries' | 'FuneralHomes' | 'ContractTypes' | 'ContractTypeFields' | 'WorkOrders' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
export declare function deleteRecord(recordTable: RecordTable, recordId: number | string, user: User): Promise<boolean>;
export {};

View File

@ -11,6 +11,7 @@ recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId');
recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId');
recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId');
recordIdColumns.set('Cemeteries', 'cemeteryId');
recordIdColumns.set('FuneralHomes', 'funeralHomeId');
recordIdColumns.set('ContractTypes', 'contractTypeId');
recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId');
recordIdColumns.set('WorkOrders', 'workOrderId');

View File

@ -13,6 +13,7 @@ type RecordTable =
| 'BurialSiteTypes'
| 'BurialSiteTypeFields'
| 'Cemeteries'
| 'FuneralHomes'
| 'ContractTypes'
| 'ContractTypeFields'
| 'WorkOrders'
@ -32,6 +33,7 @@ recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId')
recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId')
recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId')
recordIdColumns.set('Cemeteries', 'cemeteryId')
recordIdColumns.set('FuneralHomes', 'funeralHomeId')
recordIdColumns.set('ContractTypes', 'contractTypeId')
recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId')
recordIdColumns.set('WorkOrders', 'workOrderId')

2
database/getFuneralHome.d.ts vendored 100644
View File

@ -0,0 +1,2 @@
import type { FuneralHome } from '../types/recordTypes.js';
export default function getFuneralHome(funeralHomeId: number | string): Promise<FuneralHome | undefined>;

View File

@ -0,0 +1,15 @@
import { acquireConnection } from './pool.js';
export default async function getFuneralHome(funeralHomeId) {
const database = await acquireConnection();
const funeralHome = database
.prepare(`select funeralHomeId, funeralHomeName,
funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber
from FuneralHomes f
where f.recordDelete_timeMillis is null
and f.funeralHomeId = ?
order by f.funeralHomeName, f.funeralHomeId`)
.get(funeralHomeId);
database.release();
return funeralHome;
}

View File

@ -0,0 +1,25 @@
import type { Cemetery, FuneralHome } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export default async function getFuneralHome(
funeralHomeId: number | string
): Promise<FuneralHome | undefined> {
const database = await acquireConnection()
const funeralHome = database
.prepare(
`select funeralHomeId, funeralHomeName,
funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber
from FuneralHomes f
where f.recordDelete_timeMillis is null
and f.funeralHomeId = ?
order by f.funeralHomeName, f.funeralHomeId`
)
.get(funeralHomeId) as Cemetery | undefined
database.release()
return funeralHome
}

2
database/getFuneralHomes.d.ts vendored 100644
View File

@ -0,0 +1,2 @@
import type { FuneralHome } from '../types/recordTypes.js';
export default function getFuneralHomes(): Promise<FuneralHome[]>;

View File

@ -0,0 +1,14 @@
import { acquireConnection } from './pool.js';
export default async function getFuneralHomes() {
const database = await acquireConnection();
const funeralHomes = database
.prepare(`select funeralHomeId, funeralHomeName,
funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber
from FuneralHomes f
where f.recordDelete_timeMillis is null
order by f.funeralHomeName, f.funeralHomeId`)
.all();
database.release();
return funeralHomes;
}

View File

@ -0,0 +1,22 @@
import type { Cemetery, FuneralHome } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export default async function getFuneralHomes(): Promise<FuneralHome[]> {
const database = await acquireConnection()
const funeralHomes = database
.prepare(
`select funeralHomeId, funeralHomeName,
funeralHomeAddress1, funeralHomeAddress2,
funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber
from FuneralHomes f
where f.recordDelete_timeMillis is null
order by f.funeralHomeName, f.funeralHomeId`
)
.all() as Cemetery[]
database.release()
return funeralHomes
}

View File

@ -28,11 +28,7 @@ export default async function getReportData(reportName, reportParameters = {}) {
case 'burialSites-byBurialSiteTypeId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -47,11 +43,7 @@ export default async function getReportData(reportName, reportParameters = {}) {
case 'burialSites-byBurialSiteStatusId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -66,11 +58,7 @@ export default async function getReportData(reportName, reportParameters = {}) {
case 'burialSites-byCemeteryId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -96,11 +84,7 @@ export default async function getReportData(reportName, reportParameters = {}) {
}
case 'contracts-current-byCemeteryId': {
sql = `select o.contractId,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
m.cemeteryName,
ot.contractType,
o.contractStartDate,

View File

@ -46,11 +46,7 @@ export default async function getReportData(
case 'burialSites-byBurialSiteTypeId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -68,11 +64,7 @@ export default async function getReportData(
case 'burialSites-byBurialSiteStatusId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -90,11 +82,7 @@ export default async function getReportData(
case 'burialSites-byCemeteryId': {
sql = `select l.burialSiteId,
m.cemeteryName,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
t.burialSiteType,
s.burialSiteStatus
from BurialSites l
@ -126,11 +114,7 @@ export default async function getReportData(
case 'contracts-current-byCemeteryId': {
sql = `select o.contractId,
l.burialSiteNameSegment1,
l.burialSiteNameSegment2,
l.burialSiteNameSegment3,
l.burialSiteNameSegment4,
l.burialSiteNameSegment5,
l.burialSiteName,
m.cemeteryName,
ot.contractType,
o.contractStartDate,

11
database/updateFuneralHome.d.ts vendored 100644
View File

@ -0,0 +1,11 @@
export interface UpdateForm {
funeralHomeId: number | string;
funeralHomeName: string;
funeralHomeAddress1: string;
funeralHomeAddress2: string;
funeralHomeCity: string;
funeralHomeProvince: string;
funeralHomePostalCode: string;
funeralHomePhoneNumber: string;
}
export default function updateFuneralHome(updateForm: UpdateForm, user: User): Promise<boolean>;

View File

@ -0,0 +1,16 @@
import { acquireConnection } from './pool.js';
export default async function updateFuneralHome(updateForm, user) {
const database = await acquireConnection();
const rightNowMillis = Date.now();
const result = database
.prepare(`update FuneralHomes
set funeralHomeName = ?,
funeralHomeAddress1 = ?, funeralHomeAddress2 = ?,
funeralHomeCity = ?, funeralHomeProvince = ?, funeralHomePostalCode = ?, funeralHomePhoneNumber = ?,
recordUpdate_userName = ?, recordUpdate_timeMillis = ?
where recordDelete_timeMillis is null
and funeralHomeId = ?`)
.run(updateForm.funeralHomeName, updateForm.funeralHomeAddress1, updateForm.funeralHomeAddress2, updateForm.funeralHomeCity, updateForm.funeralHomeProvince, updateForm.funeralHomePostalCode, updateForm.funeralHomePhoneNumber, user.userName, rightNowMillis, updateForm.funeralHomeId);
database.release();
return result.changes > 0;
}

View File

@ -0,0 +1,48 @@
import { acquireConnection } from './pool.js'
export interface UpdateForm {
funeralHomeId: number | string
funeralHomeName: string
funeralHomeAddress1: string
funeralHomeAddress2: string
funeralHomeCity: string
funeralHomeProvince: string
funeralHomePostalCode: string
funeralHomePhoneNumber: string
}
export default async function updateFuneralHome(
updateForm: UpdateForm,
user: User
): Promise<boolean> {
const database = await acquireConnection()
const rightNowMillis = Date.now()
const result = database
.prepare(
`update FuneralHomes
set funeralHomeName = ?,
funeralHomeAddress1 = ?, funeralHomeAddress2 = ?,
funeralHomeCity = ?, funeralHomeProvince = ?, funeralHomePostalCode = ?, funeralHomePhoneNumber = ?,
recordUpdate_userName = ?, recordUpdate_timeMillis = ?
where recordDelete_timeMillis is null
and funeralHomeId = ?`
)
.run(
updateForm.funeralHomeName,
updateForm.funeralHomeAddress1,
updateForm.funeralHomeAddress2,
updateForm.funeralHomeCity,
updateForm.funeralHomeProvince,
updateForm.funeralHomePostalCode,
updateForm.funeralHomePhoneNumber,
user.userName,
rightNowMillis,
updateForm.funeralHomeId
)
database.release()
return result.changes > 0
}

View File

@ -1,15 +1,12 @@
import { getSolidIconClasses } from '@cityssm/font-awesome-v5-iconclasses';
import { getBurialSiteStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js';
export default async function handler(_request, response) {
const workOrderTypes = await getWorkOrderTypes();
const workOrderMilestoneTypes = await getWorkOrderMilestoneTypes();
const burialSiteStatuses = await getBurialSiteStatuses();
const fontAwesomeIconClasses = await getSolidIconClasses();
response.render('admin-tables', {
headTitle: 'Config Table Management',
workOrderTypes,
workOrderMilestoneTypes,
burialSiteStatuses,
fontAwesomeIconClasses
burialSiteStatuses
});
}

View File

@ -15,13 +15,10 @@ export default async function handler(
const workOrderMilestoneTypes = await getWorkOrderMilestoneTypes()
const burialSiteStatuses = await getBurialSiteStatuses()
const fontAwesomeIconClasses = await getSolidIconClasses()
response.render('admin-tables', {
headTitle: 'Config Table Management',
workOrderTypes,
workOrderMilestoneTypes,
burialSiteStatuses,
fontAwesomeIconClasses
burialSiteStatuses
})
}

View File

@ -60,7 +60,7 @@ function buildEventDescriptionHTML_occupancies(request, milestone) {
descriptionHTML += `<tr>
<td>
<a href="${urlRoot}/contracts/${occupancy.contractId}">
${escapeHTML(occupancy.occupancyType ?? '')}
${escapeHTML(occupancy.contractType ?? '')}
</a>
</td>
<td>

View File

@ -95,7 +95,7 @@ function buildEventDescriptionHTML_occupancies(
descriptionHTML += `<tr>
<td>
<a href="${urlRoot}/contracts/${occupancy.contractId}">
${escapeHTML(occupancy.occupancyType ?? '')}
${escapeHTML(occupancy.contractType ?? '')}
</a>
</td>
<td>

View File

@ -2,8 +2,8 @@ import { getCemeterySVGs } from '../../helpers/cemeteries.helpers.js';
import { getConfigProperty } from '../../helpers/config.helpers.js';
export default async function handler(_request, response) {
const cemetery = {
cemeteryCity: getConfigProperty('settings.cemeteries.cityDefault'),
cemeteryProvince: getConfigProperty('settings.cemeteries.provinceDefault')
cemeteryCity: getConfigProperty('settings.cityDefault'),
cemeteryProvince: getConfigProperty('settings.provinceDefault')
};
const cemeterySVGs = await getCemeterySVGs();
response.render('cemetery-edit', {

View File

@ -9,8 +9,8 @@ export default async function handler(
response: Response
): Promise<void> {
const cemetery: Cemetery = {
cemeteryCity: getConfigProperty('settings.cemeteries.cityDefault'),
cemeteryProvince: getConfigProperty('settings.cemeteries.provinceDefault')
cemeteryCity: getConfigProperty('settings.cityDefault'),
cemeteryProvince: getConfigProperty('settings.provinceDefault')
}
const cemeterySVGs = await getCemeterySVGs()

View File

@ -0,0 +1,2 @@
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;

View File

@ -0,0 +1,14 @@
import getFuneralHome from '../../database/getFuneralHome.js';
import { getConfigProperty } from '../../helpers/config.helpers.js';
export default async function handler(request, response) {
const funeralHome = await getFuneralHome(request.params.funeralHomeId);
if (funeralHome === undefined) {
response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`);
return;
}
response.render('funeralHome-edit', {
headTitle: funeralHome.funeralHomeName,
isCreate: false,
funeralHome
});
}

View File

@ -0,0 +1,24 @@
import type { Request, Response } from 'express'
import getFuneralHome from '../../database/getFuneralHome.js'
import { getConfigProperty } from '../../helpers/config.helpers.js'
export default async function handler(
request: Request,
response: Response
): Promise<void> {
const funeralHome = await getFuneralHome(request.params.funeralHomeId)
if (funeralHome === undefined) {
response.redirect(
`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`
)
return
}
response.render('funeralHome-edit', {
headTitle: funeralHome.funeralHomeName,
isCreate: false,
funeralHome
})
}

View File

@ -0,0 +1,2 @@
import type { Request, Response } from 'express';
export default function handler(_request: Request, response: Response): void;

View File

@ -0,0 +1,12 @@
import { getConfigProperty } from '../../helpers/config.helpers.js';
export default function handler(_request, response) {
const funeralHome = {
funeralHomeCity: getConfigProperty('settings.cityDefault'),
funeralHomeProvince: getConfigProperty('settings.provinceDefault')
};
response.render('funeralHome-edit', {
headTitle: `Create a Funeral Home`,
isCreate: true,
funeralHome
});
}

View File

@ -0,0 +1,17 @@
import type { Request, Response } from 'express'
import { getConfigProperty } from '../../helpers/config.helpers.js'
import type { FuneralHome } from '../../types/recordTypes.js'
export default function handler(_request: Request, response: Response): void {
const funeralHome: FuneralHome = {
funeralHomeCity: getConfigProperty('settings.cityDefault'),
funeralHomeProvince: getConfigProperty('settings.provinceDefault')
}
response.render('funeralHome-edit', {
headTitle: `Create a Funeral Home`,
isCreate: true,
funeralHome
})
}

View File

@ -0,0 +1,2 @@
import type { Request, Response } from 'express';
export default function handler(_request: Request, response: Response): Promise<void>;

View File

@ -0,0 +1,8 @@
import getFuneralHomes from '../../database/getFuneralHomes.js';
export default async function handler(_request, response) {
const funeralHomes = await getFuneralHomes();
response.render('funeralHome-search', {
headTitle: `Funeral Home Search`,
funeralHomes
});
}

View File

@ -0,0 +1,15 @@
import type { Request, Response } from 'express'
import getFuneralHomes from '../../database/getFuneralHomes.js'
export default async function handler(
_request: Request,
response: Response
): Promise<void> {
const funeralHomes = await getFuneralHomes()
response.render('funeralHome-search', {
headTitle: `Funeral Home Search`,
funeralHomes
})
}

View File

@ -0,0 +1,2 @@
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;

View File

@ -0,0 +1,14 @@
import getFuneralHome from '../../database/getFuneralHome.js';
import { getConfigProperty } from '../../helpers/config.helpers.js';
export default async function handler(request, response) {
const funeralHome = await getFuneralHome(request.params.funeralHomeId);
if (funeralHome === undefined) {
response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`);
return;
}
response.render('funeralHome-view', {
headTitle: funeralHome.funeralHomeName,
isCreate: false,
funeralHome
});
}

View File

@ -0,0 +1,24 @@
import type { Request, Response } from 'express'
import getFuneralHome from '../../database/getFuneralHome.js'
import { getConfigProperty } from '../../helpers/config.helpers.js'
export default async function handler(
request: Request,
response: Response
): Promise<void> {
const funeralHome = await getFuneralHome(request.params.funeralHomeId)
if (funeralHome === undefined) {
response.redirect(
`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`
)
return
}
response.render('funeralHome-view', {
headTitle: funeralHome.funeralHomeName,
isCreate: false,
funeralHome
})
}

View File

@ -0,0 +1,3 @@
import type { Request, Response } from 'express';
import { type AddForm } from '../../database/addFuneralHome.js';
export default function handler(request: Request<unknown, unknown, AddForm>, response: Response): Promise<void>;

View File

@ -0,0 +1,8 @@
import addFuneralHome from '../../database/addFuneralHome.js';
export default async function handler(request, response) {
const funeralHomeId = await addFuneralHome(request.body, request.session.user);
response.json({
success: true,
funeralHomeId
});
}

View File

@ -0,0 +1,18 @@
import type { Request, Response } from 'express'
import addFuneralHome, { type AddForm } from '../../database/addFuneralHome.js'
export default async function handler(
request: Request<unknown, unknown, AddForm>,
response: Response
): Promise<void> {
const funeralHomeId = await addFuneralHome(
request.body,
request.session.user as User
)
response.json({
success: true,
funeralHomeId
})
}

View File

@ -0,0 +1,4 @@
import type { Request, Response } from 'express';
export default function handler(request: Request<unknown, unknown, {
funeralHomeId: string | number;
}>, response: Response): Promise<void>;

View File

@ -0,0 +1,7 @@
import { deleteRecord } from '../../database/deleteRecord.js';
export default async function handler(request, response) {
const success = await deleteRecord('FuneralHomes', request.body.funeralHomeId, request.session.user);
response.json({
success
});
}

View File

@ -0,0 +1,18 @@
import type { Request, Response } from 'express'
import { deleteRecord } from '../../database/deleteRecord.js'
export default async function handler(
request: Request<unknown, unknown, { funeralHomeId: string | number }>,
response: Response
): Promise<void> {
const success = await deleteRecord(
'FuneralHomes',
request.body.funeralHomeId,
request.session.user as User
)
response.json({
success
})
}

View File

@ -0,0 +1,3 @@
import type { Request, Response } from 'express';
import { type UpdateForm } from '../../database/updateFuneralHome.js';
export default function handler(request: Request<unknown, unknown, UpdateForm>, response: Response): Promise<void>;

View File

@ -0,0 +1,8 @@
import updateFuneralHome from '../../database/updateFuneralHome.js';
export default async function handler(request, response) {
const success = await updateFuneralHome(request.body, request.session.user);
response.json({
success,
funeralHomeId: request.body.funeralHomeId
});
}

View File

@ -0,0 +1,20 @@
import type { Request, Response } from 'express'
import updateFuneralHome, {
type UpdateForm
} from '../../database/updateFuneralHome.js'
export default async function handler(
request: Request<unknown, unknown, UpdateForm>,
response: Response
): Promise<void> {
const success = await updateFuneralHome(
request.body,
request.session.user as User
)
response.json({
success,
funeralHomeId: request.body.funeralHomeId
})
}

View File

@ -1,2 +1,5 @@
import type { Request, Response } from 'express';
export default function handler(request: Request, response: Response): Promise<void>;
import { type ReportParameters } from '../../database/getReportData.js';
export default function handler(request: Request<{
reportName: string;
}, unknown, unknown, ReportParameters>, response: Response): Promise<void>;

View File

@ -6,14 +6,14 @@ import getReportData, {
} from '../../database/getReportData.js'
export default async function handler(
request: Request,
request: Request<{ reportName: string }, unknown, unknown, ReportParameters>,
response: Response
): Promise<void> {
const reportName = request.params.reportName
const rows = await getReportData(
reportName,
request.query as ReportParameters
request.query
)
if (rows === undefined) {

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900">
<header class="modal-card-head">
<h3 class="modal-card-title">
Add <span class="alias" data-alias="Occupancy"></span> Type
Add Contract Type
</h3>
<button
class="delete is-close-modal-button"
@ -12,16 +12,16 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypeAdd">
<form id="form--contractTypeAdd">
<div class="field">
<label class="label" for="occupancyTypeAdd--occupancyType"
><span class="alias" data-alias="Occupancy"></span> Type</label
<label class="label" for="contractTypeAdd--contractType"
>Contract Type</label
>
<div class="control">
<input
class="input"
id="occupancyTypeAdd--occupancyType"
name="occupancyType"
id="contractTypeAdd--contractType"
name="contractType"
type="text"
maxlength="100"
required
@ -34,10 +34,10 @@
<button
class="button is-success"
type="submit"
form="form--occupancyTypeAdd"
form="form--contractTypeAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add <span class="alias" data-alias="Occupancy"></span> Type</span>
<span>Add Contract Type</span>
</button>
<button class="button is-close-modal-button" type="button">Cancel</button>
</footer>

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900">
<header class="modal-card-head">
<h3 class="modal-card-title">
Add <span class="alias" data-alias="Occupancy"></span> Type Field
Add Contract Type Field
</h3>
<button
class="delete is-close-modal-button"
@ -12,22 +12,22 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypeFieldAdd">
<form id="form--contractTypeFieldAdd">
<input
class="input"
id="occupancyTypeFieldAdd--occupancyTypeId"
name="occupancyTypeId"
id="contractTypeFieldAdd--contractTypeId"
name="contractTypeId"
type="hidden"
/>
<div class="field">
<label class="label" for="occupancyTypeFieldAdd--occupancyTypeField"
<label class="label" for="contractTypeFieldAdd--contractTypeField"
>New Field Name</label
>
<div class="control">
<input
class="input"
id="occupancyTypeFieldAdd--occupancyTypeField"
name="occupancyTypeField"
id="contractTypeFieldAdd--contractTypeField"
name="contractTypeField"
type="text"
maxlength="100"
required
@ -40,7 +40,7 @@
<button
class="button is-success"
type="submit"
form="form--occupancyTypeFieldAdd"
form="form--contractTypeFieldAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Field</span>

View File

@ -3,7 +3,7 @@
<div class="modal-card">
<header class="modal-card-head">
<h3 class="modal-card-title">
Add <span class="alias" data-alias="Occupancy"></span> Type Print
Add Contract Type Print
</h3>
<button
class="delete is-close-modal-button"
@ -12,21 +12,21 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypePrintAdd">
<form id="form--contractTypePrintAdd">
<input
class="input"
id="occupancyTypePrintAdd--occupancyTypeId"
name="occupancyTypeId"
id="contractTypePrintAdd--contractTypeId"
name="contractTypeId"
type="hidden"
/>
<div class="field">
<label class="label" for="occupancyTypePrintAdd--printEJS"
<label class="label" for="contractTypePrintAdd--printEJS"
>Print</label
>
<div class="control">
<div class="select is-fullwidth">
<select
id="occupancyTypePrintAdd--printEJS"
id="contractTypePrintAdd--printEJS"
name="printEJS"
required
>
@ -42,7 +42,7 @@
<button
class="button is-success"
type="submit"
form="form--occupancyTypePrintAdd"
form="form--contractTypePrintAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Print</span>

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900">
<header class="modal-card-head">
<h3 class="modal-card-title">
Update <span class="alias" data-alias="Occupancy"></span> Type
Update Contract Type
</h3>
<button
class="delete is-close-modal-button"
@ -12,22 +12,22 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypeEdit">
<form id="form--contractTypeEdit">
<input
class="input"
id="occupancyTypeEdit--occupancyTypeId"
name="occupancyTypeId"
id="contractTypeEdit--contractTypeId"
name="contractTypeId"
type="hidden"
/>
<div class="field">
<label class="label" for="occupancyTypeEdit--occupancyType"
><span class="alias" data-alias="Occupancy"></span> Type</label
<label class="label" for="contractTypeEdit--contractType"
>Contract Type</label
>
<div class="control">
<input
class="input"
id="occupancyTypeEdit--occupancyType"
name="occupancyType"
id="contractTypeEdit--contractType"
name="contractType"
type="text"
maxlength="100"
required
@ -40,11 +40,11 @@
<button
class="button is-success"
type="submit"
form="form--occupancyTypeEdit"
form="form--contractTypeEdit"
>
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span
>Update <span class="alias" data-alias="Occupancy"></span> Type</span
>Update Contract Type</span
>
</button>
<button class="button is-close-modal-button" type="button">Cancel</button>

View File

@ -3,7 +3,7 @@
<div class="modal-card has-width-900">
<header class="modal-card-head">
<h3 class="modal-card-title">
Update <span class="alias" data-alias="Occupancy"></span> Type Field
Update Contract Type Field
</h3>
<button
class="delete is-close-modal-button"
@ -12,11 +12,11 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypeFieldEdit">
<form id="form--contractTypeFieldEdit">
<input
class="input"
id="occupancyTypeFieldEdit--occupancyTypeFieldId"
name="occupancyTypeFieldId"
id="contractTypeFieldEdit--contractTypeFieldId"
name="contractTypeFieldId"
type="hidden"
/>
<div class="columns">
@ -24,14 +24,14 @@
<div class="field">
<label
class="label"
for="occupancyTypeFieldEdit--occupancyTypeField"
for="contractTypeFieldEdit--contractTypeField"
>Field Name</label
>
<div class="control">
<input
class="input"
id="occupancyTypeFieldEdit--occupancyTypeField"
name="occupancyTypeField"
id="contractTypeFieldEdit--contractTypeField"
name="contractTypeField"
type="text"
maxlength="100"
required
@ -41,13 +41,13 @@
</div>
<div class="column">
<div class="field">
<label class="label" for="occupancyTypeFieldEdit--isRequired"
<label class="label" for="contractTypeFieldEdit--isRequired"
>Required</label
>
<div class="control">
<div class="select is-fullwidth">
<select
id="occupancyTypeFieldEdit--isRequired"
id="contractTypeFieldEdit--isRequired"
name="isRequired"
>
<option value="0">Not Required</option>
@ -62,13 +62,13 @@
<div class="columns">
<div class="column is-5">
<div class="field">
<label class="label" for="occupancyTypeFieldEdit--fieldType"
<label class="label" for="contractTypeFieldEdit--fieldType"
>Field Type</label
>
<div class="control">
<div class="select is-fullwidth">
<select
id="occupancyTypeFieldEdit--fieldType"
id="contractTypeFieldEdit--fieldType"
name="fieldType"
>
<option value="text">Text Field</option>
@ -83,13 +83,13 @@
<div class="field">
<label
class="label"
for="occupancyTypeFieldEdit--minLength"
for="contractTypeFieldEdit--minLength"
>Minimum Length</label
>
<div class="control">
<input
class="input"
id="occupancyTypeFieldEdit--minLength"
id="contractTypeFieldEdit--minLength"
name="minLength"
type="number"
min="0"
@ -104,13 +104,13 @@
<div class="field">
<label
class="label"
for="occupancyTypeFieldEdit--maxLength"
for="contractTypeFieldEdit--maxLength"
>Maximum Length</label
>
<div class="control">
<input
class="input"
id="occupancyTypeFieldEdit--maxLength"
id="contractTypeFieldEdit--maxLength"
name="maxLength"
type="number"
min="0"
@ -123,13 +123,13 @@
</div>
</div>
<div class="field">
<label class="label" for="occupancyTypeFieldEdit--pattern"
<label class="label" for="contractTypeFieldEdit--pattern"
>Regular Expression</label
>
<div class="control">
<input
class="input"
id="occupancyTypeFieldEdit--pattern"
id="contractTypeFieldEdit--pattern"
name="pattern"
type="text"
maxlength="100"
@ -141,14 +141,14 @@
<div class="field">
<label
class="label"
for="occupancyTypeFieldEdit--occupancyTypeFieldValues"
for="contractTypeFieldEdit--fieldValues"
>Field Values</label
>
<div class="control">
<textarea
class="textarea"
id="occupancyTypeFieldEdit--occupancyTypeFieldValues"
name="occupancyTypeFieldValues"
id="contractTypeFieldEdit--fieldValues"
name="fieldValues"
></textarea>
</div>
<p class="help is-info">
@ -164,7 +164,7 @@
<button
class="button is-success"
type="submit"
form="form--occupancyTypeFieldEdit"
form="form--contractTypeFieldEdit"
>
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update Field</span>
@ -182,7 +182,7 @@
<div class="dropdown-content">
<a
class="dropdown-item"
id="button--deleteOccupancyTypeField"
id="button--deleteContractTypeField"
href="#"
>
<span class="icon is-small"

View File

@ -78,13 +78,13 @@
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="feeAdd--occupancyTypeId"
<label class="label" for="feeAdd--contractTypeId"
><span class="alias" data-alias="Occupancy"></span> Type
Filter</label
>
<div class="control">
<div class="select is-fullwidth">
<select id="feeAdd--occupancyTypeId" name="occupancyTypeId">
<select id="feeAdd--contractTypeId" name="contractTypeId">
<option value="">(All Types)</option>
</select>
</div>

View File

@ -79,13 +79,13 @@
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="feeEdit--occupancyTypeId"
<label class="label" for="feeEdit--contractTypeId"
><span class="alias" data-alias="Occupancy"></span> Type
Filter</label
>
<div class="control">
<div class="select is-fullwidth">
<select id="feeEdit--occupancyTypeId" name="occupancyTypeId">
<select id="feeEdit--contractTypeId" name="contractTypeId">
<option value="">(All Types)</option>
</select>
</div>

View File

@ -12,46 +12,46 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyOccupantEdit">
<form id="form--contractOccupantEdit">
<input
id="lotOccupancyOccupantEdit--lotOccupancyId"
name="lotOccupancyId"
id="contractOccupantEdit--contractId"
name="contractId"
type="hidden"
value=""
/>
<input
id="lotOccupancyOccupantEdit--lotOccupantIndex"
id="contractOccupantEdit--lotOccupantIndex"
name="lotOccupantIndex"
type="hidden"
value=""
/>
<label class="label" for="lotOccupancyOccupantEdit--lotOccupantTypeId"
<label class="label" for="contractOccupantEdit--lotOccupantTypeId"
><span class="alias" data-alias="Occupant"></span> Type</label
>
<div class="field has-addons">
<div class="control is-expanded">
<div class="select is-fullwidth">
<select
id="lotOccupancyOccupantEdit--lotOccupantTypeId"
id="contractOccupantEdit--lotOccupantTypeId"
name="lotOccupantTypeId"
required
></select>
</div>
</div>
<div class="control">
<span class="button is-static" id="lotOccupancyOccupantEdit--fontAwesomeIconClass"></span>
<span class="button is-static" id="contractOccupantEdit--fontAwesomeIconClass"></span>
</div>
</div>
<div class="columns mt-2 mb-0">
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyOccupantEdit--occupantName"
<label class="label" for="contractOccupantEdit--occupantName"
><span class="alias" data-alias="Occupant"></span> Name</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantName"
id="contractOccupantEdit--occupantName"
name="occupantName"
type="text"
maxlength="200"
@ -63,13 +63,13 @@
</div>
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyOccupantEdit--occupantFamilyName"
<label class="label" for="contractOccupantEdit--occupantFamilyName"
>Family Name</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantFamilyName"
id="contractOccupantEdit--occupantFamilyName"
name="occupantFamilyName"
type="text"
maxlength="200"
@ -80,13 +80,13 @@
</div>
</div>
<div class="field">
<label class="label" for="lotOccupancyOccupantEdit--occupantAddress1"
<label class="label" for="contractOccupantEdit--occupantAddress1"
>Address</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantAddress1"
id="contractOccupantEdit--occupantAddress1"
name="occupantAddress1"
type="text"
maxlength="50"
@ -99,7 +99,7 @@
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantAddress2"
id="contractOccupantEdit--occupantAddress2"
name="occupantAddress2"
type="text"
maxlength="50"
@ -112,13 +112,13 @@
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyOccupantEdit--occupantCity"
<label class="label" for="contractOccupantEdit--occupantCity"
>City</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantCity"
id="contractOccupantEdit--occupantCity"
name="occupantCity"
type="text"
maxlength="20"
@ -130,13 +130,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantEdit--occupantProvince"
for="contractOccupantEdit--occupantProvince"
>Province</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantProvince"
id="contractOccupantEdit--occupantProvince"
name="occupantProvince"
type="text"
maxlength="2"
@ -148,13 +148,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantEdit--occupantPostalCode"
for="contractOccupantEdit--occupantPostalCode"
>Postal Code</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantPostalCode"
id="contractOccupantEdit--occupantPostalCode"
name="occupantPostalCode"
type="text"
maxlength="7"
@ -168,14 +168,14 @@
<div class="column">
<label
class="label"
for="lotOccupancyOccupantEdit--occupantPhoneNumber"
for="contractOccupantEdit--occupantPhoneNumber"
>Phone Number</label
>
<div class="field">
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantPhoneNumber"
id="contractOccupantEdit--occupantPhoneNumber"
name="occupantPhoneNumber"
type="text"
maxlength="30"
@ -190,14 +190,14 @@
<div class="column">
<label
class="label"
for="lotOccupancyOccupantEdit--occupantEmailAddress"
for="contractOccupantEdit--occupantEmailAddress"
>Email Address</label
>
<div class="field">
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyOccupantEdit--occupantEmailAddress"
id="contractOccupantEdit--occupantEmailAddress"
name="occupantEmailAddress"
type="email"
maxlength="200"
@ -213,14 +213,14 @@
<div class="field">
<label
class="label"
id="lotOccupancyOccupantEdit--occupantCommentTitle"
for="lotOccupancyOccupantEdit--occupantComment"
id="contractOccupantEdit--occupantCommentTitle"
for="contractOccupantEdit--occupantComment"
>Comment</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyOccupantEdit--occupantComment"
id="contractOccupantEdit--occupantComment"
name="occupantComment"
></textarea>
</div>
@ -231,7 +231,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyOccupantEdit"
form="form--contractOccupantEdit"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Update <span class="alias" data-alias="Occupant"></span></span>

View File

@ -10,22 +10,22 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyCommentAdd">
<form id="form--contractCommentAdd">
<input
id="lotOccupancyCommentAdd--lotOccupancyId"
name="lotOccupancyId"
id="contractCommentAdd--contractId"
name="contractId"
type="hidden"
value=""
/>
<div class="field">
<label class="label" for="lotOccupancyCommentAdd--lotOccupancyComment"
<label class="label" for="contractCommentAdd--contractComment"
>Comment</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyCommentAdd--lotOccupancyComment"
name="lotOccupancyComment"
id="contractCommentAdd--contractComment"
name="contractComment"
required
></textarea>
</div>
@ -36,7 +36,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyCommentAdd"
form="form--contractCommentAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Comment</span>

View File

@ -15,7 +15,7 @@
<div class="tabs is-boxed">
<ul>
<li class="is-active">
<a href="#tab--lotOccupancyOccupantAdd-new">
<a href="#tab--contractOccupantAdd-new">
<span class="icon is-small">
<i class="fas fa-plus" aria-hidden="true"></i>
</span>
@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="#tab--lotOccupancyOccupantAdd-copy">
<a href="#tab--contractOccupantAdd-copy">
<span class="icon is-small">
<i class="fas fa-copy" aria-hidden="true"></i>
</span>
@ -33,24 +33,24 @@
</ul>
</div>
<div class="tab-container">
<div id="tab--lotOccupancyOccupantAdd-new">
<form id="form--lotOccupancyOccupantAdd">
<div id="tab--contractOccupantAdd-new">
<form id="form--contractOccupantAdd">
<input
id="lotOccupancyOccupantAdd--lotOccupancyId"
name="lotOccupancyId"
id="contractOccupantAdd--contractId"
name="contractId"
type="hidden"
value=""
/>
<label
class="label"
for="lotOccupancyOccupantAdd--lotOccupantTypeId"
for="contractOccupantAdd--lotOccupantTypeId"
><span class="alias" data-alias="Occupant"></span> Type</label
>
<div class="field has-addons">
<div class="control is-expanded">
<div class="select is-fullwidth">
<select
id="lotOccupancyOccupantAdd--lotOccupantTypeId"
id="contractOccupantAdd--lotOccupantTypeId"
name="lotOccupantTypeId"
required
>
@ -59,7 +59,7 @@
</div>
</div>
<div class="control">
<span class="button is-static" id="lotOccupancyOccupantAdd--fontAwesomeIconClass">
<span class="button is-static" id="contractOccupantAdd--fontAwesomeIconClass">
<i class="fas fa-fw fa-user" aria-hidden="true"></i>
</span>
</div>
@ -67,13 +67,13 @@
<div class="columns mt-2 mb-0">
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyOccupantAdd--occupantName"
<label class="label" for="contractOccupantAdd--occupantName"
><span class="alias" data-alias="Occupant"></span> Name</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantName"
id="contractOccupantAdd--occupantName"
name="occupantName"
type="text"
maxlength="200"
@ -85,13 +85,13 @@
</div>
<div class="column">
<div class="field">
<label class="label" for="lotOccupancyOccupantAdd--occupantFamilyName"
<label class="label" for="contractOccupantAdd--occupantFamilyName"
>Family Name</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantFamilyName"
id="contractOccupantAdd--occupantFamilyName"
name="occupantFamilyName"
type="text"
maxlength="200"
@ -105,13 +105,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantAddress1"
for="contractOccupantAdd--occupantAddress1"
>Address</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantAddress1"
id="contractOccupantAdd--occupantAddress1"
name="occupantAddress1"
type="text"
maxlength="50"
@ -124,7 +124,7 @@
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantAddress2"
id="contractOccupantAdd--occupantAddress2"
name="occupantAddress2"
type="text"
maxlength="50"
@ -139,13 +139,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantCity"
for="contractOccupantAdd--occupantCity"
>City</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantCity"
id="contractOccupantAdd--occupantCity"
name="occupantCity"
type="text"
maxlength="20"
@ -157,13 +157,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantProvince"
for="contractOccupantAdd--occupantProvince"
>Province</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantProvince"
id="contractOccupantAdd--occupantProvince"
name="occupantProvince"
type="text"
maxlength="2"
@ -175,13 +175,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantPostalCode"
for="contractOccupantAdd--occupantPostalCode"
>Postal Code</label
>
<div class="control">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantPostalCode"
id="contractOccupantAdd--occupantPostalCode"
name="occupantPostalCode"
type="text"
maxlength="7"
@ -195,14 +195,14 @@
<div class="column">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantPhoneNumber"
for="contractOccupantAdd--occupantPhoneNumber"
>Phone Number</label
>
<div class="field">
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantPhoneNumber"
id="contractOccupantAdd--occupantPhoneNumber"
name="occupantPhoneNumber"
type="text"
maxlength="30"
@ -217,14 +217,14 @@
<div class="column">
<label
class="label"
for="lotOccupancyOccupantAdd--occupantEmailAddress"
for="contractOccupantAdd--occupantEmailAddress"
>Email Address</label
>
<div class="field">
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyOccupantAdd--occupantEmailAddress"
id="contractOccupantAdd--occupantEmailAddress"
name="occupantEmailAddress"
type="email"
maxlength="200"
@ -240,14 +240,14 @@
<div class="field">
<label
class="label"
id="lotOccupancyOccupantAdd--occupantCommentTitle"
for="lotOccupancyOccupantAdd--occupantComment"
id="contractOccupantAdd--occupantCommentTitle"
for="contractOccupantAdd--occupantComment"
>Comment</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyOccupantAdd--occupantComment"
id="contractOccupantAdd--occupantComment"
name="occupantComment"
></textarea>
</div>
@ -264,18 +264,18 @@
</div>
</form>
</div>
<div class="is-hidden" id="tab--lotOccupancyOccupantAdd-copy">
<div class="is-hidden" id="tab--contractOccupantAdd-copy">
<div class="box">
<div class="field mb-4">
<label
class="label"
for="lotOccupancyOccupantCopy--lotOccupantTypeId"
for="contractOccupantCopy--lotOccupantTypeId"
>New <span class="alias" data-alias="Occupant"></span> Type</label
>
<div class="control">
<div class="select is-fullwidth">
<select
id="lotOccupancyOccupantCopy--lotOccupantTypeId"
id="contractOccupantCopy--lotOccupantTypeId"
name="lotOccupantTypeId"
required
>
@ -284,18 +284,18 @@
</div>
</div>
</div>
<form id="form--lotOccupancyOccupantCopy">
<form id="form--contractOccupantCopy">
<input name="limit" type="hidden" value="50" />
<div class="field">
<label
class="label"
for="lotOccupancyOccupantCopy--searchFilter"
for="contractOccupantCopy--searchFilter"
>Find a Previously Used <span class="alias" data-alias="Occupant"></span></label
>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyOccupantCopy--searchFilter"
id="contractOccupantCopy--searchFilter"
name="searchFilter"
type="text"
placeholder="Filter by name or address"
@ -307,7 +307,7 @@
</div>
</form>
</div>
<div id="lotOccupancyOccupantCopy--searchResults"></div>
<div id="contractOccupantCopy--searchResults"></div>
</div>
</div>
</section>

View File

@ -10,10 +10,10 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyTransactionAdd">
<form id="form--contractTransactionAdd">
<input
id="lotOccupancyTransactionAdd--lotOccupancyId"
name="lotOccupancyId"
id="contractTransactionAdd--contractId"
name="contractId"
type="hidden"
value=""
/>
@ -21,13 +21,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionAdd--transactionAmount"
for="contractTransactionAdd--transactionAmount"
>Transaction Amount</label
>
<div class="control has-icons-left">
<input
class="input has-text-right"
id="lotOccupancyTransactionAdd--transactionAmount"
id="contractTransactionAdd--transactionAmount"
name="transactionAmount"
type="number"
step="0.01"
@ -41,14 +41,14 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionAdd--externalReceiptNumber"
for="contractTransactionAdd--externalReceiptNumber"
>
<span class="alias" data-alias="ExternalReceiptNumber"></span>
</label>
<div class="control">
<input
class="input"
id="lotOccupancyTransactionAdd--externalReceiptNumber"
id="contractTransactionAdd--externalReceiptNumber"
name="externalReceiptNumber"
maxlength="100"
autocomplete="off"
@ -56,13 +56,13 @@
</div>
</div>
<div class="field">
<label class="label" for="lotOccupancyTransactionAdd--transactionNote"
<label class="label" for="contractTransactionAdd--transactionNote"
>Note</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyTransactionAdd--transactionNote"
id="contractTransactionAdd--transactionNote"
name="transactionNote"
></textarea>
</div>
@ -73,7 +73,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyTransactionAdd"
form="form--contractTransactionAdd"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Transaction</span>

View File

@ -12,8 +12,8 @@
<section class="modal-card-body">
<form id="form--workOrderCreate">
<input
id="workOrderCreate--lotOccupancyId"
name="lotOccupancyId"
id="workOrderCreate--contractId"
name="contractId"
type="hidden"
value=""
/>

View File

@ -10,30 +10,30 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyCommentEdit">
<form id="form--contractCommentEdit">
<input
id="lotOccupancyCommentEdit--lotOccupancyId"
name="lotOccupancyId"
id="contractCommentEdit--contractId"
name="contractId"
type="hidden"
value=""
/>
<input
id="lotOccupancyCommentEdit--lotOccupancyCommentId"
name="lotOccupancyCommentId"
id="contractCommentEdit--contractCommentId"
name="contractCommentId"
type="hidden"
value=""
/>
<div class="field">
<label
class="label"
for="lotOccupancyCommentEdit--lotOccupancyComment"
for="contractCommentEdit--contractComment"
>Comment</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyCommentEdit--lotOccupancyComment"
name="lotOccupancyComment"
id="contractCommentEdit--contractComment"
name="contractComment"
required
></textarea>
</div>
@ -43,14 +43,14 @@
<div class="field">
<label
class="label"
for="lotOccupancyCommentEdit--lotOccupancyCommentDateString"
for="contractCommentEdit--contractCommentDateString"
>Comment Date</label
>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyCommentEdit--lotOccupancyCommentDateString"
name="lotOccupancyCommentDateString"
id="contractCommentEdit--contractCommentDateString"
name="contractCommentDateString"
type="date"
required
/>
@ -64,14 +64,14 @@
<div class="field">
<label
class="label"
for="lotOccupancyCommentEdit--lotOccupancyCommentTimeString"
for="contractCommentEdit--contractCommentTimeString"
>Comment Time</label
>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyCommentEdit--lotOccupancyCommentTimeString"
name="lotOccupancyCommentTimeString"
id="contractCommentEdit--contractCommentTimeString"
name="contractCommentTimeString"
type="time"
required
/>
@ -88,7 +88,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyCommentEdit"
form="form--contractCommentEdit"
>
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update Comment</span>

View File

@ -10,17 +10,17 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyFeeQuantity">
<input id="lotOccupancyFeeQuantity--lotOccupancyId" name="lotOccupancyId" type="hidden" />
<input id="lotOccupancyFeeQuantity--feeId" name="feeId" type="hidden" />
<label class="label" for="lotOccupancyFeeQuantity--quantity"
<form id="form--contractFeeQuantity">
<input id="contractFeeQuantity--contractId" name="contractId" type="hidden" />
<input id="contractFeeQuantity--feeId" name="feeId" type="hidden" />
<label class="label" for="contractFeeQuantity--quantity"
>Quantity</label
>
<div class="field has-addons">
<div class="control is-expanded">
<input
class="input"
id="lotOccupancyFeeQuantity--quantity"
id="contractFeeQuantity--quantity"
name="quantity"
type="number"
value="1"
@ -34,7 +34,7 @@
<div class="control">
<span
class="button is-static"
id="lotOccupancyFeeQuantity--quantityUnit"
id="contractFeeQuantity--quantityUnit"
></span>
</div>
</div>
@ -44,7 +44,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyFeeQuantity"
form="form--contractFeeQuantity"
>
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update Quantity</span>

View File

@ -10,15 +10,15 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyTransactionEdit">
<form id="form--contractTransactionEdit">
<input
id="lotOccupancyTransactionEdit--lotOccupancyId"
name="lotOccupancyId"
id="contractTransactionEdit--contractId"
name="contractId"
type="hidden"
value=""
/>
<input
id="lotOccupancyTransactionEdit--transactionIndex"
id="contractTransactionEdit--transactionIndex"
name="transactionIndex"
type="hidden"
value=""
@ -27,13 +27,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionEdit--transactionAmount"
for="contractTransactionEdit--transactionAmount"
>Transaction Amount</label
>
<div class="control has-icons-left">
<input
class="input has-text-right"
id="lotOccupancyTransactionEdit--transactionAmount"
id="contractTransactionEdit--transactionAmount"
name="transactionAmount"
type="number"
step="0.01"
@ -47,14 +47,14 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionEdit--externalReceiptNumber"
for="contractTransactionEdit--externalReceiptNumber"
>
<span class="alias" data-alias="ExternalReceiptNumber"></span>
</label>
<div class="control">
<input
class="input"
id="lotOccupancyTransactionEdit--externalReceiptNumber"
id="contractTransactionEdit--externalReceiptNumber"
name="externalReceiptNumber"
maxlength="100"
autocomplete="off"
@ -62,13 +62,13 @@
</div>
</div>
<div class="field">
<label class="label" for="lotOccupancyTransactionEdit--transactionNote"
<label class="label" for="contractTransactionEdit--transactionNote"
>Note</label
>
<div class="control">
<textarea
class="textarea"
id="lotOccupancyTransactionEdit--transactionNote"
id="contractTransactionEdit--transactionNote"
name="transactionNote"
></textarea>
</div>
@ -78,13 +78,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionEdit--transactionDateString"
for="contractTransactionEdit--transactionDateString"
>Transaction Date</label
>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyTransactionEdit--transactionDateString"
id="contractTransactionEdit--transactionDateString"
name="transactionDateString"
type="date"
required
@ -99,13 +99,13 @@
<div class="field">
<label
class="label"
for="lotOccupancyTransactionEdit--transactionTimeString"
for="contractTransactionEdit--transactionTimeString"
>Transaction Time</label
>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancyTransactionEdit--transactionTimeString"
id="contractTransactionEdit--transactionTimeString"
name="transactionTimeString"
type="time"
required
@ -123,7 +123,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyTransactionEdit"
form="form--contractTransactionEdit"
>
<span class="icon"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>Update Transaction</span>

View File

@ -10,15 +10,15 @@
></button>
</header>
<section class="modal-card-body">
<form id="form--lotOccupancyFeeQuantity">
<label class="label" for="lotOccupancyFeeQuantity--quantity"
<form id="form--contractFeeQuantity">
<label class="label" for="contractFeeQuantity--quantity"
>Quantity</label
>
<div class="field has-addons">
<div class="control is-expanded">
<input
class="input"
id="lotOccupancyFeeQuantity--quantity"
id="contractFeeQuantity--quantity"
name="quantity"
type="number"
value="1"
@ -32,7 +32,7 @@
<div class="control">
<span
class="button is-static"
id="lotOccupancyFeeQuantity--quantityUnit"
id="contractFeeQuantity--quantityUnit"
></span>
</div>
</div>
@ -42,7 +42,7 @@
<button
class="button is-success"
type="submit"
form="form--lotOccupancyFeeQuantity"
form="form--contractFeeQuantity"
>
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Set Quantity and Add Fee</span>

View File

@ -14,17 +14,17 @@
</header>
<section class="modal-card-body">
<div class="box">
<form id="form--lotOccupancySearch">
<form id="form--contractSearch">
<input name="limit" type="hidden" value="100" />
<input name="offset" type="hidden" value="0" />
<input
id="lotOccupancySearch--notWorkOrderId"
id="contractSearch--notWorkOrderId"
name="notWorkOrderId"
type="hidden"
value=""
/>
<input
id="lotOccupancySearch--occupancyEffectiveDateString"
id="contractSearch--occupancyEffectiveDateString"
name="occupancyEffectiveDateString"
type="hidden"
value=""
@ -32,14 +32,14 @@
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="lotOccupancySearch--occupantName">
<label class="label" for="contractSearch--occupantName">
<span class="alias" data-alias="Occupant"></span>
Name
</label>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancySearch--occupantName"
id="contractSearch--occupantName"
name="occupantName"
type="text"
/>
@ -51,14 +51,14 @@
</div>
<div class="column">
<div class="field">
<label class="label" for="lotOccupancySearch--lotName">
<label class="label" for="contractSearch--lotName">
<span class="alias" data-alias="Lot"></span>
Name
</label>
<div class="control has-icons-left">
<input
class="input"
id="lotOccupancySearch--lotName"
id="contractSearch--lotName"
name="lotName"
type="text"
/>
@ -71,7 +71,7 @@
</div>
</form>
</div>
<div id="resultsContainer--lotOccupancyAdd"></div>
<div id="resultsContainer--contractAdd"></div>
</section>
<footer class="modal-card-foot justify-right">
<button class="button is-close-modal-button" type="button">Close</button>

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const burialSiteId = document.querySelector('#burialSite--burialSiteId').value;
const isCreate = burialSiteId === '';
// Main form

View File

@ -6,14 +6,14 @@ import type {
BurialSiteTypeField
} from '../../types/recordTypes.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as Sunrise
const burialSiteId = (
document.querySelector('#burialSite--burialSiteId') as HTMLInputElement

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const searchFilterFormElement = document.querySelector('#form--searchFilters');
const searchResultsContainerElement = document.querySelector('#container--searchResults');
const limit = Number.parseInt(document.querySelector('#searchFilter--limit').value, 10);

View File

@ -2,13 +2,13 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { BurialSite } from '../../types/recordTypes.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as Sunrise
const searchFilterFormElement = document.querySelector(
'#form--searchFilters'

View File

@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
const mapContainerElement = document.querySelector('#burialSite--cemeterySvg');
if (mapContainerElement !== null) {
;
exports.los.highlightMap(mapContainerElement, mapContainerElement.dataset.cemeterySvgId ?? '', 'success');
exports.sunrise.highlightMap(mapContainerElement, mapContainerElement.dataset.cemeterySvgId ?? '', 'success');
}
})();

View File

@ -1,4 +1,4 @@
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const exports: Record<string, unknown>
;(() => {
@ -6,7 +6,7 @@ declare const exports: Record<string, unknown>
document.querySelector('#burialSite--cemeterySvg')
if (mapContainerElement !== null) {
;(exports.los as LOS).highlightMap(
;(exports.sunrise as Sunrise).highlightMap(
mapContainerElement,
mapContainerElement.dataset.cemeterySvgId ?? '',
'success'

View File

@ -3,7 +3,7 @@
/* eslint-disable max-lines */
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const containerElement = document.querySelector('#container--burialSiteTypes');
let burialSiteTypes = exports.burialSiteTypes;
delete exports.burialSiteTypes;

View File

@ -9,7 +9,7 @@ import type {
BurialSiteTypeField
} from '../../types/recordTypes.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS
@ -27,7 +27,7 @@ type ResponseJSON =
errorMessage?: string
}
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as Sunrise
const containerElement = document.querySelector(
'#container--burialSiteTypes'

View File

@ -1,30 +1,30 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const sunrise = exports.sunrise;
const cemeteryId = document.querySelector('#cemetery--cemeteryId').value;
const isCreate = cemeteryId === '';
const cemeteryForm = document.querySelector('#form--cemetery');
function setUnsavedChanges() {
los.setUnsavedChanges();
sunrise.setUnsavedChanges();
document
.querySelector("button[type='submit'][form='form--cemetery']")
?.classList.remove('is-light');
}
function clearUnsavedChanges() {
los.clearUnsavedChanges();
sunrise.clearUnsavedChanges();
document
.querySelector("button[type='submit'][form='form--cemetery']")
?.classList.add('is-light');
}
function updateCemetery(formEvent) {
formEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/cemeteries/${isCreate ? 'doCreateCemetery' : 'doUpdateCemetery'}`, cemeteryForm, (rawResponseJSON) => {
cityssm.postJSON(`${sunrise.urlPrefix}/cemeteries/${isCreate ? 'doCreateCemetery' : 'doUpdateCemetery'}`, cemeteryForm, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
if (responseJSON.success) {
clearUnsavedChanges();
if (isCreate) {
globalThis.location.href = los.getCemeteryURL(responseJSON.cemeteryId, true);
globalThis.location.href = sunrise.getCemeteryURL(responseJSON.cemeteryId, true);
}
else {
bulmaJS.alert({
@ -52,12 +52,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
?.addEventListener('click', (clickEvent) => {
clickEvent.preventDefault();
function doDelete() {
cityssm.postJSON(`${los.urlPrefix}/cemeteries/doDeleteCemetery`, {
cityssm.postJSON(`${sunrise.urlPrefix}/cemeteries/doDeleteCemetery`, {
cemeteryId
}, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
if (responseJSON.success) {
globalThis.location.href = los.getCemeteryURL();
globalThis.location.href = sunrise.getCemeteryURL();
}
else {
bulmaJS.alert({

View File

@ -1,14 +1,14 @@
import type { BulmaJS } from '@cityssm/bulma-js/types.js'
import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const bulmaJS: BulmaJS
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const sunrise = exports.sunrise as Sunrise
const cemeteryId = (
document.querySelector('#cemetery--cemeteryId') as HTMLInputElement
@ -20,14 +20,14 @@ declare const exports: Record<string, unknown>
) as HTMLFormElement
function setUnsavedChanges(): void {
los.setUnsavedChanges()
sunrise.setUnsavedChanges()
document
.querySelector("button[type='submit'][form='form--cemetery']")
?.classList.remove('is-light')
}
function clearUnsavedChanges(): void {
los.clearUnsavedChanges()
sunrise.clearUnsavedChanges()
document
.querySelector("button[type='submit'][form='form--cemetery']")
?.classList.add('is-light')
@ -37,7 +37,7 @@ declare const exports: Record<string, unknown>
formEvent.preventDefault()
cityssm.postJSON(
`${los.urlPrefix}/cemeteries/${isCreate ? 'doCreateCemetery' : 'doUpdateCemetery'}`,
`${sunrise.urlPrefix}/cemeteries/${isCreate ? 'doCreateCemetery' : 'doUpdateCemetery'}`,
cemeteryForm,
(rawResponseJSON) => {
const responseJSON = rawResponseJSON as {
@ -50,7 +50,7 @@ declare const exports: Record<string, unknown>
clearUnsavedChanges()
if (isCreate) {
globalThis.location.href = los.getCemeteryURL(
globalThis.location.href = sunrise.getCemeteryURL(
responseJSON.cemeteryId,
true
)
@ -87,7 +87,7 @@ declare const exports: Record<string, unknown>
function doDelete(): void {
cityssm.postJSON(
`${los.urlPrefix}/cemeteries/doDeleteCemetery`,
`${sunrise.urlPrefix}/cemeteries/doDeleteCemetery`,
{
cemeteryId
},
@ -98,7 +98,7 @@ declare const exports: Record<string, unknown>
}
if (responseJSON.success) {
globalThis.location.href = los.getCemeteryURL()
globalThis.location.href = sunrise.getCemeteryURL()
} else {
bulmaJS.alert({
title: `Error Deleting Cemetery`,

View File

@ -1,14 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const sunrise = exports.sunrise;
const cemeteries = exports.cemeteries;
const searchFilterElement = document.querySelector('#searchFilter--cemetery');
const searchResultsContainerElement = document.querySelector('#container--searchResults');
// eslint-disable-next-line complexity
function renderResults() {
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML(`Loading Cemeteries...`);
searchResultsContainerElement.innerHTML = sunrise.getLoadingParagraphHTML(`Loading Cemeteries...`);
let searchResultCount = 0;
const searchResultsTbodyElement = document.createElement('tbody');
const filterStringSplit = searchFilterElement.value
@ -31,7 +31,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
// eslint-disable-next-line no-unsanitized/method
searchResultsTbodyElement.insertAdjacentHTML('beforeend', `<tr>
<td>
<a class="has-text-weight-bold" href="${los.getCemeteryURL(cemetery.cemeteryId)}">
<a class="has-text-weight-bold" href="${sunrise.getCemeteryURL(cemetery.cemeteryId)}">
${cityssm.escapeHTML((cemetery.cemeteryName ?? '') === '' ? '(No Name)' : cemetery.cemeteryName ?? '')}
</a><br />
<span class="is-size-7">
@ -63,13 +63,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
? ''
: '<span data-tooltip="Has Image"><i class="fas fa-image" role="img" aria-label="Has Image"></i></span>'}
</td><td class="has-text-right">
<a href="${los.urlPrefix}/burialSites?cemeteryId=${cemetery.cemeteryId}">${cemetery.burialSiteCount}</a>
<a href="${sunrise.urlPrefix}/burialSites?cemeteryId=${cemetery.cemeteryId}">${cemetery.burialSiteCount}</a>
</td>
</tr>`);
}
searchResultsContainerElement.innerHTML = '';
if (searchResultCount === 0) {
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no cemeteries that meet the search criteria.</p>
</div>`;
@ -78,7 +77,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
const searchResultsTableElement = document.createElement('table');
searchResultsTableElement.className =
'table is-fullwidth is-striped is-hoverable has-sticky-header';
// eslint-disable-next-line no-unsanitized/property
searchResultsTableElement.innerHTML = `<thead><tr>
<th>Cemetery</th>
<th>Address</th>

View File

@ -2,13 +2,13 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { Cemetery } from '../../types/recordTypes.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const sunrise = exports.sunrise as Sunrise
const cemeteries = exports.cemeteries as Cemetery[]
@ -23,7 +23,7 @@ declare const exports: Record<string, unknown>
// eslint-disable-next-line complexity
function renderResults(): void {
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML(
searchResultsContainerElement.innerHTML = sunrise.getLoadingParagraphHTML(
`Loading Cemeteries...`
)
@ -60,7 +60,7 @@ declare const exports: Record<string, unknown>
'beforeend',
`<tr>
<td>
<a class="has-text-weight-bold" href="${los.getCemeteryURL(cemetery.cemeteryId)}">
<a class="has-text-weight-bold" href="${sunrise.getCemeteryURL(cemetery.cemeteryId)}">
${cityssm.escapeHTML(
(cemetery.cemeteryName ?? '') === '' ? '(No Name)' : cemetery.cemeteryName ?? ''
)}
@ -106,7 +106,7 @@ declare const exports: Record<string, unknown>
: '<span data-tooltip="Has Image"><i class="fas fa-image" role="img" aria-label="Has Image"></i></span>'
}
</td><td class="has-text-right">
<a href="${los.urlPrefix}/burialSites?cemeteryId=${cemetery.cemeteryId}">${cemetery.burialSiteCount}</a>
<a href="${sunrise.urlPrefix}/burialSites?cemeteryId=${cemetery.cemeteryId}">${cemetery.burialSiteCount}</a>
</td>
</tr>`
)
@ -115,7 +115,6 @@ declare const exports: Record<string, unknown>
searchResultsContainerElement.innerHTML = ''
if (searchResultCount === 0) {
// eslint-disable-next-line no-unsanitized/property
searchResultsContainerElement.innerHTML = `<div class="message is-info">
<p class="message-body">There are no cemeteries that meet the search criteria.</p>
</div>`
@ -125,7 +124,6 @@ declare const exports: Record<string, unknown>
searchResultsTableElement.className =
'table is-fullwidth is-striped is-hoverable has-sticky-header'
// eslint-disable-next-line no-unsanitized/property
searchResultsTableElement.innerHTML = `<thead><tr>
<th>Cemetery</th>
<th>Address</th>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const searchFilterFormElement = document.querySelector('#form--searchFilters');
const searchResultsContainerElement = document.querySelector('#container--searchResults');
const limit = Number.parseInt(document.querySelector('#searchFilter--limit').value, 10);

View File

@ -2,13 +2,13 @@ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js'
import type { Contract } from '../../types/recordTypes.js'
import type { LOS } from './types.js'
import type { Sunrise } from './types.js'
declare const cityssm: cityssmGlobal
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as Sunrise
const searchFilterFormElement = document.querySelector(
'#form--searchFilters'

View File

@ -1,88 +1,88 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const occupancyTypesContainerElement = document.querySelector('#container--occupancyTypes');
const ContractTypePrintsContainerElement = document.querySelector('#container--ContractTypePrints');
let occupancyTypes = exports.occupancyTypes;
delete exports.occupancyTypes;
const los = exports.sunrise;
const contractTypesContainerElement = document.querySelector('#container--contractTypes');
const contractTypePrintsContainerElement = document.querySelector('#container--contractTypePrints');
let contractTypes = exports.contractTypes;
delete exports.contractTypes;
let allContractTypeFields = exports.allContractTypeFields;
delete exports.allContractTypeFields;
const expandedOccupancyTypes = new Set();
const expandedContractTypes = new Set();
function toggleContractTypeFields(clickEvent) {
const toggleButtonElement = clickEvent.currentTarget;
const occupancyTypeElement = toggleButtonElement.closest('.container--occupancyType');
const contractTypeId = Number.parseInt(occupancyTypeElement.dataset.contractTypeId ?? '', 10);
if (expandedOccupancyTypes.has(contractTypeId)) {
expandedOccupancyTypes.delete(contractTypeId);
const contractTypeElement = toggleButtonElement.closest('.container--contractType');
const contractTypeId = Number.parseInt(contractTypeElement.dataset.contractTypeId ?? '', 10);
if (expandedContractTypes.has(contractTypeId)) {
expandedContractTypes.delete(contractTypeId);
}
else {
expandedOccupancyTypes.add(contractTypeId);
expandedContractTypes.add(contractTypeId);
}
// eslint-disable-next-line no-unsanitized/property
toggleButtonElement.innerHTML = expandedOccupancyTypes.has(contractTypeId)
toggleButtonElement.innerHTML = expandedContractTypes.has(contractTypeId)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>';
const panelBlockElements = occupancyTypeElement.querySelectorAll('.panel-block');
const panelBlockElements = contractTypeElement.querySelectorAll('.panel-block');
for (const panelBlockElement of panelBlockElements) {
panelBlockElement.classList.toggle('is-hidden');
}
}
function occupancyTypeResponseHandler(rawResponseJSON) {
function contractTypeResponseHandler(rawResponseJSON) {
const responseJSON = rawResponseJSON;
if (responseJSON.success) {
occupancyTypes = responseJSON.occupancyTypes;
contractTypes = responseJSON.contractTypes;
allContractTypeFields = responseJSON.allContractTypeFields;
renderOccupancyTypes();
renderContractTypes();
}
else {
bulmaJS.alert({
title: `Error Updating ${los.escapedAliases.Occupancy} Type`,
title: `Error Updating Contract Type`,
message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger'
});
}
}
function deleteOccupancyType(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.contractTypeId ?? '', 10);
function deleteContractType(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10);
function doDelete() {
cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteContractType`, {
contractTypeId
}, occupancyTypeResponseHandler);
}, contractTypeResponseHandler);
}
bulmaJS.confirm({
title: `Delete ${los.escapedAliases.Occupancy} Type`,
message: `Are you sure you want to delete this ${los.escapedAliases.occupancy} type?`,
title: `Delete Contract Type`,
message: `Are you sure you want to delete this contract type?`,
contextualColorName: 'warning',
okButton: {
text: `Yes, Delete ${los.escapedAliases.Occupancy} Type`,
text: `Yes, Delete Contract Type`,
callbackFunction: doDelete
}
});
}
function openEditOccupancyType(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.contractTypeId ?? '', 10);
const occupancyType = occupancyTypes.find((currentOccupancyType) => contractTypeId === currentOccupancyType.contractTypeId);
function openEditContractType(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10);
const contractType = contractTypes.find((currentContractType) => contractTypeId === currentContractType.contractTypeId);
let editCloseModalFunction;
function doEdit(submitEvent) {
submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateContractType`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
occupancyTypeResponseHandler(responseJSON);
contractTypeResponseHandler(responseJSON);
if (responseJSON.success) {
editCloseModalFunction();
}
});
}
cityssm.openHtmlModal('adminOccupancyTypes-editOccupancyType', {
cityssm.openHtmlModal('adminContractTypes-edit', {
onshow(modalElement) {
los.populateAliases(modalElement);
modalElement.querySelector('#occupancyTypeEdit--contractTypeId').value = contractTypeId.toString();
modalElement.querySelector('#occupancyTypeEdit--occupancyType').value = occupancyType.occupancyType;
modalElement.querySelector('#contractTypeEdit--contractTypeId').value = contractTypeId.toString();
modalElement.querySelector('#contractTypeEdit--contractType').value = contractType.contractType;
},
onshown(modalElement, closeModalFunction) {
editCloseModalFunction = closeModalFunction;
modalElement.querySelector('#occupancyTypeEdit--occupancyType').focus();
modalElement.querySelector('#contractTypeEdit--contractType').focus();
modalElement.querySelector('form')?.addEventListener('submit', doEdit);
bulmaJS.toggleHtmlClipped();
},
@ -91,32 +91,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
function openAddOccupancyTypeField(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.contractTypeId ?? '', 10);
function openAddContractTypeField(clickEvent) {
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10);
let addCloseModalFunction;
function doAdd(submitEvent) {
submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doAddContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
expandedOccupancyTypes.add(contractTypeId);
occupancyTypeResponseHandler(responseJSON);
expandedContractTypes.add(contractTypeId);
contractTypeResponseHandler(responseJSON);
if (responseJSON.success) {
addCloseModalFunction();
openEditOccupancyTypeField(contractTypeId, responseJSON.contractTypeFieldId ?? 0);
openEditContractTypeField(contractTypeId, responseJSON.contractTypeFieldId ?? 0);
}
});
}
cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyTypeField', {
cityssm.openHtmlModal('adminContractTypes-addField', {
onshow(modalElement) {
los.populateAliases(modalElement);
if (contractTypeId) {
;
modalElement.querySelector('#occupancyTypeFieldAdd--contractTypeId').value = contractTypeId.toString();
modalElement.querySelector('#contractTypeFieldAdd--contractTypeId').value = contractTypeId.toString();
}
},
onshown(modalElement, closeModalFunction) {
addCloseModalFunction = closeModalFunction;
modalElement.querySelector('#occupancyTypeFieldAdd--occupancyTypeField').focus();
modalElement.querySelector('#contractTypeFieldAdd--contractTypeField').focus();
modalElement.querySelector('form')?.addEventListener('submit', doAdd);
bulmaJS.toggleHtmlClipped();
},
@ -125,29 +125,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
function moveOccupancyType(clickEvent) {
function moveContractType(clickEvent) {
const buttonElement = clickEvent.currentTarget;
const contractTypeId = clickEvent.currentTarget.closest('.container--occupancyType').dataset.contractTypeId;
const contractTypeId = clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId;
cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up'
? 'doMoveContractTypeUp'
: 'doMoveContractTypeDown'}`, {
contractTypeId,
moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, occupancyTypeResponseHandler);
}, contractTypeResponseHandler);
}
function openEditOccupancyTypeField(contractTypeId, contractTypeFieldId) {
let occupancyType;
function openEditContractTypeField(contractTypeId, contractTypeFieldId) {
let contractType;
if (contractTypeId) {
occupancyType = occupancyTypes.find((currentOccupancyType) => currentOccupancyType.contractTypeId === contractTypeId);
contractType = contractTypes.find((currentContractType) => currentContractType.contractTypeId === contractTypeId);
}
const occupancyTypeField = (occupancyType
? occupancyType.ContractTypeFields ?? []
: allContractTypeFields).find((currentOccupancyTypeField) => currentOccupancyTypeField.contractTypeFieldId === contractTypeFieldId);
const contractTypeField = (contractType
? contractType.contractTypeFields ?? []
: allContractTypeFields).find((currentContractTypeField) => currentContractTypeField.contractTypeFieldId === contractTypeFieldId);
let fieldTypeElement;
let minLengthInputElement;
let maxLengthInputElement;
let patternElement;
let occupancyTypeFieldValuesElement;
let fieldValuesElement;
let editCloseModalFunction;
function updateMaximumLengthMin() {
maxLengthInputElement.min = minLengthInputElement.value;
@ -158,21 +158,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
minLengthInputElement.disabled = true;
maxLengthInputElement.disabled = true;
patternElement.disabled = true;
occupancyTypeFieldValuesElement.disabled = true;
fieldValuesElement.disabled = true;
break;
}
case 'select': {
minLengthInputElement.disabled = true;
maxLengthInputElement.disabled = true;
patternElement.disabled = true;
occupancyTypeFieldValuesElement.disabled = false;
fieldValuesElement.disabled = false;
break;
}
default: {
minLengthInputElement.disabled = false;
maxLengthInputElement.disabled = false;
patternElement.disabled = false;
occupancyTypeFieldValuesElement.disabled = true;
fieldValuesElement.disabled = true;
break;
}
}
@ -181,7 +181,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
submitEvent.preventDefault();
cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
occupancyTypeResponseHandler(responseJSON);
contractTypeResponseHandler(responseJSON);
if (responseJSON.success) {
editCloseModalFunction();
}
@ -192,7 +192,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
contractTypeFieldId
}, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;
occupancyTypeResponseHandler(responseJSON);
contractTypeResponseHandler(responseJSON);
if (responseJSON.success) {
editCloseModalFunction();
}
@ -209,28 +209,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
cityssm.openHtmlModal('adminOccupancyTypes-editOccupancyTypeField', {
onshow: (modalElement) => {
cityssm.openHtmlModal('adminContractTypes-editField', {
onshow(modalElement) {
los.populateAliases(modalElement);
modalElement.querySelector('#occupancyTypeFieldEdit--contractTypeFieldId').value = occupancyTypeField.contractTypeFieldId.toString();
modalElement.querySelector('#occupancyTypeFieldEdit--occupancyTypeField').value = occupancyTypeField.occupancyTypeField ?? '';
modalElement.querySelector('#occupancyTypeFieldEdit--isRequired').value = occupancyTypeField.isRequired ?? false ? '1' : '0';
fieldTypeElement = modalElement.querySelector('#occupancyTypeFieldEdit--fieldType');
fieldTypeElement.value = occupancyTypeField.fieldType;
minLengthInputElement = modalElement.querySelector('#occupancyTypeFieldEdit--minLength');
modalElement.querySelector('#contractTypeFieldEdit--contractTypeFieldId').value = contractTypeField.contractTypeFieldId.toString();
modalElement.querySelector('#contractTypeFieldEdit--contractTypeField').value = contractTypeField.contractTypeField ?? '';
modalElement.querySelector('#contractTypeFieldEdit--isRequired').value = contractTypeField.isRequired ?? false ? '1' : '0';
fieldTypeElement = modalElement.querySelector('#contractTypeFieldEdit--fieldType');
fieldTypeElement.value = contractTypeField.fieldType;
minLengthInputElement = modalElement.querySelector('#contractTypeFieldEdit--minLength');
minLengthInputElement.value =
occupancyTypeField.minLength?.toString() ?? '';
maxLengthInputElement = modalElement.querySelector('#occupancyTypeFieldEdit--maxLength');
contractTypeField.minLength?.toString() ?? '';
maxLengthInputElement = modalElement.querySelector('#contractTypeFieldEdit--maxLength');
maxLengthInputElement.value =
occupancyTypeField.maxLength?.toString() ?? '';
patternElement = modalElement.querySelector('#occupancyTypeFieldEdit--pattern');
patternElement.value = occupancyTypeField.pattern ?? '';
occupancyTypeFieldValuesElement = modalElement.querySelector('#occupancyTypeFieldEdit--occupancyTypeFieldValues');
occupancyTypeFieldValuesElement.value =
occupancyTypeField.occupancyTypeFieldValues ?? '';
contractTypeField.maxLength?.toString() ?? '';
patternElement = modalElement.querySelector('#contractTypeFieldEdit--pattern');
patternElement.value = contractTypeField.pattern ?? '';
fieldValuesElement = modalElement.querySelector('#contractTypeFieldEdit--fieldValues');
fieldValuesElement.value = contractTypeField.fieldValues ?? '';
toggleInputFields();
},
onshown: (modalElement, closeModalFunction) => {
onshown(modalElement, closeModalFunction) {
editCloseModalFunction = closeModalFunction;
bulmaJS.init(modalElement);
bulmaJS.toggleHtmlClipped();
@ -240,77 +239,78 @@ Object.defineProperty(exports, "__esModule", { value: true });
updateMaximumLengthMin();
fieldTypeElement.addEventListener('change', toggleInputFields);
modalElement
.querySelector('#button--deleteOccupancyTypeField')
.querySelector('#button--deleteContractTypeField')
?.addEventListener('click', confirmDoDelete);
},
onremoved: () => {
onremoved() {
bulmaJS.toggleHtmlClipped();
cityssm.disableNavBlocker();
}
});
}
function openEditOccupancyTypeFieldByClick(clickEvent) {
function openEditContractTypeFieldByClick(clickEvent) {
clickEvent.preventDefault();
const contractTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyTypeField').dataset.contractTypeFieldId ?? '', 10);
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.contractTypeId ?? '', 10);
openEditOccupancyTypeField(contractTypeId, contractTypeFieldId);
const contractTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractTypeField').dataset.contractTypeFieldId ?? '', 10);
const contractTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--contractType').dataset.contractTypeId ?? '', 10);
openEditContractTypeField(contractTypeId, contractTypeFieldId);
}
function moveOccupancyTypeField(clickEvent) {
function moveContractTypeField(clickEvent) {
const buttonElement = clickEvent.currentTarget;
const contractTypeFieldId = clickEvent.currentTarget.closest('.container--occupancyTypeField').dataset.contractTypeFieldId;
const contractTypeFieldId = clickEvent.currentTarget.closest('.container--contractTypeField').dataset.contractTypeFieldId;
cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up'
? 'doMoveContractTypeFieldUp'
? // eslint-disable-next-line no-secrets/no-secrets
'doMoveContractTypeFieldUp'
: // eslint-disable-next-line no-secrets/no-secrets
'doMoveContractTypeFieldDown'}`, {
contractTypeFieldId,
moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, occupancyTypeResponseHandler);
}, contractTypeResponseHandler);
}
function renderContractTypeFields(panelElement, contractTypeId, ContractTypeFields) {
if (ContractTypeFields.length === 0) {
function renderContractTypeFields(panelElement, contractTypeId, contractTypeFields) {
if (contractTypeFields.length === 0) {
// eslint-disable-next-line no-unsanitized/method
panelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block ${!contractTypeId || expandedOccupancyTypes.has(contractTypeId)
panelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block ${!contractTypeId || expandedContractTypes.has(contractTypeId)
? ''
: ' is-hidden'}">
<div class="message is-info"><p class="message-body">There are no additional fields.</p></div>
</div>`);
}
else {
for (const occupancyTypeField of ContractTypeFields) {
for (const contractTypeField of contractTypeFields) {
const panelBlockElement = document.createElement('div');
panelBlockElement.className =
'panel-block is-block container--occupancyTypeField';
if (contractTypeId && !expandedOccupancyTypes.has(contractTypeId)) {
'panel-block is-block container--contractTypeField';
if (contractTypeId && !expandedContractTypes.has(contractTypeId)) {
panelBlockElement.classList.add('is-hidden');
}
panelBlockElement.dataset.contractTypeFieldId =
occupancyTypeField.contractTypeFieldId.toString();
contractTypeField.contractTypeFieldId.toString();
// eslint-disable-next-line no-unsanitized/property
panelBlockElement.innerHTML = `<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<a class="has-text-weight-bold button--editOccupancyTypeField" href="#">
${cityssm.escapeHTML(occupancyTypeField.occupancyTypeField ?? '')}
<a class="has-text-weight-bold button--editContractTypeField" href="#">
${cityssm.escapeHTML(contractTypeField.contractTypeField ?? '')}
</a>
</div>
</div>
<div class="level-right">
<div class="level-item">
${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypeFieldUp', 'button--moveOccupancyTypeFieldDown')}
${los.getMoveUpDownButtonFieldHTML('button--moveContractTypeFieldUp', 'button--moveContractTypeFieldDown')}
</div>
</div>
</div>`;
panelBlockElement
.querySelector('.button--editOccupancyTypeField')
?.addEventListener('click', openEditOccupancyTypeFieldByClick);
panelBlockElement.querySelector('.button--moveOccupancyTypeFieldUp').addEventListener('click', moveOccupancyTypeField);
panelBlockElement.querySelector('.button--moveOccupancyTypeFieldDown').addEventListener('click', moveOccupancyTypeField);
.querySelector('.button--editContractTypeField')
?.addEventListener('click', openEditContractTypeFieldByClick);
panelBlockElement.querySelector('.button--moveContractTypeFieldUp').addEventListener('click', moveContractTypeField);
panelBlockElement.querySelector('.button--moveContractTypeFieldDown').addEventListener('click', moveContractTypeField);
panelElement.append(panelBlockElement);
}
}
}
function openAddOccupancyTypePrint(clickEvent) {
const contractTypeId = clickEvent.currentTarget.closest('.container--occupancyTypePrintList').dataset.contractTypeId ?? '';
function openAddContractTypePrint(clickEvent) {
const contractTypeId = clickEvent.currentTarget.closest('.container--contractTypePrintList').dataset.contractTypeId ?? '';
let closeAddModalFunction;
function doAdd(formEvent) {
formEvent.preventDefault();
@ -319,15 +319,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
if (responseJSON.success) {
closeAddModalFunction();
}
occupancyTypeResponseHandler(responseJSON);
contractTypeResponseHandler(responseJSON);
});
}
cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyTypePrint', {
cityssm.openHtmlModal('adminContractTypes-addPrint', {
onshow(modalElement) {
los.populateAliases(modalElement);
modalElement.querySelector('#occupancyTypePrintAdd--contractTypeId').value = contractTypeId;
const printSelectElement = modalElement.querySelector('#occupancyTypePrintAdd--printEJS');
for (const [printEJS, printTitle] of Object.entries(exports.occupancyTypePrintTitles)) {
modalElement.querySelector('#contractTypePrintAdd--contractTypeId').value = contractTypeId;
const printSelectElement = modalElement.querySelector('#contractTypePrintAdd--printEJS');
for (const [printEJS, printTitle] of Object.entries(exports.contractTypePrintTitles)) {
const optionElement = document.createElement('option');
optionElement.value = printEJS;
optionElement.textContent = printTitle;
@ -340,29 +340,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
function moveOccupancyTypePrint(clickEvent) {
function moveContractTypePrint(clickEvent) {
const buttonElement = clickEvent.currentTarget;
const printEJS = buttonElement.closest('.container--occupancyTypePrint').dataset.printEJS;
const contractTypeId = buttonElement.closest('.container--occupancyTypePrintList').dataset.contractTypeId;
const printEJS = buttonElement.closest('.container--contractTypePrint').dataset.printEJS;
const contractTypeId = buttonElement.closest('.container--contractTypePrintList').dataset.contractTypeId;
cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up'
? // eslint-disable-next-line no-secrets/no-secrets
'doMoveContractTypePrintUp'
: // eslint-disable-next-line no-secrets/no-secrets
'doMoveContractTypePrintDown'}`, {
? 'doMoveContractTypePrintUp'
: 'doMoveContractTypePrintDown'}`, {
contractTypeId,
printEJS,
moveToEnd: clickEvent.shiftKey ? '1' : '0'
}, occupancyTypeResponseHandler);
}, contractTypeResponseHandler);
}
function deleteOccupancyTypePrint(clickEvent) {
function deleteContractTypePrint(clickEvent) {
clickEvent.preventDefault();
const printEJS = clickEvent.currentTarget.closest('.container--occupancyTypePrint').dataset.printEJS;
const contractTypeId = clickEvent.currentTarget.closest('.container--occupancyTypePrintList').dataset.contractTypeId;
const printEJS = clickEvent.currentTarget.closest('.container--contractTypePrint').dataset.printEJS;
const contractTypeId = clickEvent.currentTarget.closest('.container--contractTypePrintList').dataset.contractTypeId;
function doDelete() {
cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteContractTypePrint`, {
contractTypeId,
printEJS
}, occupancyTypeResponseHandler);
}, contractTypeResponseHandler);
}
bulmaJS.confirm({
title: 'Delete Print',
@ -374,8 +372,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
}
function renderContractTypePrints(panelElement, contractTypeId, ContractTypePrints) {
if (ContractTypePrints.length === 0) {
function renderContractTypePrints(panelElement, contractTypeId, contractTypePrints) {
if (contractTypePrints.length === 0) {
panelElement.insertAdjacentHTML('beforeend', `<div class="panel-block is-block">
<div class="message is-info">
<p class="message-body">There are no prints associated with this record.</p>
@ -383,14 +381,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
</div>`);
}
else {
for (const printEJS of ContractTypePrints) {
for (const printEJS of contractTypePrints) {
const panelBlockElement = document.createElement('div');
panelBlockElement.className =
'panel-block is-block container--occupancyTypePrint';
'panel-block is-block container--contractTypePrint';
panelBlockElement.dataset.printEJS = printEJS;
const printTitle = printEJS === '*'
? '(All Available Prints)'
: exports.occupancyTypePrintTitles[printEJS];
: exports.contractTypePrintTitles[printEJS];
let printIconClass = 'fa-star';
if (printEJS.startsWith('pdf/')) {
printIconClass = 'fa-file-pdf';
@ -410,37 +408,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
</div>
<div class="level-right">
<div class="level-item">
${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypePrintUp', 'button--moveOccupancyTypePrintDown')}
${los.getMoveUpDownButtonFieldHTML('button--moveContractTypePrintUp', 'button--moveContractTypePrintDown')}
</div>
<div class="level-item">
<button class="button is-small is-danger button--deleteOccupancyTypePrint" data-tooltip="Delete" type="button" aria-label="Delete Print">
<button class="button is-small is-danger button--deleteContractTypePrint" data-tooltip="Delete" type="button" aria-label="Delete Print">
<i class="fas fa-trash" aria-hidden="true"></i>
</button>
</div>
</div>
</div>`;
panelBlockElement.querySelector('.button--moveOccupancyTypePrintUp').addEventListener('click', moveOccupancyTypePrint);
panelBlockElement.querySelector('.button--moveOccupancyTypePrintDown').addEventListener('click', moveOccupancyTypePrint);
panelBlockElement.querySelector('.button--moveContractTypePrintUp').addEventListener('click', moveContractTypePrint);
panelBlockElement.querySelector('.button--moveContractTypePrintDown').addEventListener('click', moveContractTypePrint);
panelBlockElement
.querySelector('.button--deleteOccupancyTypePrint')
?.addEventListener('click', deleteOccupancyTypePrint);
.querySelector('.button--deleteContractTypePrint')
?.addEventListener('click', deleteContractTypePrint);
panelElement.append(panelBlockElement);
}
}
}
function renderOccupancyTypes() {
// eslint-disable-next-line no-unsanitized/property
occupancyTypesContainerElement.innerHTML = `<div class="panel container--occupancyType" id="container--allContractTypeFields" data-occupancy-type-id="">
function renderContractTypes() {
contractTypesContainerElement.innerHTML = `<div class="panel container--contractType" id="container--allContractTypeFields" data-contract-type-id="">
<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4">(All ${los.escapedAliases.Occupancy} Types)</h2>
<h2 class="title is-4">(All Contract Types)</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-success is-small button--addOccupancyTypeField" type="button">
<button class="button is-success is-small button--addContractTypeField" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Field</span>
</button>
@ -449,104 +446,102 @@ Object.defineProperty(exports, "__esModule", { value: true });
</div>
</div>
</div>`;
ContractTypePrintsContainerElement.innerHTML = '';
renderContractTypeFields(occupancyTypesContainerElement.querySelector('#container--allContractTypeFields'), undefined, allContractTypeFields);
occupancyTypesContainerElement
.querySelector('.button--addOccupancyTypeField')
?.addEventListener('click', openAddOccupancyTypeField);
if (occupancyTypes.length === 0) {
// eslint-disable-next-line no-unsanitized/method
occupancyTypesContainerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning>
<p class="message-body">There are no active ${los.escapedAliases.occupancy} types.</p>
contractTypePrintsContainerElement.innerHTML = '';
renderContractTypeFields(contractTypesContainerElement.querySelector('#container--allContractTypeFields'), undefined, allContractTypeFields);
contractTypesContainerElement
.querySelector('.button--addContractTypeField')
?.addEventListener('click', openAddContractTypeField);
if (contractTypes.length === 0) {
contractTypesContainerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning>
<p class="message-body">There are no active contract types.</p>
</div>`);
// eslint-disable-next-line no-unsanitized/method
ContractTypePrintsContainerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning>
<p class="message-body">There are no active ${los.escapedAliases.occupancy} types.</p>
contractTypePrintsContainerElement.insertAdjacentHTML('afterbegin', `<div class="message is-warning>
<p class="message-body">There are no active contract types.</p>
</div>`);
return;
}
for (const occupancyType of occupancyTypes) {
for (const contractType of contractTypes) {
/*
* Types and Fields
*/
const occupancyTypeContainer = document.createElement('div');
occupancyTypeContainer.className = 'panel container--occupancyType';
occupancyTypeContainer.dataset.contractTypeId =
occupancyType.contractTypeId.toString();
const contractTypeContainer = document.createElement('div');
contractTypeContainer.className = 'panel container--contractType';
contractTypeContainer.dataset.contractTypeId =
contractType.contractTypeId.toString();
// eslint-disable-next-line no-unsanitized/property
occupancyTypeContainer.innerHTML = `<div class="panel-heading">
contractTypeContainer.innerHTML = `<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<button class="button is-small button--toggleContractTypeFields" data-tooltip="Toggle Fields" type="button" aria-label="Toggle Fields">
${expandedOccupancyTypes.has(occupancyType.contractTypeId)
${expandedContractTypes.has(contractType.contractTypeId)
? '<i class="fas fa-fw fa-minus" aria-hidden="true"></i>'
: '<i class="fas fa-fw fa-plus" aria-hidden="true"></i>'}
</button>
</div>
<div class="level-item">
<h2 class="title is-4">${cityssm.escapeHTML(occupancyType.occupancyType)}</h2>
<h2 class="title is-4">${cityssm.escapeHTML(contractType.contractType)}</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-danger is-small button--deleteOccupancyType" type="button">
<button class="button is-danger is-small button--deleteContractType" type="button">
<span class="icon is-small"><i class="fas fa-trash" aria-hidden="true"></i></span>
<span>Delete</span>
</button>
</div>
<div class="level-item">
<button class="button is-primary is-small button--editOccupancyType" type="button">
<button class="button is-primary is-small button--editContractType" type="button">
<span class="icon is-small"><i class="fas fa-pencil-alt" aria-hidden="true"></i></span>
<span>Edit ${los.escapedAliases.Occupancy} Type</span>
<span>Edit Contract Type</span>
</button>
</div>
<div class="level-item">
<button class="button is-success is-small button--addOccupancyTypeField" type="button">
<button class="button is-success is-small button--addContractTypeField" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Field</span>
</button>
</div>
<div class="level-item">
${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypeUp', 'button--moveOccupancyTypeDown')}
${los.getMoveUpDownButtonFieldHTML('button--moveContractTypeUp', 'button--moveContractTypeDown')}
</div>
</div>
</div>
</div>`;
renderContractTypeFields(occupancyTypeContainer, occupancyType.contractTypeId, occupancyType.ContractTypeFields ?? []);
occupancyTypeContainer
renderContractTypeFields(contractTypeContainer, contractType.contractTypeId, contractType.contractTypeFields ?? []);
contractTypeContainer
.querySelector('.button--toggleContractTypeFields')
?.addEventListener('click', toggleContractTypeFields);
occupancyTypeContainer
.querySelector('.button--deleteOccupancyType')
?.addEventListener('click', deleteOccupancyType);
occupancyTypeContainer
.querySelector('.button--editOccupancyType')
?.addEventListener('click', openEditOccupancyType);
occupancyTypeContainer
.querySelector('.button--addOccupancyTypeField')
?.addEventListener('click', openAddOccupancyTypeField);
occupancyTypeContainer.querySelector('.button--moveOccupancyTypeUp').addEventListener('click', moveOccupancyType);
occupancyTypeContainer.querySelector('.button--moveOccupancyTypeDown').addEventListener('click', moveOccupancyType);
occupancyTypesContainerElement.append(occupancyTypeContainer);
contractTypeContainer
.querySelector('.button--deleteContractType')
?.addEventListener('click', deleteContractType);
contractTypeContainer
.querySelector('.button--editContractType')
?.addEventListener('click', openEditContractType);
contractTypeContainer
.querySelector('.button--addContractTypeField')
?.addEventListener('click', openAddContractTypeField);
contractTypeContainer.querySelector('.button--moveContractTypeUp').addEventListener('click', moveContractType);
contractTypeContainer.querySelector('.button--moveContractTypeDown').addEventListener('click', moveContractType);
contractTypesContainerElement.append(contractTypeContainer);
/*
* Prints
*/
const occupancyTypePrintContainer = document.createElement('div');
occupancyTypePrintContainer.className =
'panel container--occupancyTypePrintList';
occupancyTypePrintContainer.dataset.contractTypeId =
occupancyType.contractTypeId.toString();
occupancyTypePrintContainer.innerHTML = `<div class="panel-heading">
const contractTypePrintContainer = document.createElement('div');
contractTypePrintContainer.className =
'panel container--contractTypePrintList';
contractTypePrintContainer.dataset.contractTypeId =
contractType.contractTypeId.toString();
contractTypePrintContainer.innerHTML = `<div class="panel-heading">
<div class="level is-mobile">
<div class="level-left">
<div class="level-item">
<h2 class="title is-4">${cityssm.escapeHTML(occupancyType.occupancyType)}</h2>
<h2 class="title is-4">${cityssm.escapeHTML(contractType.contractType)}</h2>
</div>
</div>
<div class="level-right">
<div class="level-item">
<button class="button is-success is-small button--addOccupancyTypePrint" type="button">
<button class="button is-success is-small button--addContractTypePrint" type="button">
<span class="icon is-small"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Print</span>
</button>
@ -554,15 +549,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
</div>
</div>
</div>`;
renderContractTypePrints(occupancyTypePrintContainer, occupancyType.contractTypeId, occupancyType.ContractTypePrints ?? []);
occupancyTypePrintContainer
.querySelector('.button--addOccupancyTypePrint')
?.addEventListener('click', openAddOccupancyTypePrint);
ContractTypePrintsContainerElement.append(occupancyTypePrintContainer);
renderContractTypePrints(contractTypePrintContainer, contractType.contractTypeId, contractType.contractTypePrints ?? []);
contractTypePrintContainer
.querySelector('.button--addContractTypePrint')
?.addEventListener('click', openAddContractTypePrint);
contractTypePrintsContainerElement.append(contractTypePrintContainer);
}
}
document
.querySelector('#button--addOccupancyType')
.querySelector('#button--addContractType')
?.addEventListener('click', () => {
let addCloseModalFunction;
function doAdd(submitEvent) {
@ -571,25 +566,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
const responseJSON = rawResponseJSON;
if (responseJSON.success) {
addCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
contractTypes = responseJSON.contractTypes;
renderContractTypes();
}
else {
bulmaJS.alert({
title: `Error Adding ${los.escapedAliases.Occupancy} Type`,
title: `Error Adding Contract Type`,
message: responseJSON.errorMessage ?? '',
contextualColorName: 'danger'
});
}
});
}
cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyType', {
cityssm.openHtmlModal('adminContractTypes-add', {
onshow(modalElement) {
los.populateAliases(modalElement);
},
onshown(modalElement, closeModalFunction) {
addCloseModalFunction = closeModalFunction;
modalElement.querySelector('#occupancyTypeAdd--occupancyType').focus();
modalElement.querySelector('#contractTypeAdd--contractType').focus();
modalElement.querySelector('form')?.addEventListener('submit', doAdd);
bulmaJS.toggleHtmlClipped();
},
@ -598,5 +593,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
});
renderOccupancyTypes();
renderContractTypes();
})();

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const workOrderNumberCircleElements = document.querySelectorAll('.fa-circle[data-work-order-number]');
for (const workOrderNumberCircleElement of workOrderNumberCircleElements) {
workOrderNumberCircleElement.style.color = los.getRandomColor(workOrderNumberCircleElement.dataset.workOrderNumber ?? '');

View File

@ -2,7 +2,7 @@ import type { LOS } from '../../types/globalTypes.js'
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as LOS
const workOrderNumberCircleElements: NodeListOf<HTMLElement> =
document.querySelectorAll('.fa-circle[data-work-order-number]')

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
function doBackup() {
cityssm.postJSON(`${los.urlPrefix}/admin/doBackupDatabase`, {}, (rawResponseJSON) => {
const responseJSON = rawResponseJSON;

View File

@ -8,7 +8,7 @@ declare const bulmaJS: BulmaJS
declare const exports: Record<string, unknown>
;(() => {
const los = exports.los as LOS
const los = exports.sunrise as LOS
function doBackup(): void {
cityssm.postJSON(

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
(() => {
const los = exports.los;
const los = exports.sunrise;
const feeCategoriesContainerElement = document.querySelector('#container--feeCategories');
let feeCategories = exports.feeCategories;
delete exports.feeCategories;
@ -108,7 +108,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
? ''
: ` <span class="tag has-tooltip-bottom" data-tooltip="${los.escapedAliases.Occupancy} Type Filter">
<span class="icon is-small"><i class="fas fa-filter" aria-hidden="true"></i></span>
<span>${cityssm.escapeHTML(fee.occupancyType ?? '')}</span>
<span>${cityssm.escapeHTML(fee.contractType ?? '')}</span>
</span>`}
${(fee.burialSiteTypeId ?? -1) === -1
? ''
@ -344,12 +344,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
feeCategoryElement.append(optionElement);
}
const occupancyTypeElement = modalElement.querySelector('#feeAdd--contractTypeId');
for (const occupancyType of exports.occupancyTypes) {
const contractTypeElement = modalElement.querySelector('#feeAdd--contractTypeId');
for (const contractType of exports.contractTypes) {
const optionElement = document.createElement('option');
optionElement.value = occupancyType.contractTypeId.toString();
optionElement.textContent = occupancyType.occupancyType;
occupancyTypeElement.append(optionElement);
optionElement.value = contractType.contractTypeId.toString();
optionElement.textContent = contractType.contractType;
contractTypeElement.append(optionElement);
}
const lotTypeElement = modalElement.querySelector('#feeAdd--burialSiteTypeId');
for (const lotType of exports.lotTypes) {
@ -566,15 +566,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
modalElement.querySelector('#feeEdit--feeName').value = fee.feeName ?? '';
modalElement.querySelector('#feeEdit--feeAccount').value = fee.feeAccount ?? '';
modalElement.querySelector('#feeEdit--feeDescription').value = fee.feeDescription ?? '';
const occupancyTypeElement = modalElement.querySelector('#feeEdit--contractTypeId');
for (const occupancyType of exports.occupancyTypes) {
const contractTypeElement = modalElement.querySelector('#feeEdit--contractTypeId');
for (const contractType of exports.contractTypes) {
const optionElement = document.createElement('option');
optionElement.value = occupancyType.contractTypeId.toString();
optionElement.textContent = occupancyType.occupancyType;
if (occupancyType.contractTypeId === fee.contractTypeId) {
optionElement.value = contractType.contractTypeId.toString();
optionElement.textContent = contractType.contractType;
if (contractType.contractTypeId === fee.contractTypeId) {
optionElement.selected = true;
}
occupancyTypeElement.append(optionElement);
contractTypeElement.append(optionElement);
}
const lotTypeElement = modalElement.querySelector('#feeEdit--burialSiteTypeId');
for (const lotType of exports.lotTypes) {

Some files were not shown because too many files have changed in this diff Show More