From 012362c07b96c88d7353f800cb64fb8126129b83 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Wed, 20 Jul 2022 16:22:08 -0400 Subject: [PATCH] development Highlights - application map create and update - map file renaming, again - more importing --- handlers/lots-get/search.js | 9 +- handlers/lots-get/search.ts | 11 +- handlers/lots-post/doSearchLots.d.ts | 3 + handlers/lots-post/doSearchLots.js | 11 ++ handlers/lots-post/doSearchLots.ts | 19 +++ handlers/maps-get/edit.d.ts | 3 + handlers/maps-get/edit.js | 17 +++ handlers/maps-get/edit.ts | 29 +++++ handlers/maps-get/new.js | 7 +- handlers/maps-get/new.ts | 8 +- handlers/maps-post/doCreateMap.d.ts | 3 + handlers/maps-post/doCreateMap.js | 9 ++ handlers/maps-post/doCreateMap.ts | 17 +++ handlers/maps-post/doUpdateMap.d.ts | 3 + handlers/maps-post/doUpdateMap.js | 9 ++ handlers/maps-post/doUpdateMap.ts | 17 +++ helpers/functions.map.d.ts | 1 + helpers/functions.map.js | 15 +++ helpers/functions.map.ts | 23 ++++ helpers/lotOccupancyDB/addLotOccupancy.js | 6 +- helpers/lotOccupancyDB/addLotOccupancy.ts | 8 +- helpers/lotOccupancyDB/getLots.d.ts | 2 + helpers/lotOccupancyDB/getLots.js | 8 ++ helpers/lotOccupancyDB/getLots.ts | 12 ++ helpers/lotOccupancyDB/getMaps.js | 2 +- helpers/lotOccupancyDB/getMaps.ts | 2 +- helpers/lotOccupancyDB/updateLot.d.ts | 14 +++ helpers/lotOccupancyDB/updateLot.js | 37 ++++++ helpers/lotOccupancyDB/updateLot.ts | 80 ++++++++++++ helpers/lotOccupancyDB/updateMap.d.ts | 17 +++ helpers/lotOccupancyDB/updateMap.js | 27 ++++ helpers/lotOccupancyDB/updateMap.ts | 68 +++++++++++ public-typescript/lotSearch.d.ts | 1 + public-typescript/lotSearch.js | 51 ++++++++ public-typescript/lotSearch.ts | 78 ++++++++++++ public-typescript/mapEdit.d.ts | 1 + public-typescript/mapEdit.js | 32 +++++ public-typescript/mapEdit.ts | 45 +++++++ public-typescript/mapSearch.js | 29 +++-- public-typescript/mapSearch.ts | 36 +++--- ...etery.holySepulchre-block-A-rows-1-52.svg} | 0 ...tery.holySepulchre-block-A-rows-53-97.svg} | 0 ...metery.holySepulchre-block-A-rows-B-T.svg} | 0 ...lySepulchre-block-A-urnRanges-52A-53A.svg} | 0 ...lySepulchre-block-A-urnRanges-72A-73A.svg} | 0 ...lySepulchre-block-A-urnRanges-97A-97B.svg} | 0 ...etery.holySepulchre-block-B-rows-1-52.svg} | 0 ...tery.holySepulchre-block-B-rows-53-97.svg} | 0 ...metery.holySepulchre-block-B-rows-B-T.svg} | 0 ...etery.holySepulchre-block-C-rows-1-36.svg} | 0 ...metery.holySepulchre-block-C-rows-B-U.svg} | 0 ...tery.holySepulchre-block-D-babyShrine.svg} | 0 ...metery.holySepulchre-block-D-rows-A-L.svg} | 0 ...metery.holySepulchre-block-D-rows-M-V.svg} | 0 ...y.holySepulchre-block-E-sectionCenter.svg} | 0 ...ery.holySepulchre-block-E-sectionEast.svg} | 0 ...ery.holySepulchre-block-E-sectionWest.svg} | 0 ...etery.holySepulchre-block-F-rows-1-22.svg} | 0 ...etery.holySepulchre-block-G-rows-1-32.svg} | 0 ...etery.holySepulchre-block-H-rows-1-16.svg} | 0 ...etery.holySepulchre-block-J-rows-1-18.svg} | 0 ...etery.holySepulchre-block-K-rows-1-19.svg} | 0 ...emetery.holySepulchre-columbarium-O-P.svg} | 0 ....cemetery.holySepulchre-columbarium-S.svg} | 0 ....cemetery.holySepulchre-columbarium-T.svg} | 0 ....cemetery.holySepulchre-columbarium-U.svg} | 0 ....cemetery.holySepulchre-columbarium-V.svg} | 0 ....cemetery.holySepulchre-columbarium-W.svg} | 0 ...cemetery.holySepulchre-mausoleum-east.svg} | 0 ...ery.holySepulchre-mausoleum-niche-J-E.svg} | 0 ...ery.holySepulchre-mausoleum-niche-J-W.svg} | 0 ...ery.holySepulchre-mausoleum-niche-L-E.svg} | 0 ...ery.holySepulchre-mausoleum-niche-L-W.svg} | 0 ...etery.holySepulchre-mausoleum-niche-L.svg} | 0 ...ery.holySepulchre-mausoleum-niche-M-E.svg} | 0 ...ery.holySepulchre-mausoleum-niche-M-W.svg} | 0 ...etery.holySepulchre-mausoleum-niche-M.svg} | 0 ...ery.holySepulchre-mausoleum-section-T.svg} | 0 ...ery.holySepulchre-mausoleum-section-U.svg} | 0 ...cemetery.holySepulchre-mausoleum-west.svg} | 0 ...> ssm.cemetery.holySepulchre-overview.svg} | 0 ...m.cemetery.newGreenwood-columbarium-A.svg} | 0 ...m.cemetery.newGreenwood-columbarium-B.svg} | 0 ...m.cemetery.newGreenwood-columbarium-C.svg} | 0 ...m.cemetery.newGreenwood-columbarium-D.svg} | 0 ...m.cemetery.newGreenwood-columbarium-E.svg} | 0 ...m.cemetery.newGreenwood-columbarium-F.svg} | 0 ...m.cemetery.newGreenwood-columbarium-G.svg} | 0 ...m.cemetery.newGreenwood-columbarium-H.svg} | 0 ...m.cemetery.newGreenwood-columbarium-I.svg} | 0 ...m.cemetery.newGreenwood-columbarium-J.svg} | 0 ...m.cemetery.newGreenwood-columbarium-K.svg} | 0 ...m.cemetery.newGreenwood-columbarium-L.svg} | 0 ...m.cemetery.newGreenwood-columbarium-M.svg} | 0 ...m.cemetery.newGreenwood-columbarium-N.svg} | 0 ....cemetery.newGreenwood-infantsSection.svg} | 0 ....cemetery.newGreenwood-nicheWall-1-40.svg} | 0 ...cemetery.newGreenwood-nicheWall-41-80.svg} | 0 ...emetery.newGreenwood-nicheWall-81-106.svg} | 0 ...=> ssm.cemetery.newGreenwood-overview.svg} | 0 ...tery.newGreenwood-rows-1-31-lots 3-21.svg} | 0 ...ery.newGreenwood-rows-1-31-lots-22-46.svg} | 0 ...ry.newGreenwood-rows-25-61-lots-47-59.svg} | 0 ...ry.newGreenwood-rows-33-60-lots-4-21A.svg} | 0 ...ry.newGreenwood-rows-33-61-lots-22-46.svg} | 0 ...ry.newGreenwood-rows-63-94-lots-24-40.svg} | 0 ...ry.newGreenwood-rows-63-94-lots-47-59.svg} | 0 ...ry.newGreenwood-rows-66-95-lots-12-24.svg} | 0 ...> ssm.cemetery.newGreenwood-urnGarden.svg} | 0 ...cemetery.newGreenwood-veteransSection.svg} | 0 ...ssm.cemetery.oldGreenwood-babySection.svg} | 0 ...eenwood-eastNorth-rows-1-18-lots-1-11.svg} | 0 ...enwood-eastNorth-rows-1-18-lots-12-17.svg} | 0 ...enwood-eastNorth-rows-19-38-lots-1-11.svg} | 0 ...nwood-eastNorth-rows-19-38-lots-12-17.svg} | 0 ...nwood-eastSouthA-rows-1-18-lots 23-31.svg} | 0 ...enwood-eastSouthA-rows-1-18-lots-1-22.svg} | 0 ...nwood-eastSouthA-rows-19-32-lots-1-22.svg} | 0 ...wood-eastSouthA-rows-19-32-lots-23-31.svg} | 0 ...nwood-eastSouthB-lots-33-45-rows-1-22.svg} | 0 ...wood-eastSouthB-rows-33-57-lots 23-31.svg} | 0 ...wood-eastSouthB-rows-46-57-lots-11-24.svg} | 0 ...=> ssm.cemetery.oldGreenwood-overview.svg} | 0 ...ssm.cemetery.oldGreenwood-westSection.svg} | 0 ...vg => ssm.cemetery.pineGrove-overview.svg} | 0 ...=> ssm.cemetery.westKorah-eastSection.svg} | 0 ...> ssm.cemetery.westKorah-northSection.svg} | 0 ...vg => ssm.cemetery.westKorah-overview.svg} | 0 ...=> ssm.cemetery.westKorah-westSection.svg} | 0 public/javascripts/lotSearch.min.js | 1 + public/javascripts/mapEdit.min.js | 1 + public/javascripts/mapSearch.min.js | 2 +- routes/lots.js | 2 + routes/lots.ts | 4 + routes/maps.js | 6 + routes/maps.ts | 28 ++++- temp/legacy.importFromCSV.js | 60 +++++++-- temp/legacy.importFromCSV.ts | 91 +++++++++++--- types/recordTypes.js | 3 +- views/_header.ejs | 6 + views/lot-search.ejs | 29 ++++- views/map-edit.ejs | 115 ++++++++++++++++-- views/map-search.ejs | 2 + 143 files changed, 1030 insertions(+), 90 deletions(-) create mode 100644 handlers/lots-post/doSearchLots.d.ts create mode 100644 handlers/lots-post/doSearchLots.js create mode 100644 handlers/lots-post/doSearchLots.ts create mode 100644 handlers/maps-get/edit.d.ts create mode 100644 handlers/maps-get/edit.js create mode 100644 handlers/maps-get/edit.ts create mode 100644 handlers/maps-post/doCreateMap.d.ts create mode 100644 handlers/maps-post/doCreateMap.js create mode 100644 handlers/maps-post/doCreateMap.ts create mode 100644 handlers/maps-post/doUpdateMap.d.ts create mode 100644 handlers/maps-post/doUpdateMap.js create mode 100644 handlers/maps-post/doUpdateMap.ts create mode 100644 helpers/functions.map.d.ts create mode 100644 helpers/functions.map.js create mode 100644 helpers/functions.map.ts create mode 100644 helpers/lotOccupancyDB/updateLot.d.ts create mode 100644 helpers/lotOccupancyDB/updateLot.js create mode 100644 helpers/lotOccupancyDB/updateLot.ts create mode 100644 helpers/lotOccupancyDB/updateMap.d.ts create mode 100644 helpers/lotOccupancyDB/updateMap.js create mode 100644 helpers/lotOccupancyDB/updateMap.ts create mode 100644 public-typescript/lotSearch.d.ts create mode 100644 public-typescript/lotSearch.js create mode 100644 public-typescript/lotSearch.ts create mode 100644 public-typescript/mapEdit.d.ts create mode 100644 public-typescript/mapEdit.js create mode 100644 public-typescript/mapEdit.ts rename public/images/maps/{holySepulchre-block-A-rows-1-52 (79ddc302-6e77-47cd-a108-681a76d91c19, ad84d98e-1a4b-45a0-8abf-7386b16da322).svg => ssm.cemetery.holySepulchre-block-A-rows-1-52.svg} (100%) rename public/images/maps/{holySepulchre-block-A-rows-53-97 (87fa11c9-8f12-4154-88eb-a5992b702ca0, 428b0587-d662-4764-9bfd-92c775f1135f).svg => ssm.cemetery.holySepulchre-block-A-rows-53-97.svg} (100%) rename public/images/maps/{holySepulchre-block-A-rows-B-T (c1602e8b-983f-4d38-9508-cac02a245468, 87f66f73-da7d-4cd5-a126-34a86af80c52).svg => ssm.cemetery.holySepulchre-block-A-rows-B-T.svg} (100%) rename public/images/maps/{holySepulchre-block-A-urnRanges-52A-53A (b7d3ab77-6a63-4aaf-8e86-1056d1aebfc9, bf11a70e-193c-47ca-9bdb-e07a2f1c5bb3).svg => ssm.cemetery.holySepulchre-block-A-urnRanges-52A-53A.svg} (100%) rename public/images/maps/{holySepulchre-block-A-urnRanges-72A-73A (29590769-cfc5-455e-8893-35d6839b4b7c, 2361fec7-93e6-413b-93ae-4e9ce7474df4).svg => ssm.cemetery.holySepulchre-block-A-urnRanges-72A-73A.svg} (100%) rename public/images/maps/{holySepulchre-block-A-urnRanges-97A-97B (479eb600-ed96-40d6-a842-26a0b3056c9f, 367f0188-c246-434b-b93a-ce4ffadba5fe).svg => ssm.cemetery.holySepulchre-block-A-urnRanges-97A-97B.svg} (100%) rename public/images/maps/{holySepulchre-block-B-rows-1-52 (d2e00207-a44a-4be4-b2cd-7a3441f05f66, d4aa206a-8642-477d-b3c8-a451c82e863a).svg => ssm.cemetery.holySepulchre-block-B-rows-1-52.svg} (100%) rename public/images/maps/{holySepulchre-block-B-rows-53-97 (737723fa-a595-44ef-a5c8-648e2984824c, dea8722a-9317-4a9d-b67d-1d404a3af085).svg => ssm.cemetery.holySepulchre-block-B-rows-53-97.svg} (100%) rename public/images/maps/{holySepulchre-block-B-rows-B-T (e8727845-47ea-4e93-8fab-3226f776b35d, b70d6495-1dbc-4d9a-8cfc-69f9b1b15418).svg => ssm.cemetery.holySepulchre-block-B-rows-B-T.svg} (100%) rename public/images/maps/{holySepulchre-block-C-rows-1-36 (de24779a-edc6-4623-bf32-31625e7eeae9, 96e0da65-b04c-41c3-b534-256068440a78).svg => ssm.cemetery.holySepulchre-block-C-rows-1-36.svg} (100%) rename public/images/maps/{holySepulchre-block-C-rows-B-U (f1c463b9-f542-4c94-bb1d-682c93a6bff2, e3007ea8-721c-414c-b1cd-f5f3ad29a5ea).svg => ssm.cemetery.holySepulchre-block-C-rows-B-U.svg} (100%) rename public/images/maps/{holySepulchre-block-D-babyShrine (49be9136-7f17-4c8f-95df-f03446c46a7b, 24128a8b-bf58-4eed-b160-7533f3f2195f).svg => ssm.cemetery.holySepulchre-block-D-babyShrine.svg} (100%) rename public/images/maps/{holySepulchre-block-D-rows-A-L (be29f5d8-b724-4663-885a-3dd5cfc15928, 26b795dc-c542-4d7b-9d83-7108b01472e4).svg => ssm.cemetery.holySepulchre-block-D-rows-A-L.svg} (100%) rename public/images/maps/{holySepulchre-block-D-rows-M-V (631c9e8f-0aaa-4109-85e5-8207f78600f3, d1390b43-2f7b-48d7-bd6e-a7cb28b2f7e2).svg => ssm.cemetery.holySepulchre-block-D-rows-M-V.svg} (100%) rename public/images/maps/{holySepulchre-block-E-sectionCenter (def8122b-dc2a-4fff-a258-cbd0d31df80f, 13846d63-37f0-47a7-8725-cd3032f8f150).svg => ssm.cemetery.holySepulchre-block-E-sectionCenter.svg} (100%) rename public/images/maps/{holySepulchre-block-E-sectionEast (3f307004-d609-435a-a253-7ee50f3dd544, 270ae920-4fb2-4510-a136-92b7381b78f5).svg => ssm.cemetery.holySepulchre-block-E-sectionEast.svg} (100%) rename public/images/maps/{holySepulchre-block-E-sectionWest (fbcfd412-992e-440c-97d7-a0bd685a8105, 6388bc74-af34-4cad-90b8-3e1836d5d443).svg => ssm.cemetery.holySepulchre-block-E-sectionWest.svg} (100%) rename public/images/maps/{holySepulchre-block-F-rows-1-22 (f7b9867e-7800-4f5b-891c-be8769504300, 42fe726e-7ac9-4d77-b088-694b4cd41c43).svg => ssm.cemetery.holySepulchre-block-F-rows-1-22.svg} (100%) rename public/images/maps/{holySepulchre-block-G-rows-1-32 (55916a1b-d520-456c-9d0a-4e29f1bc833e, a100603f-ca65-429b-b96b-9da820b97ca5).svg => ssm.cemetery.holySepulchre-block-G-rows-1-32.svg} (100%) rename public/images/maps/{holySepulchre-block-H-rows-1-16 (6f0741ef-0f33-41eb-a614-243ee496e611, 98fd283b-d429-406c-a474-97af36626a0a).svg => ssm.cemetery.holySepulchre-block-H-rows-1-16.svg} (100%) rename public/images/maps/{holySepulchre-block-J-rows-1-18 (9b77b6fb-097e-4793-9bb0-5f873ff8402c, b5345ea4-f092-4985-8829-b8877f1322bc).svg => ssm.cemetery.holySepulchre-block-J-rows-1-18.svg} (100%) rename public/images/maps/{holySepulchre-block-K-rows-1-19 (17aeb1c1-5da8-4ed1-b079-85578df1f1a5, f75f8788-9409-41d2-beec-4bd6059656f8).svg => ssm.cemetery.holySepulchre-block-K-rows-1-19.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-O-P (ccf0e42c-36e2-4313-a6b2-399c82878dcc, 5c506eff-e84d-4a49-ad5c-b0f7678ba520).svg => ssm.cemetery.holySepulchre-columbarium-O-P.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-S (d11ffca7-cdbb-4e0a-beef-fe0fe1dfb409, 893af7dd-8004-481c-b891-886b294425e0).svg => ssm.cemetery.holySepulchre-columbarium-S.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-T (363ceb66-0273-4e00-9c80-9b7496a269c2, 51c4fd29-dbc2-40e1-b24f-2cef72f8a06f).svg => ssm.cemetery.holySepulchre-columbarium-T.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-U (7dead22a-40ff-4e49-befc-c0a396250b0e, e6883102-b4fd-4638-bc7a-555d16d663d1).svg => ssm.cemetery.holySepulchre-columbarium-U.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-V (4adc587d-e480-4332-9db0-7aa77010f802, 478e1bce-1a7a-4ad3-97d8-61daa71609d9).svg => ssm.cemetery.holySepulchre-columbarium-V.svg} (100%) rename public/images/maps/{holySepulchre-columbarium-W (2b87dd96-dc65-4972-9c47-af3e479507e1, 59d32426-d93a-4201-b976-d523e2d01ce8).svg => ssm.cemetery.holySepulchre-columbarium-W.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-east (fc9a4bcc-a762-493f-a78d-d6115f01d236, e70375d9-7314-4dde-ba43-8cd4508fa1b2).svg => ssm.cemetery.holySepulchre-mausoleum-east.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-J-E (2d378027-a930-4285-b8ba-9fa507599a0e, 78751aaf-4592-469d-9a7a-0ae8daacedab).svg => ssm.cemetery.holySepulchre-mausoleum-niche-J-E.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-J-W (f5afcccf-8328-4031-933e-804023fe9a7f, f14e21fb-dcc6-4fe0-8703-c77f599321f7).svg => ssm.cemetery.holySepulchre-mausoleum-niche-J-W.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-L-E (3f285df1-721a-423f-a2ff-d440c933a6c3, 5dcb31b8-dcf8-4a6f-9b8c-7b0e4bb2b4bf).svg => ssm.cemetery.holySepulchre-mausoleum-niche-L-E.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-L-W (12d943ad-3e7c-43f4-ac85-0938e6fc919d, 9c4edf97-b139-4dba-80e1-246cf0a5f73a).svg => ssm.cemetery.holySepulchre-mausoleum-niche-L-W.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-L (8b60a236-4a19-4a28-874a-6492873236cc, b711cd8b-6adf-4e74-9a93-9c472c806f5a).svg => ssm.cemetery.holySepulchre-mausoleum-niche-L.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-M-E (c3a1dc37-833e-4499-92eb-9585ab30da84, 4551f949-162e-4285-9160-0cca1eeeb9c4).svg => ssm.cemetery.holySepulchre-mausoleum-niche-M-E.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-M-W (657d144e-4632-418a-b72c-0b6eb517101c, 111ae74e-f104-4778-9347-023d1e7736f4).svg => ssm.cemetery.holySepulchre-mausoleum-niche-M-W.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-niche-M (6016d5cd-819a-44fc-b1f1-1aefbde6a360, dae1a3fb-d58e-43f2-a8c4-8cafbf412d2c).svg => ssm.cemetery.holySepulchre-mausoleum-niche-M.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-section-T (30692472-f7dd-41cc-bbca-12e94680e83f, 2c15bd67-de67-4474-9106-ad1c67eb8650).svg => ssm.cemetery.holySepulchre-mausoleum-section-T.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-section-U (8cd267db-1d30-454c-b3a2-7f21f9c0ba18, 094f14cb-7b5f-4488-aa96-7f80bd8aa3fd).svg => ssm.cemetery.holySepulchre-mausoleum-section-U.svg} (100%) rename public/images/maps/{holySepulchre-mausoleum-west (0b7cc779-d151-4732-bd9f-55f27ba13ffb, 9f055a1f-86ae-4fe0-945e-0a9e83fdf263).svg => ssm.cemetery.holySepulchre-mausoleum-west.svg} (100%) rename public/images/maps/{holySepulchre-overview.svg => ssm.cemetery.holySepulchre-overview.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-A (f73f9667-d215-4a62-bb7c-5ad95e1352db, 67c0ecba-141e-4fb5-9c06-8363904063c0).svg => ssm.cemetery.newGreenwood-columbarium-A.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-B (16be946c-ae5a-4ee0-90db-c6721f490a2c, 1481cf4b-cd08-4bfc-ad94-806fcf2bef33).svg => ssm.cemetery.newGreenwood-columbarium-B.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-C (e83f5e2b-4580-40be-9657-ac13a310c77f, 6c713d9d-5493-47a1-a390-8497a35dd5c7).svg => ssm.cemetery.newGreenwood-columbarium-C.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-D (ad9ebc87-dfe5-417f-8294-54ee73dd47f4, 3194e7fa-7267-459a-b13c-b9a6c14deed1).svg => ssm.cemetery.newGreenwood-columbarium-D.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-E (57e2fc58-0ae2-45cb-9021-6437bb530202, 4cbd9e7d-8b17-4eba-91d8-7f99976df376).svg => ssm.cemetery.newGreenwood-columbarium-E.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-F (eacfeb63-7d75-454c-b891-2eaf69a4cf3e, 814234ea-5870-4428-92b9-edf03a89995a).svg => ssm.cemetery.newGreenwood-columbarium-F.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-G (0c1a6bb9-ae10-4e77-99ef-0de506c0cd42, 564d3437-abfd-410a-94b1-6d4b0bc1275a).svg => ssm.cemetery.newGreenwood-columbarium-G.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-H (5fec6c60-45fd-46b0-90b3-7cdf88ddb905, 865aae59-2535-4690-a03d-cdd08bcbe12c).svg => ssm.cemetery.newGreenwood-columbarium-H.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-I (bd647893-d7b0-4017-9c4c-2ca46e5cfd9a, c496a6a6-1f52-4539-9c4a-fcc03e3b573a).svg => ssm.cemetery.newGreenwood-columbarium-I.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-J (b21345a5-65d5-4a2e-b0ee-b946c9408d8a, 9121ae96-f3d6-4016-b7ff-8423f4d94d76).svg => ssm.cemetery.newGreenwood-columbarium-J.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-K (de3985aa-51cf-4247-8101-22046117e618, 89b5120d-e644-46a1-bb6c-198de36c5b24).svg => ssm.cemetery.newGreenwood-columbarium-K.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-L (14cfb32d-4eb0-4c74-a788-2a6454ccaf4a, 4a122656-89eb-43eb-ada0-ceb2b9342c81).svg => ssm.cemetery.newGreenwood-columbarium-L.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-M (b7c858a3-0326-4ee6-83e7-9b0cf8a3fb53, 315c09b4-e465-418f-82d0-c3580b83913d).svg => ssm.cemetery.newGreenwood-columbarium-M.svg} (100%) rename public/images/maps/{newGreenwood-columbarium-N (5b265feb-9a0f-4ee1-af11-930feb6583b1, 0839376b-0e3f-4e90-b78c-8740ba44e14c).svg => ssm.cemetery.newGreenwood-columbarium-N.svg} (100%) rename public/images/maps/{newGreenwood-infantsSection (e9e319bd-2c5b-415f-a013-d3ba86c15083, ba4aa864-ab4a-4bf8-8b51-a47dddcafe59).svg => ssm.cemetery.newGreenwood-infantsSection.svg} (100%) rename public/images/maps/{newGreenwood-nicheWall-1-40 (5b70b2b7-0db7-4035-9954-bf96f608c902, 947b8dd6-5daa-46ad-9f96-90f270d8ab3d).svg => ssm.cemetery.newGreenwood-nicheWall-1-40.svg} (100%) rename public/images/maps/{newGreenwood-nicheWall-41-80 (5739ffcc-9618-4170-b004-7459a948a008, 5fd580c8-0831-4a5d-8a61-609d5b4b1269).svg => ssm.cemetery.newGreenwood-nicheWall-41-80.svg} (100%) rename public/images/maps/{newGreenwood-nicheWall-81-106 (5f565cde-1049-4b8c-8119-7e1002ecab9d, 718faff5-191d-4cb0-a6c4-fc100dcb8d12).svg => ssm.cemetery.newGreenwood-nicheWall-81-106.svg} (100%) rename public/images/maps/{newGreenwood-overview.svg => ssm.cemetery.newGreenwood-overview.svg} (100%) rename public/images/maps/{newGreenwood-rows-1-31-lots 3-21 (88754d9d-9895-4de4-a977-b9a2e8069c88, ad19b731-c37d-43b7-a89e-5caaf1daff59).svg => ssm.cemetery.newGreenwood-rows-1-31-lots 3-21.svg} (100%) rename public/images/maps/{newGreenwood-rows-1-31-lots-22-46 (d8c5f1ee-0bbc-4796-99fb-7886c2f24a37, 57cbdb69-24d9-4fa4-ac1b-27d73a7cbdb3).svg => ssm.cemetery.newGreenwood-rows-1-31-lots-22-46.svg} (100%) rename public/images/maps/{newGreenwood-rows-25-61-lots-47-59 (17cde84a-d718-4f8c-b390-a5b1be7790f9, cbde6623-43ae-4e85-a519-a0b12cd82569).svg => ssm.cemetery.newGreenwood-rows-25-61-lots-47-59.svg} (100%) rename public/images/maps/{newGreenwood-rows-33-60-lots-4-21A (2d82ebf0-ca52-44cb-adbe-7ac9805261ed, 17d566ca-1689-49cd-9295-d6e6e9ad4e10).svg => ssm.cemetery.newGreenwood-rows-33-60-lots-4-21A.svg} (100%) rename public/images/maps/{newGreenwood-rows-33-61-lots-22-46 (f13bf83f-1d75-43e1-a20c-0baf439e645e, 9cd6fd8c-63e4-47ce-964b-83a959ba8a6e).svg => ssm.cemetery.newGreenwood-rows-33-61-lots-22-46.svg} (100%) rename public/images/maps/{newGreenwood-rows-63-94-lots-24-40 (09dfd9ab-3470-495c-8fc2-bf79aa2149e8, 71ab5496-f1bf-4152-8c40-16e5dad875c9).svg => ssm.cemetery.newGreenwood-rows-63-94-lots-24-40.svg} (100%) rename public/images/maps/{newGreenwood-rows-63-94-lots-47-59 (03a3a261-6bb9-402f-b884-095e74162e2b, 14738395-5610-4e97-855b-43c66ff6eb03).svg => ssm.cemetery.newGreenwood-rows-63-94-lots-47-59.svg} (100%) rename public/images/maps/{newGreenwood-rows-66-95-lots-12-24 (67484236-41db-4cc4-a9f7-4539c472bce7, ebd4968b-04ec-4288-9810-10e2ed43ed0b).svg => ssm.cemetery.newGreenwood-rows-66-95-lots-12-24.svg} (100%) rename public/images/maps/{newGreenwood-urnGarden.svg => ssm.cemetery.newGreenwood-urnGarden.svg} (100%) rename public/images/maps/{newGreenwood-veteransSection (dfa8960b-47fb-4ba0-b48a-00d2c268fefb, cafbec22-337d-4ac8-9b57-e0f48803943a).svg => ssm.cemetery.newGreenwood-veteransSection.svg} (100%) rename public/images/maps/{oldGreenwood-babySection (badc8b5a-d687-48b0-ac11-6290e977b3ca, 09730968-79ec-45f7-aca7-c3790beca297).svg => ssm.cemetery.oldGreenwood-babySection.svg} (100%) rename public/images/maps/{oldGreenwood-eastNorth-rows-1-18-lots-1-11 (76619606-411d-4387-a78f-66e47f9ba7be, 2bc05828-d127-4f53-8a10-43464bf56601).svg => ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-1-11.svg} (100%) rename public/images/maps/{oldGreenwood-eastNorth-rows-1-18-lots-12-17 (be441559-acdd-4364-b086-2fd9094ae669, eddfaa59-e592-4f2b-84af-4ab078c29f1c).svg => ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-12-17.svg} (100%) rename public/images/maps/{oldGreenwood-eastNorth-rows-19-38-lots-1-11 (39a0037c-0145-4d99-b1f4-a51d89802da0, 12836593-877e-4953-b638-71b894084e46).svg => ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-1-11.svg} (100%) rename public/images/maps/{oldGreenwood-eastNorth-rows-19-38-lots-12-17 (1b6d21ab-66c6-4264-9a75-4d6d93c0cbc3, 3c3441be-3c04-458f-9da5-59bb27b9fb5c).svg => ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-12-17.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthA-rows-1-18-lots 23-31 (c7184cfa-31b3-445c-84f7-560465e58031, 8b103b97-c945-4b92-961d-3359dddbe2db).svg => ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots 23-31.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthA-rows-1-18-lots-1-22 (874dc9bd-92af-4657-9f88-b659ab8fbb3c, aa68c1e1-dc27-47f5-afd2-3632d58c8811).svg => ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots-1-22.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthA-rows-19-32-lots-1-22 (2fee7675-e377-483e-993a-1bb4d3b8b04b, 0cdca656-adc8-4927-ac09-414bac7d7f11).svg => ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-1-22.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthA-rows-19-32-lots-23-31 (453fd8e1-d5b8-42b5-bb3b-a89b96ca0d06, 4b20396b-9827-4639-80c2-94466ebca164).svg => ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-23-31.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthB-lots-33-45-rows-1-22 (f5eadd1c-9d23-4f43-9b9b-c33eea9fb51b, db49f720-2b27-4faa-9000-d57c23d857a0).svg => ssm.cemetery.oldGreenwood-eastSouthB-lots-33-45-rows-1-22.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthB-rows-33-57-lots 23-31 (3a833486-a869-490b-8e47-bcf07b0045a0, 8e2b9dd7-5364-44ff-9103-4e476ded3104).svg => ssm.cemetery.oldGreenwood-eastSouthB-rows-33-57-lots 23-31.svg} (100%) rename public/images/maps/{oldGreenwood-eastSouthB-rows-46-57-lots-11-24 (28daa4e5-edb8-495d-92dd-5c773663fed2, 24d47e75-9b02-4b61-8545-9d694d81b060).svg => ssm.cemetery.oldGreenwood-eastSouthB-rows-46-57-lots-11-24.svg} (100%) rename public/images/maps/{oldGreenwood-overview.svg => ssm.cemetery.oldGreenwood-overview.svg} (100%) rename public/images/maps/{oldGreenwood-westSection.svg => ssm.cemetery.oldGreenwood-westSection.svg} (100%) rename public/images/maps/{pineGrove-overview.svg => ssm.cemetery.pineGrove-overview.svg} (100%) rename public/images/maps/{westKorah-eastSection (4eb1d691-e170-44fe-9c16-d0b07bfc2cef, b2bbfb9e-020e-4c9d-b8a1-e9505432d225).svg => ssm.cemetery.westKorah-eastSection.svg} (100%) rename public/images/maps/{westKorah-northSection (eb81c28a-3683-467a-aed9-293b451b1dc1, c0135b86-8f79-48b4-9e1c-155a5bda24a0).svg => ssm.cemetery.westKorah-northSection.svg} (100%) rename public/images/maps/{westKorah-overview.svg => ssm.cemetery.westKorah-overview.svg} (100%) rename public/images/maps/{westKorah-westSection (53f302a5-e46c-4a1c-863c-dd40b8f18144, 2c5e13e5-4ec0-4b9a-b472-1237b5d9f4e9).svg => ssm.cemetery.westKorah-westSection.svg} (100%) create mode 100644 public/javascripts/lotSearch.min.js create mode 100644 public/javascripts/mapEdit.min.js diff --git a/handlers/lots-get/search.js b/handlers/lots-get/search.js index fd6b70ed..835f8614 100644 --- a/handlers/lots-get/search.js +++ b/handlers/lots-get/search.js @@ -1,13 +1,16 @@ import * as configFunctions from "../../helpers/functions.config.js"; import { getMaps } from "../../helpers/lotOccupancyDB/getMaps.js"; -import { getLotTypes } from "../../helpers/lotOccupancyDB/getLotTypes.js"; -export const handler = (_request, response) => { +import { getLotTypes, getLotStatuses } from "../../helpers/functions.cache.js"; +export const handler = (request, response) => { const maps = getMaps(); const lotTypes = getLotTypes(); + const lotStatuses = getLotStatuses(); response.render("lot-search", { headTitle: configFunctions.getProperty("aliases.lot") + " Search", maps, - lotTypes + lotTypes, + lotStatuses, + mapId: request.query.mapId }); }; export default handler; diff --git a/handlers/lots-get/search.ts b/handlers/lots-get/search.ts index f4875212..963f4bf3 100644 --- a/handlers/lots-get/search.ts +++ b/handlers/lots-get/search.ts @@ -8,18 +8,21 @@ import { getMaps } from "../../helpers/lotOccupancyDB/getMaps.js"; -import { getLotTypes } from "../../helpers/lotOccupancyDB/getLotTypes.js"; +import { getLotTypes, getLotStatuses } from "../../helpers/functions.cache.js"; -export const handler: RequestHandler = (_request, response) => { +export const handler: RequestHandler = (request, response) => { const maps = getMaps(); const lotTypes = getLotTypes(); - + const lotStatuses = getLotStatuses(); + response.render("lot-search", { headTitle: configFunctions.getProperty("aliases.lot") + " Search", maps, - lotTypes + lotTypes, + lotStatuses, + mapId: request.query.mapId }); }; diff --git a/handlers/lots-post/doSearchLots.d.ts b/handlers/lots-post/doSearchLots.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/lots-post/doSearchLots.d.ts @@ -0,0 +1,3 @@ +import type { RequestHandler } from "express"; +export declare const handler: RequestHandler; +export default handler; diff --git a/handlers/lots-post/doSearchLots.js b/handlers/lots-post/doSearchLots.js new file mode 100644 index 00000000..71bdf864 --- /dev/null +++ b/handlers/lots-post/doSearchLots.js @@ -0,0 +1,11 @@ +import { getLots } from "../../helpers/lotOccupancyDB/getLots.js"; +export const handler = async (request, response) => { + const lots = getLots(request.body, { + limit: request.body.limit, + offset: request.body.offset + }); + response.json({ + lots + }); +}; +export default handler; diff --git a/handlers/lots-post/doSearchLots.ts b/handlers/lots-post/doSearchLots.ts new file mode 100644 index 00000000..cc70a85f --- /dev/null +++ b/handlers/lots-post/doSearchLots.ts @@ -0,0 +1,19 @@ +import type { RequestHandler } from "express"; + +import { getLots } from "../../helpers/lotOccupancyDB/getLots.js"; + + +export const handler: RequestHandler = async (request, response) => { + + const lots = getLots(request.body, { + limit: request.body.limit, + offset: request.body.offset + }); + + response.json({ + lots + }); +}; + + +export default handler; \ No newline at end of file diff --git a/handlers/maps-get/edit.d.ts b/handlers/maps-get/edit.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/maps-get/edit.d.ts @@ -0,0 +1,3 @@ +import type { RequestHandler } from "express"; +export declare const handler: RequestHandler; +export default handler; diff --git a/handlers/maps-get/edit.js b/handlers/maps-get/edit.js new file mode 100644 index 00000000..68cc97dd --- /dev/null +++ b/handlers/maps-get/edit.js @@ -0,0 +1,17 @@ +import * as configFunctions from "../../helpers/functions.config.js"; +import { getMap } from "../../helpers/lotOccupancyDB/getMap.js"; +import { getMapSVGs } from "../../helpers/functions.map.js"; +export const handler = async (request, response) => { + const map = getMap(request.params.mapId); + if (!map) { + return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") + "/maps/?error=mapIdNotFound"); + } + const mapSVGs = await getMapSVGs(); + response.render("map-edit", { + headTitle: map.mapName, + isCreate: false, + map, + mapSVGs + }); +}; +export default handler; diff --git a/handlers/maps-get/edit.ts b/handlers/maps-get/edit.ts new file mode 100644 index 00000000..f3650e1b --- /dev/null +++ b/handlers/maps-get/edit.ts @@ -0,0 +1,29 @@ +import type { RequestHandler } from "express"; + +import * as configFunctions from "../../helpers/functions.config.js"; + +import { getMap } from "../../helpers/lotOccupancyDB/getMap.js"; + +import { getMapSVGs } from "../../helpers/functions.map.js"; + + +export const handler: RequestHandler = async (request, response) => { + + const map = getMap(request.params.mapId); + + if (!map) { + return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") + "/maps/?error=mapIdNotFound"); + } + + const mapSVGs = await getMapSVGs(); + + response.render("map-edit", { + headTitle: map.mapName, + isCreate: false, + map, + mapSVGs + }); +}; + + +export default handler; \ No newline at end of file diff --git a/handlers/maps-get/new.js b/handlers/maps-get/new.js index 0f594a17..8a3a91e3 100644 --- a/handlers/maps-get/new.js +++ b/handlers/maps-get/new.js @@ -1,10 +1,13 @@ import * as configFunctions from "../../helpers/functions.config.js"; -export const handler = (_request, response) => { +import { getMapSVGs } from "../../helpers/functions.map.js"; +export const handler = async (_request, response) => { const map = {}; + const mapSVGs = await getMapSVGs(); response.render("map-edit", { headTitle: configFunctions.getProperty("aliases.map") + " Create", isCreate: true, - map + map, + mapSVGs }); }; export default handler; diff --git a/handlers/maps-get/new.ts b/handlers/maps-get/new.ts index eb96ce8f..5023ec19 100644 --- a/handlers/maps-get/new.ts +++ b/handlers/maps-get/new.ts @@ -1,18 +1,22 @@ import type { RequestHandler } from "express"; import * as configFunctions from "../../helpers/functions.config.js"; +import { getMapSVGs } from "../../helpers/functions.map.js"; import * as recordTypes from "../../types/recordTypes"; -export const handler: RequestHandler = (_request, response) => { +export const handler: RequestHandler = async (_request, response) => { const map: recordTypes.Map = {}; + const mapSVGs = await getMapSVGs(); + response.render("map-edit", { headTitle: configFunctions.getProperty("aliases.map") + " Create", isCreate: true, - map + map, + mapSVGs }); }; diff --git a/handlers/maps-post/doCreateMap.d.ts b/handlers/maps-post/doCreateMap.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/maps-post/doCreateMap.d.ts @@ -0,0 +1,3 @@ +import type { RequestHandler } from "express"; +export declare const handler: RequestHandler; +export default handler; diff --git a/handlers/maps-post/doCreateMap.js b/handlers/maps-post/doCreateMap.js new file mode 100644 index 00000000..c3839d32 --- /dev/null +++ b/handlers/maps-post/doCreateMap.js @@ -0,0 +1,9 @@ +import { addMap } from "../../helpers/lotOccupancyDB/addMap.js"; +export const handler = async (request, response) => { + const mapId = addMap(request.body, request.session); + response.json({ + success: true, + mapId + }); +}; +export default handler; diff --git a/handlers/maps-post/doCreateMap.ts b/handlers/maps-post/doCreateMap.ts new file mode 100644 index 00000000..7388bde5 --- /dev/null +++ b/handlers/maps-post/doCreateMap.ts @@ -0,0 +1,17 @@ +import type { RequestHandler } from "express"; + +import { addMap } from "../../helpers/lotOccupancyDB/addMap.js"; + + +export const handler: RequestHandler = async (request, response) => { + + const mapId = addMap(request.body, request.session); + + response.json({ + success: true, + mapId + }); +}; + + +export default handler; \ No newline at end of file diff --git a/handlers/maps-post/doUpdateMap.d.ts b/handlers/maps-post/doUpdateMap.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/maps-post/doUpdateMap.d.ts @@ -0,0 +1,3 @@ +import type { RequestHandler } from "express"; +export declare const handler: RequestHandler; +export default handler; diff --git a/handlers/maps-post/doUpdateMap.js b/handlers/maps-post/doUpdateMap.js new file mode 100644 index 00000000..466774be --- /dev/null +++ b/handlers/maps-post/doUpdateMap.js @@ -0,0 +1,9 @@ +import { updateMap } from "../../helpers/lotOccupancyDB/updateMap.js"; +export const handler = async (request, response) => { + const success = updateMap(request.body, request.session); + response.json({ + success, + mapId: request.body.mapId + }); +}; +export default handler; diff --git a/handlers/maps-post/doUpdateMap.ts b/handlers/maps-post/doUpdateMap.ts new file mode 100644 index 00000000..86e0f14d --- /dev/null +++ b/handlers/maps-post/doUpdateMap.ts @@ -0,0 +1,17 @@ +import type { RequestHandler } from "express"; + +import { updateMap } from "../../helpers/lotOccupancyDB/updateMap.js"; + + +export const handler: RequestHandler = async (request, response) => { + + const success = updateMap(request.body, request.session); + + response.json({ + success, + mapId: request.body.mapId + }); +}; + + +export default handler; \ No newline at end of file diff --git a/helpers/functions.map.d.ts b/helpers/functions.map.d.ts new file mode 100644 index 00000000..89887016 --- /dev/null +++ b/helpers/functions.map.d.ts @@ -0,0 +1 @@ +export declare function getMapSVGs(): Promise; diff --git a/helpers/functions.map.js b/helpers/functions.map.js new file mode 100644 index 00000000..b2b6a684 --- /dev/null +++ b/helpers/functions.map.js @@ -0,0 +1,15 @@ +import fs from "node:fs/promises"; +let mapSVGs; +export async function getMapSVGs() { + if (!mapSVGs) { + const files = await fs.readdir("./public/images/maps/"); + const SVGs = []; + for (const file of files) { + if (file.toLowerCase().endsWith(".svg")) { + SVGs.push(file); + } + } + mapSVGs = SVGs; + } + return mapSVGs; +} diff --git a/helpers/functions.map.ts b/helpers/functions.map.ts new file mode 100644 index 00000000..1a9a8a5c --- /dev/null +++ b/helpers/functions.map.ts @@ -0,0 +1,23 @@ +import fs from "node:fs/promises"; + +let mapSVGs: string[]; + +export async function getMapSVGs () { + + if (!mapSVGs) { + const files = await fs.readdir("./public/images/maps/"); + + const SVGs: string[] = []; + + for (const file of files) { + + if (file.toLowerCase().endsWith(".svg")) { + SVGs.push(file); + } + } + + mapSVGs = SVGs; + } + + return mapSVGs; +} \ No newline at end of file diff --git a/helpers/lotOccupancyDB/addLotOccupancy.js b/helpers/lotOccupancyDB/addLotOccupancy.js index b1f801ef..4672c9ad 100644 --- a/helpers/lotOccupancyDB/addLotOccupancy.js +++ b/helpers/lotOccupancyDB/addLotOccupancy.js @@ -4,6 +4,10 @@ import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js" export const addLotOccupancy = (lotOccupancyForm, requestSession) => { const database = sqlite(databasePath); const rightNowMillis = Date.now(); + const occupancyStartDate = dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyStartDateString); + if (occupancyStartDate <= 0) { + console.error(lotOccupancyForm); + } const result = database .prepare("insert into LotOccupancies (" + "occupancyTypeId, lotId," + @@ -11,7 +15,7 @@ export const addLotOccupancy = (lotOccupancyForm, requestSession) => { " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + " values (?, ?, ?, ?, ?, ?, ?, ?)") - .run(lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId, dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyStartDateString), (lotOccupancyForm.occupancyEndDateString === "" + .run(lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId, occupancyStartDate, (lotOccupancyForm.occupancyEndDateString === "" ? undefined : dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyEndDateString)), requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); database.close(); diff --git a/helpers/lotOccupancyDB/addLotOccupancy.ts b/helpers/lotOccupancyDB/addLotOccupancy.ts index f3b1fdf7..74f478fe 100644 --- a/helpers/lotOccupancyDB/addLotOccupancy.ts +++ b/helpers/lotOccupancyDB/addLotOccupancy.ts @@ -22,6 +22,12 @@ export const addLotOccupancy = const rightNowMillis = Date.now(); + const occupancyStartDate = dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyStartDateString); + + if (occupancyStartDate <= 0) { + console.error(lotOccupancyForm); + } + const result = database .prepare("insert into LotOccupancies (" + "occupancyTypeId, lotId," + @@ -31,7 +37,7 @@ export const addLotOccupancy = " values (?, ?, ?, ?, ?, ?, ?, ?)") .run(lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId, - dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyStartDateString), + occupancyStartDate, (lotOccupancyForm.occupancyEndDateString === "" ? undefined : dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyEndDateString)), diff --git a/helpers/lotOccupancyDB/getLots.d.ts b/helpers/lotOccupancyDB/getLots.d.ts index 7f737bcb..548622c6 100644 --- a/helpers/lotOccupancyDB/getLots.d.ts +++ b/helpers/lotOccupancyDB/getLots.d.ts @@ -1,6 +1,8 @@ import type * as recordTypes from "../../types/recordTypes"; interface GetLotsFilters { mapId?: number | string; + lotTypeId?: number | string; + lotStatusId?: number | string; } interface GetLotsOptions { limit: number; diff --git a/helpers/lotOccupancyDB/getLots.js b/helpers/lotOccupancyDB/getLots.js index 1f6b9182..ca78d2af 100644 --- a/helpers/lotOccupancyDB/getLots.js +++ b/helpers/lotOccupancyDB/getLots.js @@ -10,6 +10,14 @@ export const getLots = (filters, options) => { sqlWhereClause += " and l.mapId = ?"; sqlParameters.push(filters.mapId); } + if (filters.lotTypeId) { + sqlWhereClause += " and l.lotTypeId = ?"; + sqlParameters.push(filters.lotTypeId); + } + if (filters.lotStatusId) { + sqlWhereClause += " and l.lotStatusId = ?"; + sqlParameters.push(filters.lotStatusId); + } const lots = database .prepare("select l.lotId, l.lotName," + " t.lotType," + diff --git a/helpers/lotOccupancyDB/getLots.ts b/helpers/lotOccupancyDB/getLots.ts index 1c46d8b1..09f730f7 100644 --- a/helpers/lotOccupancyDB/getLots.ts +++ b/helpers/lotOccupancyDB/getLots.ts @@ -8,6 +8,8 @@ import type * as recordTypes from "../../types/recordTypes"; interface GetLotsFilters { mapId?: number | string; + lotTypeId?: number | string; + lotStatusId?: number | string; } interface GetLotsOptions { @@ -30,6 +32,16 @@ export const getLots = (filters ? : GetLotsFilters, options?: GetLotsOptions): r sqlParameters.push(filters.mapId); } + if (filters.lotTypeId) { + sqlWhereClause += " and l.lotTypeId = ?"; + sqlParameters.push(filters.lotTypeId); + } + + if (filters.lotStatusId) { + sqlWhereClause += " and l.lotStatusId = ?"; + sqlParameters.push(filters.lotStatusId); + } + const lots: recordTypes.Lot[] = database .prepare("select l.lotId, l.lotName," + " t.lotType," + diff --git a/helpers/lotOccupancyDB/getMaps.js b/helpers/lotOccupancyDB/getMaps.js index 2b04821b..31018f9e 100644 --- a/helpers/lotOccupancyDB/getMaps.js +++ b/helpers/lotOccupancyDB/getMaps.js @@ -8,7 +8,7 @@ export const getMaps = (filters) => { .prepare("select m.mapId, m.mapName, m.mapDescription," + " m.mapLatitude, m.mapLongitude, m.mapSVG," + " m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode, m.mapPhoneNumber," + - " l.lotCount" + + " ifnull(l.lotCount,0) as lotCount" + " from Maps m" + (" left join (" + "select mapId, count(lotId) as lotCount" + diff --git a/helpers/lotOccupancyDB/getMaps.ts b/helpers/lotOccupancyDB/getMaps.ts index 813669f5..950a2ef8 100644 --- a/helpers/lotOccupancyDB/getMaps.ts +++ b/helpers/lotOccupancyDB/getMaps.ts @@ -21,7 +21,7 @@ export const getMaps = (filters ? : GetMapsFilters): recordTypes.Map[] => { .prepare("select m.mapId, m.mapName, m.mapDescription," + " m.mapLatitude, m.mapLongitude, m.mapSVG," + " m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode, m.mapPhoneNumber," + - " l.lotCount" + + " ifnull(l.lotCount,0) as lotCount" + " from Maps m" + (" left join (" + "select mapId, count(lotId) as lotCount" + diff --git a/helpers/lotOccupancyDB/updateLot.d.ts b/helpers/lotOccupancyDB/updateLot.d.ts new file mode 100644 index 00000000..e538be2c --- /dev/null +++ b/helpers/lotOccupancyDB/updateLot.d.ts @@ -0,0 +1,14 @@ +import type * as recordTypes from "../../types/recordTypes"; +interface UpdateLotForm { + lotId: string | number; + lotName: string; + lotTypeId: string | number; + lotStatusId: string | number; + mapId: string | number; + mapKey: string; + lotLatitude: string; + lotLongitude: string; +} +export declare function updateLot(lotForm: UpdateLotForm, requestSession: recordTypes.PartialSession): boolean; +export declare function updateLotStatus(lotId: number | string, lotStatusId: number | string, requestSession: recordTypes.PartialSession): boolean; +export default updateLot; diff --git a/helpers/lotOccupancyDB/updateLot.js b/helpers/lotOccupancyDB/updateLot.js new file mode 100644 index 00000000..b03d970a --- /dev/null +++ b/helpers/lotOccupancyDB/updateLot.js @@ -0,0 +1,37 @@ +import sqlite from "better-sqlite3"; +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +export function updateLot(lotForm, requestSession) { + const database = sqlite(databasePath); + const rightNowMillis = Date.now(); + const result = database + .prepare("update Lots" + + " set lotName = ?," + + " lotTypeId = ?," + + " lotStatusId = ?," + + " mapId = ?," + + " mapKey = ?," + + " lotLatitude = ?," + + " lotLongitude = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where lotId = ?" + + " and recordDelete_timeMillis is null") + .run(lotForm.lotName, lotForm.lotTypeId, (lotForm.lotStatusId === "" ? undefined : lotForm.lotStatusId), (lotForm.mapId === "" ? undefined : lotForm.mapId), lotForm.mapKey, (lotForm.lotLatitude === "" ? undefined : lotForm.lotLatitude), (lotForm.lotLongitude === "" ? undefined : lotForm.lotLongitude), requestSession.user.userName, rightNowMillis, lotForm.lotId); + database.close(); + return result.changes > 0; +} +export function updateLotStatus(lotId, lotStatusId, requestSession) { + const database = sqlite(databasePath); + const rightNowMillis = Date.now(); + const result = database + .prepare("update Lots" + + " set lotStatusId = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where lotId = ?" + + " and recordDelete_timeMillis is null") + .run((lotStatusId === "" ? undefined : lotStatusId), requestSession.user.userName, rightNowMillis, lotId); + database.close(); + return result.changes > 0; +} +export default updateLot; diff --git a/helpers/lotOccupancyDB/updateLot.ts b/helpers/lotOccupancyDB/updateLot.ts new file mode 100644 index 00000000..35c95b69 --- /dev/null +++ b/helpers/lotOccupancyDB/updateLot.ts @@ -0,0 +1,80 @@ +import sqlite from "better-sqlite3"; +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; + +import type * as recordTypes from "../../types/recordTypes"; + + +interface UpdateLotForm { + lotId: string | number; + lotName: string; + lotTypeId: string | number; + lotStatusId: string | number; + + mapId: string | number; + mapKey: string; + + lotLatitude: string; + lotLongitude: string; +} + + +export function updateLot(lotForm: UpdateLotForm, requestSession: recordTypes.PartialSession): boolean { + + const database = sqlite(databasePath); + + const rightNowMillis = Date.now(); + + const result = database + .prepare("update Lots" + + " set lotName = ?," + + " lotTypeId = ?," + + " lotStatusId = ?," + + " mapId = ?," + + " mapKey = ?," + + " lotLatitude = ?," + + " lotLongitude = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where lotId = ?" + + " and recordDelete_timeMillis is null") + .run(lotForm.lotName, + lotForm.lotTypeId, + (lotForm.lotStatusId === "" ? undefined : lotForm.lotStatusId), + (lotForm.mapId === "" ? undefined : lotForm.mapId), + lotForm.mapKey, + (lotForm.lotLatitude === "" ? undefined : lotForm.lotLatitude), + (lotForm.lotLongitude === "" ? undefined : lotForm.lotLongitude), + requestSession.user.userName, + rightNowMillis, + lotForm.lotId); + + database.close(); + + return result.changes > 0; +} + +export function updateLotStatus(lotId: number | string, lotStatusId: number | string, requestSession: recordTypes.PartialSession): boolean { + + const database = sqlite(databasePath); + + const rightNowMillis = Date.now(); + + const result = database + .prepare("update Lots" + + " set lotStatusId = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where lotId = ?" + + " and recordDelete_timeMillis is null") + .run((lotStatusId === "" ? undefined : lotStatusId), + requestSession.user.userName, + rightNowMillis, + lotId); + + database.close(); + + return result.changes > 0; +} + + +export default updateLot; \ No newline at end of file diff --git a/helpers/lotOccupancyDB/updateMap.d.ts b/helpers/lotOccupancyDB/updateMap.d.ts new file mode 100644 index 00000000..91f92e17 --- /dev/null +++ b/helpers/lotOccupancyDB/updateMap.d.ts @@ -0,0 +1,17 @@ +import type * as recordTypes from "../../types/recordTypes"; +interface UpdateMapForm { + mapId: string; + mapName: string; + mapDescription: string; + mapSVG: string; + mapLatitude: string; + mapLongitude: string; + mapAddress1: string; + mapAddress2: string; + mapCity: string; + mapProvince: string; + mapPostalCode: string; + mapPhoneNumber: string; +} +export declare const updateMap: (mapForm: UpdateMapForm, requestSession: recordTypes.PartialSession) => boolean; +export default updateMap; diff --git a/helpers/lotOccupancyDB/updateMap.js b/helpers/lotOccupancyDB/updateMap.js new file mode 100644 index 00000000..aea642bb --- /dev/null +++ b/helpers/lotOccupancyDB/updateMap.js @@ -0,0 +1,27 @@ +import sqlite from "better-sqlite3"; +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +export const updateMap = (mapForm, requestSession) => { + const database = sqlite(databasePath); + const rightNowMillis = Date.now(); + const result = database + .prepare("update Maps" + + " set mapName = ?," + + " mapDescription = ?," + + " mapSVG = ?," + + " mapLatitude = ?," + + " mapLongitude = ?," + + " mapAddress1 = ?," + + " mapAddress2 = ?," + + " mapCity = ?," + + " mapProvince = ?," + + " mapPostalCode = ?," + + " mapPhoneNumber = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where mapId = ?" + + " and recordDelete_timeMillis is null") + .run(mapForm.mapName, mapForm.mapDescription, mapForm.mapSVG, (mapForm.mapLatitude === "" ? undefined : mapForm.mapLatitude), (mapForm.mapLongitude === "" ? undefined : mapForm.mapLongitude), mapForm.mapAddress1, mapForm.mapAddress2, mapForm.mapCity, mapForm.mapProvince, mapForm.mapPostalCode, mapForm.mapPhoneNumber, requestSession.user.userName, rightNowMillis, mapForm.mapId); + database.close(); + return result.changes > 0; +}; +export default updateMap; diff --git a/helpers/lotOccupancyDB/updateMap.ts b/helpers/lotOccupancyDB/updateMap.ts new file mode 100644 index 00000000..62c3ed6b --- /dev/null +++ b/helpers/lotOccupancyDB/updateMap.ts @@ -0,0 +1,68 @@ +import sqlite from "better-sqlite3"; +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; + +import type * as recordTypes from "../../types/recordTypes"; + + +interface UpdateMapForm { + mapId: string; + mapName: string; + mapDescription: string; + mapSVG: string; + mapLatitude: string; + mapLongitude: string; + mapAddress1: string; + mapAddress2: string; + mapCity: string; + mapProvince: string; + mapPostalCode: string; + mapPhoneNumber: string; +} + + +export const updateMap = + (mapForm: UpdateMapForm, requestSession: recordTypes.PartialSession): boolean => { + + const database = sqlite(databasePath); + + const rightNowMillis = Date.now(); + + const result = database + .prepare("update Maps" + + " set mapName = ?," + + " mapDescription = ?," + + " mapSVG = ?," + + " mapLatitude = ?," + + " mapLongitude = ?," + + " mapAddress1 = ?," + + " mapAddress2 = ?," + + " mapCity = ?," + + " mapProvince = ?," + + " mapPostalCode = ?," + + " mapPhoneNumber = ?," + + " recordUpdate_userName = ?," + + " recordUpdate_timeMillis = ?" + + " where mapId = ?" + + " and recordDelete_timeMillis is null") + .run(mapForm.mapName, + mapForm.mapDescription, + mapForm.mapSVG, + (mapForm.mapLatitude === "" ? undefined : mapForm.mapLatitude), + (mapForm.mapLongitude === "" ? undefined : mapForm.mapLongitude), + mapForm.mapAddress1, + mapForm.mapAddress2, + mapForm.mapCity, + mapForm.mapProvince, + mapForm.mapPostalCode, + mapForm.mapPhoneNumber, + requestSession.user.userName, + rightNowMillis, + mapForm.mapId); + + database.close(); + + return result.changes > 0; + }; + + +export default updateMap; \ No newline at end of file diff --git a/public-typescript/lotSearch.d.ts b/public-typescript/lotSearch.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/lotSearch.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/lotSearch.js b/public-typescript/lotSearch.js new file mode 100644 index 00000000..fe4e7a01 --- /dev/null +++ b/public-typescript/lotSearch.js @@ -0,0 +1,51 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const searchFilterFormElement = document.querySelector("#form--searchFilters"); + const searchResultsContainerElement = document.querySelector("#container--searchResults"); + const getLots = () => { + searchResultsContainerElement.innerHTML = "
" + + "
" + + "Loading " + exports.aliases.lots + "..." + + "
"; + cityssm.postJSON(urlPrefix + "/lots/doSearchLots", searchFilterFormElement, (responseJSON) => { + if (responseJSON.lots.length === 0) { + searchResultsContainerElement.innerHTML = "
" + + "

There are no " + exports.aliases.lots.toLowerCase() + " that meet the search criteria.

" + + "
"; + return; + } + const resultsTbodyElement = document.createElement("tbody"); + for (const lot of responseJSON.lots) { + resultsTbodyElement.insertAdjacentHTML("beforeend", "" + + ("" + + "" + + lot.lotName + + "" + + "") + + "" + lot.lotType + "" + + "" + lot.lotStatus + "" + + "" + lot.mapName + "" + + ""); + } + searchResultsContainerElement.innerHTML = "" + + "" + + "" + + "" + + "" + + "" + + ""; + searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); + }); + }; + const filterElements = searchFilterFormElement.querySelectorAll("input, select"); + for (const filterElement of filterElements) { + filterElement.addEventListener("change", getLots); + } + searchFilterFormElement.addEventListener("submit", (formEvent) => { + formEvent.preventDefault(); + getLots(); + }); + getLots(); +})(); diff --git a/public-typescript/lotSearch.ts b/public-typescript/lotSearch.ts new file mode 100644 index 00000000..45ba377d --- /dev/null +++ b/public-typescript/lotSearch.ts @@ -0,0 +1,78 @@ +/* eslint-disable unicorn/prefer-module */ + +import type * as recordTypes from "../types/recordTypes"; + +import type { + cityssmGlobal +} from "@cityssm/bulma-webapp-js/src/types"; + +declare const cityssm: cityssmGlobal; + + +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + + const searchFilterFormElement = document.querySelector("#form--searchFilters") as HTMLFormElement; + const searchResultsContainerElement = document.querySelector("#container--searchResults") as HTMLElement; + + const getLots = () => { + + searchResultsContainerElement.innerHTML = "
" + + "
" + + "Loading " + exports.aliases.lots + "..." + + "
"; + + cityssm.postJSON(urlPrefix + "/lots/doSearchLots", searchFilterFormElement, + (responseJSON: { + lots: recordTypes.Lot[] + }) => { + + if (responseJSON.lots.length === 0) { + + searchResultsContainerElement.innerHTML = "
" + + "

There are no " + exports.aliases.lots.toLowerCase() + " that meet the search criteria.

" + + "
"; + + return; + } + + const resultsTbodyElement = document.createElement("tbody"); + + for (const lot of responseJSON.lots) { + resultsTbodyElement.insertAdjacentHTML("beforeend", "" + + ("") + + "" + + "" + + "" + + ""); + } + + searchResultsContainerElement.innerHTML = "
" + exports.aliases.lot + "" + exports.aliases.lot + " TypeStatus" + exports.aliases.map + "
" + + "" + + lot.lotName + + "" + + "" + lot.lotType + "" + lot.lotStatus + "" + lot.mapName + "
" + + "" + + "" + + "" + + "" + + "" + + ""; + + searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); + }); + }; + + const filterElements = searchFilterFormElement.querySelectorAll("input, select") as NodeListOf < HTMLInputElement | HTMLSelectElement > ; + + for (const filterElement of filterElements) { + filterElement.addEventListener("change", getLots); + } + + searchFilterFormElement.addEventListener("submit", (formEvent) => { + formEvent.preventDefault(); + getLots(); + }); + + getLots(); +})(); \ No newline at end of file diff --git a/public-typescript/mapEdit.d.ts b/public-typescript/mapEdit.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/mapEdit.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/mapEdit.js b/public-typescript/mapEdit.js new file mode 100644 index 00000000..5f40ff33 --- /dev/null +++ b/public-typescript/mapEdit.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const mapId = document.querySelector("#map--mapId").value; + const isCreate = (mapId === ""); + const mapForm = document.querySelector("#form--map"); + const updateMap = (formEvent) => { + formEvent.preventDefault(); + cityssm.postJSON(urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), mapForm, (responseJSON) => { + if (responseJSON.success) { + if (isCreate) { + window.location.href = urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; + } + else { + bulmaJS.alert({ + message: exports.aliases.map + " Updated Successfully", + contextualColorName: "success" + }); + } + } + else { + bulmaJS.alert({ + title: "Error Updating " + exports.aliases.map, + message: responseJSON.errorMessage, + contextualColorName: "danger" + }); + } + }); + }; + mapForm.addEventListener("submit", updateMap); +})(); diff --git a/public-typescript/mapEdit.ts b/public-typescript/mapEdit.ts new file mode 100644 index 00000000..6a81df55 --- /dev/null +++ b/public-typescript/mapEdit.ts @@ -0,0 +1,45 @@ +/* eslint-disable unicorn/prefer-module */ + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; +import type { BulmaJS } from "@cityssm/bulma-js/types"; + +declare const cityssm: cityssmGlobal; +declare const bulmaJS: BulmaJS; + + +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + + const mapId = (document.querySelector("#map--mapId") as HTMLInputElement).value; + const isCreate = (mapId === ""); + + const mapForm = document.querySelector("#form--map") as HTMLFormElement; + + const updateMap = (formEvent: SubmitEvent) => { + formEvent.preventDefault(); + + cityssm.postJSON(urlPrefix + "/maps/" + (isCreate ? "doCreateMap" : "doUpdateMap"), + mapForm, + (responseJSON: { success: boolean; mapId?: number, errorMessage?: string}) => { + + if (responseJSON.success) { + if (isCreate) { + window.location.href = urlPrefix + "/maps/" + responseJSON.mapId + "/edit"; + } else { + bulmaJS.alert({ + message: exports.aliases.map + " Updated Successfully", + contextualColorName: "success" + }); + } + } else { + bulmaJS.alert({ + title: "Error Updating " + exports.aliases.map, + message: responseJSON.errorMessage, + contextualColorName: "danger" + }); + } + }); + }; + + mapForm.addEventListener("submit", updateMap); +})(); \ No newline at end of file diff --git a/public-typescript/mapSearch.js b/public-typescript/mapSearch.js index ed18aff9..55c05a93 100644 --- a/public-typescript/mapSearch.js +++ b/public-typescript/mapSearch.js @@ -29,9 +29,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); continue; } searchResultCount += 1; - const mapName = map.mapName === "" - ? "(No Name)" - : map.mapName; + const mapName = map.mapName === "" ? + "(No Name)" : + map.mapName; searchResultsTbodyElement.insertAdjacentHTML("beforeend", "" + ("") + "" + "" + - "" + + ("") + ""); } searchResultsContainerElement.innerHTML = ""; @@ -72,6 +76,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }; searchFilterElement.addEventListener("keyup", renderResults); - document.querySelector("#form--searchFilters").addEventListener("submit", renderResults); + document.querySelector("#form--searchFilters").addEventListener("submit", (formEvent) => { + formEvent.preventDefault(); + renderResults(); + }); renderResults(); })(); diff --git a/public-typescript/mapSearch.ts b/public-typescript/mapSearch.ts index ca995a72..14fb017c 100644 --- a/public-typescript/mapSearch.ts +++ b/public-typescript/mapSearch.ts @@ -2,11 +2,12 @@ import type * as recordTypes from "../types/recordTypes"; -import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; -import type { BulmaJS } from "@cityssm/bulma-js/types"; +import type { + cityssmGlobal +} from "@cityssm/bulma-webapp-js/src/types"; declare const cityssm: cityssmGlobal; -declare const bulmaJS: BulmaJS; + (() => { const urlPrefix = document.querySelector("main").dataset.urlPrefix; @@ -50,9 +51,9 @@ declare const bulmaJS: BulmaJS; searchResultCount += 1; - const mapName = map.mapName === "" - ? "(No Name)" - : map.mapName; + const mapName = map.mapName === "" ? + "(No Name)" : + map.mapName; searchResultsTbodyElement.insertAdjacentHTML("beforeend", "" + ("") + "" + "" + - "" + + ("") + ""); } @@ -101,7 +106,10 @@ declare const bulmaJS: BulmaJS; }; searchFilterElement.addEventListener("keyup", renderResults); - document.querySelector("#form--searchFilters").addEventListener("submit", renderResults); + document.querySelector("#form--searchFilters").addEventListener("submit", (formEvent) => { + formEvent.preventDefault(); + renderResults(); + }); renderResults(); })(); \ No newline at end of file diff --git a/public/images/maps/holySepulchre-block-A-rows-1-52 (79ddc302-6e77-47cd-a108-681a76d91c19, ad84d98e-1a4b-45a0-8abf-7386b16da322).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-1-52.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-rows-1-52 (79ddc302-6e77-47cd-a108-681a76d91c19, ad84d98e-1a4b-45a0-8abf-7386b16da322).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-1-52.svg diff --git a/public/images/maps/holySepulchre-block-A-rows-53-97 (87fa11c9-8f12-4154-88eb-a5992b702ca0, 428b0587-d662-4764-9bfd-92c775f1135f).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-53-97.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-rows-53-97 (87fa11c9-8f12-4154-88eb-a5992b702ca0, 428b0587-d662-4764-9bfd-92c775f1135f).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-53-97.svg diff --git a/public/images/maps/holySepulchre-block-A-rows-B-T (c1602e8b-983f-4d38-9508-cac02a245468, 87f66f73-da7d-4cd5-a126-34a86af80c52).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-B-T.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-rows-B-T (c1602e8b-983f-4d38-9508-cac02a245468, 87f66f73-da7d-4cd5-a126-34a86af80c52).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-rows-B-T.svg diff --git a/public/images/maps/holySepulchre-block-A-urnRanges-52A-53A (b7d3ab77-6a63-4aaf-8e86-1056d1aebfc9, bf11a70e-193c-47ca-9bdb-e07a2f1c5bb3).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-52A-53A.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-urnRanges-52A-53A (b7d3ab77-6a63-4aaf-8e86-1056d1aebfc9, bf11a70e-193c-47ca-9bdb-e07a2f1c5bb3).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-52A-53A.svg diff --git a/public/images/maps/holySepulchre-block-A-urnRanges-72A-73A (29590769-cfc5-455e-8893-35d6839b4b7c, 2361fec7-93e6-413b-93ae-4e9ce7474df4).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-72A-73A.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-urnRanges-72A-73A (29590769-cfc5-455e-8893-35d6839b4b7c, 2361fec7-93e6-413b-93ae-4e9ce7474df4).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-72A-73A.svg diff --git a/public/images/maps/holySepulchre-block-A-urnRanges-97A-97B (479eb600-ed96-40d6-a842-26a0b3056c9f, 367f0188-c246-434b-b93a-ce4ffadba5fe).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-97A-97B.svg similarity index 100% rename from public/images/maps/holySepulchre-block-A-urnRanges-97A-97B (479eb600-ed96-40d6-a842-26a0b3056c9f, 367f0188-c246-434b-b93a-ce4ffadba5fe).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-A-urnRanges-97A-97B.svg diff --git a/public/images/maps/holySepulchre-block-B-rows-1-52 (d2e00207-a44a-4be4-b2cd-7a3441f05f66, d4aa206a-8642-477d-b3c8-a451c82e863a).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-1-52.svg similarity index 100% rename from public/images/maps/holySepulchre-block-B-rows-1-52 (d2e00207-a44a-4be4-b2cd-7a3441f05f66, d4aa206a-8642-477d-b3c8-a451c82e863a).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-1-52.svg diff --git a/public/images/maps/holySepulchre-block-B-rows-53-97 (737723fa-a595-44ef-a5c8-648e2984824c, dea8722a-9317-4a9d-b67d-1d404a3af085).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-53-97.svg similarity index 100% rename from public/images/maps/holySepulchre-block-B-rows-53-97 (737723fa-a595-44ef-a5c8-648e2984824c, dea8722a-9317-4a9d-b67d-1d404a3af085).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-53-97.svg diff --git a/public/images/maps/holySepulchre-block-B-rows-B-T (e8727845-47ea-4e93-8fab-3226f776b35d, b70d6495-1dbc-4d9a-8cfc-69f9b1b15418).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-B-T.svg similarity index 100% rename from public/images/maps/holySepulchre-block-B-rows-B-T (e8727845-47ea-4e93-8fab-3226f776b35d, b70d6495-1dbc-4d9a-8cfc-69f9b1b15418).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-B-rows-B-T.svg diff --git a/public/images/maps/holySepulchre-block-C-rows-1-36 (de24779a-edc6-4623-bf32-31625e7eeae9, 96e0da65-b04c-41c3-b534-256068440a78).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-C-rows-1-36.svg similarity index 100% rename from public/images/maps/holySepulchre-block-C-rows-1-36 (de24779a-edc6-4623-bf32-31625e7eeae9, 96e0da65-b04c-41c3-b534-256068440a78).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-C-rows-1-36.svg diff --git a/public/images/maps/holySepulchre-block-C-rows-B-U (f1c463b9-f542-4c94-bb1d-682c93a6bff2, e3007ea8-721c-414c-b1cd-f5f3ad29a5ea).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-C-rows-B-U.svg similarity index 100% rename from public/images/maps/holySepulchre-block-C-rows-B-U (f1c463b9-f542-4c94-bb1d-682c93a6bff2, e3007ea8-721c-414c-b1cd-f5f3ad29a5ea).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-C-rows-B-U.svg diff --git a/public/images/maps/holySepulchre-block-D-babyShrine (49be9136-7f17-4c8f-95df-f03446c46a7b, 24128a8b-bf58-4eed-b160-7533f3f2195f).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-D-babyShrine.svg similarity index 100% rename from public/images/maps/holySepulchre-block-D-babyShrine (49be9136-7f17-4c8f-95df-f03446c46a7b, 24128a8b-bf58-4eed-b160-7533f3f2195f).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-D-babyShrine.svg diff --git a/public/images/maps/holySepulchre-block-D-rows-A-L (be29f5d8-b724-4663-885a-3dd5cfc15928, 26b795dc-c542-4d7b-9d83-7108b01472e4).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-D-rows-A-L.svg similarity index 100% rename from public/images/maps/holySepulchre-block-D-rows-A-L (be29f5d8-b724-4663-885a-3dd5cfc15928, 26b795dc-c542-4d7b-9d83-7108b01472e4).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-D-rows-A-L.svg diff --git a/public/images/maps/holySepulchre-block-D-rows-M-V (631c9e8f-0aaa-4109-85e5-8207f78600f3, d1390b43-2f7b-48d7-bd6e-a7cb28b2f7e2).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-D-rows-M-V.svg similarity index 100% rename from public/images/maps/holySepulchre-block-D-rows-M-V (631c9e8f-0aaa-4109-85e5-8207f78600f3, d1390b43-2f7b-48d7-bd6e-a7cb28b2f7e2).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-D-rows-M-V.svg diff --git a/public/images/maps/holySepulchre-block-E-sectionCenter (def8122b-dc2a-4fff-a258-cbd0d31df80f, 13846d63-37f0-47a7-8725-cd3032f8f150).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionCenter.svg similarity index 100% rename from public/images/maps/holySepulchre-block-E-sectionCenter (def8122b-dc2a-4fff-a258-cbd0d31df80f, 13846d63-37f0-47a7-8725-cd3032f8f150).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionCenter.svg diff --git a/public/images/maps/holySepulchre-block-E-sectionEast (3f307004-d609-435a-a253-7ee50f3dd544, 270ae920-4fb2-4510-a136-92b7381b78f5).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionEast.svg similarity index 100% rename from public/images/maps/holySepulchre-block-E-sectionEast (3f307004-d609-435a-a253-7ee50f3dd544, 270ae920-4fb2-4510-a136-92b7381b78f5).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionEast.svg diff --git a/public/images/maps/holySepulchre-block-E-sectionWest (fbcfd412-992e-440c-97d7-a0bd685a8105, 6388bc74-af34-4cad-90b8-3e1836d5d443).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionWest.svg similarity index 100% rename from public/images/maps/holySepulchre-block-E-sectionWest (fbcfd412-992e-440c-97d7-a0bd685a8105, 6388bc74-af34-4cad-90b8-3e1836d5d443).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-E-sectionWest.svg diff --git a/public/images/maps/holySepulchre-block-F-rows-1-22 (f7b9867e-7800-4f5b-891c-be8769504300, 42fe726e-7ac9-4d77-b088-694b4cd41c43).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-F-rows-1-22.svg similarity index 100% rename from public/images/maps/holySepulchre-block-F-rows-1-22 (f7b9867e-7800-4f5b-891c-be8769504300, 42fe726e-7ac9-4d77-b088-694b4cd41c43).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-F-rows-1-22.svg diff --git a/public/images/maps/holySepulchre-block-G-rows-1-32 (55916a1b-d520-456c-9d0a-4e29f1bc833e, a100603f-ca65-429b-b96b-9da820b97ca5).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-G-rows-1-32.svg similarity index 100% rename from public/images/maps/holySepulchre-block-G-rows-1-32 (55916a1b-d520-456c-9d0a-4e29f1bc833e, a100603f-ca65-429b-b96b-9da820b97ca5).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-G-rows-1-32.svg diff --git a/public/images/maps/holySepulchre-block-H-rows-1-16 (6f0741ef-0f33-41eb-a614-243ee496e611, 98fd283b-d429-406c-a474-97af36626a0a).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-H-rows-1-16.svg similarity index 100% rename from public/images/maps/holySepulchre-block-H-rows-1-16 (6f0741ef-0f33-41eb-a614-243ee496e611, 98fd283b-d429-406c-a474-97af36626a0a).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-H-rows-1-16.svg diff --git a/public/images/maps/holySepulchre-block-J-rows-1-18 (9b77b6fb-097e-4793-9bb0-5f873ff8402c, b5345ea4-f092-4985-8829-b8877f1322bc).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-J-rows-1-18.svg similarity index 100% rename from public/images/maps/holySepulchre-block-J-rows-1-18 (9b77b6fb-097e-4793-9bb0-5f873ff8402c, b5345ea4-f092-4985-8829-b8877f1322bc).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-J-rows-1-18.svg diff --git a/public/images/maps/holySepulchre-block-K-rows-1-19 (17aeb1c1-5da8-4ed1-b079-85578df1f1a5, f75f8788-9409-41d2-beec-4bd6059656f8).svg b/public/images/maps/ssm.cemetery.holySepulchre-block-K-rows-1-19.svg similarity index 100% rename from public/images/maps/holySepulchre-block-K-rows-1-19 (17aeb1c1-5da8-4ed1-b079-85578df1f1a5, f75f8788-9409-41d2-beec-4bd6059656f8).svg rename to public/images/maps/ssm.cemetery.holySepulchre-block-K-rows-1-19.svg diff --git a/public/images/maps/holySepulchre-columbarium-O-P (ccf0e42c-36e2-4313-a6b2-399c82878dcc, 5c506eff-e84d-4a49-ad5c-b0f7678ba520).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-O-P.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-O-P (ccf0e42c-36e2-4313-a6b2-399c82878dcc, 5c506eff-e84d-4a49-ad5c-b0f7678ba520).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-O-P.svg diff --git a/public/images/maps/holySepulchre-columbarium-S (d11ffca7-cdbb-4e0a-beef-fe0fe1dfb409, 893af7dd-8004-481c-b891-886b294425e0).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-S.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-S (d11ffca7-cdbb-4e0a-beef-fe0fe1dfb409, 893af7dd-8004-481c-b891-886b294425e0).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-S.svg diff --git a/public/images/maps/holySepulchre-columbarium-T (363ceb66-0273-4e00-9c80-9b7496a269c2, 51c4fd29-dbc2-40e1-b24f-2cef72f8a06f).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-T.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-T (363ceb66-0273-4e00-9c80-9b7496a269c2, 51c4fd29-dbc2-40e1-b24f-2cef72f8a06f).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-T.svg diff --git a/public/images/maps/holySepulchre-columbarium-U (7dead22a-40ff-4e49-befc-c0a396250b0e, e6883102-b4fd-4638-bc7a-555d16d663d1).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-U.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-U (7dead22a-40ff-4e49-befc-c0a396250b0e, e6883102-b4fd-4638-bc7a-555d16d663d1).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-U.svg diff --git a/public/images/maps/holySepulchre-columbarium-V (4adc587d-e480-4332-9db0-7aa77010f802, 478e1bce-1a7a-4ad3-97d8-61daa71609d9).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-V.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-V (4adc587d-e480-4332-9db0-7aa77010f802, 478e1bce-1a7a-4ad3-97d8-61daa71609d9).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-V.svg diff --git a/public/images/maps/holySepulchre-columbarium-W (2b87dd96-dc65-4972-9c47-af3e479507e1, 59d32426-d93a-4201-b976-d523e2d01ce8).svg b/public/images/maps/ssm.cemetery.holySepulchre-columbarium-W.svg similarity index 100% rename from public/images/maps/holySepulchre-columbarium-W (2b87dd96-dc65-4972-9c47-af3e479507e1, 59d32426-d93a-4201-b976-d523e2d01ce8).svg rename to public/images/maps/ssm.cemetery.holySepulchre-columbarium-W.svg diff --git a/public/images/maps/holySepulchre-mausoleum-east (fc9a4bcc-a762-493f-a78d-d6115f01d236, e70375d9-7314-4dde-ba43-8cd4508fa1b2).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-east.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-east (fc9a4bcc-a762-493f-a78d-d6115f01d236, e70375d9-7314-4dde-ba43-8cd4508fa1b2).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-east.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-J-E (2d378027-a930-4285-b8ba-9fa507599a0e, 78751aaf-4592-469d-9a7a-0ae8daacedab).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-J-E.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-J-E (2d378027-a930-4285-b8ba-9fa507599a0e, 78751aaf-4592-469d-9a7a-0ae8daacedab).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-J-E.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-J-W (f5afcccf-8328-4031-933e-804023fe9a7f, f14e21fb-dcc6-4fe0-8703-c77f599321f7).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-J-W.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-J-W (f5afcccf-8328-4031-933e-804023fe9a7f, f14e21fb-dcc6-4fe0-8703-c77f599321f7).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-J-W.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-L-E (3f285df1-721a-423f-a2ff-d440c933a6c3, 5dcb31b8-dcf8-4a6f-9b8c-7b0e4bb2b4bf).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L-E.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-L-E (3f285df1-721a-423f-a2ff-d440c933a6c3, 5dcb31b8-dcf8-4a6f-9b8c-7b0e4bb2b4bf).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L-E.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-L-W (12d943ad-3e7c-43f4-ac85-0938e6fc919d, 9c4edf97-b139-4dba-80e1-246cf0a5f73a).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L-W.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-L-W (12d943ad-3e7c-43f4-ac85-0938e6fc919d, 9c4edf97-b139-4dba-80e1-246cf0a5f73a).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L-W.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-L (8b60a236-4a19-4a28-874a-6492873236cc, b711cd8b-6adf-4e74-9a93-9c472c806f5a).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-L (8b60a236-4a19-4a28-874a-6492873236cc, b711cd8b-6adf-4e74-9a93-9c472c806f5a).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-L.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-M-E (c3a1dc37-833e-4499-92eb-9585ab30da84, 4551f949-162e-4285-9160-0cca1eeeb9c4).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M-E.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-M-E (c3a1dc37-833e-4499-92eb-9585ab30da84, 4551f949-162e-4285-9160-0cca1eeeb9c4).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M-E.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-M-W (657d144e-4632-418a-b72c-0b6eb517101c, 111ae74e-f104-4778-9347-023d1e7736f4).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M-W.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-M-W (657d144e-4632-418a-b72c-0b6eb517101c, 111ae74e-f104-4778-9347-023d1e7736f4).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M-W.svg diff --git a/public/images/maps/holySepulchre-mausoleum-niche-M (6016d5cd-819a-44fc-b1f1-1aefbde6a360, dae1a3fb-d58e-43f2-a8c4-8cafbf412d2c).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-niche-M (6016d5cd-819a-44fc-b1f1-1aefbde6a360, dae1a3fb-d58e-43f2-a8c4-8cafbf412d2c).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-niche-M.svg diff --git a/public/images/maps/holySepulchre-mausoleum-section-T (30692472-f7dd-41cc-bbca-12e94680e83f, 2c15bd67-de67-4474-9106-ad1c67eb8650).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-section-T.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-section-T (30692472-f7dd-41cc-bbca-12e94680e83f, 2c15bd67-de67-4474-9106-ad1c67eb8650).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-section-T.svg diff --git a/public/images/maps/holySepulchre-mausoleum-section-U (8cd267db-1d30-454c-b3a2-7f21f9c0ba18, 094f14cb-7b5f-4488-aa96-7f80bd8aa3fd).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-section-U.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-section-U (8cd267db-1d30-454c-b3a2-7f21f9c0ba18, 094f14cb-7b5f-4488-aa96-7f80bd8aa3fd).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-section-U.svg diff --git a/public/images/maps/holySepulchre-mausoleum-west (0b7cc779-d151-4732-bd9f-55f27ba13ffb, 9f055a1f-86ae-4fe0-945e-0a9e83fdf263).svg b/public/images/maps/ssm.cemetery.holySepulchre-mausoleum-west.svg similarity index 100% rename from public/images/maps/holySepulchre-mausoleum-west (0b7cc779-d151-4732-bd9f-55f27ba13ffb, 9f055a1f-86ae-4fe0-945e-0a9e83fdf263).svg rename to public/images/maps/ssm.cemetery.holySepulchre-mausoleum-west.svg diff --git a/public/images/maps/holySepulchre-overview.svg b/public/images/maps/ssm.cemetery.holySepulchre-overview.svg similarity index 100% rename from public/images/maps/holySepulchre-overview.svg rename to public/images/maps/ssm.cemetery.holySepulchre-overview.svg diff --git a/public/images/maps/newGreenwood-columbarium-A (f73f9667-d215-4a62-bb7c-5ad95e1352db, 67c0ecba-141e-4fb5-9c06-8363904063c0).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-A.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-A (f73f9667-d215-4a62-bb7c-5ad95e1352db, 67c0ecba-141e-4fb5-9c06-8363904063c0).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-A.svg diff --git a/public/images/maps/newGreenwood-columbarium-B (16be946c-ae5a-4ee0-90db-c6721f490a2c, 1481cf4b-cd08-4bfc-ad94-806fcf2bef33).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-B.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-B (16be946c-ae5a-4ee0-90db-c6721f490a2c, 1481cf4b-cd08-4bfc-ad94-806fcf2bef33).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-B.svg diff --git a/public/images/maps/newGreenwood-columbarium-C (e83f5e2b-4580-40be-9657-ac13a310c77f, 6c713d9d-5493-47a1-a390-8497a35dd5c7).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-C.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-C (e83f5e2b-4580-40be-9657-ac13a310c77f, 6c713d9d-5493-47a1-a390-8497a35dd5c7).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-C.svg diff --git a/public/images/maps/newGreenwood-columbarium-D (ad9ebc87-dfe5-417f-8294-54ee73dd47f4, 3194e7fa-7267-459a-b13c-b9a6c14deed1).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-D.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-D (ad9ebc87-dfe5-417f-8294-54ee73dd47f4, 3194e7fa-7267-459a-b13c-b9a6c14deed1).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-D.svg diff --git a/public/images/maps/newGreenwood-columbarium-E (57e2fc58-0ae2-45cb-9021-6437bb530202, 4cbd9e7d-8b17-4eba-91d8-7f99976df376).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-E.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-E (57e2fc58-0ae2-45cb-9021-6437bb530202, 4cbd9e7d-8b17-4eba-91d8-7f99976df376).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-E.svg diff --git a/public/images/maps/newGreenwood-columbarium-F (eacfeb63-7d75-454c-b891-2eaf69a4cf3e, 814234ea-5870-4428-92b9-edf03a89995a).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-F.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-F (eacfeb63-7d75-454c-b891-2eaf69a4cf3e, 814234ea-5870-4428-92b9-edf03a89995a).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-F.svg diff --git a/public/images/maps/newGreenwood-columbarium-G (0c1a6bb9-ae10-4e77-99ef-0de506c0cd42, 564d3437-abfd-410a-94b1-6d4b0bc1275a).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-G.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-G (0c1a6bb9-ae10-4e77-99ef-0de506c0cd42, 564d3437-abfd-410a-94b1-6d4b0bc1275a).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-G.svg diff --git a/public/images/maps/newGreenwood-columbarium-H (5fec6c60-45fd-46b0-90b3-7cdf88ddb905, 865aae59-2535-4690-a03d-cdd08bcbe12c).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-H.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-H (5fec6c60-45fd-46b0-90b3-7cdf88ddb905, 865aae59-2535-4690-a03d-cdd08bcbe12c).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-H.svg diff --git a/public/images/maps/newGreenwood-columbarium-I (bd647893-d7b0-4017-9c4c-2ca46e5cfd9a, c496a6a6-1f52-4539-9c4a-fcc03e3b573a).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-I.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-I (bd647893-d7b0-4017-9c4c-2ca46e5cfd9a, c496a6a6-1f52-4539-9c4a-fcc03e3b573a).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-I.svg diff --git a/public/images/maps/newGreenwood-columbarium-J (b21345a5-65d5-4a2e-b0ee-b946c9408d8a, 9121ae96-f3d6-4016-b7ff-8423f4d94d76).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-J.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-J (b21345a5-65d5-4a2e-b0ee-b946c9408d8a, 9121ae96-f3d6-4016-b7ff-8423f4d94d76).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-J.svg diff --git a/public/images/maps/newGreenwood-columbarium-K (de3985aa-51cf-4247-8101-22046117e618, 89b5120d-e644-46a1-bb6c-198de36c5b24).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-K.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-K (de3985aa-51cf-4247-8101-22046117e618, 89b5120d-e644-46a1-bb6c-198de36c5b24).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-K.svg diff --git a/public/images/maps/newGreenwood-columbarium-L (14cfb32d-4eb0-4c74-a788-2a6454ccaf4a, 4a122656-89eb-43eb-ada0-ceb2b9342c81).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-L.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-L (14cfb32d-4eb0-4c74-a788-2a6454ccaf4a, 4a122656-89eb-43eb-ada0-ceb2b9342c81).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-L.svg diff --git a/public/images/maps/newGreenwood-columbarium-M (b7c858a3-0326-4ee6-83e7-9b0cf8a3fb53, 315c09b4-e465-418f-82d0-c3580b83913d).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-M.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-M (b7c858a3-0326-4ee6-83e7-9b0cf8a3fb53, 315c09b4-e465-418f-82d0-c3580b83913d).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-M.svg diff --git a/public/images/maps/newGreenwood-columbarium-N (5b265feb-9a0f-4ee1-af11-930feb6583b1, 0839376b-0e3f-4e90-b78c-8740ba44e14c).svg b/public/images/maps/ssm.cemetery.newGreenwood-columbarium-N.svg similarity index 100% rename from public/images/maps/newGreenwood-columbarium-N (5b265feb-9a0f-4ee1-af11-930feb6583b1, 0839376b-0e3f-4e90-b78c-8740ba44e14c).svg rename to public/images/maps/ssm.cemetery.newGreenwood-columbarium-N.svg diff --git a/public/images/maps/newGreenwood-infantsSection (e9e319bd-2c5b-415f-a013-d3ba86c15083, ba4aa864-ab4a-4bf8-8b51-a47dddcafe59).svg b/public/images/maps/ssm.cemetery.newGreenwood-infantsSection.svg similarity index 100% rename from public/images/maps/newGreenwood-infantsSection (e9e319bd-2c5b-415f-a013-d3ba86c15083, ba4aa864-ab4a-4bf8-8b51-a47dddcafe59).svg rename to public/images/maps/ssm.cemetery.newGreenwood-infantsSection.svg diff --git a/public/images/maps/newGreenwood-nicheWall-1-40 (5b70b2b7-0db7-4035-9954-bf96f608c902, 947b8dd6-5daa-46ad-9f96-90f270d8ab3d).svg b/public/images/maps/ssm.cemetery.newGreenwood-nicheWall-1-40.svg similarity index 100% rename from public/images/maps/newGreenwood-nicheWall-1-40 (5b70b2b7-0db7-4035-9954-bf96f608c902, 947b8dd6-5daa-46ad-9f96-90f270d8ab3d).svg rename to public/images/maps/ssm.cemetery.newGreenwood-nicheWall-1-40.svg diff --git a/public/images/maps/newGreenwood-nicheWall-41-80 (5739ffcc-9618-4170-b004-7459a948a008, 5fd580c8-0831-4a5d-8a61-609d5b4b1269).svg b/public/images/maps/ssm.cemetery.newGreenwood-nicheWall-41-80.svg similarity index 100% rename from public/images/maps/newGreenwood-nicheWall-41-80 (5739ffcc-9618-4170-b004-7459a948a008, 5fd580c8-0831-4a5d-8a61-609d5b4b1269).svg rename to public/images/maps/ssm.cemetery.newGreenwood-nicheWall-41-80.svg diff --git a/public/images/maps/newGreenwood-nicheWall-81-106 (5f565cde-1049-4b8c-8119-7e1002ecab9d, 718faff5-191d-4cb0-a6c4-fc100dcb8d12).svg b/public/images/maps/ssm.cemetery.newGreenwood-nicheWall-81-106.svg similarity index 100% rename from public/images/maps/newGreenwood-nicheWall-81-106 (5f565cde-1049-4b8c-8119-7e1002ecab9d, 718faff5-191d-4cb0-a6c4-fc100dcb8d12).svg rename to public/images/maps/ssm.cemetery.newGreenwood-nicheWall-81-106.svg diff --git a/public/images/maps/newGreenwood-overview.svg b/public/images/maps/ssm.cemetery.newGreenwood-overview.svg similarity index 100% rename from public/images/maps/newGreenwood-overview.svg rename to public/images/maps/ssm.cemetery.newGreenwood-overview.svg diff --git a/public/images/maps/newGreenwood-rows-1-31-lots 3-21 (88754d9d-9895-4de4-a977-b9a2e8069c88, ad19b731-c37d-43b7-a89e-5caaf1daff59).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-1-31-lots 3-21.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-1-31-lots 3-21 (88754d9d-9895-4de4-a977-b9a2e8069c88, ad19b731-c37d-43b7-a89e-5caaf1daff59).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-1-31-lots 3-21.svg diff --git a/public/images/maps/newGreenwood-rows-1-31-lots-22-46 (d8c5f1ee-0bbc-4796-99fb-7886c2f24a37, 57cbdb69-24d9-4fa4-ac1b-27d73a7cbdb3).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-1-31-lots-22-46.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-1-31-lots-22-46 (d8c5f1ee-0bbc-4796-99fb-7886c2f24a37, 57cbdb69-24d9-4fa4-ac1b-27d73a7cbdb3).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-1-31-lots-22-46.svg diff --git a/public/images/maps/newGreenwood-rows-25-61-lots-47-59 (17cde84a-d718-4f8c-b390-a5b1be7790f9, cbde6623-43ae-4e85-a519-a0b12cd82569).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-25-61-lots-47-59.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-25-61-lots-47-59 (17cde84a-d718-4f8c-b390-a5b1be7790f9, cbde6623-43ae-4e85-a519-a0b12cd82569).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-25-61-lots-47-59.svg diff --git a/public/images/maps/newGreenwood-rows-33-60-lots-4-21A (2d82ebf0-ca52-44cb-adbe-7ac9805261ed, 17d566ca-1689-49cd-9295-d6e6e9ad4e10).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-33-60-lots-4-21A.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-33-60-lots-4-21A (2d82ebf0-ca52-44cb-adbe-7ac9805261ed, 17d566ca-1689-49cd-9295-d6e6e9ad4e10).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-33-60-lots-4-21A.svg diff --git a/public/images/maps/newGreenwood-rows-33-61-lots-22-46 (f13bf83f-1d75-43e1-a20c-0baf439e645e, 9cd6fd8c-63e4-47ce-964b-83a959ba8a6e).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-33-61-lots-22-46.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-33-61-lots-22-46 (f13bf83f-1d75-43e1-a20c-0baf439e645e, 9cd6fd8c-63e4-47ce-964b-83a959ba8a6e).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-33-61-lots-22-46.svg diff --git a/public/images/maps/newGreenwood-rows-63-94-lots-24-40 (09dfd9ab-3470-495c-8fc2-bf79aa2149e8, 71ab5496-f1bf-4152-8c40-16e5dad875c9).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-63-94-lots-24-40.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-63-94-lots-24-40 (09dfd9ab-3470-495c-8fc2-bf79aa2149e8, 71ab5496-f1bf-4152-8c40-16e5dad875c9).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-63-94-lots-24-40.svg diff --git a/public/images/maps/newGreenwood-rows-63-94-lots-47-59 (03a3a261-6bb9-402f-b884-095e74162e2b, 14738395-5610-4e97-855b-43c66ff6eb03).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-63-94-lots-47-59.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-63-94-lots-47-59 (03a3a261-6bb9-402f-b884-095e74162e2b, 14738395-5610-4e97-855b-43c66ff6eb03).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-63-94-lots-47-59.svg diff --git a/public/images/maps/newGreenwood-rows-66-95-lots-12-24 (67484236-41db-4cc4-a9f7-4539c472bce7, ebd4968b-04ec-4288-9810-10e2ed43ed0b).svg b/public/images/maps/ssm.cemetery.newGreenwood-rows-66-95-lots-12-24.svg similarity index 100% rename from public/images/maps/newGreenwood-rows-66-95-lots-12-24 (67484236-41db-4cc4-a9f7-4539c472bce7, ebd4968b-04ec-4288-9810-10e2ed43ed0b).svg rename to public/images/maps/ssm.cemetery.newGreenwood-rows-66-95-lots-12-24.svg diff --git a/public/images/maps/newGreenwood-urnGarden.svg b/public/images/maps/ssm.cemetery.newGreenwood-urnGarden.svg similarity index 100% rename from public/images/maps/newGreenwood-urnGarden.svg rename to public/images/maps/ssm.cemetery.newGreenwood-urnGarden.svg diff --git a/public/images/maps/newGreenwood-veteransSection (dfa8960b-47fb-4ba0-b48a-00d2c268fefb, cafbec22-337d-4ac8-9b57-e0f48803943a).svg b/public/images/maps/ssm.cemetery.newGreenwood-veteransSection.svg similarity index 100% rename from public/images/maps/newGreenwood-veteransSection (dfa8960b-47fb-4ba0-b48a-00d2c268fefb, cafbec22-337d-4ac8-9b57-e0f48803943a).svg rename to public/images/maps/ssm.cemetery.newGreenwood-veteransSection.svg diff --git a/public/images/maps/oldGreenwood-babySection (badc8b5a-d687-48b0-ac11-6290e977b3ca, 09730968-79ec-45f7-aca7-c3790beca297).svg b/public/images/maps/ssm.cemetery.oldGreenwood-babySection.svg similarity index 100% rename from public/images/maps/oldGreenwood-babySection (badc8b5a-d687-48b0-ac11-6290e977b3ca, 09730968-79ec-45f7-aca7-c3790beca297).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-babySection.svg diff --git a/public/images/maps/oldGreenwood-eastNorth-rows-1-18-lots-1-11 (76619606-411d-4387-a78f-66e47f9ba7be, 2bc05828-d127-4f53-8a10-43464bf56601).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-1-11.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastNorth-rows-1-18-lots-1-11 (76619606-411d-4387-a78f-66e47f9ba7be, 2bc05828-d127-4f53-8a10-43464bf56601).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-1-11.svg diff --git a/public/images/maps/oldGreenwood-eastNorth-rows-1-18-lots-12-17 (be441559-acdd-4364-b086-2fd9094ae669, eddfaa59-e592-4f2b-84af-4ab078c29f1c).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-12-17.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastNorth-rows-1-18-lots-12-17 (be441559-acdd-4364-b086-2fd9094ae669, eddfaa59-e592-4f2b-84af-4ab078c29f1c).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-1-18-lots-12-17.svg diff --git a/public/images/maps/oldGreenwood-eastNorth-rows-19-38-lots-1-11 (39a0037c-0145-4d99-b1f4-a51d89802da0, 12836593-877e-4953-b638-71b894084e46).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-1-11.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastNorth-rows-19-38-lots-1-11 (39a0037c-0145-4d99-b1f4-a51d89802da0, 12836593-877e-4953-b638-71b894084e46).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-1-11.svg diff --git a/public/images/maps/oldGreenwood-eastNorth-rows-19-38-lots-12-17 (1b6d21ab-66c6-4264-9a75-4d6d93c0cbc3, 3c3441be-3c04-458f-9da5-59bb27b9fb5c).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-12-17.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastNorth-rows-19-38-lots-12-17 (1b6d21ab-66c6-4264-9a75-4d6d93c0cbc3, 3c3441be-3c04-458f-9da5-59bb27b9fb5c).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastNorth-rows-19-38-lots-12-17.svg diff --git a/public/images/maps/oldGreenwood-eastSouthA-rows-1-18-lots 23-31 (c7184cfa-31b3-445c-84f7-560465e58031, 8b103b97-c945-4b92-961d-3359dddbe2db).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots 23-31.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthA-rows-1-18-lots 23-31 (c7184cfa-31b3-445c-84f7-560465e58031, 8b103b97-c945-4b92-961d-3359dddbe2db).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots 23-31.svg diff --git a/public/images/maps/oldGreenwood-eastSouthA-rows-1-18-lots-1-22 (874dc9bd-92af-4657-9f88-b659ab8fbb3c, aa68c1e1-dc27-47f5-afd2-3632d58c8811).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots-1-22.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthA-rows-1-18-lots-1-22 (874dc9bd-92af-4657-9f88-b659ab8fbb3c, aa68c1e1-dc27-47f5-afd2-3632d58c8811).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-1-18-lots-1-22.svg diff --git a/public/images/maps/oldGreenwood-eastSouthA-rows-19-32-lots-1-22 (2fee7675-e377-483e-993a-1bb4d3b8b04b, 0cdca656-adc8-4927-ac09-414bac7d7f11).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-1-22.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthA-rows-19-32-lots-1-22 (2fee7675-e377-483e-993a-1bb4d3b8b04b, 0cdca656-adc8-4927-ac09-414bac7d7f11).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-1-22.svg diff --git a/public/images/maps/oldGreenwood-eastSouthA-rows-19-32-lots-23-31 (453fd8e1-d5b8-42b5-bb3b-a89b96ca0d06, 4b20396b-9827-4639-80c2-94466ebca164).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-23-31.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthA-rows-19-32-lots-23-31 (453fd8e1-d5b8-42b5-bb3b-a89b96ca0d06, 4b20396b-9827-4639-80c2-94466ebca164).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthA-rows-19-32-lots-23-31.svg diff --git a/public/images/maps/oldGreenwood-eastSouthB-lots-33-45-rows-1-22 (f5eadd1c-9d23-4f43-9b9b-c33eea9fb51b, db49f720-2b27-4faa-9000-d57c23d857a0).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-lots-33-45-rows-1-22.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthB-lots-33-45-rows-1-22 (f5eadd1c-9d23-4f43-9b9b-c33eea9fb51b, db49f720-2b27-4faa-9000-d57c23d857a0).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-lots-33-45-rows-1-22.svg diff --git a/public/images/maps/oldGreenwood-eastSouthB-rows-33-57-lots 23-31 (3a833486-a869-490b-8e47-bcf07b0045a0, 8e2b9dd7-5364-44ff-9103-4e476ded3104).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-rows-33-57-lots 23-31.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthB-rows-33-57-lots 23-31 (3a833486-a869-490b-8e47-bcf07b0045a0, 8e2b9dd7-5364-44ff-9103-4e476ded3104).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-rows-33-57-lots 23-31.svg diff --git a/public/images/maps/oldGreenwood-eastSouthB-rows-46-57-lots-11-24 (28daa4e5-edb8-495d-92dd-5c773663fed2, 24d47e75-9b02-4b61-8545-9d694d81b060).svg b/public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-rows-46-57-lots-11-24.svg similarity index 100% rename from public/images/maps/oldGreenwood-eastSouthB-rows-46-57-lots-11-24 (28daa4e5-edb8-495d-92dd-5c773663fed2, 24d47e75-9b02-4b61-8545-9d694d81b060).svg rename to public/images/maps/ssm.cemetery.oldGreenwood-eastSouthB-rows-46-57-lots-11-24.svg diff --git a/public/images/maps/oldGreenwood-overview.svg b/public/images/maps/ssm.cemetery.oldGreenwood-overview.svg similarity index 100% rename from public/images/maps/oldGreenwood-overview.svg rename to public/images/maps/ssm.cemetery.oldGreenwood-overview.svg diff --git a/public/images/maps/oldGreenwood-westSection.svg b/public/images/maps/ssm.cemetery.oldGreenwood-westSection.svg similarity index 100% rename from public/images/maps/oldGreenwood-westSection.svg rename to public/images/maps/ssm.cemetery.oldGreenwood-westSection.svg diff --git a/public/images/maps/pineGrove-overview.svg b/public/images/maps/ssm.cemetery.pineGrove-overview.svg similarity index 100% rename from public/images/maps/pineGrove-overview.svg rename to public/images/maps/ssm.cemetery.pineGrove-overview.svg diff --git a/public/images/maps/westKorah-eastSection (4eb1d691-e170-44fe-9c16-d0b07bfc2cef, b2bbfb9e-020e-4c9d-b8a1-e9505432d225).svg b/public/images/maps/ssm.cemetery.westKorah-eastSection.svg similarity index 100% rename from public/images/maps/westKorah-eastSection (4eb1d691-e170-44fe-9c16-d0b07bfc2cef, b2bbfb9e-020e-4c9d-b8a1-e9505432d225).svg rename to public/images/maps/ssm.cemetery.westKorah-eastSection.svg diff --git a/public/images/maps/westKorah-northSection (eb81c28a-3683-467a-aed9-293b451b1dc1, c0135b86-8f79-48b4-9e1c-155a5bda24a0).svg b/public/images/maps/ssm.cemetery.westKorah-northSection.svg similarity index 100% rename from public/images/maps/westKorah-northSection (eb81c28a-3683-467a-aed9-293b451b1dc1, c0135b86-8f79-48b4-9e1c-155a5bda24a0).svg rename to public/images/maps/ssm.cemetery.westKorah-northSection.svg diff --git a/public/images/maps/westKorah-overview.svg b/public/images/maps/ssm.cemetery.westKorah-overview.svg similarity index 100% rename from public/images/maps/westKorah-overview.svg rename to public/images/maps/ssm.cemetery.westKorah-overview.svg diff --git a/public/images/maps/westKorah-westSection (53f302a5-e46c-4a1c-863c-dd40b8f18144, 2c5e13e5-4ec0-4b9a-b472-1237b5d9f4e9).svg b/public/images/maps/ssm.cemetery.westKorah-westSection.svg similarity index 100% rename from public/images/maps/westKorah-westSection (53f302a5-e46c-4a1c-863c-dd40b8f18144, 2c5e13e5-4ec0-4b9a-b472-1237b5d9f4e9).svg rename to public/images/maps/ssm.cemetery.westKorah-westSection.svg diff --git a/public/javascripts/lotSearch.min.js b/public/javascripts/lotSearch.min.js new file mode 100644 index 00000000..08b1545d --- /dev/null +++ b/public/javascripts/lotSearch.min.js @@ -0,0 +1 @@ +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#form--searchFilters"),s=document.querySelector("#container--searchResults"),a=()=>{s.innerHTML='

Loading '+exports.aliases.lots+"...
",cityssm.postJSON(e+"/lots/doSearchLots",t,t=>{if(0===t.lots.length)return void(s.innerHTML='

There are no '+exports.aliases.lots.toLowerCase()+" that meet the search criteria.

");const a=document.createElement("tbody");for(const s of t.lots)a.insertAdjacentHTML("beforeend",'");s.innerHTML='
" + exports.aliases.lot + "" + exports.aliases.lot + " TypeStatus" + exports.aliases.map + "
" + "" + @@ -40,16 +40,20 @@ Object.defineProperty(exports, "__esModule", { value: true }); cityssm.escapeHTML(map.mapAddress1) + "" + - (map.mapLatitude && map.mapLongitude - ? "" - : "") + + (map.mapLatitude && map.mapLongitude ? + "" : + "") + "" + - (map.mapSVG - ? "" - : "") + + (map.mapSVG ? + "" : + "") + "" + map.lotCount + "" + + "" + + map.lotCount + + "" + + "
" + @@ -62,16 +63,20 @@ declare const bulmaJS: BulmaJS; cityssm.escapeHTML(map.mapAddress1) + "" + - (map.mapLatitude && map.mapLongitude - ? "" - : "") + + (map.mapLatitude && map.mapLongitude ? + "" : + "") + "" + - (map.mapSVG - ? "" - : "") + + (map.mapSVG ? + "" : + "") + "" + map.lotCount + "" + + "" + + map.lotCount + + "" + + "
'+s.lotName+""+s.lotType+""+s.lotStatus+""+s.mapName+"
",s.querySelector("table").append(a)})},r=t.querySelectorAll("input, select");for(const e of r)e.addEventListener("change",a);t.addEventListener("submit",e=>{e.preventDefault(),a()}),a()})(); \ No newline at end of file diff --git a/public/javascripts/mapEdit.min.js b/public/javascripts/mapEdit.min.js new file mode 100644 index 00000000..d99df116 --- /dev/null +++ b/public/javascripts/mapEdit.min.js @@ -0,0 +1 @@ +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,a=""===document.querySelector("#map--mapId").value,t=document.querySelector("#form--map");t.addEventListener("submit",s=>{s.preventDefault(),cityssm.postJSON(e+"/maps/"+(a?"doCreateMap":"doUpdateMap"),t,t=>{t.success?a?window.location.href=e+"/maps/"+t.mapId+"/edit":bulmaJS.alert({message:exports.aliases.map+" Updated Successfully",contextualColorName:"success"}):bulmaJS.alert({title:"Error Updating "+exports.aliases.map,message:t.errorMessage,contextualColorName:"danger"})})})})(); \ No newline at end of file diff --git a/public/javascripts/mapSearch.min.js b/public/javascripts/mapSearch.min.js index f3b44881..053c2ffd 100644 --- a/public/javascripts/mapSearch.min.js +++ b/public/javascripts/mapSearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=exports.maps,s=document.querySelector("#searchFilter--map"),a=document.querySelector("#container--searchResults"),r=()=>{a.innerHTML='

Loading '+exports.aliases.maps+"...
";let r=0;const i=document.createElement("tbody"),o=s.value.trim().toLowerCase().split(" ");for(const s of t){const t=(s.mapName+" "+s.mapDescription+" "+s.mapAddress1+" "+s.mapAddress2).toLowerCase();let a=!0;for(const e of o)if(!t.includes(e)){a=!1;break}if(!a)continue;r+=1;const c=""===s.mapName?"(No Name)":s.mapName;i.insertAdjacentHTML("beforeend",'")}if(a.innerHTML="",0===r)a.innerHTML='

There are no '+exports.aliases.maps.toLowerCase()+" that meet the search criteria.

";else{const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML="",e.append(i),a.append(e)}};s.addEventListener("keyup",r),document.querySelector("#form--searchFilters").addEventListener("submit",r),r()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=exports.maps,a=document.querySelector("#searchFilter--map"),s=document.querySelector("#container--searchResults"),r=()=>{s.innerHTML='

Loading '+exports.aliases.maps+"...
";let r=0;const i=document.createElement("tbody"),o=a.value.trim().toLowerCase().split(" ");for(const a of t){const t=(a.mapName+" "+a.mapDescription+" "+a.mapAddress1+" "+a.mapAddress2).toLowerCase();let s=!0;for(const e of o)if(!t.includes(e)){s=!1;break}if(!s)continue;r+=1;const c=""===a.mapName?"(No Name)":a.mapName;i.insertAdjacentHTML("beforeend",'")}if(s.innerHTML="",0===r)s.innerHTML='

There are no '+exports.aliases.maps.toLowerCase()+" that meet the search criteria.

";else{const e=document.createElement("table");e.className="table is-fullwidth is-striped is-hoverable",e.innerHTML="",e.append(i),s.append(e)}};a.addEventListener("keyup",r),document.querySelector("#form--searchFilters").addEventListener("submit",e=>{e.preventDefault(),r()}),r()})(); \ No newline at end of file diff --git a/routes/lots.js b/routes/lots.js index 063e2509..3412177a 100644 --- a/routes/lots.js +++ b/routes/lots.js @@ -1,12 +1,14 @@ import { Router } from "express"; import * as permissionHandlers from "../handlers/permissions.js"; import handler_search from "../handlers/lots-get/search.js"; +import handler_doSearchLots from "../handlers/lots-post/doSearchLots.js"; import handler_view from "../handlers/lots-get/view.js"; import handler_new from "../handlers/lots-get/new.js"; import handler_edit from "../handlers/lots-get/edit.js"; import handler_print from "../handlers/lots-get/print.js"; export const router = Router(); router.get("/", handler_search); +router.post("/doSearchLots", handler_doSearchLots); router.get("/new", permissionHandlers.updateGetHandler, handler_new); router.get("/:licenceID", handler_view); router.get("/:licenceID/edit", permissionHandlers.updateGetHandler, handler_edit); diff --git a/routes/lots.ts b/routes/lots.ts index 7486a480..67769d43 100644 --- a/routes/lots.ts +++ b/routes/lots.ts @@ -3,6 +3,7 @@ import { Router } from "express"; import * as permissionHandlers from "../handlers/permissions.js"; import handler_search from "../handlers/lots-get/search.js"; +import handler_doSearchLots from "../handlers/lots-post/doSearchLots.js"; import handler_view from "../handlers/lots-get/view.js"; import handler_new from "../handlers/lots-get/new.js"; @@ -20,6 +21,9 @@ export const router = Router(); router.get("/", handler_search); + +router.post("/doSearchLots", + handler_doSearchLots); /* diff --git a/routes/maps.js b/routes/maps.js index 568472d7..fe2cc841 100644 --- a/routes/maps.js +++ b/routes/maps.js @@ -3,8 +3,14 @@ import * as permissionHandlers from "../handlers/permissions.js"; import handler_search from "../handlers/maps-get/search.js"; import handler_view from "../handlers/maps-get/view.js"; import handler_new from "../handlers/maps-get/new.js"; +import handler_edit from "../handlers/maps-get/edit.js"; +import handler_doCreateMap from "../handlers/maps-post/doCreateMap.js"; +import handler_doUpdateMap from "../handlers/maps-post/doUpdateMap.js"; export const router = Router(); router.get("/", handler_search); router.get("/new", permissionHandlers.updateGetHandler, handler_new); router.get("/:mapId", handler_view); +router.get("/:mapId/edit", permissionHandlers.updateGetHandler, handler_edit); +router.post("/doCreateMap", permissionHandlers.updatePostHandler, handler_doCreateMap); +router.post("/doUpdateMap", permissionHandlers.updatePostHandler, handler_doUpdateMap); export default router; diff --git a/routes/maps.ts b/routes/maps.ts index 91c61a16..bbf5ee40 100644 --- a/routes/maps.ts +++ b/routes/maps.ts @@ -1,4 +1,6 @@ -import { Router } from "express"; +import { + Router +} from "express"; import * as permissionHandlers from "../handlers/permissions.js"; @@ -6,23 +8,41 @@ import handler_search from "../handlers/maps-get/search.js"; import handler_view from "../handlers/maps-get/view.js"; import handler_new from "../handlers/maps-get/new.js"; +import handler_edit from "../handlers/maps-get/edit.js"; + +import handler_doCreateMap from "../handlers/maps-post/doCreateMap.js"; +import handler_doUpdateMap from "../handlers/maps-post/doUpdateMap.js"; export const router = Router(); router.get("/", - handler_search); + handler_search); router.get("/new", - permissionHandlers.updateGetHandler, - handler_new); + permissionHandlers.updateGetHandler, + handler_new); router.get("/:mapId", handler_view); +router.get("/:mapId/edit", + permissionHandlers.updateGetHandler, + handler_edit); + + +router.post("/doCreateMap", + permissionHandlers.updatePostHandler, + handler_doCreateMap); + + +router.post("/doUpdateMap", + permissionHandlers.updatePostHandler, + handler_doUpdateMap); + export default router; \ No newline at end of file diff --git a/temp/legacy.importFromCSV.js b/temp/legacy.importFromCSV.js index 8544c170..849f5765 100644 --- a/temp/legacy.importFromCSV.js +++ b/temp/legacy.importFromCSV.js @@ -3,10 +3,10 @@ import papa from "papaparse"; import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../data/databasePaths.js"; import * as cacheFunctions from "../helpers/functions.cache.js"; -import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { addMap } from "../helpers/lotOccupancyDB/addMap.js"; import { getMap as getMapFromDatabase } from "../helpers/lotOccupancyDB/getMap.js"; import { addLot } from "../helpers/lotOccupancyDB/addLot.js"; +import { updateLotStatus } from "../helpers/lotOccupancyDB/updateLot.js"; import { getOccupants } from "../helpers/lotOccupancyDB/getOccupants.js"; import { addOccupant } from "../helpers/lotOccupancyDB/addOccupant.js"; import { addLotOccupancy } from "../helpers/lotOccupancyDB/addLotOccupancy.js"; @@ -80,8 +80,13 @@ function getMap(masterRow) { function importFromCSV() { let masterRow; const lotTypes = cacheFunctions.getLotTypes(); + const availableLotStatus = cacheFunctions.getLotStatusByLotStatus("Available"); const preneedOccupancyType = cacheFunctions.getOccupancyTypeByOccupancyType("Preneed"); const preneedOwnerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Preneed Owner"); + const reservedLotStatus = cacheFunctions.getLotStatusByLotStatus("Reserved"); + const deceasedOccupancyType = cacheFunctions.getOccupancyTypeByOccupancyType("Interment"); + const deceasedLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Deceased"); + const takenLotStatus = cacheFunctions.getLotStatusByLotStatus("Taken"); const rawData = fs.readFileSync("./temp/CMMASTER.csv").toString(); const cmmaster = papa.parse(rawData, { delimiter: ",", @@ -103,7 +108,7 @@ function importFromCSV() { const lotId = addLot({ lotName: lotName, lotTypeId: lotTypes[0].lotTypeId, - lotStatusId: "", + lotStatusId: availableLotStatus.lotStatusId, mapId: map.mapId, mapKey: lotName, lotLatitude: "", @@ -130,20 +135,17 @@ function importFromCSV() { }, user); let occupancyStartDateString = formatDateString(masterRow.CM_PURCHASE_YR, masterRow.CM_PURCHASE_MON, masterRow.CM_PURCHASE_DAY); let occupancyEndDateString = ""; - if (masterRow.CM_DEATH_YR && masterRow.CM_DEATH_YR !== "0") { - occupancyEndDateString = formatDateString(masterRow.CM_DEATH_YR, masterRow.CM_DEATH_MON, masterRow.CM_DEATH_DAY); + if (masterRow.CM_INTERMENT_YR !== "" && masterRow.CM_INTERMENT_YR !== "0") { + occupancyEndDateString = formatDateString(masterRow.CM_INTERMENT_YR, masterRow.CM_INTERMENT_MON, masterRow.CM_INTERMENT_DAY); } if (occupancyStartDateString === "0000-00-00" && occupancyEndDateString !== "") { occupancyStartDateString = occupancyEndDateString; } - if (occupancyStartDateString === "0000-00-00" && masterRow.CM_INTERMENT_YR !== "") { - occupancyStartDateString = formatDateString(masterRow.CM_INTERMENT_YR, masterRow.CM_INTERMENT_MON, masterRow.CM_INTERMENT_DAY); + if (occupancyStartDateString === "0000-00-00" && masterRow.CM_DEATH_YR !== "" && masterRow.CM_DEATH_YR !== "0") { + occupancyStartDateString = formatDateString(masterRow.CM_DEATH_YR, masterRow.CM_DEATH_MON, masterRow.CM_DEATH_DAY); } - if (occupancyStartDateString === "0000-00-00" && masterRow.CM_LAST_CHG_DATE !== "") { - occupancyStartDateString = dateTimeFunctions.dateIntegerToString(Number.parseInt(masterRow.CM_LAST_CHG_DATE, 10)); - } - if (occupancyStartDateString === "0000-00-00") { - occupancyStartDateString = "1970-01-01"; + if (occupancyStartDateString === "" || occupancyStartDateString === "0000-00-00") { + occupancyStartDateString = "0001-01-01"; } const lotOccupancyId = addLotOccupancy({ occupancyTypeId: preneedOccupancyType.occupancyTypeId, @@ -156,6 +158,41 @@ function importFromCSV() { lotOccupantTypeId: preneedOwnerLotOccupantType.lotOccupantTypeId, occupantId }, user); + if (occupancyEndDateString === "") { + updateLotStatus(lotId, reservedLotStatus.lotStatusId, user); + } + } + if (masterRow.CM_DECEASED_NAME) { + const deceasedPostalCode = ((masterRow.CM_POST1 || "") + " " + (masterRow.CM_POST2 || "")).trim(); + const occupantId = addOccupant({ + occupantName: masterRow.CM_DECEASED_NAME, + occupantAddress1: masterRow.CM_ADDRESS, + occupantAddress2: "", + occupantCity: masterRow.CM_CITY, + occupantProvince: masterRow.CM_PROV, + occupantPostalCode: deceasedPostalCode, + occupantPhoneNumber: "" + }, user); + let occupancyStartDateString = formatDateString(masterRow.CM_INTERMENT_YR, masterRow.CM_INTERMENT_MON, masterRow.CM_INTERMENT_DAY); + const occupancyEndDateString = ""; + if (occupancyStartDateString === "0000-00-00" && masterRow.CM_DEATH_YR !== "" && masterRow.CM_DEATH_YR !== "0") { + occupancyStartDateString = formatDateString(masterRow.CM_DEATH_YR, masterRow.CM_DEATH_MON, masterRow.CM_DEATH_DAY); + } + if (occupancyStartDateString === "" || occupancyStartDateString === "0000-00-00") { + occupancyStartDateString = "0001-01-01"; + } + const lotOccupancyId = addLotOccupancy({ + occupancyTypeId: deceasedOccupancyType.occupancyTypeId, + lotId, + occupancyStartDateString, + occupancyEndDateString + }, user); + addLotOccupancyOccupant({ + lotOccupancyId, + lotOccupantTypeId: deceasedLotOccupantType.lotOccupantTypeId, + occupantId + }, user); + updateLotStatus(lotId, takenLotStatus.lotStatusId, user); } } } @@ -165,5 +202,4 @@ function importFromCSV() { } } purgeTables(); -purgeConfigTables(); importFromCSV(); diff --git a/temp/legacy.importFromCSV.ts b/temp/legacy.importFromCSV.ts index 258da24d..597f4bff 100644 --- a/temp/legacy.importFromCSV.ts +++ b/temp/legacy.importFromCSV.ts @@ -7,12 +7,12 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../data/databasePaths.js"; import * as cacheFunctions from "../helpers/functions.cache.js"; -import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { addMap } from "../helpers/lotOccupancyDB/addMap.js"; import { getMap as getMapFromDatabase } from "../helpers/lotOccupancyDB/getMap.js"; import { addLot } from "../helpers/lotOccupancyDB/addLot.js"; +import { updateLotStatus } from "../helpers/lotOccupancyDB/updateLot.js"; import { getOccupants } from "../helpers/lotOccupancyDB/getOccupants.js"; import { addOccupant } from "../helpers/lotOccupancyDB/addOccupant.js"; @@ -170,8 +170,16 @@ function importFromCSV () { // Load cached values const lotTypes = cacheFunctions.getLotTypes(); + + const availableLotStatus = cacheFunctions.getLotStatusByLotStatus("Available"); + const preneedOccupancyType = cacheFunctions.getOccupancyTypeByOccupancyType("Preneed"); const preneedOwnerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Preneed Owner"); + const reservedLotStatus = cacheFunctions.getLotStatusByLotStatus("Reserved"); + + const deceasedOccupancyType = cacheFunctions.getOccupancyTypeByOccupancyType("Interment"); + const deceasedLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Deceased"); + const takenLotStatus = cacheFunctions.getLotStatusByLotStatus("Taken"); const rawData = fs.readFileSync("./temp/CMMASTER.csv").toString(); @@ -187,6 +195,7 @@ function importFromCSV () { try { for (masterRow of cmmaster.data) { + const map = getMap(masterRow); const lotName = masterRow.CM_CEMETERY + "-" + @@ -199,7 +208,7 @@ function importFromCSV () { const lotId = addLot({ lotName: lotName, lotTypeId: lotTypes[0].lotTypeId, - lotStatusId: "", + lotStatusId: availableLotStatus.lotStatusId, mapId: map.mapId, mapKey: lotName, lotLatitude: "", @@ -235,10 +244,10 @@ function importFromCSV () { let occupancyEndDateString = ""; - if (masterRow.CM_DEATH_YR && masterRow.CM_DEATH_YR !== "0") { - occupancyEndDateString = formatDateString(masterRow.CM_DEATH_YR, - masterRow.CM_DEATH_MON, - masterRow.CM_DEATH_DAY); + if (masterRow.CM_INTERMENT_YR !== "" && masterRow.CM_INTERMENT_YR !== "0") { + occupancyEndDateString = formatDateString(masterRow.CM_INTERMENT_YR, + masterRow.CM_INTERMENT_MON, + masterRow.CM_INTERMENT_DAY); } // if purchase date unavailable @@ -247,19 +256,14 @@ function importFromCSV () { } // if end date unavailable - if (occupancyStartDateString === "0000-00-00" && masterRow.CM_INTERMENT_YR !== "") { - occupancyStartDateString = formatDateString(masterRow.CM_INTERMENT_YR, - masterRow.CM_INTERMENT_MON, - masterRow.CM_INTERMENT_DAY); - } - - // if interment date unavailable - if (occupancyStartDateString === "0000-00-00" && masterRow.CM_LAST_CHG_DATE !== "") { - occupancyStartDateString = dateTimeFunctions.dateIntegerToString(Number.parseInt(masterRow.CM_LAST_CHG_DATE, 10)); + if (occupancyStartDateString === "0000-00-00" && masterRow.CM_DEATH_YR !== "" && masterRow.CM_DEATH_YR !== "0") { + occupancyStartDateString = formatDateString(masterRow.CM_DEATH_YR, + masterRow.CM_DEATH_MON, + masterRow.CM_DEATH_DAY); } - if (occupancyStartDateString === "0000-00-00") { - occupancyStartDateString = "1970-01-01"; + if (occupancyStartDateString === "" || occupancyStartDateString === "0000-00-00") { + occupancyStartDateString = "0001-01-01"; } const lotOccupancyId = addLotOccupancy({ @@ -274,6 +278,57 @@ function importFromCSV () { lotOccupantTypeId: preneedOwnerLotOccupantType.lotOccupantTypeId, occupantId }, user); + + if (occupancyEndDateString === "") { + updateLotStatus(lotId, reservedLotStatus.lotStatusId, user); + } + } + + if (masterRow.CM_DECEASED_NAME) { + + const deceasedPostalCode = ((masterRow.CM_POST1 || "") + " " + (masterRow.CM_POST2 || "")).trim(); + + const occupantId = addOccupant({ + occupantName: masterRow.CM_DECEASED_NAME, + occupantAddress1: masterRow.CM_ADDRESS, + occupantAddress2: "", + occupantCity: masterRow.CM_CITY, + occupantProvince: masterRow.CM_PROV, + occupantPostalCode: deceasedPostalCode, + occupantPhoneNumber: "" + }, user); + + let occupancyStartDateString = formatDateString(masterRow.CM_INTERMENT_YR, + masterRow.CM_INTERMENT_MON, + masterRow.CM_INTERMENT_DAY); + + const occupancyEndDateString = ""; + + // if interment date unavailable + if (occupancyStartDateString === "0000-00-00" && masterRow.CM_DEATH_YR !== "" && masterRow.CM_DEATH_YR !== "0") { + occupancyStartDateString = formatDateString(masterRow.CM_DEATH_YR, + masterRow.CM_DEATH_MON, + masterRow.CM_DEATH_DAY); + } + + if (occupancyStartDateString === "" || occupancyStartDateString === "0000-00-00") { + occupancyStartDateString = "0001-01-01"; + } + + const lotOccupancyId = addLotOccupancy({ + occupancyTypeId: deceasedOccupancyType.occupancyTypeId, + lotId, + occupancyStartDateString, + occupancyEndDateString + }, user); + + addLotOccupancyOccupant({ + lotOccupancyId, + lotOccupantTypeId: deceasedLotOccupantType.lotOccupantTypeId, + occupantId + }, user); + + updateLotStatus(lotId, takenLotStatus.lotStatusId, user); } } } catch (error) { @@ -283,5 +338,5 @@ function importFromCSV () { } purgeTables(); -purgeConfigTables(); +// purgeConfigTables(); importFromCSV(); \ No newline at end of file diff --git a/types/recordTypes.js b/types/recordTypes.js index cb0ff5c3..c8ad2e54 100644 --- a/types/recordTypes.js +++ b/types/recordTypes.js @@ -1 +1,2 @@ -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/views/_header.ejs b/views/_header.ejs index 4b89ffe6..fa598257 100644 --- a/views/_header.ejs +++ b/views/_header.ejs @@ -51,6 +51,12 @@
'+exports.aliases.lot+""+exports.aliases.lot+" TypeStatus"+exports.aliases.map+"
'+cityssm.escapeHTML(c)+"
"+cityssm.escapeHTML(s.mapAddress1)+'
'+(s.mapLatitude&&s.mapLongitude?'':"")+''+(s.mapSVG?'':"")+''+s.lotCount+"
"+exports.aliases.map+'CoordinatesImage'+exports.aliases.lot+" Count
'+cityssm.escapeHTML(c)+"
"+cityssm.escapeHTML(a.mapAddress1)+'
'+(a.mapLatitude&&a.mapLongitude?'':"")+''+(a.mapSVG?'':"")+''+a.lotCount+"
"+exports.aliases.map+'CoordinatesImage'+exports.aliases.lot+" Count