Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@

<query xmlns="http://labkey.org/data/xml/query">
<metadata>
<tables xmlns="http://labkey.org/data/xml">
<table tableName="roomUtilizationByDate" tableDbType="NOT_IN_DB">
<tableTitle>Room Utilization By Date</tableTitle>
<javaCustomizer class="org.labkey.ehr.table.DefaultEHRCustomizer" />
<columns>
<column columnName="room">
<isKeyField>true</isKeyField>
<fk>
<fkDbSchema>ehr_lookups</fkDbSchema>
<fkTable>rooms</fkTable>
<fkColumnName>room</fkColumnName>
</fk>
</column>
<column columnName="SnapshotDate">
<columnTitle>Snapshot Date</columnTitle>
</column>
<column columnName="TotalCages">
<columnTitle>Total Cage Spaces</columnTitle>
<displayWidth>50</displayWidth>
<url>/query/executeQuery.view?
schemaName=ehr_lookups&amp;
query.queryName=cage&amp;
query.room~eq=${room}&amp;
query.sort=cage&amp;
</url>
</column>
<column columnName="AvailableCages">
<columnTitle>Total Cages Present</columnTitle>
<displayWidth>50</displayWidth>
<url>/query/executeQuery.view?
schemaName=ehr_lookups&amp;
query.queryName=availableCages&amp;
query.room~eq=${room}&amp;
query.isAvailable~eq=true&amp;
query.sort=cage&amp;
</url>
</column>
<column columnName="MarkedUnavailable">
<columnTitle>Marked Unavailable</columnTitle>
</column>
<column columnName="CagesUsed">
<columnTitle>Cages Used</columnTitle>
<displayWidth>40</displayWidth>
<url>/query/executeQuery.view?
schemaName=ehr_lookups&amp;
query.queryName=cage&amp;
query.room~eq=${room}&amp;
query.availability/isAvailable~eq=true&amp;
query.totalAnimals/totalAnimals~gt=0&amp;
query.sort=cage&amp;
</url>
</column>
<column columnName="CagesEmpty">
<columnTitle>Cages Empty</columnTitle>
<displayWidth>40</displayWidth>
<url>/query/executeQuery.view?
schemaName=ehr_lookups&amp;
query.queryName=cage&amp;
query.room~eq=${room}&amp;
query.availability/isAvailable~eq=true&amp;
query.totalAnimals/totalAnimals~isblank&amp;
query.sort=cage&amp;
</url>
</column>
<column columnName="pctUsed">
<displayWidth>40</displayWidth>
<columnTitle>% Used</columnTitle>
</column>
<column columnName="TotalAnimals">
<columnTitle>Total Animals</columnTitle>
<displayWidth>50</displayWidth>
<url>/query/executeQuery.view?
schemaName=study&amp;
query.queryName=Demographics&amp;
query.viewName=By Location&amp;
query.Id/curLocation/room~eq=${room}&amp;
query.sort=Id&amp;
</url>
</column>
</columns>
</table>
</tables>
</metadata>
</query>
48 changes: 48 additions & 0 deletions onprc_ehr/resources/queries/ehr_lookups/roomUtilizationByDate.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* Added by: Kollil, 9/29/2025, Refer tkt # 13276
Created a query that mimics the Room Utilization Report with the With PI Projects view, but with the additional feature
that it can be run for arbitrary prior dates.
Lisa requested this new reports and is very useful
*/
PARAMETERS (SnapshotDate TIMESTAMP)

SELECT
r.room,
-- p.SnapDate AS SnapshotDate, -- echoes the effective date
COUNT(DISTINCT c.cage) AS TotalCages,
MAX(cbr.availableCages) AS AvailableCages,
MAX(cbr.markedUnavailable) AS MarkedUnavailable,
COUNT(DISTINCT h.cage) AS CagesUsed,
MAX(cbr.availableCages) - COUNT(DISTINCT h.cage) - MAX(cbr.markedUnavailable) AS CagesEmpty,
ROUND(
(
(CAST(COUNT(DISTINCT h.cage) AS DOUBLE) + MAX(cbr.markedUnavailable))
/ NULLIF(CAST(MAX(cbr.availableCages) AS DOUBLE), 0)
) * 100.0, 1
) AS pctUsed,
COUNT(DISTINCT h.id) AS TotalAnimals
FROM ehr_lookups.rooms r
-- bind the parameter once; default to today when blank
LEFT JOIN (
SELECT COALESCE(SnapshotDate, now()) AS SnapDate
) p ON 1=1

LEFT JOIN (
SELECT c1.room, c1.cage
FROM ehr_lookups.cage c1
WHERE c1.cage IS NOT NULL
UNION ALL
SELECT r2.room, NULL AS cage
FROM ehr_lookups.rooms r2
) c ON r.room = c.room

LEFT JOIN study.housing h
ON r.room = h.room
AND (c.cage = h.cage OR (c.cage IS NULL AND h.cage IS NULL))
AND h.date <= p.SnapDate
AND (h.enddate IS NULL OR h.enddate > p.SnapDate)

LEFT JOIN ehr_lookups.availableCagesByRoom cbr
ON cbr.room = r.room
WHERE r.datedisabled IS NULL
GROUP BY r.room, p.SnapDate
ORDER BY r.room;
4 changes: 2 additions & 2 deletions onprc_ehr/resources/views/begin.html
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,13 @@
{name: 'Animal Groups', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr&query.queryName=animal_groups&query.viewName=Active Groups'},
{name: 'Colony Overview', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/onprc_ehr-colonyOverview.view'},
{name: 'Room Utilization', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr_lookups&query.queryName=roomUtilization'},
//Added by Kollil on 9/29/25
{name: 'Room Utilization By Date', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/query-executeQuery.view?schemaName=ehr_lookups&query.queryName=roomUtilizationByDate'},
{name: 'More Reports', url: '<%=contextPath%>' + ctx['EHRStudyContainer'] + '/ehr-moreReports.view'}
]
}]
});



var menuCfg = {
width: 330,
renderTo: 'ehrMenu3_'+webpart.wrapperDivId,
Expand Down