=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramInstanceService.java 2011-07-15 08:07:54 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramInstanceService.java 2012-03-08 04:56:36 +0000 @@ -28,10 +28,15 @@ import java.util.Date; import java.util.Collection; +import java.util.List; +import org.hisp.dhis.common.Grid; +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; + /** * @author Abyot Asalefew * @version $Id$ @@ -80,4 +85,6 @@ int countProgramInstances( Program program, OrganisationUnit organisationUnit ); int countProgramInstances( Program program, OrganisationUnit organisationUnit, Date startDate, Date endDate ); + + List getProgramInstanceReport( Patient patient, I18n i18n, I18nFormat format ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-03-07 05:54:02 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2012-03-08 04:56:36 +0000 @@ -94,4 +94,6 @@ Grid getTabularReport( ProgramStage programStage, List dataElements, Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, I18nFormat format, I18n i18n ); int countProgramStageInstances( ProgramStage programStage, Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate ); + + Grid getProgramInstanceReport( ProgramInstance programInstance, I18nFormat format, I18n i18n ); } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramInstanceService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramInstanceService.java 2011-07-15 08:07:54 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramInstanceService.java 2012-03-08 04:56:36 +0000 @@ -26,11 +26,23 @@ */ package org.hisp.dhis.program; +import java.util.ArrayList; +import java.util.Collection; import java.util.Date; -import java.util.Collection; +import java.util.List; +import org.hisp.dhis.common.Grid; +import org.hisp.dhis.common.GridHeader; +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.patient.PatientAttribute; +import org.hisp.dhis.patient.PatientIdentifier; +import org.hisp.dhis.patient.PatientIdentifierType; +import org.hisp.dhis.patientattributevalue.PatientAttributeValue; +import org.hisp.dhis.patientattributevalue.PatientAttributeValueService; +import org.hisp.dhis.system.grid.ListGrid; import org.springframework.transaction.annotation.Transactional; /** @@ -52,10 +64,25 @@ this.programInstanceStore = programInstanceStore; } + private PatientAttributeValueService patientAttributeValueService; + + public void setPatientAttributeValueService( PatientAttributeValueService patientAttributeValueService ) + { + this.patientAttributeValueService = patientAttributeValueService; + } + + private ProgramStageInstanceService programStageInstanceService; + + public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService ) + { + this.programStageInstanceService = programStageInstanceService; + } + // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- + public int addProgramInstance( ProgramInstance programInstance ) { return programInstanceStore.save( programInstance ); @@ -158,4 +185,96 @@ { return programInstanceStore.count( program, organisationUnit, startDate, endDate ); } + + public List getProgramInstanceReport( Patient patient, I18n i18n, I18nFormat format ) + { + List grids = new ArrayList(); + + // --------------------------------------------------------------------- + // Get registered personal patient data + // --------------------------------------------------------------------- + + Grid attrGrid = new ListGrid(); + + attrGrid.setTitle( patient.getFullName() ); + attrGrid.setSubtitle( "" ); + + attrGrid.addHeader( new GridHeader( i18n.getString( "name" ), false, false ) ); + attrGrid.addHeader( new GridHeader( i18n.getString( "value" ), false, false ) ); + + Collection patientAttributes = patient.getAttributes(); + + // --------------------------------------------------------------------- + // Add fixed attribues + // --------------------------------------------------------------------- + + attrGrid.addRow(); + attrGrid.addValue( i18n.getString( "date_of_birth" ) ); + attrGrid.addValue( format.formatDate( patient.getBirthDate() ) ); + + attrGrid.addRow(); + attrGrid.addValue( i18n.getString( "age" ) ); + attrGrid.addValue( patient.getAge() ); + + attrGrid.addRow(); + attrGrid.addValue( i18n.getString( "dob_type" ) ); + attrGrid.addValue( i18n.getString( patient.getDobType() + "" ) ); + + attrGrid.addRow(); + attrGrid.addValue( i18n.getString( "blood_group" ) ); + attrGrid.addValue( i18n.getString( patient.getBloodGroup() ) ); + + // --------------------------------------------------------------------- + // Add dynamic attribues + // --------------------------------------------------------------------- + + for ( PatientAttribute patientAttribute : patientAttributes ) + { + attrGrid.addRow(); + attrGrid.addValue( patientAttribute.getName() ); + PatientAttributeValue attributeValue = patientAttributeValueService.getPatientAttributeValue( patient, + patientAttribute ); + attrGrid.addValue( (attributeValue == null) ? PatientAttributeValue.UNKNOWN : attributeValue.getValue() ); + } + + // --------------------------------------------------------------------- + // Add identifier + // --------------------------------------------------------------------- + + for ( PatientIdentifier identifier : patient.getIdentifiers() ) + { + attrGrid.addRow(); + + PatientIdentifierType idType = identifier.getIdentifierType(); + if ( idType != null ) + { + attrGrid.addValue( idType.getName() ); + attrGrid.addValue( identifier.getIdentifier() ); + } + else + { + attrGrid.addValue( i18n.getString( "system_identifier" ) ); + attrGrid.addValue( identifier.getIdentifier() ); + } + } + + grids.add( attrGrid ); + + // --------------------------------------------------------------------- + // Get all program data registered + // --------------------------------------------------------------------- + + Collection programInstances = getProgramInstances( patient ); + + if ( programInstances.size() > 0 ) + { + for ( ProgramInstance programInstance : programInstances ) + { + Grid programGrid = programStageInstanceService.getProgramInstanceReport( programInstance, format, i18n ); + grids.add( programGrid ); + } + } + + return grids; + } } === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-03-07 05:54:02 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2012-03-08 04:56:36 +0000 @@ -26,12 +26,16 @@ */ package org.hisp.dhis.program; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.GridHeader; @@ -71,6 +75,13 @@ this.patientDataValueService = patientDataValueService; } + private ProgramStageDataElementService programStageDataElementService; + + public void setProgramStageDataElementService( ProgramStageDataElementService programStageDataElementService ) + { + this.programStageDataElementService = programStageDataElementService; + } + // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- @@ -186,11 +197,12 @@ } public List searchProgramStageInstances( ProgramStage programStage, - Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, int min, int max ) + Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, int min, + int max ) { return programStageInstanceStore.get( programStage, searchingKeys, orgunitIds, startDate, endDate, min, max ); } - + public List searchProgramStageInstances( ProgramStage programStage, Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate ) { @@ -198,20 +210,20 @@ } public Grid getTabularReport( ProgramStage programStage, List dataElements, - Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, int min, int max, + Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, int min, + int max, I18nFormat format, I18n i18n ) + { + List programStageInstances = searchProgramStageInstances( programStage, searchingKeys, + orgunitIds, startDate, endDate, min, max ); + + return createTabularGrid( programStage, programStageInstances, dataElements, startDate, endDate, format, i18n ); + } + + public Grid getTabularReport( ProgramStage programStage, List dataElements, + Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, I18nFormat format, I18n i18n ) { List programStageInstances = searchProgramStageInstances( programStage, searchingKeys, - orgunitIds, startDate, endDate, min, max ); - - return createTabularGrid( programStage, programStageInstances, dataElements, startDate, endDate, format, i18n ); - } - - public Grid getTabularReport( ProgramStage programStage, List dataElements, - Map searchingKeys, Collection orgunitIds, Date startDate, Date endDate, I18nFormat format, - I18n i18n ) - { - List programStageInstances = searchProgramStageInstances( programStage, searchingKeys, orgunitIds, startDate, endDate ); return createTabularGrid( programStage, programStageInstances, dataElements, startDate, endDate, format, i18n ); @@ -224,6 +236,84 @@ return programStageInstanceStore.count( programStage, searchingKeys, orgunitIds, startDate, endDate ); } + public Grid getProgramInstanceReport( ProgramInstance programInstance, I18nFormat format, I18n i18n ) + { + Grid grid = new ListGrid(); + + // --------------------------------------------------------------------- + // Title + // --------------------------------------------------------------------- + + grid.setTitle( programInstance.getProgram().getName() ); + grid.setSubtitle( i18n.getString( "date_of_enrollment" ) + ": " + programInstance.getEnrollmentDate() + " - " + + i18n.getString( "date_of_incident" ) + ": " + programInstance.getDateOfIncident() ); + + // --------------------------------------------------------------------- + // Headers && Get dataelements belongs to programs + // --------------------------------------------------------------------- + + Set programStages = programInstance.getProgram().getProgramStages(); + Set dataElements = new HashSet(); + + grid.addHeader( new GridHeader( "", false, false ) ); + for ( ProgramStage programStage : programStages ) + { + grid.addHeader( new GridHeader( programStage.getName(), false, false ) ); + dataElements.addAll( programStageDataElementService.getListDataElement( programStage ) ); + } + + // --------------------------------------------------------------------- + // First Column + // --------------------------------------------------------------------- + + List deValues = new ArrayList(); + Map mapDataElements = new HashMap(); + + int columnIndex = 0; + for ( DataElement dataElement : dataElements ) + { + grid.addRow(); + deValues.add( dataElement.getName() ); + + mapDataElements.put( dataElement.getId(), columnIndex ); + columnIndex++; + } + + grid.addColumn( deValues ); + + // --------------------------------------------------------------------- + // Values + // --------------------------------------------------------------------- + + Collection programStageInstances = programInstance.getProgramStageInstances(); + + for ( ProgramStageInstance programStageInstance : programStageInstances ) + { + Object[] columnValues = new Object[dataElements.size()]; + + Collection patientDataValues = patientDataValueService + .getPatientDataValues( programStageInstance ); + + for ( PatientDataValue patientDataValue : patientDataValues ) + { + DataElement dataElement = patientDataValue.getDataElement(); + + String value = patientDataValue.getValue(); + + if ( dataElement.getType().equals( DataElement.VALUE_TYPE_BOOL ) ) + { + value = i18n.getString( patientDataValue.getValue() ); + } + + columnValues[mapDataElements.get( dataElement.getId() )] = value; + } + + grid.addColumn( Arrays.asList( columnValues ) ); + } + + return grid; + } + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- @@ -241,7 +331,7 @@ // Create a grid // --------------------------------------------------------------------- - grid.setTitle( program.getName() ); + grid.setTitle( program.getName() + " - " + programStage.getName() ); grid.setSubtitle( i18n.getString( "from" ) + " " + format.formatDate( startDate ) + " " + i18n.getString( "to" ) + " " + format.formatDate( endDate ) ); === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-03-07 06:26:09 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2012-03-08 04:56:36 +0000 @@ -210,10 +210,14 @@ ref="org.hisp.dhis.program.ProgramStageInstanceStore" /> + + + === added file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/GetPatientHistoryAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/GetPatientHistoryAction.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/GetPatientHistoryAction.java 2012-03-08 04:56:36 +0000 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2004-2012, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.hisp.dhis.caseentry.action.patient; + +import java.util.ArrayList; +import java.util.List; + +import org.hisp.dhis.common.Grid; +import org.hisp.dhis.i18n.I18n; +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.patient.PatientService; +import org.hisp.dhis.program.ProgramInstance; +import org.hisp.dhis.program.ProgramInstanceService; + +import com.opensymphony.xwork2.Action; + +/** + * @author Chau Thu Tran + * + * @version $GetPatientHistoryAction.java Mar 7, 2012 3:11:32 PM$ + */ +public class GetPatientHistoryAction + implements Action +{ + // ------------------------------------------------------------------------- + // Implementation Action + // ------------------------------------------------------------------------- + + private PatientService patientService; + + public void setPatientService( PatientService patientService ) + { + this.patientService = patientService; + } + + private ProgramInstanceService programInstanceService; + + public void setProgramInstanceService( ProgramInstanceService programInstanceService ) + { + this.programInstanceService = programInstanceService; + } + + private I18n i18n; + + public void setI18n( I18n i18n ) + { + this.i18n = i18n; + } + + private I18nFormat format; + + public void setFormat( I18nFormat format ) + { + this.format = format; + } + + // ------------------------------------------------------------------------- + // Getters && Setters + // ------------------------------------------------------------------------- + + private Integer patientId; + + public void setPatientId( Integer patientId ) + { + this.patientId = patientId; + } + + private String type; + + public void setType( String type ) + { + this.type = type; + } + + private List grids; + + public List getGrids() + { + return grids; + } + + private Patient patient; + + public Patient getPatient() + { + return patient; + } + + // ------------------------------------------------------------------------- + // Implementation Action + // ------------------------------------------------------------------------- + + public String execute() + throws Exception + { + patient = patientService.getPatient( patientId ); + + grids = programInstanceService.getProgramInstanceReport( patient, i18n, format ); + + if ( type == null ) + { + return SUCCESS; + } + + return type; + } +} === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2012-03-07 05:54:02 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2012-03-08 04:56:36 +0000 @@ -600,6 +600,13 @@ + + + + + + + + /main.vm + /dhis-web-caseentry/anonymousRegistration.vm + /dhis-web-caseentry/dataEntryMenu.vm + ../dhis-web-commons/ouwt/ouwt.js + ,javascript/commons.js + ,javascript/anonymousRegistration.js + ,javascript/entry.js + ,../dhis-web-commons/javascripts/date.js + style/dataEntry.css,../dhis-web-caseentry/style/patient.css + + + + + /dhis-web-commons/ajax/jsonResponseSuccess.vm + + /dhis-web-commons/ajax/jsonResponseInput.vm + + + + + /dhis-web-caseentry/jsonProgramInstances.vm + + + + + /dhis-web-commons/ajax/jsonResponseSuccess.vm + + /dhis-web-commons/ajax/jsonResponseError.vm + + /content.vm /dhis-web-caseentry/resultSearchPatients.vm - - - - /main.vm - /dhis-web-caseentry/anonymousRegistration.vm - /dhis-web-caseentry/dataEntryMenu.vm - ../dhis-web-commons/ouwt/ouwt.js - ,javascript/commons.js - ,javascript/anonymousRegistration.js - ,javascript/entry.js - ,../dhis-web-commons/javascripts/date.js - style/dataEntry.css,../dhis-web-caseentry/style/patient.css - - - - - /dhis-web-commons/ajax/jsonResponseSuccess.vm - - /dhis-web-commons/ajax/jsonResponseInput.vm - - - - - /dhis-web-caseentry/jsonProgramInstances.vm - - - - - /dhis-web-commons/ajax/jsonResponseSuccess.vm - - /dhis-web-commons/ajax/jsonResponseError.vm - + + /content.vm + + + /dhis-web-caseentry/patientHistory.vm + + + + + + +#foreach( $grid in $grids ) +
+
+

