Skip to content

Commit

Permalink
change in UI to support new patient search criteria
Browse files Browse the repository at this point in the history
  • Loading branch information
Reyano132 committed Aug 21, 2019
1 parent 73c4468 commit 35caa69
Show file tree
Hide file tree
Showing 19 changed files with 591 additions and 77 deletions.
8 changes: 6 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
language: java
jdk:
- oraclejdk8
- openjdk8
addons:
firefox: "43.0"
cache:
directories:
- .autoconf
- $HOME/.m2
install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- tar -xjf /tmp/firefox-43.0.tar.bz2 --directory /tmp
- export PATH="/tmp/firefox:$PATH"
script: mvn clean install
script: mvn clean install -q
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
private String diagnosisConceptSources;

private String preferredCodingSource;

private String diagnosisConceptClasses;

private EmrApiProperties emrApiProperties;

Expand Down Expand Up @@ -141,9 +143,12 @@ public String generateHtml(FormEntryContext context) {
Map<String, Object> fragmentConfig = new HashMap<String, Object>();
fragmentConfig.put("formFieldName", "encounterDiagnoses");
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
// Parse '0' to config attribute if specified such that null value can be used during the search in 'DiagnosesFragmentController' class
fragmentConfig.put("diagnosisSets", "0".equals(diagnosisSets) ? "0" : validateAndFormat(diagnosisSets));

fragmentConfig.put("preferredCodingSource", preferredCodingSource);
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));

