Skip to content

Commit

Permalink
GSoC 2019: Patient search criteria module
Browse files Browse the repository at this point in the history
  • Loading branch information
Reyano132 committed Dec 3, 2019
1 parent 63dc352 commit 01dad2d
Show file tree
Hide file tree
Showing 4 changed files with 325 additions and 5 deletions.
23 changes: 23 additions & 0 deletions omod/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@
<gem.path>${basedir}/.rubygems</gem.path>
</properties>

<!-- Repository for patient search criteria -->
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>


<dependencies>

<!--
Expand Down Expand Up @@ -255,6 +264,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 @@ -94,8 +94,32 @@
<div class="col-md-12 col-sm-12 col-xs-12">
<form method="get" id="patient-search-form" onsubmit="return false">
<input class="form-control input-sm input-lg" type="text" id="patient-search" placeholder="${ ui.message("coreapps.findPatient.search.placeholder") }" autocomplete="off" <% if (doInitialSearch) { %>value="${doInitialSearch}"<% } %>/><i id="patient-search-clear-button" class="small icon-remove-sign"></i>
<% if(patientSearchExtensions){

This comment has been minimized.

Copy link
@Irenyak1

Irenyak1 Dec 3, 2019

Member

@Reyano132 I had gone ahead to remove this line 97 of code because it seemed misplaced , the functionality of Find Patient Record worked. However there seems to be a bug. When you filter patients by gender, at first it responds but later it stops and both male and female are returned. Also the patient names are replicated as you keep typing in the search field. I have attached a screen shot to see these two behaviours. Please fix this issue.

search-patient

<select id="patient-gender-search">
<option value="" selected>${ ui.message("coreapps.gender") }</option>
<option value="M">${ ui.message("coreapps.gender.M") }</option>
<option value="F">${ ui.message("coreapps.gender.F") }</option>
</select>
<input type="checkbox" id="getAgeAndBirthdateFilter" >Search with age or birthdate<br>

<div id="patient-search-age-birthdate" style="display:none">
<input type="radio" name ="patient-age-birthdate" value="patient-age"> Search by range of age
<br>
<input type="radio" name ="patient-age-birthdate" value="patient-birthdate"> Search by birthdate

<p id="patient-age-range-search" style="display:none">
<label>Range of Age</label>
From:<input type="text" id="patient-age-range-from" placeholder="From" maxlength="2" style="min-width: 5px" onkeypress="return event.charCode >= 48 && event.charCode <= 57">
To:<input type="text" id="patient-age-range-to" placeholder="To" maxlength="2"
style="min-width: 5px" onkeypress="return event.charCode >= 48 && event.charCode <= 57">
</p>

<p id="patient-birthdate-search" style="display:none">
Birthdate:<input type="date" id="patient-birthdate" style="min-width: 5px"/>
</p>
</div>


<% if(patientSearchExtensions){
patientSearchExtensions.each {
// create a base map from the fragmentConfig if it exists, otherwise just create an empty map
def configs = [:];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function PatientSearchWidget(configuration){
var highlightedMouseRowIndex;
var searchDelayTimer;
var requestCount = 0;
var searchUrl = '/' + OPENMRS_CONTEXT_PATH + '/ws/rest/v1/patient';
var searchUrl = '/' + OPENMRS_CONTEXT_PATH + '/ws/rest/v1/patientsearch/patient';
var initialData = [];
var initialPatientData = [];
var initialPatientUuids = [];
Expand Down Expand Up @@ -140,7 +140,52 @@ function PatientSearchWidget(configuration){
searchOnIdentifierAndName(query, currRequestCount);
}
else {
searchOnExactIdentifierMatchThenIdentifierAndName(query, currRequestCount, autoSelectIfExactIdentifierMatch);
var gender_search=jq('#patient-gender-search').val();
var from_search=jq('#patient-age-range-from').val();
var to_search=jq('#patient-age-range-to').val();
var date_search;
if(jq('#patient-birthdate').val()!=''){
console.log('birth '+jq('#patient-birthdate').val());
date_search =new Date(jq('#patient-birthdate').val());
date_search.setHours(0);
date_search.setMinutes(0);
}


if(query==''){
if(gender_search!='' && from_search=='' && to_search=='' && jq('#patient-birthdate').val()==''){
searchOnGender(gender_search,currRequestCount);
} else if(gender_search=='' && from_search!='' && to_search !='' && jq('#patient-birthdate').val()==''){
searchOnRangeOfAge(from_search,to_search,currRequestCount);
}else if(gender_search=='' && jq('#patient-birthdate').val()!=''){
searchOnBirthdate(date_search.getTime(),currRequestCount);
}else if(gender_search!='' && from_search!='' && to_search!=''){
searchOnGenderAndRangeOfAge(gender_search,from_search,to_search,currRequestCount);
}else if(gender_search!='' && jq('#patient-birthdate').val()!=''){
searchOnGenderAndBirthdate(gender_search,date_search.getTime(),currRequestCount);
}else{
updateSearchResults();
}

}
else{
if(gender_search!=''){
if( from_search=='' && to_search=='' && jq('#patient-birthdate').val()==''){
searchOnIdentifierAndNameAndGender(query,gender_search,currRequestCount);
}else if(from_search!='' && to_search !=''){
searchOnIdentifierAndNameAndGenderAndRangeOfAge(query,gender_search,from_search,to_search,currRequestCount);
}else{
searchOnIdentifierAndNameAndGenderAndBirthdate(query,gender_search,date_search.getTime(),currRequestCount);
}
}else if(from_search!='' && to_search !=''){
searchOnIdentifierAndNameAndRangeOfAge(query,from_search,to_search,currRequestCount);
}else if(jq('#patient-birthdate').val()!=''){
searchOnIdentifierAndNameAndBirthdate(query,date_search.getTime(),currRequestCount);
}else{
searchOnExactIdentifierMatchThenIdentifierAndName(query, currRequestCount, autoSelectIfExactIdentifierMatch);
}
}

}
}

Expand Down Expand Up @@ -210,6 +255,136 @@ function PatientSearchWidget(configuration){
});
}

var searchOnIdentifierAndNameAndGender = function(query,gender_search,currRequestCount) {
emr.getJSON(searchUrl, {q: query, gender: gender_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnIdentifierAndNameAndRangeOfAge = function(query,from_search,to_search,currRequestCount) {
emr.getJSON(searchUrl, {q: query, from: from_search, to: to_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnIdentifierAndNameAndBirthdate = function(query,birthdate_search,currRequestCount) {
emr.getJSON(searchUrl, {q: query, birthdate: birthdate_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnIdentifierAndNameAndGenderAndRangeOfAge = function(query,gender_search,from_search,to_search,currRequestCount) {
emr.getJSON(searchUrl, {q: query, gender: gender_search, from: from_search, to: to_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnIdentifierAndNameAndGenderAndBirthdate = function(query,gender_search,birthdate_search,currRequestCount) {
emr.getJSON(searchUrl, {q: query, gender: gender_search, birthdate: birthdate_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnGenderAndRangeOfAge = function(gender_search,from_search,to_search,currRequestCount) {
emr.getJSON(searchUrl, {gender: gender_search, from: from_search, to: to_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnGenderAndBirthdate = function(gender_search,birthdate_search,currRequestCount) {
emr.getJSON(searchUrl, {gender: gender_search,birthdate: birthdate_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnGender = function(gender_search,currRequestCount) {
emr.getJSON(searchUrl, {gender: gender_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnRangeOfAge = function(from_search,to_search,currRequestCount) {
emr.getJSON(searchUrl, {from: from_search, to: to_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var searchOnBirthdate = function(birthdate_search,currRequestCount) {
emr.getJSON(searchUrl, {birthdate: birthdate_search, v: customRep })
.done(function(data) {
//late ajax responses should be ignored not to overwrite the latest
if(data && (!currRequestCount || currRequestCount >= requestCount)){
updateSearchResults(data.results);
}
})
.fail(function (jqXHR) {
failSearch();
});
}

var failSearch = function() {
performingSearch = false;
if (!currRequestCount || currRequestCount >= requestCount) {
Expand Down Expand Up @@ -244,6 +419,47 @@ function PatientSearchWidget(configuration){
}
this.reset = reset;

//Add age range and birthdate search

jq('#getAgeAndBirthdateFilter').click(function (event) {
if(this.checked){
jq('#patient-search-age-birthdate').css('display','block');
}else{
jq('#patient-search-age-birthdate').css('display','none');
jq( '#patient-age' ).prop( 'checked', false );
jq( '#patient-birthdate' ).prop( 'checked', false );
jq('#patient-age-range-from').val('');
jq('#patient-age-range-to').val('');
jq('input[type=date]').each( function resetDate(){
this.value = this.defaultValue;
} );
}
})


$("input[name='patient-age-birthdate']").change(function(){
var ageOrBirthdate= $("input[name='patient-age-birthdate']:checked").val()
if(ageOrBirthdate=="patient-age"){
jq('#patient-birthdate-search').css('display','none');
jq('#patient-age-range-search').css('display','block');
jq('input[type=date]').each( function resetDate(){
this.value = this.defaultValue;
} );
}
if(ageOrBirthdate=="patient-birthdate"){
jq('#patient-age-range-search').css('display','none');
jq('#patient-birthdate-search').css('display','block');
jq('#patient-age-range-from').val('');
jq('#patient-age-range-to').val('');
}
});

//for date type support to browsers
if ( jq('[type="date"]').prop('type') != 'date' ) {
jq('[type="date"]').datepicker();
}


var updateSearchResults = function(results){
var dataRows = [];
if(results){
Expand Down Expand Up @@ -595,6 +811,39 @@ function PatientSearchWidget(configuration){
clearSearch();
});

var searchByPatientSearchCriteria = function(){
cancelAnyExistingSearch();
var text=jq.trim(input.val());
var currentCount = ++requestCount;
var effectiveSearchDelay = config.searchDelayShort;
window.setTimeout(function(){
if(text=='' || text.length <= config.minSearchCharacters){
doSearch('', currentCount);
}else{
doSearch(text, currentCount);
}
}, effectiveSearchDelay);

}

jq('select').change( function(){
searchByPatientSearchCriteria();
});

jq('input[type="date"]').change(function(){
searchByPatientSearchCriteria();
});


jq('#patient-age-range-from').keyup(function(){
searchByPatientSearchCriteria();
});

jq('#patient-age-range-to').keyup(function(){
searchByPatientSearchCriteria();
});


input.keyup(function(event) {
var kc = event.keyCode;
//ignore enter(because it was handled already onkeydown), keyboard navigation and control keys
Expand Down
Loading

0 comments on commit 01dad2d

Please sign in to comment.