$!encoder.htmlEncode( $grid.title )

+

$!encoder.htmlEncode( $grid.subtitle )

+
+ + + + #foreach( $header in $grid.getVisibleHeaders() ) + + #end + + + + + #set( $mark = false ) + #foreach( $row in $grid.getVisibleRows() ) + + #set( $nameCol='false' ) + #foreach( $col in $row ) + #set( $index = ( $velocityCount - 1 ) ) + #if( $grid.getVisibleHeaders().get( $index ).meta ) + + #else + + #end + #end + + #end + #set( $mark = !$mark) + +
$!encoder.htmlEncode( $header.name )
$!encoder.htmlEncode( $col )$!col
+
+#end === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientRegistrationList.vm' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientRegistrationList.vm 2012-02-01 09:10:08 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/patientRegistrationList.vm 2012-03-08 04:56:36 +0000 @@ -1,4 +1,3 @@ - @@ -37,7 +36,7 @@ #if($mapPatientOrgunit.size()!=0) #end - + @@ -98,6 +97,7 @@ $i18n.getString( "manage_relationship" )$i18n.getString( "add_dependent" )$i18n.getString( "remove" ) + $i18n.getString( "show_details" )$i18n.getString( "show_details" ) @@ -120,12 +120,14 @@
-
-
+
+
+ #end