dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #24954
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 12285: implemented search by orgUnit+nameLike in personController. also optimized orgUnit/name search in...
------------------------------------------------------------
revno: 12285
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Fri 2013-09-27 15:56:18 +0200
message:
implemented search by orgUnit+nameLike in personController. also optimized orgUnit/name search in patientservice
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientStore.java
dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/AbstractPersonService.java
dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/PersonService.java
dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientService.java
dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/hibernate/HibernatePatientStore.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/PersonController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientStore.java 2013-09-20 03:13:45 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientStore.java 2013-09-27 13:56:18 +0000
@@ -56,6 +56,8 @@
Collection<Patient> getByOrgUnit( OrganisationUnit organisationUnit, Integer min, Integer max );
+ Collection<Patient> getByOrgUnitAndNameLike( OrganisationUnit organisationUnit, String nameLike, Integer min, Integer max );
+
Collection<Patient> getByOrgUnitAndGender( OrganisationUnit organisationUnit, String gender, Integer min, Integer max );
Collection<Patient> getByOrgUnitProgram( OrganisationUnit organisationUnit, Program program, Integer min,
=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/AbstractPersonService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/AbstractPersonService.java 2013-09-27 11:33:03 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/AbstractPersonService.java 2013-09-27 13:56:18 +0000
@@ -152,6 +152,13 @@
}
@Override
+ public Persons getPersons( OrganisationUnit organisationUnit, String nameLike )
+ {
+ List<Patient> patients = new ArrayList<Patient>( patientService.getPatientsLikeName( organisationUnit, nameLike, 0, Integer.MAX_VALUE ) );
+ return getPersons( patients );
+ }
+
+ @Override
public Persons getPersons( Gender gender )
{
List<Patient> patients = new ArrayList<Patient>( patientService.getPatiensByGender( gender.getValue() ) );
=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/PersonService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/PersonService.java 2013-09-27 10:43:38 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/person/PersonService.java 2013-09-27 13:56:18 +0000
@@ -56,6 +56,8 @@
Persons getPersons( OrganisationUnit organisationUnit );
+ Persons getPersons( OrganisationUnit organisationUnit, String nameLike );
+
Persons getPersons( Gender gender );
Persons getPersons( Program program );
=== modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientService.java'
--- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientService.java 2013-09-27 11:13:20 +0000
+++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientService.java 2013-09-27 13:56:18 +0000
@@ -260,7 +260,7 @@
public Collection<Patient> getPatientsForMobile( String searchText, int orgUnitId )
{
Set<Patient> patients = new HashSet<Patient>();
- patients.addAll( patientIdentifierService.getPatientsByIdentifier( searchText, 0, Integer.MAX_VALUE) );
+ patients.addAll( patientIdentifierService.getPatientsByIdentifier( searchText, 0, Integer.MAX_VALUE ) );
patients.addAll( getPatientsByNames( searchText, null, null ) );
patients.addAll( getPatientsByPhone( searchText, null, null ) );
@@ -349,19 +349,9 @@
}
@Override
- public Collection<Patient> getPatientsLikeName( OrganisationUnit organisationUnit, String name, Integer min,
- Integer max )
+ public Collection<Patient> getPatientsLikeName( OrganisationUnit organisationUnit, String name, Integer min, Integer max )
{
- Collection<Patient> patients = new ArrayList<Patient>();
-
- Collection<Patient> allPatients = getPatientsByNames( name, min, max );
-
- if ( allPatients.retainAll( getPatients( organisationUnit, min, max ) ) )
- {
- patients = allPatients;
- }
-
- return patients;
+ return patientStore.getByOrgUnitAndNameLike( organisationUnit, name, min, max );
}
@Override
@@ -377,10 +367,11 @@
}
else if ( identifierTypeId != null )
{
- PatientIdentifierType idenType = patientIdentifierTypeService.getPatientIdentifierType( identifierTypeId );
- if ( idenType != null )
+ PatientIdentifierType identifierType = patientIdentifierTypeService.getPatientIdentifierType( identifierTypeId );
+
+ if ( identifierType != null )
{
- Patient p = patientIdentifierService.getPatient( idenType, value );
+ Patient p = patientIdentifierService.getPatient( identifierType, value );
if ( p != null )
{
Set<Patient> set = new HashSet<Patient>();
=== modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/hibernate/HibernatePatientStore.java'
--- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/hibernate/HibernatePatientStore.java 2013-09-20 03:13:45 +0000
+++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/hibernate/HibernatePatientStore.java 2013-09-27 13:56:18 +0000
@@ -28,14 +28,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Conjunction;
@@ -61,6 +53,14 @@
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.transaction.annotation.Transactional;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+
/**
* @author Abyot Asalefew Gizaw
*/
@@ -98,7 +98,7 @@
// Implementation methods
// -------------------------------------------------------------------------
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
@Override
public Collection<Patient> getByGender( String gender )
{
@@ -106,7 +106,7 @@
}
@Override
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
public Collection<Patient> getByBirthDate( Date birthDate )
{
return getCriteria( Restrictions.eq( "birthDate", birthDate ) ).list();
@@ -115,50 +115,24 @@
@Override
public Collection<Patient> getByNames( String fullName, Integer min, Integer max )
{
- List<Patient> patients = new ArrayList<Patient>();
-
- fullName = fullName.toLowerCase();
- String sql = "SELECT patientid FROM patient where lower( name ) " + "like '%" + fullName + "%'";
-
- if ( min != null && max != null )
- {
- sql += statementBuilder.limitRecord( min, max );
- }
-
- try
- {
- patients = jdbcTemplate.query( sql, new RowMapper<Patient>()
- {
- public Patient mapRow( ResultSet rs, int rowNum )
- throws SQLException
- {
- return get( rs.getInt( 1 ) );
- }
- } );
- }
- catch ( Exception ex )
- {
- ex.printStackTrace();
- }
-
- return patients;
+ return getAllLikeNameOrderedName( fullName, min, max );
}
@Override
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
public Collection<Patient> get( String name, Date birthdate, String gender )
{
- Criteria crit = getCriteria();
+ Criteria criteria = getCriteria();
Conjunction con = Restrictions.conjunction();
con.add( Restrictions.ilike( "name", name ) );
con.add( Restrictions.eq( "gender", gender ) );
con.add( Restrictions.eq( "birthDate", birthdate ) );
- crit.add( con );
-
- crit.addOrder( Order.asc( "name" ) );
-
- return crit.list();
+ criteria.add( con );
+
+ criteria.addOrder( Order.asc( "name" ) );
+
+ return criteria.list();
}
@Override
@@ -178,7 +152,26 @@
}
@Override
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
+ public Collection<Patient> getByOrgUnitAndNameLike( OrganisationUnit organisationUnit, String nameLike, Integer min, Integer max )
+ {
+ String hql = "select p from Patient p where p.organisationUnit = :organisationUnit "
+ + " and lower(p.name) like :nameLike"
+ + " order by p.name";
+
+ Query query = getQuery( hql );
+ query.setEntity( "organisationUnit", organisationUnit );
+ query.setString( "nameLike", "%" + nameLike.toLowerCase() + "%" );
+
+ if ( min != null && max != null )
+ {
+ query.setFirstResult( min ).setMaxResults( max );
+ }
+ return query.list();
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
public Collection<Patient> getByOrgUnitAndGender( OrganisationUnit organisationUnit, String gender, Integer min,
Integer max )
{
@@ -304,7 +297,7 @@
String sql = "select p.patientid from patient p join programinstance pi on p.patientid=pi.patientid "
+ "where pi.programid=" + program.getId() + " and pi.status=" + ProgramInstance.STATUS_ACTIVE
+ " and p.gender='" + gender + "'";
-
+
if ( min != null && max != null )
{
sql += statementBuilder.limitRecord( min, max );
@@ -351,18 +344,18 @@
}
@Override
- @SuppressWarnings( "deprecation" )
+ @SuppressWarnings("deprecation")
public int countGetPatientsByOrgUnitProgram( OrganisationUnit organisationUnit, Program program )
{
String sql = "select count(p.patientid) from patient p join programinstance pi on p.patientid=pi.patientid "
+ "where p.organisationunitid=" + organisationUnit.getId() + " and pi.programid=" + program.getId()
+ " and pi.status=" + ProgramInstance.STATUS_ACTIVE;
-
+
return jdbcTemplate.queryForInt( sql );
}
@Override
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
public Collection<Patient> getRepresentatives( Patient patient )
{
String hql = "select distinct p from Patient p where p.representative = :representative order by p.id DESC";
@@ -632,103 +625,103 @@
int statusEvent = Integer.parseInt( keys[index] );
switch ( statusEvent )
{
- case ProgramStageInstance.COMPLETED_STATUS:
- patientWhere += condition + operatorStatus
- + "( psi.executiondate is not null and psi.executiondate>='" + keys[2]
- + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=true ";
- // get events by orgunit children
- if ( keys[4].equals( "-1" ) )
- {
- patientWhere += " and psi.organisationunitid in( "
- + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
- }
- // get events by selected orgunit
- else if ( !keys[4].equals( "0" ) )
- {
- patientWhere += " and psi.organisationunitid=" + keys[4];
- }
- patientWhere += ")";
- operatorStatus = " OR ";
- condition = "";
- continue;
- case ProgramStageInstance.VISITED_STATUS:
- patientWhere += condition + operatorStatus
- + "( psi.executiondate is not null and psi.executiondate>='" + keys[2]
- + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=false ";
+ case ProgramStageInstance.COMPLETED_STATUS:
+ patientWhere += condition + operatorStatus
+ + "( psi.executiondate is not null and psi.executiondate>='" + keys[2]
+ + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=true ";
+ // get events by orgunit children
+ if ( keys[4].equals( "-1" ) )
+ {
+ patientWhere += " and psi.organisationunitid in( "
+ + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
+ }
+ // get events by selected orgunit
+ else if ( !keys[4].equals( "0" ) )
+ {
+ patientWhere += " and psi.organisationunitid=" + keys[4];
+ }
+ patientWhere += ")";
+ operatorStatus = " OR ";
+ condition = "";
+ continue;
+ case ProgramStageInstance.VISITED_STATUS:
+ patientWhere += condition + operatorStatus
+ + "( psi.executiondate is not null and psi.executiondate>='" + keys[2]
+ + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=false ";
- // get events by orgunit children
- if ( keys[4].equals( "-1" ) )
- {
- patientWhere += " and psi.organisationunitid in( "
- + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
- }
- // get events by selected orgunit
- else if ( !keys[4].equals( "0" ) )
- {
- patientWhere += " and psi.organisationunitid=" + keys[4];
- }
- patientWhere += ")";
- operatorStatus = " OR ";
- condition = "";
- continue;
- case ProgramStageInstance.FUTURE_VISIT_STATUS:
- patientWhere += condition + operatorStatus + "( psi.executiondate is null and psi.duedate>='"
- + keys[2] + "' and psi.duedate<='" + keys[3]
- + "' and psi.status is null and (DATE(now()) - DATE(psi.duedate) <= 0) ";
- // get events by orgunit children
- if ( keys[4].equals( "-1" ) )
- {
- patientWhere += " and p.organisationunitid in( "
- + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
- }
- // get events by selected orgunit
- else if ( !keys[4].equals( "0" ) )
- {
- patientWhere += " and p.organisationunitid=" + keys[4];
- }
- patientWhere += ")";
- operatorStatus = " OR ";
- condition = "";
- continue;
- case ProgramStageInstance.LATE_VISIT_STATUS:
- patientWhere += condition + operatorStatus + "( psi.executiondate is null and psi.duedate>='"
- + keys[2] + "' and psi.duedate<='" + keys[3]
- + "' and psi.status is null and (DATE(now()) - DATE(psi.duedate) > 0) ";
- // get events by orgunit children
- if ( keys[4].equals( "-1" ) )
- {
- patientWhere += " and p.organisationunitid in( "
- + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
- }
- // get events by selected orgunit
- else if ( !keys[4].equals( "0" ) )
- {
- patientWhere += " and p.organisationunitid=" + keys[4];
- }
- patientWhere += ")";
- operatorStatus = " OR ";
- condition = "";
- continue;
- case ProgramStageInstance.SKIPPED_STATUS:
- patientWhere += condition + operatorStatus + "( psi.status=5 and psi.duedate>='" + keys[2]
- + "' and psi.duedate<='" + keys[3] + "' ";
- // get events by orgunit children
- if ( keys[4].equals( "-1" ) )
- {
- patientWhere += " and psi.organisationunitid in( "
- + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
- }
- // get events by selected orgunit
- else if ( !keys[4].equals( "0" ) )
- {
- patientWhere += " and p.organisationunitid=" + keys[4];
- }
- patientWhere += ")";
- operatorStatus = " OR ";
- condition = "";
- continue;
- default:
- continue;
+ // get events by orgunit children
+ if ( keys[4].equals( "-1" ) )
+ {
+ patientWhere += " and psi.organisationunitid in( "
+ + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
+ }
+ // get events by selected orgunit
+ else if ( !keys[4].equals( "0" ) )
+ {
+ patientWhere += " and psi.organisationunitid=" + keys[4];
+ }
+ patientWhere += ")";
+ operatorStatus = " OR ";
+ condition = "";
+ continue;
+ case ProgramStageInstance.FUTURE_VISIT_STATUS:
+ patientWhere += condition + operatorStatus + "( psi.executiondate is null and psi.duedate>='"
+ + keys[2] + "' and psi.duedate<='" + keys[3]
+ + "' and psi.status is null and (DATE(now()) - DATE(psi.duedate) <= 0) ";
+ // get events by orgunit children
+ if ( keys[4].equals( "-1" ) )
+ {
+ patientWhere += " and p.organisationunitid in( "
+ + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
+ }
+ // get events by selected orgunit
+ else if ( !keys[4].equals( "0" ) )
+ {
+ patientWhere += " and p.organisationunitid=" + keys[4];
+ }
+ patientWhere += ")";
+ operatorStatus = " OR ";
+ condition = "";
+ continue;
+ case ProgramStageInstance.LATE_VISIT_STATUS:
+ patientWhere += condition + operatorStatus + "( psi.executiondate is null and psi.duedate>='"
+ + keys[2] + "' and psi.duedate<='" + keys[3]
+ + "' and psi.status is null and (DATE(now()) - DATE(psi.duedate) > 0) ";
+ // get events by orgunit children
+ if ( keys[4].equals( "-1" ) )
+ {
+ patientWhere += " and p.organisationunitid in( "
+ + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
+ }
+ // get events by selected orgunit
+ else if ( !keys[4].equals( "0" ) )
+ {
+ patientWhere += " and p.organisationunitid=" + keys[4];
+ }
+ patientWhere += ")";
+ operatorStatus = " OR ";
+ condition = "";
+ continue;
+ case ProgramStageInstance.SKIPPED_STATUS:
+ patientWhere += condition + operatorStatus + "( psi.status=5 and psi.duedate>='" + keys[2]
+ + "' and psi.duedate<='" + keys[3] + "' ";
+ // get events by orgunit children
+ if ( keys[4].equals( "-1" ) )
+ {
+ patientWhere += " and psi.organisationunitid in( "
+ + TextUtils.getCommaDelimitedString( orgunitChilrenIds ) + " )";
+ }
+ // get events by selected orgunit
+ else if ( !keys[4].equals( "0" ) )
+ {
+ patientWhere += " and p.organisationunitid=" + keys[4];
+ }
+ patientWhere += ")";
+ operatorStatus = " OR ";
+ condition = "";
+ continue;
+ default:
+ continue;
}
}
if ( condition.isEmpty() )
@@ -749,20 +742,20 @@
int statusEvent = Integer.parseInt( keys[2] );
switch ( statusEvent )
{
- case ProgramStageInstance.COMPLETED_STATUS:
- patientWhere += "psi.completed=true";
- break;
- case ProgramStageInstance.VISITED_STATUS:
- patientWhere += "psi.executiondate is not null and psi.completed=false";
- break;
- case ProgramStageInstance.FUTURE_VISIT_STATUS:
- patientWhere += "psi.executiondate is null and psi.duedate >= now()";
- break;
- case ProgramStageInstance.LATE_VISIT_STATUS:
- patientWhere += "psi.executiondate is null and psi.duedate < now()";
- break;
- default:
- break;
+ case ProgramStageInstance.COMPLETED_STATUS:
+ patientWhere += "psi.completed=true";
+ break;
+ case ProgramStageInstance.VISITED_STATUS:
+ patientWhere += "psi.executiondate is not null and psi.completed=false";
+ break;
+ case ProgramStageInstance.FUTURE_VISIT_STATUS:
+ patientWhere += "psi.executiondate is null and psi.duedate >= now()";
+ break;
+ case ProgramStageInstance.LATE_VISIT_STATUS:
+ patientWhere += "psi.executiondate is null and psi.duedate < now()";
+ break;
+ default:
+ break;
}
patientWhere += " and pgi.status=" + ProgramInstance.STATUS_ACTIVE + " ";
@@ -831,7 +824,7 @@
}
@Override
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
public Collection<Patient> getByPhoneNumber( String phoneNumber, Integer min, Integer max )
{
String hql = "select p from Patient p where p.phoneNumber like '%" + phoneNumber + "%'";
@@ -877,7 +870,7 @@
return patients;
}
- @SuppressWarnings( "unchecked" )
+ @SuppressWarnings("unchecked")
public Collection<Integer> getRegistrationOrgunitIds( Date startDate, Date endDate )
{
Criteria criteria = getCriteria();
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/PersonController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/PersonController.java 2013-09-27 11:42:42 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/event/PersonController.java 2013-09-27 13:56:18 +0000
@@ -88,6 +88,7 @@
@RequestParam( value = "program", required = false ) String programUid,
@RequestParam( required = false ) String identifierType,
@RequestParam( required = false ) String identifier,
+ @RequestParam( required = false ) String nameLike,
@RequestParam Map<String, String> parameters, Model model, HttpServletRequest request ) throws Exception
{
WebOptions options = new WebOptions( parameters );
@@ -100,7 +101,12 @@
}
else if ( orgUnitUid != null )
{
- if ( programUid != null && gender != null )
+ if ( nameLike != null )
+ {
+ OrganisationUnit organisationUnit = getOrganisationUnit( orgUnitUid );
+ persons = personService.getPersons( organisationUnit, nameLike );
+ }
+ else if ( programUid != null && gender != null )
{
OrganisationUnit organisationUnit = getOrganisationUnit( orgUnitUid );
Program program = getProgram( programUid );
@@ -124,6 +130,10 @@
persons = personService.getPersons( organisationUnit );
}
}
+ else
+ {
+ throw new HttpClientErrorException( HttpStatus.BAD_REQUEST, "Missing required orgUnit parameter." );
+ }
model.addAttribute( "model", persons );
model.addAttribute( "viewClass", options.getViewClass( "basic" ) );