// add the prior diagnoses if requested
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
Expand Down Expand Up @@ -181,8 +186,8 @@ public String generateHtml(FormEntryContext context) {
* @throws IllegalArgumentException if one or more sets cannot be fetched from the database.
*/
private String validateAndFormat(String diagnosisSetIds) {
if ("".equals(diagnosisSetIds)) {
return diagnosisSetIds;
if (diagnosisSetIds == null) {
return null;
}
List<Concept> concepts = new ArrayList<Concept>();
for (StringTokenizer st = new StringTokenizer(diagnosisSetIds, ","); st.hasMoreTokens();) {
Expand Down Expand Up @@ -430,6 +435,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
public String getPreferredCodingSource() {
return preferredCodingSource;
}

public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
this.diagnosisConceptClasses = diagnosisConceptClasses;
}

public String getDiagnosisConceptClasses() {
return diagnosisConceptClasses;
}

public void setUiUtils(UiUtils uiUtils) {
this.uiUtils = uiUtils;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public class EncounterDiagnosesElement implements HtmlGeneratorElement, FormSubm
private String diagnosisSets;

private String diagnosisConceptSources;

private String diagnosisConceptClasses;

private AdtService adtService;

Expand Down Expand Up @@ -120,9 +122,12 @@ public String generateHtml(FormEntryContext context) {
Map<String, Object> fragmentConfig = new HashMap<String, Object>();
fragmentConfig.put("formFieldName", "encounterDiagnoses");
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
// Parse '0' to config attribute if specified such that null value can be used during the search in 'DiagnosesFragmentController' class
fragmentConfig.put("diagnosisSets", "0".equals(diagnosisSets) ? "0" : validateAndFormat(diagnosisSets));

fragmentConfig.put("preferredCodingSource", preferredCodingSource);
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));

// add the prior diagnoses if requested
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
Expand Down Expand Up @@ -160,8 +165,8 @@ public String generateHtml(FormEntryContext context) {
* @throws IllegalArgumentException if one or more sets cannot be fetched from the database.
*/
private String validateAndFormat(String diagnosisSetIds) {
if (StringUtils.isEmpty(diagnosisSetIds)) {
return "";
if (diagnosisSetIds == null) {
return null;
}
List<Concept> concepts = new ArrayList<Concept>();
for (StringTokenizer st = new StringTokenizer(diagnosisSetIds, ","); st.hasMoreTokens();) {
Expand Down Expand Up @@ -379,6 +384,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
public String getPreferredCodingSource() {
return preferredCodingSource;
}

public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
this.diagnosisConceptClasses = diagnosisConceptClasses;
}

public String getDiagnosisConceptClasses() {
return diagnosisConceptClasses;
}

public void setUiUtils(UiUtils uiUtils) {
this.uiUtils = uiUtils;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public class EncounterDiagnosesByObsElement implements HtmlGeneratorElement, For
private String diagnosisConceptSources;

private String preferredCodingSource;

private String diagnosisConceptClasses;

private AdtService adtService;

Expand Down Expand Up @@ -120,9 +122,12 @@ public String generateHtml(FormEntryContext context) {
Map<String, Object> fragmentConfig = new HashMap<String, Object>();
fragmentConfig.put("formFieldName", "encounterDiagnoses");
fragmentConfig.put("existingDiagnoses", existingDiagnoses);
fragmentConfig.put("diagnosisSets", validateAndFormat(diagnosisSets));
// Parse '0' to config attribute if specified such that null value can be used during the search in 'DiagnosesFragmentController' class
fragmentConfig.put("diagnosisSets", "0".equals(diagnosisSets) ? "0" : validateAndFormat(diagnosisSets));

fragmentConfig.put("preferredCodingSource", preferredCodingSource);
fragmentConfig.put("diagnosisConceptSources", StringUtils.deleteWhitespace(diagnosisConceptSources));
fragmentConfig.put("diagnosisConceptClasses", StringUtils.deleteWhitespace(diagnosisConceptClasses));

// add the prior diagnoses if requested
if (FormEntryContext.Mode.ENTER == context.getMode() && dispositionTypeForPriorDiagnoses != null) {
Expand Down Expand Up @@ -160,8 +165,8 @@ public String generateHtml(FormEntryContext context) {
* @throws IllegalArgumentException if one or more sets cannot be fetched from the database.
*/
private String validateAndFormat(String diagnosisSetIds) {
if ("".equals(diagnosisSetIds)) {
return diagnosisSetIds;
if (diagnosisSetIds == null) {
return null;
}
List<Concept> concepts = new ArrayList<Concept>();
for (StringTokenizer st = new StringTokenizer(diagnosisSetIds, ","); st.hasMoreTokens();) {
Expand Down Expand Up @@ -379,6 +384,14 @@ public void setPreferredCodingSource(String preferredCodingSource) {
public String getPreferredCodingSource() {
return preferredCodingSource;
}

public void setDiagnosisConceptClasses(String diagnosisConceptClasses) {
this.diagnosisConceptClasses = diagnosisConceptClasses;
}

public String getDiagnosisConceptClasses() {
return diagnosisConceptClasses;
}

public void setUiUtils(UiUtils uiUtils) {
this.uiUtils = uiUtils;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,9 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
element.setEmrApiProperties(emrApiProperties);
element.setConceptService(conceptService);
element.setAdtService(adtService);
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
element.setDiagnosisSets(attributes.get("diagnosisSets"));
element.setDiagnosisConceptClasses(attributes.get("diagnosisConceptClasses"));
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources"));
element.setPreferredCodingSource(attributes.get("preferredCodingSource") != null ? attributes.get("preferredCodingSource"): CoreAppsConstants.DEFAULT_CODING_SOURCE);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ protected String getSubstitution(FormEntrySession session, FormSubmissionControl
element.setEmrApiProperties(emrApiProperties);
element.setConceptService(conceptService);
element.setAdtService(adtService);
element.setDiagnosisSets(attributes.get("diagnosisSets") != null ? attributes.get("diagnosisSets") : "");
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources") != null ? attributes.get("diagnosisConceptSources") : "");
element.setDiagnosisSets(attributes.get("diagnosisSets"));
element.setDiagnosisConceptClasses(attributes.get("diagnosisConceptClasses"));
element.setDiagnosisConceptSources(attributes.get("diagnosisConceptSources"));
element.setPreferredCodingSource(attributes.get("preferredCodingSource") != null ? attributes.get("preferredCodingSource"): CoreAppsConstants.DEFAULT_CODING_SOURCE);

/**
Expand Down
21 changes: 21 additions & 0 deletions omod/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
<gem.path>${basedir}/.rubygems</gem.path>
</properties>

<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

<dependencies>

<!--
Expand Down Expand Up @@ -255,6 +262,20 @@
<scope>provided</scope>
</dependency>

<!-- Patient search criteria module -->
<dependency>
<groupId>com.github.Reyano132.openmrs-module-patientsearchcriteria</groupId>
<artifactId>patientsearch-api</artifactId>
<version>v1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.Reyano132.openmrs-module-patientsearchcriteria</groupId>
<artifactId>patientsearch-omod</artifactId>
<version>v1.0.0</version>
<scope>provided</scope>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
package org.openmrs.module.coreapps.fragment.controller;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.openmrs.Concept;
import org.openmrs.ConceptClass;
import org.openmrs.ConceptName;
import org.openmrs.ConceptSearchResult;
import org.openmrs.ConceptSource;
Expand Down Expand Up @@ -50,49 +52,92 @@
*/
public class DiagnosesFragmentController {

private final static String USE_NULL_VALUE = "0";

/**
* Searches for diagnoses with names matching query in the specified 1) diagnosisSets, 2) diagnosisConceptSources and/or diagnosisConceptClasses
* If diagnosisSets or diagnosisConceptSources attributes are missing, default values specided by emrApiProperties are used.
* If '0' is specified for any of diagnosisSets or diagnosisConceptSources attributes, null is used for their corresponding values in the search.
*
* @param context
* @param ui
* @param emrApiProperties
* @param emrConceptService
* @param conceptService
* @param query
* @param diagnosisSetUuids
* @param diagnosisConceptSources
* @param diagnosisConceptClasses
* @param start
* @param size
* @return diagnoses search results
* @throws Exception
*/
public List<SimpleObject> search(UiSessionContext context,
UiUtils ui,
@SpringBean("emrApiProperties") EmrApiProperties emrApiProperties,
@SpringBean("emrConceptService") EmrConceptService emrConceptService,
@SpringBean("conceptService") ConceptService conceptService,
@RequestParam("term") String query,
@RequestParam(value = "diagnosisSets", defaultValue = "") String diagnosisSetUuids,
@RequestParam(value = "diagnosisConceptSources", defaultValue = "") String diagnosisConceptSources,
@RequestParam(value = "diagnosisSets", required = false) String diagnosisSetUuids,
@RequestParam(value = "diagnosisConceptSources", required = false) String diagnosisConceptSources,
@RequestParam(value = "diagnosisConceptClasses", required = false) String diagnosisConceptClasses,
@RequestParam(value = "start", defaultValue = "0") Integer start,
@RequestParam(value = "size", defaultValue = "50") Integer size) throws Exception {

List<ConceptClass> conceptClasses = new ArrayList<ConceptClass>();
if (StringUtils.isNotEmpty(diagnosisConceptClasses)) {
String [] conceptClassNames = diagnosisConceptClasses.split(",");
for (String className : conceptClassNames) {
ConceptClass conceptClass = conceptService.getConceptClassByName(className);
if (conceptClass != null) {
conceptClasses.add(conceptClass);
}
}
}
else {
conceptClasses = null;
}

Collection<Concept> diagnosisSets = new ArrayList<Concept>();
if (StringUtils.isNotEmpty(diagnosisSetUuids)) {
String [] setUuids = diagnosisSetUuids.split(",");
for (String setUuid : setUuids) {
Concept conceptSet = conceptService.getConceptByUuid(setUuid);
if (conceptSet != null) {
diagnosisSets.add(conceptSet);
}
if (USE_NULL_VALUE.equals(diagnosisSetUuids) ) {
diagnosisSets = null;
} else {
String [] setUuids = diagnosisSetUuids.split(",");
for (String setUuid : setUuids) {
Concept conceptSet = conceptService.getConceptByUuid(setUuid);
if (conceptSet != null) {
diagnosisSets.add(conceptSet);
}
}
}
}
else{
else {
diagnosisSets = emrApiProperties.getDiagnosisSets();
}

List<ConceptSource> sources = new ArrayList<ConceptSource>();

if (StringUtils.isNotEmpty(diagnosisConceptSources)) {
String [] sourceNames = diagnosisConceptSources.split(",");
for (String sourceName : sourceNames) {
ConceptSource source = conceptService.getConceptSourceByName(sourceName);
if (source != null) {
sources.add(source);
}
if (USE_NULL_VALUE.equals(diagnosisConceptSources) ) {
sources = null;
} else {
String [] sourceNames = diagnosisConceptSources.split(",");
for (String sourceName : sourceNames) {
ConceptSource source = conceptService.getConceptSourceByName(sourceName);
if (source != null) {
sources.add(source);
}
}
}
}
else{
else {
sources = emrApiProperties.getConceptSourcesForDiagnosisSearch();
}

Locale locale = context.getLocale();

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

return search(context, ui, emrApiProperties, emrConceptService, conceptService, query, null, null, start, size);
return search(context, ui, emrApiProperties, emrConceptService, conceptService, query, null, null, null, start, size);
}

public FragmentActionResult codeDiagnosis(UiUtils ui,
Expand Down
19 changes: 17 additions & 2 deletions omod/src/main/webapp/fragments/conditionlist/conditions.gsp
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,28 @@
<div class="info-body">
<ul ng-repeat="conditionHistory in conditionHistoryList">
<li class="conditionStatus" ng-init="condition = conditionHistory.conditions[0]"
ng-show="condition.status === 'ACTIVE'">
ng-show="condition.status === 'ACTIVE' && condition.voided==false">
<span ng-style="strikeThrough(condition.voided)">{{condition.concept.name}}</span>
<i class="icon-remove delete-action" title="${ui.message("coreapps.delete")}"
ng-click="removeCondition(condition)" ng-if="condition.voided===false && '${hasModifyConditionsPrivilege}'"></i>
ng-click="conditionConfirmation(condition)" ng-if="condition.voided===false && '${hasModifyConditionsPrivilege}'"></i>
<i class="icon-undo delete-action" title="${ui.message("conditionui.undo")}"
ng-click="undoCondition(condition)" ng-if="condition.voided===true && '${hasModifyConditionsPrivilege}'"></i>
</li>
</ul>
</div>

<div id="remove-condition-dialog" class="dialog" style="display: none; position: absolute; left: 35%; top:30%;">
<div class="dialog-header">
<h3>${ ui.message("coreapps.conditionui.removeCondition") }</h3>
</div>
<div class="dialog-content">
<ul>
<li class="info">
<span id="removeConditionMessage">${ ui.message("coreapps.conditionui.removeCondition.message","")}</span>
</li>
</ul>
<button class="confirm right" type="submit" ng-click="removeCondition()">${ ui.message("general.yes") }</button>
<button class="cancel" ng-click="cancelDeletion()">${ ui.message("general.no") }</button>
</div>
</div>
</div>
Loading

0 comments on commit 35caa69

Please sign in to comment.