Skip to content

Commit

Permalink
Kavitha| refactored search to support multiple words (#64)
Browse files Browse the repository at this point in the history
  • Loading branch information
kavitha-sundararajan authored Jun 19, 2024
1 parent 9a04cd9 commit c345974
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ public List<AdmittedPatient> searchAdmittedPatients(Location location, List<Stri
// Construct additional joins and where clause based on search keys
StringBuilder additionalJoins = new StringBuilder("");
StringBuilder whereClause = new StringBuilder("");
generateSQLSearchConditions(searchKeys,additionalJoins,whereClause);
generateSQLSearchConditions(searchKeys, additionalJoins, whereClause, searchValue);

// Construct group by clause
String groupBy = " GROUP BY assignment.patient, v ";
Expand All @@ -188,7 +188,7 @@ public List<AdmittedPatient> searchAdmittedPatients(Location location, List<Stri
}
}

private void generateSQLSearchConditions(List<String> searchKeys,StringBuilder additionalJoins,StringBuilder whereClause) {
private void generateSQLSearchConditions(List<String> searchKeys, StringBuilder additionalJoins, StringBuilder whereClause, String searchValue) {
whereClause.append("where (assignment.endDatetime is null and v.stopDatetime is null and l.parentLocation = :location)");
if (searchKeys != null && !searchKeys.isEmpty()) {
whereClause.append(" and (");
Expand All @@ -203,7 +203,16 @@ private void generateSQLSearchConditions(List<String> searchKeys,StringBuilder a
break;
case "patientName":
additionalJoins.append(" JOIN pr.names prn ");
whereClause.append(" (prn.givenName LIKE :patientName or prn.middleName LIKE :patientName or prn.familyName LIKE :patientName) ");
whereClause.append(" (");

String[] nameParts = searchValue.split("\\s+");
for (int j = 0; j < nameParts.length; j++) {
if (j > 0) whereClause.append(" and ");
whereClause.append(" (prn.givenName LIKE :namePart" + j +
" or prn.middleName LIKE :namePart" + j +
" or prn.familyName LIKE :namePart" + j + ") ");
}
whereClause.append(" )");
break;
}
if (i < searchKeys.size() - 1) {
Expand All @@ -223,7 +232,10 @@ private void setQueryParameters(Query query, List<String> searchKeys, String sea
query.setParameter("patientIdentifier", "%" + searchValue + "%");
}
if (searchKeys.contains("patientName")) {
query.setParameter("patientName", "%" + searchValue + "%");
String[] nameParts = searchValue.split("\\s+");
for (int i = 0; i < nameParts.length; i++) {
query.setParameter("namePart" + i, "%" + nameParts[i] + "%");
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion omod/src/main/resources/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<version>1.0.0-SNAPSHOT</version>
<package>${MODULE_PACKAGE}</package>
<author>Bahmni</author>
<description>${project.parent.description}</description>
<description>Provides APIs for IPD features</description>

<require_modules>
<require_module>org.openmrs.module.webservices.rest</require_module>
Expand Down

0 comments on commit c345974

Please sign in to comment.