=== 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-07-16 04:31:27 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SaveProgramEnrollmentAction.java 2013-08-02 03:34:24 +0000 @@ -26,12 +26,17 @@ */ package org.hisp.dhis.caseentry.action.patient; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import org.hisp.dhis.caseentry.state.SelectedStateManager; import org.hisp.dhis.i18n.I18nFormat; 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; @@ -40,7 +45,12 @@ import org.hisp.dhis.program.ProgramStage; import org.hisp.dhis.program.ProgramStageInstance; import org.hisp.dhis.program.ProgramStageInstanceService; +import org.hisp.dhis.sms.SmsServiceException; +import org.hisp.dhis.sms.outbound.OutboundSms; +import org.hisp.dhis.sms.outbound.OutboundSmsService; import org.hisp.dhis.system.util.DateUtils; +import org.hisp.dhis.user.CurrentUserService; +import org.hisp.dhis.user.User; import com.opensymphony.xwork2.Action; @@ -97,6 +107,20 @@ this.format = format; } + private CurrentUserService currentUserService; + + public void setCurrentUserService( CurrentUserService currentUserService ) + { + this.currentUserService = currentUserService; + } + + private OutboundSmsService outboundSmsService; + + public void setOutboundSmsService( OutboundSmsService outboundSmsService ) + { + this.outboundSmsService = outboundSmsService; + } + // ------------------------------------------------------------------------- // Input/Output // ------------------------------------------------------------------------- @@ -166,7 +190,7 @@ enrollmentDate = format.formatDate( patient.getBirthDate() ); } } - + if ( dateOfIncident == null || dateOfIncident.isEmpty() ) { if ( program.getUseBirthDateAsIncidentDate() ) @@ -178,8 +202,6 @@ dateOfIncident = enrollmentDate; } } - - Collection programInstances = programInstanceService.getProgramInstances( patient, program, ProgramInstance.STATUS_ACTIVE ); @@ -242,6 +264,9 @@ } } } + + // send messages after enrollment program + sendMessage(programInstance); } else { @@ -267,4 +292,130 @@ return SUCCESS; } + + // ------------------------------------------------------------------------- + // Supportive methods + // ------------------------------------------------------------------------- + + private void sendMessage( ProgramInstance programInstance ) + { + Patient patient = programInstance.getPatient(); + + if ( patient != null ) + { + Collection reminders = programInstance.getProgram().getPatientReminders(); + for ( PatientReminder rm : reminders ) + { + if ( rm != null && rm.getWhenToSend() != null + && rm.getWhenToSend() == PatientReminder.SEND_WHEN_TO_EMROLLEMENT ) + { + sendProgramMessage( rm, programInstance, patient ); + } + } + } + } + + private void sendProgramMessage( PatientReminder reminder, ProgramInstance programInstance, Patient patient ) + { + Set phoneNumbers = getPhonenumbers( reminder, patient ); + + if ( phoneNumbers.size() > 0 ) + { + String msg = getStringMsgFromTemplateMsg( reminder, programInstance, patient ); + + try + { + OutboundSms outboundSms = new OutboundSms(); + outboundSms.setMessage( msg ); + outboundSms.setRecipients( phoneNumbers ); + outboundSms.setSender( currentUserService.getCurrentUsername() ); + outboundSmsService.sendMessage( outboundSms, null ); + + List outboundSmsList = programInstance.getOutboundSms(); + if ( outboundSmsList == null ) + { + outboundSmsList = new ArrayList(); + } + outboundSmsList.add( outboundSms ); + programInstance.setOutboundSms( outboundSmsList ); + } + catch ( SmsServiceException e ) + { + e.printStackTrace(); + } + } + } + + private Set getPhonenumbers( PatientReminder reminder, Patient patient ) + { + Set phoneNumbers = new HashSet(); + + switch ( reminder.getSendTo() ) + { + case PatientReminder.SEND_TO_ALL_USERS_IN_ORGUGNIT_REGISTERED: + Collection users = patient.getOrganisationUnit().getUsers(); + for ( User user : users ) + { + if ( user.getPhoneNumber() != null && !user.getPhoneNumber().isEmpty() ) + { + phoneNumbers.add( user.getPhoneNumber() ); + } + } + break; + case PatientReminder.SEND_TO_HEALTH_WORKER: + if ( patient.getHealthWorker() != null && patient.getHealthWorker().getPhoneNumber() != null ) + { + phoneNumbers.add( patient.getHealthWorker().getPhoneNumber() ); + } + break; + case PatientReminder.SEND_TO_ORGUGNIT_REGISTERED: + if ( patient.getOrganisationUnit().getPhoneNumber() != null + && !patient.getOrganisationUnit().getPhoneNumber().isEmpty() ) + { + phoneNumbers.add( patient.getOrganisationUnit().getPhoneNumber() ); + } + break; + case PatientReminder.SEND_TO_USER_GROUP: + for ( User user : reminder.getUserGroup().getMembers() ) + { + if ( user.getPhoneNumber() != null && !user.getPhoneNumber().isEmpty() ) + { + phoneNumbers.add( user.getPhoneNumber() ); + } + } + break; + default: + if ( patient.getPhoneNumber() != null && !patient.getPhoneNumber().isEmpty() ) + { + phoneNumbers.add( patient.getPhoneNumber() ); + } + break; + } + return phoneNumbers; + } + + public String getStringMsgFromTemplateMsg( PatientReminder reminder, ProgramInstance programInstance, + Patient patient ) + { + String msg = reminder.getTemplateMessage(); + + String patientName = patient.getFirstName(); + String organisationunitName = patient.getOrganisationUnit().getName(); + String programName = programInstance.getProgram().getName(); + String daysSinceEnrollementDate = DateUtils.daysBetween( new Date(), programInstance.getEnrollmentDate() ) + ""; + String daysSinceIncidentDate = DateUtils.daysBetween( new Date(), programInstance.getDateOfIncident() ) + ""; + String incidentDate = format.formatDate( programInstance.getDateOfIncident() ); + String erollmentDate = format.formatDate( programInstance.getEnrollmentDate() ); + + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PATIENT_NAME, patientName ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_ORGUNIT_NAME, organisationunitName ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_INCIDENT_DATE, incidentDate ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_ENROLLMENT_DATE, erollmentDate ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_ENROLLMENT_DATE, daysSinceEnrollementDate ); + msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_INCIDENT_DATE, daysSinceIncidentDate ); + + return msg; + } + } === 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-08-01 03:22:27 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2013-08-02 03:34:24 +0000 @@ -652,6 +652,8 @@ ref="org.hisp.dhis.program.ProgramStageInstanceService" /> + + ' + '' + '' + + '' + '' + '' + '' @@ -358,12 +359,12 @@ function whenToSendOnChange(index) { var whenToSend = getFieldValue('whenToSend' + index ); - if(whenToSend==3){ + if(whenToSend==""){ + enable('dateToCompare' + index ); + enable('daysAllowedSendMessage' + index ); + } + else{ disable('dateToCompare' + index ); disable('daysAllowedSendMessage' + index ); } - else{ - enable('dateToCompare' + index ); - enable('daysAllowedSendMessage' + index ); - } } \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updateProgramForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updateProgramForm.vm 2013-08-01 03:48:34 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-patient/src/main/webapp/dhis-web-maintenance-patient/updateProgramForm.vm 2013-08-02 03:34:24 +0000 @@ -324,6 +324,7 @@ @@ -340,7 +341,7 @@ + #if($!reminder.whenToSend==1 || $!reminder.whenToSend==3 ) disabled #end />