=== 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 2013-09-17 15:26:14 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramInstanceService.java 2013-09-18 06:54:48 +0000 @@ -110,4 +110,17 @@ Collection sendMessageConversations( ProgramInstance programInstance, int sendWhenToC0mpletedEvent, I18nFormat format ); + ProgramInstance enrollmentPatient( Patient patient, Program program, Date enrollmentDate, Date dateOfIncident, + OrganisationUnit orgunit, I18nFormat format ); + + boolean canAutoCompleteProgramInstanceStatus( ProgramInstance programInstance ); + + void completeProgramInstanceStatus( ProgramInstance programInstance, I18nFormat format ); + + /** + * Set status as skipped for overdue events; Remove scheduled events + * + * **/ + + void cancelProgramInstanceStatus( ProgramInstance programInstance ); } === 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 2013-09-17 11:13:16 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2013-09-18 06:54:48 +0000 @@ -73,7 +73,8 @@ Collection getProgramStageInstances( Collection programInstances ); - Collection getProgramStageInstances( Collection programInstances, boolean completed ); + Collection getProgramStageInstances( Collection programInstances, + boolean completed ); Collection getProgramStageInstances( Date dueDate ); @@ -148,9 +149,8 @@ Collection sendMessages( ProgramStageInstance programStageInstance, int status, I18nFormat format ); - Collection getProgramStageInstance( Patient patient ); - Collection sendMessageConversations( ProgramStageInstance programStageInstance, int status, I18nFormat format ); + void completeProgramStageInstance( ProgramStageInstance programStageInstance, I18nFormat format ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2013-09-17 11:13:16 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java 2013-09-18 06:54:48 +0000 @@ -71,12 +71,12 @@ /** * Get all {@link ProgramStageInstance program stage instances} for unit. - * - * @param unit - the unit to get instances for. - * @param after - optional date the instance should be on or after. - * @param before - optional date the instance should be on or before. + * + * @param unit - the unit to get instances for. + * @param after - optional date the instance should be on or after. + * @param before - optional date the instance should be on or before. * @param completed - optional flag to only get completed (true - * ) or uncompleted (false) instances. + * ) or uncompleted (false) instances. * @return */ public List get( OrganisationUnit unit, Date after, Date before, Boolean completed ); @@ -130,7 +130,4 @@ Collection getOrgunitIds( Date startDate, Date endDate ); Grid getCompleteness( Collection orgunitIds, Program program, String startDate, String endDate, I18n i18n ); - - Collection get( Patient patient ); - } === 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 2013-09-17 15:26:14 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramInstanceService.java 2013-09-18 06:54:48 +0000 @@ -47,14 +47,17 @@ import org.hisp.dhis.patientcomment.PatientComment; import org.hisp.dhis.patientdatavalue.PatientDataValue; import org.hisp.dhis.patientdatavalue.PatientDataValueService; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.sms.SmsSender; import org.hisp.dhis.sms.SmsServiceException; import org.hisp.dhis.sms.outbound.OutboundSms; import org.hisp.dhis.system.grid.ListGrid; +import org.hisp.dhis.system.util.DateUtils; import org.hisp.dhis.user.CurrentUserService; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.HashSet; @@ -130,6 +133,13 @@ this.messageService = messageService; } + private ProgramStageInstanceService programStageInstanceService; + + public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService ) + { + this.programStageInstanceService = programStageInstanceService; + } + // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- @@ -595,10 +605,223 @@ return messageConversations; } + @Override + public ProgramInstance enrollmentPatient( Patient patient, Program program, Date enrollmentDate, + Date dateOfIncident, OrganisationUnit orgunit, I18nFormat format ) + { + if ( enrollmentDate == null ) + { + if ( program.getUseBirthDateAsIncidentDate() ) + { + enrollmentDate = patient.getBirthDate(); + } + else + { + enrollmentDate = new Date(); + } + } + + if ( dateOfIncident == null ) + { + if ( program.getUseBirthDateAsIncidentDate() ) + { + dateOfIncident = patient.getBirthDate(); + } + else + { + dateOfIncident = enrollmentDate; + } + } + + ProgramInstance programInstance = new ProgramInstance(); + programInstance.setEnrollmentDate( enrollmentDate ); + programInstance.setDateOfIncident( dateOfIncident ); + programInstance.setProgram( program ); + programInstance.setPatient( patient ); + programInstance.setStatus( ProgramInstance.STATUS_ACTIVE ); + + addProgramInstance( programInstance ); + + // --------------------------------------------------------------------- + // Generate events of program-instance + // --------------------------------------------------------------------- + + for ( ProgramStage programStage : program.getProgramStages() ) + { + if ( programStage.getAutoGenerateEvent() ) + { + ProgramStageInstance programStageInstance = generateEvent( programInstance, programStage, + enrollmentDate, dateOfIncident, orgunit ); + programStageInstanceService.addProgramStageInstance( programStageInstance ); + } + } + + // ----------------------------------------------------------------- + // send messages after enrollment program + // ----------------------------------------------------------------- + + List outboundSms = programInstance.getOutboundSms(); + if ( outboundSms == null ) + { + outboundSms = new ArrayList(); + } + + outboundSms.addAll( sendMessages( programInstance, PatientReminder.SEND_WHEN_TO_EMROLLEMENT, format ) ); + + // ----------------------------------------------------------------- + // Send DHIS message when to completed the program + // ----------------------------------------------------------------- + + List piMessageConversations = programInstance.getMessageConversations(); + if ( piMessageConversations == null ) + { + piMessageConversations = new ArrayList(); + } + + piMessageConversations.addAll( sendMessageConversations( programInstance, + PatientReminder.SEND_WHEN_TO_EMROLLEMENT, format ) ); + + updateProgramInstance( programInstance ); + + return programInstance; + } + + @Override + public boolean canAutoCompleteProgramInstanceStatus( ProgramInstance programInstance ) + { + Set stageInstances = programInstance.getProgramStageInstances(); + + for ( ProgramStageInstance stageInstance : stageInstances ) + { + if ( !stageInstance.isCompleted() || stageInstance.getProgramStage().getIrregular() ) + { + return false; + } + } + + return true; + } + + @Override + public void completeProgramInstanceStatus( ProgramInstance programInstance, I18nFormat format ) + { + // --------------------------------------------------------------------- + // Send sms-message when to completed the program + // --------------------------------------------------------------------- + + List outboundSms = programInstance.getOutboundSms(); + if ( outboundSms == null ) + { + outboundSms = new ArrayList(); + } + + outboundSms.addAll( sendMessages( programInstance, PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); + + // ----------------------------------------------------------------- + // Send DHIS message when to completed the program + // ----------------------------------------------------------------- + + List messageConversations = programInstance.getMessageConversations(); + if ( messageConversations == null ) + { + messageConversations = new ArrayList(); + } + + messageConversations.addAll( sendMessageConversations( programInstance, + PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); + + // ----------------------------------------------------------------- + // Update program-instance + // ----------------------------------------------------------------- + + programInstance.setStatus( ProgramInstance.STATUS_COMPLETED ); + + programInstance.setEndDate( new Date() ); + + updateProgramInstance( programInstance ); + } + + public void cancelProgramInstanceStatus( ProgramInstance programInstance ) + { + // --------------------------------------------------------------------- + // Set status of the program-instance + // --------------------------------------------------------------------- + + Calendar today = Calendar.getInstance(); + PeriodType.clearTimeOfDay( today ); + Date currentDate = today.getTime(); + + programInstance.setEndDate( currentDate ); + updateProgramInstance( programInstance ); + + // --------------------------------------------------------------------- + // Set statuses of the program-stage-instances + // --------------------------------------------------------------------- + + for ( ProgramStageInstance programStageInstance : programInstance.getProgramStageInstances() ) + { + if ( programStageInstance.getExecutionDate() == null ) + { + // --------------------------------------------------------------------- + // Set status as skipped for overdue events + // --------------------------------------------------------------------- + if ( programStageInstance.getDueDate().before( currentDate ) ) + { + programStageInstance.setStatus( ProgramStageInstance.SKIPPED_STATUS ); + programStageInstanceService.updateProgramStageInstance( programStageInstance ); + } + + // --------------------------------------------------------------------- + // Remove scheduled events + // --------------------------------------------------------------------- + else + { + programStageInstanceService.deleteProgramStageInstance( programStageInstance ); + } + } + } + } + // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- + private ProgramStageInstance generateEvent( ProgramInstance programInstance, ProgramStage programStage, + Date enrollmentDate, Date dateOfIncident, OrganisationUnit orgunit ) + { + ProgramStageInstance programStageInstance = null; + + Date currentDate = new Date(); + Date dateCreatedEvent = null; + if ( programStage.getGeneratedByEnrollmentDate() ) + { + dateCreatedEvent = enrollmentDate; + } + else + { + dateCreatedEvent = dateOfIncident; + } + + Date dueDate = DateUtils.getDateAfterAddition( dateCreatedEvent, programStage.getMinDaysFromStart() ); + + if ( !programInstance.getProgram().getIgnoreOverdueEvents() + || !(programInstance.getProgram().getIgnoreOverdueEvents() && dueDate.before( currentDate )) ) + { + programStageInstance = new ProgramStageInstance(); + programStageInstance.setProgramInstance( programInstance ); + programStageInstance.setProgramStage( programStage ); + programStageInstance.setDueDate( dueDate ); + + if ( programInstance.getProgram().isSingleEvent() ) + { + programStageInstance.setOrganisationUnit( orgunit ); + programStageInstance.setExecutionDate( dueDate ); + } + } + + return programStageInstance; + } + private void getProgramStageInstancesReport( Grid grid, ProgramInstance programInstance, I18nFormat format, I18n i18n ) { === 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 2013-09-17 11:13:16 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2013-09-18 06:54:48 +0000 @@ -45,6 +45,7 @@ import org.hisp.dhis.patientdatavalue.PatientDataValueService; import org.hisp.dhis.patientreport.TabularReportColumn; import org.hisp.dhis.period.Period; +import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.sms.SmsSender; import org.hisp.dhis.sms.SmsServiceException; import org.hisp.dhis.sms.outbound.OutboundSms; @@ -53,6 +54,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -206,7 +208,8 @@ return programStageInstanceStore.get( programInstances ); } - public Collection getProgramStageInstances( Collection programInstances, boolean completed ) + public Collection getProgramStageInstances( Collection programInstances, + boolean completed ) { return programStageInstanceStore.get( programInstances, completed ); } @@ -639,9 +642,48 @@ return messageConversations; } - public Collection getProgramStageInstance( Patient patient ) + @Override + public void completeProgramStageInstance( ProgramStageInstance programStageInstance, I18nFormat format ) { - return programStageInstanceStore.get( patient ); + programStageInstance.setCompleted( true ); + + Calendar today = Calendar.getInstance(); + PeriodType.clearTimeOfDay( today ); + Date date = today.getTime(); + + programStageInstance.setCompletedDate( date ); + programStageInstance.setCompletedUser( currentUserService.getCurrentUsername() ); + + // --------------------------------------------------------------------- + // Send sms-message when to completed the event + // --------------------------------------------------------------------- + + List outboundSms = programStageInstance.getOutboundSms(); + if ( outboundSms == null ) + { + outboundSms = new ArrayList(); + } + + outboundSms.addAll( sendMessages( programStageInstance, PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); + + // --------------------------------------------------------------------- + // Send DHIS message when to completed the event + // --------------------------------------------------------------------- + + List messageConversations = programStageInstance.getMessageConversations(); + if ( messageConversations == null ) + { + messageConversations = new ArrayList(); + } + + messageConversations.addAll( sendMessageConversations( programStageInstance, + PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); + + // --------------------------------------------------------------------- + // Update the event + // --------------------------------------------------------------------- + + updateProgramStageInstance( programStageInstance ); } // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2013-09-17 11:13:16 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java 2013-09-18 06:54:48 +0000 @@ -793,13 +793,6 @@ return grid; } - @SuppressWarnings("unchecked") - public Collection get( Patient patient ) - { - return getCriteria().createAlias( "patients", "patient" ) - .add( Restrictions.eq( "patient.id", patient.getId() ) ).list(); - } - // ------------------------------------------------------------------------- // Supportive methods // ------------------------------------------------------------------------- === 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 2013-09-17 06:08:16 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2013-09-18 06:54:48 +0000 @@ -209,6 +209,8 @@ + === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/CompleteDataEntryAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/CompleteDataEntryAction.java 2013-09-18 03:49:35 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/CompleteDataEntryAction.java 2013-09-18 06:54:48 +0000 @@ -28,23 +28,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Set; - import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.message.MessageConversation; -import org.hisp.dhis.patient.PatientReminder; -import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.program.Program; -import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramInstanceService; import org.hisp.dhis.program.ProgramStageInstance; import org.hisp.dhis.program.ProgramStageInstanceService; -import org.hisp.dhis.sms.outbound.OutboundSms; -import org.hisp.dhis.user.CurrentUserService; import com.opensymphony.xwork2.Action; @@ -72,13 +60,6 @@ this.programInstanceService = programInstanceService; } - private CurrentUserService currentUserService; - - public void setCurrentUserService( CurrentUserService currentUserService ) - { - this.currentUserService = currentUserService; - } - private I18nFormat format; public void setFormat( I18nFormat format ) @@ -129,42 +110,7 @@ ProgramStageInstance programStageInstance = programStageInstanceService .getProgramStageInstance( programStageInstanceId ); - programStageInstance.setCompleted( true ); - - Calendar today = Calendar.getInstance(); - PeriodType.clearTimeOfDay( today ); - Date date = today.getTime(); - - programStageInstance.setCompletedDate( date ); - programStageInstance.setCompletedUser( currentUserService.getCurrentUsername() ); - - // --------------------------------------------------------------------- - // Send sms-message when to completed the event - // --------------------------------------------------------------------- - - List psiOutboundSms = programStageInstance.getOutboundSms(); - if ( psiOutboundSms == null ) - { - psiOutboundSms = new ArrayList(); - } - - psiOutboundSms.addAll( programStageInstanceService.sendMessages( programStageInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); - - // --------------------------------------------------------------------- - // Send DHIS message when to completed the event - // --------------------------------------------------------------------- - - List psiMessageConversations = programStageInstance.getMessageConversations(); - if ( psiMessageConversations == null ) - { - psiMessageConversations = new ArrayList(); - } - - psiMessageConversations.addAll( programStageInstanceService.sendMessageConversations( programStageInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); - - programStageInstanceService.updateProgramStageInstance( programStageInstance ); + programStageInstanceService.completeProgramStageInstance( programStageInstance, format ); // --------------------------------------------------------------------- // Check Completed status for all of ProgramStageInstance of @@ -174,48 +120,14 @@ if ( !programStageInstance.getProgramInstance().getProgram().getType() .equals( Program.SINGLE_EVENT_WITHOUT_REGISTRATION ) ) { - ProgramInstance programInstance = programStageInstance.getProgramInstance(); - - Set stageInstances = programInstance.getProgramStageInstances(); - - for ( ProgramStageInstance stageInstance : stageInstances ) - { - if ( !stageInstance.isCompleted() || stageInstance.getProgramStage().getIrregular() ) - { - return SUCCESS; - } - } - - programInstance.setStatus( ProgramInstance.STATUS_COMPLETED ); - programInstance.setEndDate( new Date() ); - - // --------------------------------------------------------------------- - // Send sms-message when to completed the program - // --------------------------------------------------------------------- - - List piOutboundSms = programInstance.getOutboundSms(); - if ( piOutboundSms == null ) - { - piOutboundSms = new ArrayList(); - } - - piOutboundSms.addAll( programInstanceService.sendMessages( programInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); - - // --------------------------------------------------------------------- - // Send DHIS message when to completed the program - // --------------------------------------------------------------------- - - List piMessageConversations = programInstance.getMessageConversations(); - if ( piMessageConversations == null ) - { - piMessageConversations = new ArrayList(); - } - - piMessageConversations.addAll( programInstanceService.sendMessageConversations( programInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); - - programInstanceService.updateProgramInstance( programInstance ); + boolean canCompleted = programInstanceService.canAutoCompleteProgramInstanceStatus( programStageInstance + .getProgramInstance() ); + if ( !canCompleted ) + { + return SUCCESS; + } + + programInstanceService.completeProgramInstanceStatus( programStageInstance.getProgramInstance(), format ); } === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ProgramEnrollmentAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ProgramEnrollmentAction.java 2013-08-23 16:05:01 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/ProgramEnrollmentAction.java 2013-09-18 06:54:48 +0000 @@ -49,7 +49,6 @@ import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramInstanceService; import org.hisp.dhis.program.ProgramStageInstance; -import org.hisp.dhis.program.ProgramStageInstanceService; import org.hisp.dhis.program.comparator.ProgramStageInstanceVisitDateComparator; import com.opensymphony.xwork2.Action; @@ -72,8 +71,6 @@ private SelectedStateManager selectedStateManager; - private ProgramStageInstanceService programStageInstanceService; - // ------------------------------------------------------------------------- // Input/Output // ------------------------------------------------------------------------- @@ -98,8 +95,6 @@ private ProgramInstance programInstance; - private Collection linkProgramStageInstances = new HashSet(); - // ------------------------------------------------------------------------- // Getters/Setters // ------------------------------------------------------------------------- @@ -109,16 +104,6 @@ this.selectedStateManager = selectedStateManager; } - public Collection getLinkProgramStageInstances() - { - return linkProgramStageInstances; - } - - public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService ) - { - this.programStageInstanceService = programStageInstanceService; - } - public Collection getNoGroupAttributes() { return noGroupAttributes; @@ -202,8 +187,6 @@ programStageInstances = new ArrayList( programInstance.getProgramStageInstances() ); Collections.sort( programStageInstances, new ProgramStageInstanceVisitDateComparator() ); - - linkProgramStageInstances = programStageInstanceService.getProgramStageInstance( programInstance.getPatient() ); loadIdentifierTypes( programInstance ); === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SaveProgramEnrollmentAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SaveProgramEnrollmentAction.java 2013-09-18 03:49:35 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SaveProgramEnrollmentAction.java 2013-09-18 06:54:48 +0000 @@ -30,24 +30,21 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.List; import org.hisp.dhis.caseentry.state.SelectedStateManager; import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.message.MessageConversation; +import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; -import org.hisp.dhis.patient.PatientReminder; import org.hisp.dhis.patient.PatientService; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramInstanceService; import org.hisp.dhis.program.ProgramService; -import org.hisp.dhis.program.ProgramStage; import org.hisp.dhis.program.ProgramStageInstance; -import org.hisp.dhis.program.ProgramStageInstanceService; -import org.hisp.dhis.sms.outbound.OutboundSms; -import org.hisp.dhis.system.util.DateUtils; +import org.hisp.dhis.program.comparator.ProgramStageInstanceVisitDateComparator; import com.opensymphony.xwork2.Action; @@ -83,13 +80,6 @@ this.programInstanceService = programInstanceService; } - private ProgramStageInstanceService programStageInstanceService; - - public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService ) - { - this.programStageInstanceService = programStageInstanceService; - } - private SelectedStateManager selectedStateManager; public void setSelectedStateManager( SelectedStateManager selectedStateManager ) @@ -162,143 +152,65 @@ public String execute() throws Exception { + Patient patient = patientService.getPatient( patientId ); Program program = programService.getProgram( programId ); - if ( enrollmentDate == null || enrollmentDate.isEmpty() ) - { - if ( program.getUseBirthDateAsIncidentDate() ) - { - enrollmentDate = format.formatDate( patient.getBirthDate() ); - } - } - - if ( dateOfIncident == null || dateOfIncident.isEmpty() ) - { - if ( program.getUseBirthDateAsIncidentDate() ) - { - dateOfIncident = format.formatDate( patient.getBirthDate() ); - } - else - { - dateOfIncident = enrollmentDate; - } - } + OrganisationUnit orgunit = selectedStateManager.getSelectedOrganisationUnit(); + + Date enrollment = (enrollmentDate == null || enrollmentDate.isEmpty()) ? null : format + .parseDate( enrollmentDate ); + + Date incident = (dateOfIncident == null || dateOfIncident.isEmpty()) ? null : format.parseDate( dateOfIncident ); Collection programInstances = programInstanceService.getProgramInstances( patient, program, ProgramInstance.STATUS_ACTIVE ); + ProgramInstance programInstance = null; + if ( programInstances.iterator().hasNext() ) { programInstance = programInstances.iterator().next(); } + // --------------------------------------------------------------------- + // Generate program-instance and visits scheduled + // --------------------------------------------------------------------- + if ( programInstance == null ) { - programInstance = new ProgramInstance(); - programInstance.setEnrollmentDate( format.parseDate( enrollmentDate ) ); - programInstance.setDateOfIncident( format.parseDate( dateOfIncident ) ); - programInstance.setProgram( program ); - programInstance.setPatient( patient ); - programInstance.setStatus( ProgramInstance.STATUS_ACTIVE ); - - programInstanceService.addProgramInstance( programInstance ); - - boolean isFirstStage = false; - Date currentDate = new Date(); - for ( ProgramStage programStage : program.getProgramStages() ) - { - if ( programStage.getAutoGenerateEvent() ) - { - Date dateCreatedEvent = null; - if ( programStage.getGeneratedByEnrollmentDate() ) - { - dateCreatedEvent = format.parseDate( enrollmentDate ); - } - else - { - dateCreatedEvent = format.parseDate( dateOfIncident ); - - } - - Date dueDate = DateUtils - .getDateAfterAddition( dateCreatedEvent, programStage.getMinDaysFromStart() ); - - if ( !program.getIgnoreOverdueEvents() - || !(program.getIgnoreOverdueEvents() && dueDate.before( currentDate )) ) - { - ProgramStageInstance programStageInstance = new ProgramStageInstance(); - programStageInstance.setProgramInstance( programInstance ); - programStageInstance.setProgramStage( programStage ); - programStageInstance.setDueDate( dueDate ); - - if ( program.isSingleEvent() ) - { - programStageInstance.setOrganisationUnit( selectedStateManager - .getSelectedOrganisationUnit() ); - programStageInstance.setExecutionDate( dueDate ); - } - programStageInstanceService.addProgramStageInstance( programStageInstance ); - - if ( !isFirstStage ) - { - activeProgramStageInstance = programStageInstance; - isFirstStage = true; - } - } - } - } - - // ----------------------------------------------------------------- - // send messages after enrollment program - // ----------------------------------------------------------------- - - List outboundSms = programInstance.getOutboundSms(); - if ( outboundSms == null ) - { - outboundSms = new ArrayList(); - } - - outboundSms.addAll( programInstanceService.sendMessages( programInstance, - PatientReminder.SEND_WHEN_TO_EMROLLEMENT, format ) ); - - programInstanceService.updateProgramInstance( programInstance ); - - // ----------------------------------------------------------------- - // Send DHIS message when to completed the program - // ----------------------------------------------------------------- - - List piMessageConversations = programInstance.getMessageConversations(); - if ( piMessageConversations == null ) - { - piMessageConversations = new ArrayList(); - } - - piMessageConversations.addAll( programInstanceService.sendMessageConversations( programInstance, - PatientReminder.SEND_WHEN_TO_EMROLLEMENT, format ) ); - - programInstanceService.updateProgramInstance( programInstance ); + programInstance = programInstanceService.enrollmentPatient( patient, program, enrollment, incident, + orgunit, format ); } + + // --------------------------------------------------------------------- + // Update enrollment-date and incident-date + // --------------------------------------------------------------------- + else { - programInstance.setEnrollmentDate( format.parseDate( enrollmentDate ) ); - programInstance.setDateOfIncident( format.parseDate( dateOfIncident ) ); + programInstance.setEnrollmentDate( enrollment ); + programInstance.setDateOfIncident( incident ); programInstanceService.updateProgramInstance( programInstance ); - - for ( ProgramStageInstance programStageInstance : programInstance.getProgramStageInstances() ) + } + + // --------------------------------------------------------------------- + // Get the active event of program-instance + // --------------------------------------------------------------------- + + List programStageInstances = new ArrayList( + programInstance.getProgramStageInstances() ); + Collections.sort( programStageInstances, new ProgramStageInstanceVisitDateComparator() ); + + for ( ProgramStageInstance programStageInstance : programStageInstances ) + { + if ( !programStageInstance.isCompleted() + && programStageInstance.getStatus() != ProgramStageInstance.SKIPPED_STATUS ) { - if ( !programStageInstance.isCompleted() - || (programStageInstance.getStatus() != null && programStageInstance.getStatus() != ProgramStageInstance.SKIPPED_STATUS) ) - { - Date dueDate = DateUtils.getDateAfterAddition( format.parseDate( dateOfIncident ), - programStageInstance.getProgramStage().getMinDaysFromStart() ); - - programStageInstance.setDueDate( dueDate ); - - programStageInstanceService.updateProgramStageInstance( programStageInstance ); - } + activeProgramStageInstance = programStageInstance; + break; } } === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SetProgramInstanceStatusAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SetProgramInstanceStatusAction.java 2013-09-18 03:49:35 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SetProgramInstanceStatusAction.java 2013-09-18 06:54:48 +0000 @@ -29,21 +29,12 @@ */ import java.util.ArrayList; -import java.util.Calendar; import java.util.Collection; -import java.util.Date; -import java.util.List; import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.message.MessageConversation; -import org.hisp.dhis.patient.PatientReminder; -import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.program.Program; import org.hisp.dhis.program.ProgramInstance; import org.hisp.dhis.program.ProgramInstanceService; -import org.hisp.dhis.program.ProgramStageInstance; -import org.hisp.dhis.program.ProgramStageInstanceService; -import org.hisp.dhis.sms.outbound.OutboundSms; import com.opensymphony.xwork2.Action; @@ -65,13 +56,6 @@ this.programInstanceService = programInstanceService; } - private ProgramStageInstanceService programStageInstanceService; - - public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService ) - { - this.programStageInstanceService = programStageInstanceService; - } - private I18nFormat format; public void setFormat( I18nFormat format ) @@ -120,61 +104,14 @@ if ( status == ProgramInstance.STATUS_COMPLETED ) { - // --------------------------------------------------------------------- - // Send sms-message when to completed the program - // --------------------------------------------------------------------- - - List piOutboundSms = programInstance.getOutboundSms(); - if ( piOutboundSms == null ) - { - piOutboundSms = new ArrayList(); - } - - piOutboundSms.addAll( programInstanceService.sendMessages( programInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); - - // ----------------------------------------------------------------- - // Send DHIS message when to completed the program - // ----------------------------------------------------------------- - - List piMessageConversations = programInstance.getMessageConversations(); - if ( piMessageConversations == null ) - { - piMessageConversations = new ArrayList(); - } - - piMessageConversations.addAll( programInstanceService.sendMessageConversations( programInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); - - programInstance.setEndDate( new Date() ); + programInstanceService.completeProgramInstanceStatus( programInstance, format ); } else if ( status == ProgramInstance.STATUS_CANCELLED ) { - Calendar today = Calendar.getInstance(); - PeriodType.clearTimeOfDay( today ); - Date currentDate = today.getTime(); - - programInstance.setEndDate( currentDate ); - - for ( ProgramStageInstance programStageInstance : programInstance.getProgramStageInstances() ) - { - if ( programStageInstance.getExecutionDate() == null ) - { - // Set status as skipped for overdue events - if ( programStageInstance.getDueDate().before( currentDate ) ) - { - programStageInstance.setStatus( ProgramStageInstance.SKIPPED_STATUS ); - programStageInstanceService.updateProgramStageInstance( programStageInstance ); - } - // Delete scheduled events - else - { - programStageInstanceService.deleteProgramStageInstance( programStageInstance ); - } - } - } + programInstanceService.cancelProgramInstanceStatus( programInstance ); } + // For Active status else { programInstance.setEndDate( null ); === modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/reminder/SetEventStatusAction.java' --- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/reminder/SetEventStatusAction.java 2013-09-10 04:51:49 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/reminder/SetEventStatusAction.java 2013-09-18 06:54:48 +0000 @@ -28,15 +28,9 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.util.ArrayList; -import java.util.List; - import org.hisp.dhis.i18n.I18nFormat; -import org.hisp.dhis.message.MessageConversation; -import org.hisp.dhis.patient.PatientReminder; import org.hisp.dhis.program.ProgramStageInstance; import org.hisp.dhis.program.ProgramStageInstanceService; -import org.hisp.dhis.sms.outbound.OutboundSms; import com.opensymphony.xwork2.Action; @@ -98,56 +92,31 @@ switch ( status.intValue() ) { case ProgramStageInstance.COMPLETED_STATUS: - programStageInstance.setCompleted( true ); - programStageInstance.setStatus( null ); - - // ----------------------------------------------------------------- - // Send sms when to completed program - // ----------------------------------------------------------------- - - List psiOutboundSms = programStageInstance.getOutboundSms(); - if ( psiOutboundSms == null ) - { - psiOutboundSms = new ArrayList(); - } - psiOutboundSms.addAll( programStageInstanceService.sendMessages( programStageInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); - - // ----------------------------------------------------------------- - // Send DHIS message when to completed the event - // ----------------------------------------------------------------- - - List psiMessageConversations = programStageInstance.getMessageConversations(); - if ( psiMessageConversations == null ) - { - psiMessageConversations = new ArrayList(); - } - - psiMessageConversations.addAll( programStageInstanceService.sendMessageConversations( programStageInstance, - PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); - + programStageInstanceService.completeProgramStageInstance( programStageInstance, format ); break; case ProgramStageInstance.VISITED_STATUS: programStageInstance.setCompleted( false ); programStageInstance.setStatus( null ); + programStageInstanceService.updateProgramStageInstance( programStageInstance ); break; case ProgramStageInstance.LATE_VISIT_STATUS: programStageInstance.setCompleted( false ); programStageInstance.setStatus( null ); + programStageInstanceService.updateProgramStageInstance( programStageInstance ); break; case ProgramStageInstance.FUTURE_VISIT_STATUS: programStageInstance.setCompleted( false ); programStageInstance.setStatus( null ); + programStageInstanceService.updateProgramStageInstance( programStageInstance ); break; case ProgramStageInstance.SKIPPED_STATUS: programStageInstance.setStatus( status ); + programStageInstanceService.updateProgramStageInstance( programStageInstance ); break; default: break; } - programStageInstanceService.updateProgramStageInstance( programStageInstance ); - return SUCCESS; } } === 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 2013-09-18 03:49:35 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2013-09-18 06:54:48 +0000 @@ -119,7 +119,6 @@ - - - @@ -700,8 +695,6 @@ class="org.hisp.dhis.caseentry.action.patient.SetProgramInstanceStatusAction" scope="prototype"> -