diff --git a/nirc_ehr/resources/queries/study/deaths.js b/nirc_ehr/resources/queries/study/deaths.js index 4ba09c27..c6a89eea 100644 --- a/nirc_ehr/resources/queries/study/deaths.js +++ b/nirc_ehr/resources/queries/study/deaths.js @@ -142,5 +142,7 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even if (!helper.isETL() && event === 'insert') { triggerHelper.sendDeathNotification(ids[0]); } + + triggerHelper.updateProcedureOrdersToCompleted(ids); } }); \ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/departure.js b/nirc_ehr/resources/queries/study/departure.js index e1bdf0f0..f209fdc0 100644 --- a/nirc_ehr/resources/queries/study/departure.js +++ b/nirc_ehr/resources/queries/study/departure.js @@ -1,5 +1,8 @@ require("ehr/triggers").initScript(this); +var triggerHelper = new org.labkey.nirc_ehr.query.NIRC_EHRTriggerHelper(LABKEY.Security.currentUser.id, LABKEY.Security.currentContainer.id); +var departures = []; + function onInit(event, helper){ helper.setScriptOptions({ requiresStatusRecalc: false @@ -7,3 +10,17 @@ function onInit(event, helper){ } +EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.AFTER_INSERT, 'study', 'departure', function(helper, scriptErrors, row, oldRow) { + + if (row.id) { + departures.push(row.id); + } +}); + +EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.COMPLETE, 'study', 'departure', function(event, errors, helper){ + + if (!helper.isETL() && helper.isEHRDataEntry()) { + triggerHelper.updateProcedureOrdersToCompleted(departures); + } +}); + diff --git a/nirc_ehr/resources/queries/study/prcOverdue.query.xml b/nirc_ehr/resources/queries/study/prcOverdue.query.xml index 6cd250c4..bb7ef1e5 100644 --- a/nirc_ehr/resources/queries/study/prcOverdue.query.xml +++ b/nirc_ehr/resources/queries/study/prcOverdue.query.xml @@ -7,7 +7,9 @@ true - true + + + true diff --git a/nirc_ehr/resources/queries/study/prcOverdue.sql b/nirc_ehr/resources/queries/study/prcOverdue.sql index 329462ee..53d50118 100644 --- a/nirc_ehr/resources/queries/study/prcOverdue.sql +++ b/nirc_ehr/resources/queries/study/prcOverdue.sql @@ -9,6 +9,7 @@ SELECT po.remark, po.caseid, po.objectid, + po.lsid, CASE WHEN po.qcstate.label = 'Completed' THEN 'Completed' ELSE '' END as status FROM prc_order po WHERE now() > windowEnd AND po.qcstate.label != 'Completed' \ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/prcSchedule.query.xml b/nirc_ehr/resources/queries/study/prcSchedule.query.xml index 523584f4..5bf3755f 100644 --- a/nirc_ehr/resources/queries/study/prcSchedule.query.xml +++ b/nirc_ehr/resources/queries/study/prcSchedule.query.xml @@ -7,7 +7,9 @@ true - true + + + true diff --git a/nirc_ehr/resources/queries/study/prcSchedule.sql b/nirc_ehr/resources/queries/study/prcSchedule.sql index 299a2a6b..7020d353 100644 --- a/nirc_ehr/resources/queries/study/prcSchedule.sql +++ b/nirc_ehr/resources/queries/study/prcSchedule.sql @@ -9,6 +9,7 @@ SELECT po.remark, po.caseid, po.objectid, + po.lsid, CASE WHEN po.qcstate.label = 'Completed' THEN 'Completed' ELSE '' END as status FROM prc_order po WHERE now() >= windowStart AND now() <= windowEnd \ No newline at end of file diff --git a/nirc_ehr/resources/web/nirc_ehr/buttons/ProcedureOrderCompleteButton.js b/nirc_ehr/resources/web/nirc_ehr/buttons/ProcedureOrderCompleteButton.js index 3ed842da..af2d69e3 100644 --- a/nirc_ehr/resources/web/nirc_ehr/buttons/ProcedureOrderCompleteButton.js +++ b/nirc_ehr/resources/web/nirc_ehr/buttons/ProcedureOrderCompleteButton.js @@ -51,7 +51,7 @@ Ext4.define('NIRC_EHR.window.ProcedureOrderCompleteWindow', { if (completedRowId) { for (const row of selectedRows) { rowsToInsert.push({ - objectid: row, + lsid: row, qcstate: completedRowId }); } diff --git a/nirc_ehr/resources/web/nirc_ehr/buttons/RecordProcedureButton.js b/nirc_ehr/resources/web/nirc_ehr/buttons/RecordProcedureButton.js index af2157ad..65677869 100644 --- a/nirc_ehr/resources/web/nirc_ehr/buttons/RecordProcedureButton.js +++ b/nirc_ehr/resources/web/nirc_ehr/buttons/RecordProcedureButton.js @@ -71,14 +71,14 @@ Ext4.define('NIRC_EHR.window.RecordProcedureWindow', { LABKEY.Query.selectRows({ schemaName: 'study', queryName: 'prc_order', - filterArray: [LABKEY.Filter.create('objectid', selectedRows.join(';'), LABKEY.Filter.Types.EQUALS_ONE_OF)], + filterArray: [LABKEY.Filter.create('lsid', selectedRows.join(';'), LABKEY.Filter.Types.EQUALS_ONE_OF)], scope: this, - columns: 'Id,objectid,procedure,category,caseid,orderedby', + columns: 'Id,objectid,procedure,category,caseid,orderedby,lsid', success: function (data) { const rowsToInsert = []; Ext4.each(data.rows, function(row) { Ext4.each(selectedRows, function(selectedRow) { - if (row.objectid === selectedRow) { + if (row.lsid === selectedRow) { rowsToInsert.push({ Id: row.Id, procedure: row.procedure, diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java b/nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java index 57f72d1d..74bd1adf 100644 --- a/nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java +++ b/nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java @@ -927,6 +927,54 @@ public void markProcedureOrderComplete(List orderids) } } + public void updateProcedureOrdersToCompleted(List ids) + { + if (ids == null || ids.size() < 1) // Native array doesn't support isEmpty + { + _log.warn("No IDs provided to updateProcedureOrdersToCompleted"); + return; + } + + TableInfo ti = getTableInfo("study", "prc_order"); + + // Get the QC state IDs for "Request: Approved" and "Completed" + Integer approvedQcStateId = EHRService.get().getQCStates(_container).get(EHRService.QCSTATES.RequestApproved.getLabel()).getRowId(); + Integer completedQcStateId = EHRService.get().getQCStates(_container).get(EHRService.QCSTATES.Completed.getLabel()).getRowId(); + + // Query for rows matching the IDs and having "Request: Approved" status + SimpleFilter filter = new SimpleFilter(FieldKey.fromString("Id"), ids, CompareType.IN); + filter.addCondition(FieldKey.fromString("qcstate"), approvedQcStateId, CompareType.EQUAL); + + TableSelector ts = new TableSelector(ti, PageFlowUtil.set("objectid"), filter, null); + Map[] results = ts.getMapArray(); + + if (results.length == 0) + { + _log.info("No prc_order rows found with 'Request: Approved' status for the provided IDs"); + return; + } + + // Build the update rows + List> rows = new ArrayList<>(); + for (Map result : results) + { + Map row = new HashMap<>(); + row.put("objectid", result.get("objectid")); + row.put("qcstate", completedQcStateId); + rows.add(row); + } + + try + { + ti.getUpdateService().updateRows(_user, _container, rows, null, null, getExtraContext()); + _log.info("Successfully updated " + rows.size() + " prc_order rows to 'Completed' status"); + } + catch (Exception e) + { + _log.error("Error updating prc_order rows to completed", e); + } + } + public void sendPregnancyOutcomeNotification(final String animalId, Map row) throws Exception { //check whether Notification is enabled