diff --git a/nirc_ehr/resources/queries/study/cases.js b/nirc_ehr/resources/queries/study/cases.js index f5c88d96..a645e309 100644 --- a/nirc_ehr/resources/queries/study/cases.js +++ b/nirc_ehr/resources/queries/study/cases.js @@ -29,8 +29,7 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even triggerHelper.closeDailyClinicalObs(row.caseid, row.enddate); } - var reopen = oldRow && oldRow.enddate && !row.enddate; - if (!helper.isValidateOnly() && (reopen || helper.getEvent() == 'insert') && row.caseid && row.Id && row.performedby && row.taskid && row.category == 'Clinical') { + if (!helper.isValidateOnly()) { var qc; if (row.QCStateLabel) { qc = EHR.Server.Security.getQCStateByLabel(row.QCStateLabel); @@ -42,13 +41,37 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even if (!qc) { console.error('Unable to find QCState: ' + row.QCState + '/' + row.QCStateLabel); } - else if ((qc.Label == 'Completed' || qc.Label == 'Review Required') && row.caseid && row.Id && row.performedby && row.taskid && qc) { - var ordersInTransaction = helper.getProperty('ordersInTransaction'); - var oit = []; - if (ordersInTransaction && ordersInTransaction.length) { - oit = ordersInTransaction; + + // Don't allow taking an existing non-draft case back to draft + if (oldRow && qc.Label == 'In Progress') { + var oldQc = EHR.Server.Security.getQCStateByLabel(oldRow.QCStateLabel); + if (oldQc.Label != 'In Progress') { + EHR.Server.Utils.addError(errors, null, 'Cannot save a draft copy of a case already opened or in review.', 'ERROR'); + } + } + else { + var reopen = oldRow && oldRow.enddate && !row.enddate; + if ((reopen || helper.getEvent() == 'insert') && row.caseid && row.Id && row.performedby && row.taskid && row.category == 'Clinical') { + var qc; + if (row.QCStateLabel) { + qc = EHR.Server.Security.getQCStateByLabel(row.QCStateLabel); + } + else if (row.QCState) { + qc = EHR.Server.Security.getQCStateByRowId(row.QCState); + } + + if (!qc) { + console.error('Unable to find QCState: ' + row.QCState + '/' + row.QCStateLabel); + } + else if ((qc.Label == 'Completed' || qc.Label == 'Review Required') && row.caseid && row.Id && row.performedby && row.taskid && qc) { + var ordersInTransaction = helper.getProperty('ordersInTransaction'); + var oit = []; + if (ordersInTransaction && ordersInTransaction.length) { + oit = ordersInTransaction; + } + triggerHelper.ensureDailyClinicalObservationOrders(row.Id, row.caseid, row.date, row.performedby, qc.RowId, row.taskid, oit); + } } - triggerHelper.ensureDailyClinicalObservationOrders(row.Id, row.caseid, row.date, row.performedby, qc.RowId, row.taskid, oit); } } } diff --git a/nirc_ehr/resources/web/nirc_ehr/data/CaseStoreCollection.js b/nirc_ehr/resources/web/nirc_ehr/data/CaseStoreCollection.js index c6058d9c..fbb226f2 100644 --- a/nirc_ehr/resources/web/nirc_ehr/data/CaseStoreCollection.js +++ b/nirc_ehr/resources/web/nirc_ehr/data/CaseStoreCollection.js @@ -167,9 +167,13 @@ Ext4.define('NIRC_EHR.data.CaseStoreCollection', { cs.fireEvent('datachanged', cs); }, this); } + // Only validate once stores have loaded, otherwise can have perf issues when loading existing cases + else if( this.haveStoresLoaded ) { + // Validate across the sections, such as clin_remark not required if case close date entered + this.validateAll(); + } this._cachedKey = cacheKey; - this.validateAll(); }, getTaskId: function(){ diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java index 5d8a06ef..f34bf769 100644 --- a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java +++ b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java @@ -180,6 +180,7 @@ protected void doStartupAfterSpringConfig(ModuleContext moduleContext) EHRService.get().unregisterMoreActionsButtons("study", "treatment_order"); EHRService.get().registerMoreActionsButton(new MarkCompletedButton(this, "study", "observation_order", "Set End Date"), "study", "observation_order"); + EHRService.get().registerMoreActionsButton(new MarkCompletedButton(this, "study", "flags", "Set End Date"), "study", "flags"); registerDataEntry(); NotificationService.get().registerNotification(new NIRCDeathNotification());