dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #15925
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 5888: Add Beneficiary Query Builder formula for calculating number of patients by report-date of progra...
------------------------------------------------------------
revno: 5888
committer: Tran Chau <tran.hispvietnam@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2012-02-08 19:43:00 +0700
message:
Add Beneficiary Query Builder formula for calculating number of patients by report-date of program-stages-instance.
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java
dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.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/caseaggregation/CaseAggregationCondition.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java 2011-12-26 10:07:59 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/caseaggregation/CaseAggregationCondition.java 2012-02-08 12:43:00 +0000
@@ -63,6 +63,8 @@
public static String OBJECT_PROGRAM = "PG";
public static String OBJECT_PATIENT = "PT";
+
+ public static String OBJECT_PROGRAM_STAGE = "PS";
// -------------------------------------------------------------------------
// Fields
=== modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java'
--- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java 2012-02-07 08:39:49 +0000
+++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/caseaggregation/DefaultCaseAggregationConditionService.java 2012-02-08 12:43:00 +0000
@@ -34,6 +34,7 @@
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OBJECT_PROGRAM;
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OBJECT_PROGRAM_PROPERTY;
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OBJECT_PROGRAM_STAGE_DATAELEMENT;
+import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OBJECT_PROGRAM_STAGE;
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.OPERATOR_AND;
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.SEPARATOR_ID;
import static org.hisp.dhis.caseaggregation.CaseAggregationCondition.SEPARATOR_OBJECT;
@@ -77,7 +78,7 @@
public class DefaultCaseAggregationConditionService
implements CaseAggregationConditionService
{
- private final String regExp = "\\[(" + OBJECT_PATIENT + "|" + OBJECT_PROGRAM + "|"
+ private final String regExp = "\\[(" + OBJECT_PATIENT + "|" + OBJECT_PROGRAM + "|" + OBJECT_PROGRAM_STAGE + "|"
+ OBJECT_PROGRAM_STAGE_DATAELEMENT + "|" + OBJECT_PATIENT_ATTRIBUTE + "|" + OBJECT_PATIENT_PROPERTY + "|"
+ OBJECT_PROGRAM_PROPERTY + ")" + SEPARATOR_OBJECT + "([a-zA-Z0-9\\- ]+[" + SEPARATOR_ID + "[0-9]*]*)" + "\\]";
@@ -213,7 +214,7 @@
Period period )
{
String sql = convertCondition( aggregationCondition, orgunit, period );
-
+System.out.println("\n\n SQL : " + sql);
Collection<Integer> patientIds = aggregationConditionStore.executeSQL( sql );
if ( patientIds == null )
@@ -665,7 +666,11 @@
{
condition = getConditionForProgram( info[1], operator, orgunitId, startDate, endDate );
}
-
+ else if ( info[0].equalsIgnoreCase( OBJECT_PROGRAM_STAGE ) )
+ {
+ condition = getConditionForProgramStage( info[1], operator, orgunitId, startDate, endDate );
+ }
+
// -------------------------------------------------------------
// Replacing the operand with 1 in order to later be able to
// verify
@@ -846,6 +851,26 @@
+ "' AND pi.enrollmentdate <= '" + endDate + "' ";
}
+ private String getConditionForProgramStage( String programStageId, String operator, int orgunitId, String startDate,
+ String endDate )
+ {
+ if( operator.equals( AGGRERATION_SUM ) )
+ {
+ return "SELECT psi.programstageinstanceid "
+ + "FROM programinstance as pi INNER JOIN programstageinstance psi "
+ + "ON pi.programinstanceid = psi.programinstanceid "
+ + "WHERE psi.programstageid=" + programStageId + " "
+ + "AND psi.executiondate >= '" + startDate
+ + "' AND psi.executiondate <= '" + endDate + "' ";
+ }
+
+ return "SELECT distinct(p.patientid) FROM programinstance as pi "
+ + "INNER JOIN patient as p ON pi.patientid = p.patientid "
+ + "WHERE psi.programstageid=" + programStageId + " "
+ + "AND psi.executiondate >= '" + startDate
+ + "' AND psi.executiondate <= '" + endDate + "' ";
+ }
+
private String getSQL( String aggregateOperator, List<String> conditions, List<String> operators )
{
String sql = conditions.get( 0 );