From a9cfbbc1932928c869eab6d1004fbe5b7a102fc1 Mon Sep 17 00:00:00 2001 From: Ohsudev <76500320+Ohsudev@users.noreply.github.com> Date: Wed, 20 Aug 2025 16:38:59 -0700 Subject: [PATCH 1/9] MOdified BSu Rounds to allow duplication of an existing open case observation entry --- .../web/onprc_ehr/model/sources/BehaviorRounds.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/onprc_ehr/resources/web/onprc_ehr/model/sources/BehaviorRounds.js b/onprc_ehr/resources/web/onprc_ehr/model/sources/BehaviorRounds.js index 5b2e316a9..8d5840d5b 100644 --- a/onprc_ehr/resources/web/onprc_ehr/model/sources/BehaviorRounds.js +++ b/onprc_ehr/resources/web/onprc_ehr/model/sources/BehaviorRounds.js @@ -48,6 +48,13 @@ EHR.model.DataModelManager.registerMetadata('BehaviorRounds', { columnConfig: { editable: false } + }, + caseid: { + hidden: false, + columnConfig: { + width: 10, + editable: false + } } } } From 1902649236e16faecc8d9c0c416e3a8fd356ed51 Mon Sep 17 00:00:00 2001 From: Ohsudev <76500320+Ohsudev@users.noreply.github.com> Date: Fri, 12 Sep 2025 12:35:21 -0700 Subject: [PATCH 2/9] Modified BSU Rounds screen to allow user to add "Alopecia Grow" so that can be included in the current case. --- .../window/AddBehaviorCasesWindow.js | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js diff --git a/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js new file mode 100644 index 000000000..bd6453103 --- /dev/null +++ b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js @@ -0,0 +1,200 @@ +/* Copyright (c) 2014-2019 LabKey Corporation +* +* Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 + */ +/** + * This window will allow users to query open cases and add records to a task based on them + */ +Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { + extend: 'EHR.window.AddSurgicalCasesWindow', + caseCategory: 'Behavior', + templateName: null, + + allowNoSelection: true, + showAssignedVetCombo: false, + showAllowOpen: true, + defaultRemark: 'BSU Rounds Entered', + + getCases: function(button){ + Ext4.Msg.wait("Loading..."); + this.hide(); + + var casesFilterArray = this.getCasesFilterArray(); + var obsFilterArray = this.getBaseFilterArray(); + obsFilterArray.push(LABKEY.Filter.create('caseCategory', this.caseCategory, LABKEY.Filter.Types.EQUAL)); + var includeOpen = this.down('#includeOpen') ? this.down('#includeOpen').getValue() : false; + if (includeOpen){ + obsFilterArray.push(LABKEY.Filter.create('caseIsOpen', true, LABKEY.Filter.Types.EQUAL)); + } + else { + obsFilterArray.push(LABKEY.Filter.create('caseIsActive', true, LABKEY.Filter.Types.EQUAL)); + } + + //find distinct animals matching criteria + var multi = new LABKEY.MultiRequest(); + + multi.add(LABKEY.Query.selectRows, { + requiredVersion: 9.1, + schemaName: 'study', + queryName: 'latestObservationsForCase', + columns: 'Id,date,category,area,observation,remark,caseid', + filterArray: obsFilterArray, + scope: this, + success: function(results){ + this.obsResults = results; + }, + failure: LDK.Utils.getErrorCallback() + }); + + multi.add(LABKEY.Query.selectRows, { + requiredVersion: 9.1, + schemaName: 'study', + queryName: 'cases', + sort: 'Id/curLocation/location,Id,remark,allProblemCategories', + columns: 'Id,objectid', + filterArray: casesFilterArray, + scope: this, + success: function(results){ + this.casesResults = results; + }, + failure: LDK.Utils.getErrorCallback() + }); + + multi.send(this.onSuccess, this); + }, + + //@Override. this is to skip the duplicate case check + addRecords: function(records){ + this.doAddRecords(records); + }, + + //@Override. this is to skip the duplicate case check + doAddRecords: function(records){ + this.processObservations(records); + }, + + //apply previous observations, or inser a blank obs record. + processObservations: function(caseRecords){ + //find all distinct IDs with cases. + var distinctCaseIds = []; + if (caseRecords && caseRecords.length){ + Ext4.Array.forEach(caseRecords, function(cr){ + if (distinctCaseIds.indexOf(cr.get('caseid') == -1)){ + distinctCaseIds.push(cr.get('caseid')); + } + }, this); + } + + var previousObsMap = {}; + if (this.obsResults && this.obsResults.rows && this.obsResults.rows.length){ + Ext4.Array.forEach(this.obsResults.rows, function(sr){ + //reset variable + var newobservation = ''; + var row = new LDK.SelectRowsRow(sr); + newobservation = row.getValue('category'); + + //note: this has been changed to ensure 1 row per case + var key = row.getValue('caseid'); + if (!previousObsMap[key]) + previousObsMap[key] = []; + + previousObsMap[key].push({ + Id: row.getValue('Id'), + date: this.recordData.date, + performedby: this.recordData.performedby, + caseid: row.getValue('caseid'), + category: row.getValue('category'), + area: row.getValue('area'), + allProblemCategories:row.getValue('allProblemCategories'), + //dont copy value + //observation: row.getValue('observation'), + remark: row.getValue('remark') + }); + if (newobservation == "Alopecia Score") { + previousObsMap[key].push({ + Id: row.getValue('Id'), + date: this.recordData.date, + performedby: this.recordData.performedby, + caseid: row.getValue('caseid'), + category: 'Alopecia Regrowth', + area: row.getValue('area'), + allProblemCategories:row.getValue('allProblemCategories'), + //dont copy value + //observation: row.getValue('observation'), + remark: row.getValue('remark') + }); + + } + }, this); + } + + var obsRecords = []; + var obsStore = this.targetStore.storeCollection.getClientStoreByName('Clinical Observations'); + LDK.Assert.assertNotEmpty('Unable to find Clinical Observations store', obsStore); + + var treatmentRecords = []; + var treatmentStore = this.targetStore.storeCollection.getClientStoreByName('Drug Administration'); + LDK.Assert.assertNotEmpty('Unable to find Drug Administration store', treatmentStore); + + Ext4.Array.forEach(caseRecords, function(cr){ + if (previousObsMap[cr.get('caseid')]){ + Ext4.Array.forEach(previousObsMap[cr.get('caseid')], function(r){ + r = Ext4.apply(r, { + 'Id/curLocation/location': cr.get('Id/curLocation/location') + }); + + obsRecords.push(obsStore.createModel(r)); + }, this); + } + else { + obsRecords.push(obsStore.createModel({ + 'Id/curLocation/location': cr.get('Id/curLocation/location'), + Id: cr.get('Id'), + date: this.recordData.date, + performedby: this.recordData.performedby, + caseid: cr.get('caseid') + })); + } + + treatmentRecords.push(treatmentStore.createModel({ + Id: cr.get('Id'), + caseid: cr.get('caseid'), + date: this.recordData.date, + performedby: this.recordData.performedby + })); + }, this); + + if (obsRecords.length){ + obsStore.add(obsRecords); + } + + if (treatmentRecords.length){ + treatmentStore.add(treatmentRecords); + } + + Ext4.Msg.hide(); + this.close(); + } +}); + +EHR.DataEntryUtils.registerGridButton('ADDBEHAVIORCASESAMENDED', function(config){ + return Ext4.Object.merge({ + text: 'Add Open Cases', + tooltip: 'Click to automatically add animals with open cases', + handler: function(btn){ + var grid = btn.up('gridpanel'); + if(!grid.store || !grid.store.hasLoaded()){ + console.log('no store or store hasnt loaded'); + return; + } + + var cellEditing = grid.getPlugin('cellediting'); + if(cellEditing) + cellEditing.completeEdit(); + + Ext4.create('ONPRC_EHR.window.AddBehaviorCasesWindow', { + targetStore: grid.store + }).show(); + } + }, config); +}); From 5cd622e4bc502fa0f0de9238ed3a1c9037458484 Mon Sep 17 00:00:00 2001 From: Ohsudev <76500320+Ohsudev@users.noreply.github.com> Date: Fri, 12 Sep 2025 12:36:57 -0700 Subject: [PATCH 3/9] Modified BSU Rounds screen to allow user to add "Alopecia Grow" so that can be included in the current case. --- .../dataentry/BehaviorRoundsObservationsFormSection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/onprc_ehr/src/org/labkey/onprc_ehr/dataentry/BehaviorRoundsObservationsFormSection.java b/onprc_ehr/src/org/labkey/onprc_ehr/dataentry/BehaviorRoundsObservationsFormSection.java index 399a70462..e082cf1fa 100644 --- a/onprc_ehr/src/org/labkey/onprc_ehr/dataentry/BehaviorRoundsObservationsFormSection.java +++ b/onprc_ehr/src/org/labkey/onprc_ehr/dataentry/BehaviorRoundsObservationsFormSection.java @@ -34,14 +34,14 @@ public BehaviorRoundsObservationsFormSection() addClientDependency(ClientDependency.supplierFromPath("ehr/window/AddClinicalCasesWindow.js")); addClientDependency(ClientDependency.supplierFromPath("ehr/window/AddSurgicalCasesWindow.js")); - addClientDependency(ClientDependency.supplierFromPath("ehr/window/AddBehaviorCasesWindow.js")); + addClientDependency(ClientDependency.supplierFromPath("onprc_ehr/window/AddBehaviorCasesWindow.js")); } @Override public List getTbarButtons() { List defaultButtons = super.getTbarButtons(); - defaultButtons.add(0, "ADDBEHAVIORCASES"); + defaultButtons.add(0, "ADDBEHAVIORCASESAMENDED"); return defaultButtons; } From 8a69e2adfeed83fd9900e10ee5cb02020ada2c5f Mon Sep 17 00:00:00 2001 From: Ohsudev <76500320+Ohsudev@users.noreply.github.com> Date: Fri, 20 Mar 2026 18:18:32 -0700 Subject: [PATCH 4/9] Modified BSU Rounds loading open cases to provide a new "Alopecia Regrowth" entry when "Alopecia Score" has a blank remark value. --- .../web/onprc_ehr/window/AddBehaviorCasesWindow.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js index bd6453103..c514c8ddb 100644 --- a/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js +++ b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js @@ -90,8 +90,10 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { Ext4.Array.forEach(this.obsResults.rows, function(sr){ //reset variable var newobservation = ''; + var newremark = ''; var row = new LDK.SelectRowsRow(sr); newobservation = row.getValue('category'); + newremark = row.getValue('remark'); //note: this has been changed to ensure 1 row per case var key = row.getValue('caseid'); @@ -110,7 +112,7 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { //observation: row.getValue('observation'), remark: row.getValue('remark') }); - if (newobservation == "Alopecia Score") { + if (newobservation == "Alopecia Score" && newremark == null) { previousObsMap[key].push({ Id: row.getValue('Id'), date: this.recordData.date, @@ -118,10 +120,10 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { caseid: row.getValue('caseid'), category: 'Alopecia Regrowth', area: row.getValue('area'), - allProblemCategories:row.getValue('allProblemCategories'), + allProblemCategories:row.getValue('allProblemCategories') //dont copy value //observation: row.getValue('observation'), - remark: row.getValue('remark') + //remark: row.getValue('remark') }); } From 60b8697521ac95365386dfeeaa11067b025d9dc2 Mon Sep 17 00:00:00 2001 From: blasar Date: Tue, 31 Mar 2026 14:51:05 -0700 Subject: [PATCH 5/9] Modified testing script codes to include Alopecia Regrowth. --- .../org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index bdf812dd0..4ff55d842 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1801,6 +1801,16 @@ public void testBehaviorRounds() throws Exception insertRowsCommand.addRow(row); insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); + row.put("Id", SUBJECTS[0]); + row.put("category", "Alopecia Regrowth"); + row.put("date", prepareDate(new Date(), -4, 0)); + row.put("caseid", caseId); + row.put("observation", "Yes"); + row.put("objectid", generateGUID()); + row.put("taskid", generateGUID()); //required for latestObservationsForCase.sql to work + insertRowsCommand.addRow(row); + insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); + Ext4GridRef obsGrid = _helper.getExt4GridForFormSection("Observations"); obsGrid.clickTbarButton("Add Open Cases"); From b970dbd4a10a93a98f8d6e34ef7a43ec6d94abef Mon Sep 17 00:00:00 2001 From: blasar Date: Tue, 31 Mar 2026 19:53:18 -0700 Subject: [PATCH 6/9] Modified BSU Rounds test scripts --- .../test/tests/onprc_ehr/ONPRC_EHRTest.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 4ff55d842..728364127 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1801,14 +1801,16 @@ public void testBehaviorRounds() throws Exception insertRowsCommand.addRow(row); insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); - row.put("Id", SUBJECTS[0]); - row.put("category", "Alopecia Regrowth"); - row.put("date", prepareDate(new Date(), -4, 0)); - row.put("caseid", caseId); - row.put("observation", "Yes"); - row.put("objectid", generateGUID()); - row.put("taskid", generateGUID()); //required for latestObservationsForCase.sql to work - insertRowsCommand.addRow(row); + Map row2 = new HashMap<>(); + + row2.put("Id", SUBJECTS[0]); + row2.put("category", "Alopecia Regrowth"); + row2.put("date", prepareDate(new Date(), -4, 0)); + row2.put("caseid", caseId); + row2.put("observation", "Yes"); + row2.put("objectid", generateGUID()); + row2.put("taskid", generateGUID()); //required for latestObservationsForCase.sql to work + insertRowsCommand.addRow(row2); insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); Ext4GridRef obsGrid = _helper.getExt4GridForFormSection("Observations"); From 926b909d9835c564984a4f850636f469fdbbb115 Mon Sep 17 00:00:00 2001 From: blasar Date: Mon, 6 Apr 2026 19:45:25 -0700 Subject: [PATCH 7/9] Modified BSU Rounds Test scripts to prevent testing errors. --- .../test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 728364127..3e54429fd 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1802,7 +1802,6 @@ public void testBehaviorRounds() throws Exception insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); Map row2 = new HashMap<>(); - row2.put("Id", SUBJECTS[0]); row2.put("category", "Alopecia Regrowth"); row2.put("date", prepareDate(new Date(), -4, 0)); From 31cd3085a536cdddd9b41658e59a3d57d9b2bb4b Mon Sep 17 00:00:00 2001 From: blasar Date: Tue, 7 Apr 2026 14:12:00 -0700 Subject: [PATCH 8/9] Modified BSU Rounds Test scripts to prevent testing errors. --- .../test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java index 3e54429fd..0755a319c 100644 --- a/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java +++ b/onprc_ehr/test/src/org/labkey/test/tests/onprc_ehr/ONPRC_EHRTest.java @@ -1799,7 +1799,6 @@ public void testBehaviorRounds() throws Exception row.put("objectid", generateGUID()); row.put("taskid", generateGUID()); //required for latestObservationsForCase.sql to work insertRowsCommand.addRow(row); - insertRowsCommand.execute(getApiHelper().getConnection(), getContainerPath()); Map row2 = new HashMap<>(); row2.put("Id", SUBJECTS[0]); From 87d6c048caad2bda933db018aba05a39f0c1dbf1 Mon Sep 17 00:00:00 2001 From: blasar Date: Fri, 10 Apr 2026 12:11:57 -0700 Subject: [PATCH 9/9] Modified BSU Rounds syntex --- .../web/onprc_ehr/window/AddBehaviorCasesWindow.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js index c514c8ddb..1fb129544 100644 --- a/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js +++ b/onprc_ehr/resources/web/onprc_ehr/window/AddBehaviorCasesWindow.js @@ -51,7 +51,7 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { schemaName: 'study', queryName: 'cases', sort: 'Id/curLocation/location,Id,remark,allProblemCategories', - columns: 'Id,objectid', + columns: 'Id,objectid,remark,allProblemCategories', filterArray: casesFilterArray, scope: this, success: function(results){ @@ -79,7 +79,7 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { var distinctCaseIds = []; if (caseRecords && caseRecords.length){ Ext4.Array.forEach(caseRecords, function(cr){ - if (distinctCaseIds.indexOf(cr.get('caseid') == -1)){ + if (distinctCaseIds.indexOf(cr.get('caseid')) == -1){ distinctCaseIds.push(cr.get('caseid')); } }, this); @@ -112,7 +112,7 @@ Ext4.define('ONPRC_EHR.window.AddBehaviorCasesWindow', { //observation: row.getValue('observation'), remark: row.getValue('remark') }); - if (newobservation == "Alopecia Score" && newremark == null) { + if (newobservation == "Alopecia Score" && (newremark == null || newremark == "")) { previousObsMap[key].push({ Id: row.getValue('Id'), date: this.recordData.date,