Skip to content

Commit bcd3ee9

Browse files
committed
Added new query for room utilization that takes date as parameter
1 parent 055ce14 commit bcd3ee9

3 files changed

Lines changed: 137 additions & 2 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
2+
<query xmlns="http://labkey.org/data/xml/query">
3+
<metadata>
4+
<tables xmlns="http://labkey.org/data/xml">
5+
<table tableName="roomUtilizationByDate" tableDbType="NOT_IN_DB">
6+
<tableTitle>Room Utilization By Date</tableTitle>
7+
<javaCustomizer class="org.labkey.ehr.table.DefaultEHRCustomizer" />
8+
<columns>
9+
<column columnName="room">
10+
<isKeyField>true</isKeyField>
11+
<fk>
12+
<fkDbSchema>ehr_lookups</fkDbSchema>
13+
<fkTable>rooms</fkTable>
14+
<fkColumnName>room</fkColumnName>
15+
</fk>
16+
</column>
17+
<column columnName="SnapshotDate">
18+
<columnTitle>Snapshot Date</columnTitle>
19+
</column>
20+
<column columnName="TotalCages">
21+
<columnTitle>Total Cage Spaces</columnTitle>
22+
<displayWidth>50</displayWidth>
23+
<url>/query/executeQuery.view?
24+
schemaName=ehr_lookups&amp;
25+
query.queryName=cage&amp;
26+
query.room~eq=${room}&amp;
27+
query.sort=cage&amp;
28+
</url>
29+
</column>
30+
<column columnName="AvailableCages">
31+
<columnTitle>Total Cages Present</columnTitle>
32+
<displayWidth>50</displayWidth>
33+
<url>/query/executeQuery.view?
34+
schemaName=ehr_lookups&amp;
35+
query.queryName=availableCages&amp;
36+
query.room~eq=${room}&amp;
37+
query.isAvailable~eq=true&amp;
38+
query.sort=cage&amp;
39+
</url>
40+
</column>
41+
<column columnName="MarkedUnavailable">
42+
<columnTitle>Marked Unavailable</columnTitle>
43+
</column>
44+
<column columnName="CagesUsed">
45+
<columnTitle>Cages Used</columnTitle>
46+
<displayWidth>40</displayWidth>
47+
<url>/query/executeQuery.view?
48+
schemaName=ehr_lookups&amp;
49+
query.queryName=cage&amp;
50+
query.room~eq=${room}&amp;
51+
query.availability/isAvailable~eq=true&amp;
52+
query.totalAnimals/totalAnimals~gt=0&amp;
53+
query.sort=cage&amp;
54+
</url>
55+
</column>
56+
<column columnName="CagesEmpty">
57+
<columnTitle>Cages Empty</columnTitle>
58+
<displayWidth>40</displayWidth>
59+
<url>/query/executeQuery.view?
60+
schemaName=ehr_lookups&amp;
61+
query.queryName=cage&amp;
62+
query.room~eq=${room}&amp;
63+
query.availability/isAvailable~eq=true&amp;
64+
query.totalAnimals/totalAnimals~isblank&amp;
65+
query.sort=cage&amp;
66+
</url>
67+
</column>
68+
<column columnName="pctUsed">
69+
<displayWidth>40</displayWidth>
70+
<columnTitle>% Used</columnTitle>
71+
</column>
72+
<column columnName="TotalAnimals">
73+
<columnTitle>Total Animals</columnTitle>
74+
<displayWidth>50</displayWidth>
75+
<url>/query/executeQuery.view?
76+
schemaName=study&amp;
77+
query.queryName=Demographics&amp;
78+
query.viewName=By Location&amp;
79+
query.Id/curLocation/room~eq=${room}&amp;
80+
query.sort=Id&amp;
81+
</url>
82+
</column>
83+
</columns>
84+
</table>
85+
</tables>
86+
</metadata>
87+
</query>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* Added by: Kollil, 9/29/2025, Refer tkt # 13276
2+
Created a query that mimics the Room Utilization Report with the With PI Projects view, but with the additional feature
3+
that it can be run for arbitrary prior dates.
4+
Lisa requested this new reports and is very useful
5+
*/
6+
PARAMETERS (SnapshotDate TIMESTAMP)
7+
8+
SELECT
9+
r.room,
10+
-- p.SnapDate AS SnapshotDate, -- echoes the effective date
11+
COUNT(DISTINCT c.cage) AS TotalCages,
12+
MAX(cbr.availableCages) AS AvailableCages,
13+
MAX(cbr.markedUnavailable) AS MarkedUnavailable,
14+
COUNT(DISTINCT h.cage) AS CagesUsed,
15+
MAX(cbr.availableCages) - COUNT(DISTINCT h.cage) - MAX(cbr.markedUnavailable) AS CagesEmpty,
16+
ROUND(
17+
(
18+
(CAST(COUNT(DISTINCT h.cage) AS DOUBLE) + MAX(cbr.markedUnavailable))
19+
/ NULLIF(CAST(MAX(cbr.availableCages) AS DOUBLE), 0)
20+
) * 100.0, 1
21+
) AS pctUsed,
22+
COUNT(DISTINCT h.id) AS TotalAnimals
23+
FROM ehr_lookups.rooms r
24+
-- bind the parameter once; default to today when blank
25+
LEFT JOIN (
26+
SELECT COALESCE(SnapshotDate, now()) AS SnapDate
27+
) p ON 1=1
28+
29+
LEFT JOIN (
30+
SELECT c1.room, c1.cage
31+
FROM ehr_lookups.cage c1
32+
WHERE c1.cage IS NOT NULL
33+
UNION ALL
34+
SELECT r2.room, NULL AS cage
35+
FROM ehr_lookups.rooms r2
36+
) c ON r.room = c.room
37+
38+
LEFT JOIN study.housing h
39+
ON r.room = h.room
40+
AND (c.cage = h.cage OR (c.cage IS NULL AND h.cage IS NULL))
41+
AND h.date <= p.SnapDate
42+
AND (h.enddate IS NULL OR h.enddate > p.SnapDate)
43+
44+
LEFT JOIN ehr_lookups.availableCagesByRoom cbr
45+
ON cbr.room = r.room
46+
WHERE r.datedisabled IS NULL
47+
GROUP BY r.room, p.SnapDate
48+
ORDER BY r.room;

onprc_ehr/resources/views/begin.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,13 @@
102102
{name: 'Animal Groups', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr&query.queryName=animal_groups&query.viewName=Active Groups'},
103103
{name: 'Colony Overview', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/onprc_ehr-colonyOverview.view'},
104104
{name: 'Room Utilization', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr_lookups&query.queryName=roomUtilization'},
105+
//Added by Kollil on 9/29/25
106+
{name: 'Room Utilization By Date', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr_lookups&query.queryName=roomUtilizationByDate'},
105107
{name: 'More Reports', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/ehr-moreReports.view'}
106108
]
107109
}]
108110
});
109111

110-
111-
112112
var menuCfg = {
113113
width: 330,
114114
renderTo: 'ehrMenu3_'+webpart.wrapperDivId,

0 commit comments

Comments
 (0)