Skip to content

Commit 90cc618

Browse files
Ruhangamks-d
authored andcommitted
RA-1611: <encounterDiagnoses*/> to support a 'diagnosisConceptClasses' attribute.
1 parent 73c4468 commit 90cc618

File tree

10 files changed

+128
-12
lines changed

10 files changed

+128
-12
lines changed

api-2.2/src/main/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesElement.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
7070
private String diagnosisConceptSources;
7171

7272
private String preferredCodingSource;
73+
74+
private String diagnosisConceptClasses;
7375

7476
private EmrApiProperties emrApiProperties;
7577

@@ -144,6 +146,7 @@ public String generateHtml(FormEntryContext context) {
144146
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
145147
fragmentConfig.put("preferredCodingSource", preferredCodingSource);
146148
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
149+
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));
147150

148151
// add the prior diagnoses if requested
149152
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -430,6 +433,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
430433
public String getPreferredCodingSource() {
431434
return preferredCodingSource;
432435
}
436+
437+
public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
438+
this.diagnosisConceptClasses = diagnosisConceptClasses;
439+
}
440+
441+
public String getDiagnosisConceptClasses() {
442+
return diagnosisConceptClasses;
443+
}
433444

434445
public void setUiUtils(UiUtils uiUtils) {
435446
this.uiUtils = uiUtils;

api-pre2.2/src/main/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesElement.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
7575
private String diagnosisSets;
7676

7777
private String diagnosisConceptSources;
78+
79+
private String diagnosisConceptClasses;
7880

7981
private AdtService adtService;
8082

@@ -123,6 +125,7 @@ public String generateHtml(FormEntryContext context) {
123125
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
124126
fragmentConfig.put("preferredCodingSource", preferredCodingSource);
125127
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
128+
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));
126129

127130
// add the prior diagnoses if requested
128131
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -379,6 +382,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
379382
public String getPreferredCodingSource() {
380383
return preferredCodingSource;
381384
}
385+
386+
public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
387+
this.diagnosisConceptClasses = diagnosisConceptClasses;
388+
}
389+
390+
public String getDiagnosisConceptClasses() {
391+
return diagnosisConceptClasses;
392+
}
382393

383394
public void setUiUtils(UiUtils uiUtils) {
384395
this.uiUtils = uiUtils;

api/src/main/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesByObsElement.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public class EncounterDiagnosesByObsElement implements HtmlGeneratorElement, For
7575
private String diagnosisConceptSources;
7676

7777
private String preferredCodingSource;
78+
79+
private String diagnosisConceptClasses;
7880

7981
private AdtService adtService;
8082

@@ -123,6 +125,7 @@ public String generateHtml(FormEntryContext context) {
123125
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
124126
fragmentConfig.put("preferredCodingSource", preferredCodingSource);
125127
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
128+
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));
126129

127130
// add the prior diagnoses if requested
128131
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -379,6 +382,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
379382
public String getPreferredCodingSource() {
380383
return preferredCodingSource;
381384
}
385+
386+
public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
387+
this.diagnosisConceptClasses = diagnosisConceptClasses;
388+
}
389+
390+
public String getDiagnosisConceptClasses() {
391+
return diagnosisConceptClasses;
392+
}
382393

