Skip to content

Commit d6cd5b1

Browse files
Ruhangamks-d
authored andcommitted
RA-1610: 'diagnosisConceptSources' attribute for <encounterDiagnoses*/>.
1 parent eb87383 commit d6cd5b1

10 files changed

Lines changed: 127 additions & 21 deletions

File tree

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
@@ -66,6 +66,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
6666

6767
private String diagnosisSets;
6868

69+
private String diagnosisConceptSources;
70+
6971
private EmrApiProperties emrApiProperties;
7072

7173
private ConceptService conceptService;
@@ -137,6 +139,7 @@ public String generateHtml(FormEntryContext context) {
137139
fragmentConfig.put("formFieldName", "encounterDiagnoses");
138140
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
139141
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
142+
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
140143

141144
// add the prior diagnoses if requested
142145
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -408,6 +411,14 @@ public String getDiagnosisSets() {
408411
return diagnosisSets;
409412
}
410413

414+
public void setDiagnosisConceptSources(String diagnosisConceptSources) {
415+
this.diagnosisConceptSources = diagnosisConceptSources;
416+
}
417+
418+
public String getDiagnosisConceptSources() {
419+
return diagnosisConceptSources;
420+
}
421+
411422
public void setUiUtils(UiUtils uiUtils) {
412423
this.uiUtils = uiUtils;
413424
}

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
@@ -71,6 +71,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
7171

7272
private String diagnosisSets;
7373

74+
private String diagnosisConceptSources;
75+
7476
private AdtService adtService;
7577

7678
private DispositionType dispositionTypeForPriorDiagnoses = null;
@@ -116,6 +118,7 @@ public String generateHtml(FormEntryContext context) {
116118
fragmentConfig.put("formFieldName", "encounterDiagnoses");
117119
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
118120
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
121+
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
119122

120123
// add the prior diagnoses if requested
121124
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -357,6 +360,14 @@ public String getDiagnosisSets() {
357360
return diagnosisSets;
358361
}
359362

363+
public void setDiagnosisConceptSources(String diagnosisConceptSources) {
364+
this.diagnosisConceptSources = diagnosisConceptSources;
365+
}
366+
367+
public String getDiagnosisConceptSources() {
368+
return diagnosisConceptSources;
369+
}
370+
360371
public void setUiUtils(UiUtils uiUtils) {
361372
this.uiUtils = uiUtils;
362373
}

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
@@ -71,6 +71,8 @@ public class EncounterDiagnosesByObsElement implements HtmlGeneratorElement, For
7171

7272
private String diagnosisSets;
7373

74+
private String diagnosisConceptSources;
75+
7476
private AdtService adtService;
7577

7678
private DispositionType dispositionTypeForPriorDiagnoses = null;
@@ -116,6 +118,7 @@ public String generateHtml(FormEntryContext context) {
116118
fragmentConfig.put("formFieldName", "encounterDiagnoses");
117119
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
118120
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
121+
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
119122

120123
// add the prior diagnoses if requested
121124
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
@@ -357,6 +360,14 @@ public String getDiagnosisSets() {
357360
return diagnosisSets;
358361
}
359362

363+
public void setDiagnosisConceptSources(String diagnosisConceptSources) {
364+
this.diagnosisConceptSources = diagnosisConceptSources;
365+
}
366+
367+
public String getDiagnosisConceptSources() {
368+
return diagnosisConceptSources;
369+
}
370+
360371
public void setUiUtils(UiUtils uiUtils) {
361372
this.uiUtils = uiUtils;
362373
}

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
@@ -76,6 +76,7 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
7676
element.setConceptService(conceptService);
7777
element.setAdtService(adtService);
7878
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
79+
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
7980

8081
/**
8182
* Handle the attribute to specify loading any prior diagnoses from the most recent encounter with a specific disposition

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
@@ -76,6 +76,7 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
7676
element.setConceptService(conceptService);
7777
element.setAdtService(adtService);
7878
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
79+
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
7980

8081
/**
8182
* Handle the attribute to specify loading any prior diagnoses from the most recent encounter with a specific disposition

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

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public List<SimpleObject> search(UiSessionContext context,
5757
@SpringBean("conceptService") ConceptService conceptService,
5858
@RequestParam("term") String query,
5959
@RequestParam(value = "diagnosisSets", defaultValue = "") String diagnosisSetUuids,
60+
@RequestParam(value = "diagnosisConceptSources", defaultValue = "") String diagnosisConceptSources,
6061
@RequestParam(value = "start", defaultValue = "0") Integer start,
6162
@RequestParam(value = "size", defaultValue = "50") Integer size) throws Exception {
6263

@@ -73,9 +74,23 @@ public List<SimpleObject> search(UiSessionContext context,
7374
else{
7475
diagnosisSets = emrApiProperties.getDiagnosisSets();
7576
}
76-
Locale locale = context.getLocale();
7777

78-
List<ConceptSource> sources = emrApiProperties.getConceptSourcesForDiagnosisSearch();
78+
List<ConceptSource> sources = new ArrayList<ConceptSource>();
79+
80+
if (StringUtils.isNotEmpty(diagnosisConceptSources)) {
81+
String [] sourceNames = diagnosisConceptSources.split(",");
82+
for (String sourceName : sourceNames) {
83+
ConceptSource source = conceptService.getConceptSourceByName(sourceName);
84+
if (source != null) {
85+
sources.add(source);
86+
}
87+
}
88+
}
89+
else{
90+
sources = emrApiProperties.getConceptSourcesForDiagnosisSearch();
91+
}
92+
93+
Locale locale = context.getLocale();
7994

8095
List<ConceptSearchResult> hits = emrConceptService.conceptSearch(query, locale, null, diagnosisSets, sources, null);
8196
List<SimpleObject> ret = new ArrayList<SimpleObject>();
@@ -85,25 +100,17 @@ public List<SimpleObject> search(UiSessionContext context,
85100
return ret;
86101
}
87102

103+
@Deprecated
88104
public List<SimpleObject> searchNonCoded(UiSessionContext context,
89105
UiUtils ui,
90106
@SpringBean("emrApiProperties") EmrApiProperties emrApiProperties,
91107
@SpringBean("emrConceptService") EmrConceptService emrConceptService,
108+
@SpringBean("conceptService") ConceptService conceptService,
92109
@RequestParam("term") String query,
93110
@RequestParam(value = "start", defaultValue = "0") Integer start,
94111
@RequestParam(value = "size", defaultValue = "50") Integer size) throws Exception {
95112

96-
Collection<Concept> diagnosisSets = emrApiProperties.getDiagnosisSets();
97-
Locale locale = context.getLocale();
98-
99-
List<ConceptSource> sources = emrApiProperties.getConceptSourcesForDiagnosisSearch();
100-
101-
List<ConceptSearchResult> hits = emrConceptService.conceptSearch(query, locale, null, diagnosisSets, sources, null);
102-
List<SimpleObject> ret = new ArrayList<SimpleObject>();
103-
for (ConceptSearchResult hit : hits) {
104-
ret.add(simplify(hit, ui, locale));
105-
}
106-
return ret;
113+
return search(context, ui, emrApiProperties, emrConceptService, conceptService, query, null, null, start, size);
107114
}
108115

109116
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 }"/>
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 }"/>
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}),
7+
source: emr.fragmentActionLink("coreapps", "diagnoses", "search", {diagnosisSets: attrs.diagnosissets, diagnosisConceptSources: attrs.diagnosissonceptsources}),
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: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class DiagnosesFragmentControllerTest {
5353
@Test
5454
public void search_shouldSearchForDiagnosisConceptsFromSpecifiedSets() throws Exception {
5555
// replay
56-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "1st_diagnosis_set_uuid,2nd_diagnosis_set_uuid", null, null);
56+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "1st_diagnosis_set_uuid,2nd_diagnosis_set_uuid", null, null, null);
5757

5858
// verify
5959
verify(emrApiProperties, never()).getDiagnosisSets();
@@ -62,7 +62,7 @@ public void search_shouldSearchForDiagnosisConceptsFromSpecifiedSets() throws Ex
6262
@Test
6363
public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetGivenEmptyDiagnosisSets() throws Exception {
6464
// replay
65-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "", null, null);
65+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, "", null, null, null);
6666

6767
// verify
6868
verify(emrApiProperties, times(1)).getDiagnosisSets();
@@ -71,10 +71,37 @@ public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetG
7171
@Test
7272
public void search_shouldSearchForDiagnosisConceptsUsingGloballyDefinedSuperSetGivenNullDiagnosisSets() throws Exception {
7373
// replay
74-
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null);
74+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null);
7575

7676
// verify
7777
verify(emrApiProperties, times(1)).getDiagnosisSets();
7878

7979
}
80+
81+
@Test
82+
public void search_shouldSearchForDiagnosesFromSpecifiedDiagnosisConceptSources() throws Exception {
83+
// replay
84+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "CIEL,ICD-10-WHO", null, null);
85+
86+
// verify
87+
verify(emrApiProperties, never()).getConceptSourcesForDiagnosisSearch();
88+
}
89+
90+
@Test
91+
public void search_shouldSearchForDiagnosesUsingGloballyDefinedConceptSourcesGivenEmptyDiagnosisConceptSourcesAttr() throws Exception {
92+
// replay
93+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, "", null, null);
94+
95+
// verify
96+
verify(emrApiProperties, times(1)).getConceptSourcesForDiagnosisSearch();
97+
}
98+
99+
@Test
100+
public void search_shouldSearchForDiagnosesUsingGloballyDefinedConceptSourcesGivenNullDiagnosisConceptSourcesAttr() throws Exception {
101+
// replay
102+
controller.search(context, uiUtils, emrApiProperties, emrConceptService, conceptService, queryString, null, null, null, null);
103+
104+
// verify
105+
verify(emrApiProperties, times(1)).getConceptSourcesForDiagnosisSearch();
106+
}
80107
}

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

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public void setUp() throws Exception {
131131
when(formEntryContext.getMode()).thenReturn(FormEntryContext.Mode.ENTER);
132132
when(formEntrySession.getContext()).thenReturn(formEntryContext);
133133
when(uiUtils.message(anyString())).thenReturn("message");
134+
// this ensures that our mock of UiUtils renders the fragment it's been given (the third argument)
134135
when(uiUtils.includeFragment(eq("coreapps"), eq("diagnosis/encounterDiagnoses"), any(Map.class))).thenAnswer(new Answer<String>() {
135136
@Override
136137
public String answer(InvocationOnMock invocation) throws Throwable {
@@ -365,7 +366,7 @@ public void testEditedResults(SubmissionResults results) {
365366
}
366367

367368
@Test
368-
public void getSubstitution_shouldAddDiagnosisSetsAttributeOnDiagnosisSearchFieldGivenDiagnosisUuids() throws Exception {
369+
public void getSubstitution_shouldAddUuidsToDiagnosisSetsAttributeOnDiagnosisSearchFieldGivenDiagnosisUuids() throws Exception {
369370
// setup
370371
String diagnosisSetsUuids = GENERAL_AND_SPECIFIED_DIAGNOSIS_SET_UUID + "," + HIV_OPPORTUNISTIC_INFECTION_DIAGNOSIS_SET_UUID;
371372

@@ -384,7 +385,7 @@ public void getSubstitution_shouldAddDiagnosisSetsAttributeOnDiagnosisSearchFiel
384385
}
385386

386387
@Test
387-
public void getSubstitution_shouldAddDiagnosisSetsAttributeOnDiagnosisSearchFieldGivenDiagnosisMappings() throws Exception {
388+
public void getSubstitution_shouldAddUuidsToDiagnosisSetsAttributeOnDiagnosisSearchFieldGivenDiagnosisMappings() throws Exception {
388389
// setup
389390
String diagnosisSetsUuids = GENERAL_AND_SPECIFIED_DIAGNOSIS_SET_UUID + "," + HIV_OPPORTUNISTIC_INFECTION_DIAGNOSIS_SET_UUID;
390391

@@ -420,7 +421,7 @@ public void getSubstitution_shouldAddEmptyStringToDiagnosisSetsAttributeOnDiagno
420421
}
421422

422423
@Test(expected = IllegalArgumentException.class)
423-
public void getSubstitution_shouldThrowExceptionDiagnosisSetsAttributeHasNonExistingSets() throws Exception {
424+
public void getSubstitution_shouldThrowWhenDiagnosisSetsAttributeContainsInvalidSetsIds() throws Exception {
424425
// setup
425426
Map<String,String> attributes = new HashMap<String, String>();
426427
attributes.put("required", "true");
@@ -432,6 +433,42 @@ public void getSubstitution_shouldThrowExceptionDiagnosisSetsAttributeHasNonExis
432433
encounterDiagnosesTagHandler.getSubstitution(formEntrySession, formSubmissionController, attributes);
433434
}
434435

436+
@Test
437+
public void getSubstitution_shouldAddDiagnosisConceptSourcesAttributeOnDiagnosisSearchField() throws Exception {
438+
// setup
439+
String diagnosisConceptSources = "ICPC,CIEL";
440+
441+
Map<String,String> attributes = new HashMap<String, String>();
442+
attributes.put("required", "true");
443+
attributes.put(CoreAppsConstants.HTMLFORMENTRY_ENCOUNTER_DIAGNOSES_TAG_INCLUDE_PRIOR_DIAGNOSES_ATTRIBUTE_NAME, "admit");
444+
attributes.put("selectedDiagnosesTarget", "example-target");
445+
446+
// replay
447+
attributes.put("diagnosisConceptSources", "ICPC, CIEL");
448+
String generatedHtml = encounterDiagnosesTagHandler.getSubstitution(formEntrySession, formSubmissionController, attributes);
449+
450+
// verify
451+
assertTrue(StringUtils.contains(generatedHtml, "diagnosisConceptSources=\"" + diagnosisConceptSources + "\""));
452+
}
453+
454+
@Test
455+
public void getSubstitution_shouldAddEmptyStringToDiagnosisConceptSourcesAttributeOnDiagnosisSearchFieldGivenNullAttribute() throws Exception {
456+
// setup
457+
String diagnosisConceptSources = "";
458+
459+
Map<String,String> attributes = new HashMap<String, String>();
460+
attributes.put("required", "true");
461+
attributes.put(CoreAppsConstants.HTMLFORMENTRY_ENCOUNTER_DIAGNOSES_TAG_INCLUDE_PRIOR_DIAGNOSES_ATTRIBUTE_NAME, "admit");
462+
attributes.put("selectedDiagnosesTarget", "example-target");
463+
464+
// replay
465+
attributes.put("diagnosisConceptSources", null);
466+
String generatedHtml = encounterDiagnosesTagHandler.getSubstitution(formEntrySession, formSubmissionController, attributes);
467+
468+
// verify
469+
assertTrue(StringUtils.contains(generatedHtml, "diagnosisConceptSources=\"" + diagnosisConceptSources + "\""));
470+
}
471+
435472
private String renderFragmentHtml(Map<String, Object> fragmentConfig) throws Exception {
436473
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("web/module/fragments/diagnosis/encounterDiagnoses.gsp");
437474
String string = IOUtils.toString(inputStream, UTF_8.toString());

0 commit comments

Comments
 (0)