383394
public void setUiUtils(UiUtils uiUtils) {
384395
this.uiUtils = uiUtils;

api/src/main/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesByObsTagHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
7777
element.setConceptService(conceptService);
7878
element.setAdtService(adtService);
7979
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
80+
element.setDiagnosisConceptClasses(attributes.get("diagnosisConceptClasses") != null ? attributes.get("diagnosisConceptClasses") : "");
8081
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
8182
element.setPreferredCodingSource(attributes.get("preferredCodingSource") != null ? attributes.get("preferredCodingSource"): CoreAppsConstants.DEFAULT_CODING_SOURCE);
8283

api/src/main/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesTagHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
7979
element.setConceptService(conceptService);
8080
element.setAdtService(adtService);
8181
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
82+
element.setDiagnosisConceptClasses(attributes.get("diagnosisConceptClasses") != null ? attributes.get("diagnosisConceptClasses") : "");
8283
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
8384
element.setPreferredCodingSource(attributes.get("preferredCodingSource") != null ? attributes.get("preferredCodingSource"): CoreAppsConstants.DEFAULT_CODING_SOURCE);
8485

omod/src/main/java/org/openmrs/module/coreapps/fragment/controller/DiagnosesFragmentController.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.codehaus.jackson.JsonNode;
2020
import org.codehaus.jackson.map.ObjectMapper;
2121
import org.openmrs.Concept;
22+
import org.openmrs.ConceptClass;
2223
import org.openmrs.ConceptName;
2324
import org.openmrs.ConceptSearchResult;
2425
import org.openmrs.ConceptSource;
@@ -58,6 +59,7 @@ public List<SimpleObject> search(UiSessionContext context,
5859
@RequestParam("term") String query,
5960
@RequestParam(value = "diagnosisSets", defaultValue = "") String diagnosisSetUuids,
6061
@RequestParam(value = "diagnosisConceptSources", defaultValue = "") String diagnosisConceptSources,
62+
@RequestParam(value = "diagnosisConceptClasses", defaultValue = "") String diagnosisConceptClasses,
6163
@RequestParam(value = "start", defaultValue = "0") Integer start,
6264
@RequestParam(value = "size", defaultValue = "50") Integer size) throws Exception {
6365

@@ -71,7 +73,7 @@ public List<SimpleObject> search(UiSessionContext context,
7173
}
7274
}
7375
}
74-
else{
76+
else {
7577
diagnosisSets = emrApiProperties.getDiagnosisSets();
7678
}
7779

@@ -86,13 +88,27 @@ public List<SimpleObject> search(UiSessionContext context,
8688
}
8789
}
8890
}
89-
else{
91+
else {
9092
sources = emrApiProperties.getConceptSourcesForDiagnosisSearch();
9193
}
94+
95+
List<ConceptClass> conceptClasses = new ArrayList<ConceptClass>();
96+
if (StringUtils.isNotEmpty(diagnosisConceptClasses)) {
97+
String [] conceptClassNames = diagnosisConceptClasses.split(",");
98+
for (String className : conceptClassNames) {
99+
ConceptClass conceptClass = conceptService.getConceptClassByName(className);
100+
if (conceptClass != null) {
101+
conceptClasses.add(conceptClass);
102+
}
103+
}
104+
}
105+
else {
106+
conceptClasses = null;
107+
}
92108

93109
Locale locale = context.getLocale();
94110

95-
List<ConceptSearchResult> hits = emrConceptService.conceptSearch(query, locale, null, diagnosisSets, sources, null);
111+
List<ConceptSearchResult> hits = emrConceptService.conceptSearch(query, locale, conceptClasses, diagnosisSets, sources, null);
96112
List<SimpleObject> ret = new ArrayList<SimpleObject>();
97113
for (ConceptSearchResult hit : hits) {
98114
ret.add(simplify(hit, ui, locale));
@@ -110,7 +126,7 @@ public List<SimpleObject> searchNonCoded(UiSessionContext context,
110126
@RequestParam(value = "start", defaultValue = "0") Integer start,
111127
@RequestParam(value = "size", defaultValue = "50") Integer size) throws Exception {
112128

113-
return search(context, ui, emrApiProperties, emrConceptService, conceptService, query, null, null, start, size);
129+
return search(context, ui, emrApiProperties, emrConceptService, conceptService, query, null, null, null, start, size);
114130
}
115131

116132
public FragmentActionResult codeDiagnosis(UiUtils ui,

omod/src/main/webapp/fragments/diagnosis/encounterDiagnoses.gsp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666

6767
<div id="diagnosis-search-container">
6868
<label for="diagnosis-search">${ ui.message("coreapps.consult.addDiagnosis") }</label>
69-
<input id="diagnosis-search" type="text" placeholder="${ ui.message("coreapps.consult.addDiagnosis.placeholder") }" autocomplete itemFormatter="autocomplete-render-item" diagnosisSets="${ config.diagnosisSets }" diagnosisConceptSources="${ config.diagnosisConceptSources }" preferredCodingSource="${ config.preferredCodingSource }"/>
69+
<input id="diagnosis-search" type="text" placeholder="${ ui.message("coreapps.consult.addDiagnosis.placeholder") }" autocomplete itemFormatter="autocomplete-render-item" diagnosisSets="${ config.diagnosisSets }" diagnosisConceptSources="${ config.diagnosisConceptSources }" preferredCodingSource="${ config.preferredCodingSource }" diagnosisConceptClasses="${ config.diagnosisConceptClasses }"/>
7070

7171
<% if(jsForPrior.size > 0) { %>
7272
<button type="button" ng-click="addPriorDiagnoses()">${ ui.message("coreapps.consult.priorDiagnoses.add") }</button>

omod/src/main/webapp/resources/scripts/diagnoses/diagnoses-angular.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var app = angular.module('diagnoses', [])
44
// I don't know how to use an angular template programmatically, so use an underscore template instead. :-(
55
var itemFormatter = _.template($('#' + attrs.itemformatter).html());
66
element.autocomplete({
7-
source: emr.fragmentActionLink("coreapps", "diagnoses", "search", {diagnosisSets: attrs.diagnosissets, diagnosisConceptSources: attrs.diagnosisconceptsources}),
7+
source: emr.fragmentActionLink("coreapps", "diagnoses", "search", {diagnosisSets: attrs.diagnosissets, diagnosisConceptSources: attrs.diagnosisconceptsources, diagnosisConceptClasses: attrs.diagnosisconceptclasses}),
88
response: function(event, ui) {
99
var query = event.target.value.toLowerCase();
1010
var items = ui.content;

omod/src/test/java/org/openmrs/module/coreapps/fragment/controller/DiagnosesFragmentControllerTest.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,28 @@
1414

1515
package org.openmrs.module.coreapps.fragment.controller;
1616

17+
import static org.mockito.Matchers.eq;
1718
import static org.mockito.Mockito.never;
1819
import static org.mockito.Mockito.times;
1920
import static org.mockito.Mockito.verify;
21+
import static org.mockito.Mockito.when;
2022

2123
import org.junit.Test;
2224
import org.junit.runner.RunWith;
2325
import org.mockito.Mock;
2426
import org.mockito.runners.MockitoJUnitRunner;
2527
import org.openmrs.api.ConceptService;
28+
import org.openmrs.Concept;
29+
import org.openmrs.ConceptClass;
30+
import org.openmrs.ConceptSource;
2631
import org.openmrs.module.appui.UiSessionContext;
2732
import org.openmrs.module.emrapi.EmrApiProperties;
2833
import org.openmrs.module.emrapi.concept.EmrConceptService;
2934
import org.openmrs.ui.framework.UiUtils;
3035

36+
import java.util.List;
37+
import java.util.ArrayList;
38+
3139
@RunWith(MockitoJUnitRunner.class)
3240
public class DiagnosesFragmentControllerTest {
3341

@@ -53,7 +61,7 @@ public class DiagnosesFragmentControllerTest {
5361
@Test
5462
public void search_shouldSearchForDiagnosisConceptsFromSpecifiedSets() throws Exception {
5563
// replay
56-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "1st_diagnosis_set_uuid,2nd_diagnosis_set_uuid", null, null, null);
64+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "1st_diagnosis_set_uuid,2nd_diagnosis_set_uuid", null, null, null, null);
5765

5866
// verify
5967
verify(emrApiProperties, never()).getDiagnosisSets();
@@ -62,7 +70,7 @@ public void search_shouldSearchForDiagnosisConceptsFromSpecifiedSets() throws Ex
6270
@Test
6371
public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetGivenEmptyDiagnosisSets() throws Exception {
6472
// replay
65-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "", null, null, null);
73+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "", null, null, null, null);
6674

6775
// verify
6876
verify(emrApiProperties, times(1)).getDiagnosisSets();
@@ -71,7 +79,7 @@ public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetG
7179
@Test
7280
public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetGivenNullDiagnosisSets() throws Exception {
7381
// replay
74-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null);
82+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null, null);
7583

7684
// verify
7785
verify(emrApiProperties, times(1)).getDiagnosisSets();
@@ -81,7 +89,7 @@ public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetG
8189
@Test
8290
public void search_shouldSearchForDiagnosesFromSpecifiedDiagnosisConceptSources() throws Exception {
8391
// replay
84-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "CIEL,ICD-10-WHO", null, null);
92+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "CIEL,ICD-10-WHO", null, null, null);
8593

8694
// verify
8795
verify(emrApiProperties, never()).getConceptSourcesForDiagnosisSearch();
@@ -90,7 +98,7 @@ public void search_shouldSearchForDiagnosesFromSpecifiedDiagnosisConceptSources(
9098
@Test
9199
public void search_shouldSearchForDiagnosesUsingGloballyDefinedConceptSourcesGivenEmptyDiagnosisConceptSourcesAttr() throws Exception {
92100
// replay
93-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "", null, null);
101+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "", null, null, null);
94102

95103
// verify
96104
verify(emrApiProperties, times(1)).getConceptSourcesForDiagnosisSearch();
@@ -99,9 +107,30 @@ public void search_shouldSearchForDiagnosesUsingGloballyDefinedConceptSourcesGiv
99107
@Test
100108
public void search_shouldSearchForDiagnosesUsingGloballyDefinedConceptSourcesGivenNullDiagnosisConceptSourcesAttr() throws Exception {
101109
// replay
102-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null);
110+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null, null);
103111

104112
// verify
105113
verify(emrApiProperties, times(1)).getConceptSourcesForDiagnosisSearch();
106114
}
115+
116+
@Test
117+
public void search_shouldSearchForDiagnosesUsingSpecifiedDiagnosisConceptClasses() throws Exception {
118+
// setup
119+
ConceptClass conceptClass = new ConceptClass();
120+
List<ConceptClass> classList = new ArrayList<ConceptClass> ();
121+
classList.add(conceptClass);
122+
123+
ConceptSource source = new ConceptSource();
124+
List<ConceptSource> sourceList = new ArrayList<ConceptSource> ();
125+
sourceList.add(source);
126+
when(conceptService.getConceptClassByName(eq("Diagnosis"))).thenReturn(conceptClass);
127+
when(conceptService.getConceptSourceByName(eq("ICD-10-WHO"))).thenReturn(source);
128+
when(emrApiProperties.getDiagnosisSets()).thenReturn(null);
129+
130+
// replay
131+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "ICD-10-WHO", "Diagnosis", null, null);
132+
133+
// verify
134+
verify(emrConceptService, times(1)).conceptSearch(queryString, null, classList, null, sourceList, null);
135+
}
107136
}

omod/src/test/java/org/openmrs/module/coreapps/htmlformentry/EncounterDiagnosesTagHandlerComponentTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,42 @@ public void getSubstitution_shouldAddEmptyStringToDiagnosisConceptSourcesAttribu
506506
// verify
507507
assertTrue(StringUtils.contains(generatedHtml, "diagnosisConceptSources=\"" + diagnosisConceptSources + "\""));
508508
}
509+
510+
@Test
511+
public void getSubstitution_shouldAddDiagnosisConceptClassesAttributeOnDiagnosisSearchField() throws Exception {
512+
// setup
513+
String diagnosisConceptClasses = "Diagnosis,Findig";
514+
515+
Map<String,String> attributes = new HashMap<String, String>();
516+
attributes.put("required", "true");
517+
attributes.put(CoreAppsConstants.HTMLFORMENTRY_ENCOUNTER_DIAGNOSES_TAG_INCLUDE_PRIOR_DIAGNOSES_ATTRIBUTE_NAME, "admit");
518+
attributes.put("selectedDiagnosesTarget", "example-target");
519+
520+
// replay
521+
attributes.put("diagnosisConceptClasses", "Diagnosis,Findig");
522+
String generatedHtml = encounterDiagnosesTagHandler.getSubstitution(formEntrySession, formSubmissionController, attributes);
523+
524+
// verify
525+
assertTrue(StringUtils.contains(generatedHtml, "diagnosisConceptClasses=\"" + diagnosisConceptClasses + "\""));
526+
}
527+
528+
@Test
529+
public void getSubstitution_shouldAddEmptyStringToDiagnosisConceptClassesAttributeOnDiagnosisSearchFieldGivenNullAttribute() throws Exception {
530+
// setup
531+
String diagnosisConceptClasses = "";
532+
533+
Map<String,String> attributes = new HashMap<String, String>();
534+
attributes.put("required", "true");
535+
attributes.put(CoreAppsConstants.HTMLFORMENTRY_ENCOUNTER_DIAGNOSES_TAG_INCLUDE_PRIOR_DIAGNOSES_ATTRIBUTE_NAME, "admit");
536+
attributes.put("selectedDiagnosesTarget", "example-target");
537+
538+
// replay
539+
attributes.put("diagnosisConceptClasses", null);
540+
String generatedHtml = encounterDiagnosesTagHandler.getSubstitution(formEntrySession, formSubmissionController, attributes);
541+
542+
// verify
543+
assertTrue(StringUtils.contains(generatedHtml, "diagnosisConceptClasses=\"" + diagnosisConceptClasses + "\""));
544+
}
509545

510546
private String renderFragmentHtml(Map<String, Object> fragmentConfig) throws Exception {
511547
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("web/module/fragments/diagnosis/encounterDiagnoses.gsp");

0 commit comments

Comments
 (0)