=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminder.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminder.java 2013-07-19 06:04:09 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminder.java 2013-08-07 03:44:17 +0000 @@ -35,148 +35,167 @@ * @author Chau Thu Tran * @version PatientReminder.java 1:07:58 PM Sep 18, 2012 $ */ -public class PatientReminder implements Serializable { - private static final long serialVersionUID = 3101502417481903219L; - - public static final String DUE_DATE_TO_COMPARE = "duedate"; - - public static final String ENROLLEMENT_DATE_TO_COMPARE = "enrollmentdate"; - - public static final String INCIDENT_DATE_TO_COMPARE = "dateofincident"; - - public static final String TEMPLATE_MESSSAGE_PATIENT_NAME = "{patient-name}"; - - public static final String TEMPLATE_MESSSAGE_PROGRAM_NAME = "{program-name}"; - - public static final String TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME = "{program-stage-name}"; - - public static final String TEMPLATE_MESSSAGE_DUE_DATE = "{due-date}"; - - public static final String TEMPLATE_MESSSAGE_ORGUNIT_NAME = "{orgunit-name}"; - - public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_DUE_DATE = "{days-since-due-date}"; - - public static final String TEMPLATE_MESSSAGE_INCIDENT_DATE = "{incident-date}"; - - public static final String TEMPLATE_MESSSAGE_ENROLLMENT_DATE = "{enrollement-date}"; - - public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_ENROLLMENT_DATE = "{days-since-enrollment-date}"; - - public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_INCIDENT_DATE = "{days-since-incident-date}"; - - public static final int SEND_TO_PATIENT = 1; - - public static final int SEND_TO_HEALTH_WORKER = 2; - - public static final int SEND_TO_ORGUGNIT_REGISTERED = 3; - - public static final int SEND_TO_ALL_USERS_IN_ORGUGNIT_REGISTERED = 4; - - public static final int SEND_TO_USER_GROUP = 5; - - public static final int SEND_WHEN_TO_EMROLLEMENT = 1; - - public static final int SEND_WHEN_TO_C0MPLETED_EVENT = 2; - - public static final int SEND_WHEN_TO_C0MPLETED_PROGRAM = 3; - - private int id; - - private String name; - - private Integer daysAllowedSendMessage; - - private String templateMessage; - - private String dateToCompare; - - private Integer sendTo; - - private Integer whenToSend; - - private UserGroup userGroup; - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - public PatientReminder(String name, Integer daysAllowedSendMessage, - String templateMessage) { - this.name = name; - this.daysAllowedSendMessage = daysAllowedSendMessage; - this.templateMessage = templateMessage; - } - - // ------------------------------------------------------------------------- - // Getter && Setter - // ------------------------------------------------------------------------- - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getDaysAllowedSendMessage() { - return daysAllowedSendMessage; - } - - public void setDaysAllowedSendMessage(Integer daysAllowedSendMessage) { - this.daysAllowedSendMessage = daysAllowedSendMessage; - } - - public String getTemplateMessage() { - return templateMessage; - } - - public void setTemplateMessage(String templateMessage) { - this.templateMessage = templateMessage; - } - - public String getDateToCompare() { - return dateToCompare; - } - - public void setDateToCompare(String dateToCompare) { - this.dateToCompare = dateToCompare; - } - - public Integer getSendTo() { - return sendTo; - } - - public void setSendTo(Integer sendTo) { - this.sendTo = sendTo; - } - - public Integer getWhenToSend() { - return whenToSend; - } - - public void setWhenToSend(Integer whenToSend) { - this.whenToSend = whenToSend; - } - - public PatientReminder() { - - } - - public UserGroup getUserGroup() { - return userGroup; - } - - public void setUserGroup( UserGroup userGroup ) { - this.userGroup = userGroup; - } +public class PatientReminder + implements Serializable +{ + private static final long serialVersionUID = 3101502417481903219L; + + public static final String DUE_DATE_TO_COMPARE = "duedate"; + + public static final String ENROLLEMENT_DATE_TO_COMPARE = "enrollmentdate"; + + public static final String INCIDENT_DATE_TO_COMPARE = "dateofincident"; + + public static final String TEMPLATE_MESSSAGE_PATIENT_NAME = "{patient-name}"; + + public static final String TEMPLATE_MESSSAGE_PROGRAM_NAME = "{program-name}"; + + public static final String TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME = "{program-stage-name}"; + + public static final String TEMPLATE_MESSSAGE_DUE_DATE = "{due-date}"; + + public static final String TEMPLATE_MESSSAGE_ORGUNIT_NAME = "{orgunit-name}"; + + public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_DUE_DATE = "{days-since-due-date}"; + + public static final String TEMPLATE_MESSSAGE_INCIDENT_DATE = "{incident-date}"; + + public static final String TEMPLATE_MESSSAGE_ENROLLMENT_DATE = "{enrollement-date}"; + + public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_ENROLLMENT_DATE = "{days-since-enrollment-date}"; + + public static final String TEMPLATE_MESSSAGE_DAYS_SINCE_INCIDENT_DATE = "{days-since-incident-date}"; + + public static final int SEND_TO_PATIENT = 1; + + public static final int SEND_TO_HEALTH_WORKER = 2; + + public static final int SEND_TO_ORGUGNIT_REGISTERED = 3; + + public static final int SEND_TO_ALL_USERS_IN_ORGUGNIT_REGISTERED = 4; + + public static final int SEND_TO_USER_GROUP = 5; + + public static final int SEND_WHEN_TO_EMROLLEMENT = 1; + + public static final int SEND_WHEN_TO_C0MPLETED_EVENT = 2; + + public static final int SEND_WHEN_TO_C0MPLETED_PROGRAM = 3; + + private int id; + + private String name; + + private Integer daysAllowedSendMessage; + + private String templateMessage; + + private String dateToCompare; + + private Integer sendTo; + + private Integer whenToSend; + + private UserGroup userGroup; + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + public PatientReminder( String name, Integer daysAllowedSendMessage, String templateMessage ) + { + this.name = name; + this.daysAllowedSendMessage = daysAllowedSendMessage; + this.templateMessage = templateMessage; + } + + // ------------------------------------------------------------------------- + // Getter && Setter + // ------------------------------------------------------------------------- + + public int getId() + { + return id; + } + + public void setId( int id ) + { + this.id = id; + } + + public String getName() + { + return name; + } + + public void setName( String name ) + { + this.name = name; + } + + public Integer getDaysAllowedSendMessage() + { + return daysAllowedSendMessage; + } + + public void setDaysAllowedSendMessage( Integer daysAllowedSendMessage ) + { + this.daysAllowedSendMessage = daysAllowedSendMessage; + } + + public String getTemplateMessage() + { + return templateMessage; + } + + public void setTemplateMessage( String templateMessage ) + { + this.templateMessage = templateMessage; + } + + public String getDateToCompare() + { + return dateToCompare; + } + + public void setDateToCompare( String dateToCompare ) + { + this.dateToCompare = dateToCompare; + } + + public Integer getSendTo() + { + return sendTo; + } + + public void setSendTo( Integer sendTo ) + { + this.sendTo = sendTo; + } + + public Integer getWhenToSend() + { + return whenToSend; + } + + public void setWhenToSend( Integer whenToSend ) + { + this.whenToSend = whenToSend; + } + + public PatientReminder() + { + + } + + public UserGroup getUserGroup() + { + return userGroup; + } + + public void setUserGroup( UserGroup userGroup ) + { + this.userGroup = userGroup; + } } === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminderService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminderService.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/patient/PatientReminderService.java 2013-08-07 03:44:17 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2004-2013, 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.patient; + +import java.util.Set; + +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.program.ProgramInstance; +import org.hisp.dhis.program.ProgramStageInstance; + +/** + * @author Chau Thu Tran + * + * @version $ PatientReminderService.java Aug 7, 2013 9:53:19 AM $ + */ +public interface PatientReminderService +{ + String getMessageFromTemplate( PatientReminder patientReminder, ProgramInstance programInstance, I18nFormat format ); + + String getMessageFromTemplate( PatientReminder patientReminder, ProgramStageInstance programStageInstance, I18nFormat format ); + + Set getPhonenumbers( PatientReminder patientReminder, Patient patient ); +} === 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-04-10 08:45:43 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramInstanceService.java 2013-08-07 03:44:17 +0000 @@ -35,6 +35,7 @@ import org.hisp.dhis.i18n.I18nFormat; import org.hisp.dhis.organisationunit.OrganisationUnit; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.sms.outbound.OutboundSms; /** * @author Abyot Asalefew @@ -82,7 +83,7 @@ Collection getProgramInstances( Program program, Collection orgunitIds, Date startDate, Date endDate, int min, int max ); - + int countProgramInstances( Program program, Collection orgunitIds, Date startDate, Date endDate ); List getProgramInstanceReport( Patient patient, I18n i18n, I18nFormat format ); @@ -96,7 +97,9 @@ Collection orgunitIds, Date startDate, Date endDate ); void removeProgramEnrollment( ProgramInstance programInstance ); - - Collection getSendMesssageEvents(); + + Collection getScheduleMesssages(); + + Collection sendMessages( ProgramInstance programInstance, int status, 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 2013-07-23 04:16:21 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java 2013-08-07 03:44:17 +0000 @@ -134,5 +134,7 @@ Grid getCompletenessProgramStageInstance( Collection orgunits, Program program, String startDate, String endDate, I18n i18n ); + + Collection sendMessages( ProgramStageInstance programStageInstance, int status, I18nFormat format ); } === added file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientReminderService.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientReminderService.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/DefaultPatientReminderService.java 2013-08-07 03:44:17 +0000 @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2004-2013, 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.patient; + +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.program.ProgramInstance; +import org.hisp.dhis.program.ProgramStageInstance; +import org.hisp.dhis.system.util.DateUtils; +import org.hisp.dhis.user.User; + +/** + * @author Chau Thu Tran + * + * @version $ DefaultPatientReminderService.java Aug 7, 2013 9:54:59 AM $ + */ +public class DefaultPatientReminderService + implements PatientReminderService +{ + + @Override + public String getMessageFromTemplate( PatientReminder patientReminder, ProgramInstance programInstance, + I18nFormat format ) + { + Patient patient = programInstance.getPatient(); + String templateMessage = patientReminder.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() ); + + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_PATIENT_NAME, patientName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName ); + templateMessage = templateMessage + .replace( PatientReminder.TEMPLATE_MESSSAGE_ORGUNIT_NAME, organisationunitName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_INCIDENT_DATE, incidentDate ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_ENROLLMENT_DATE, erollmentDate ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_ENROLLMENT_DATE, + daysSinceEnrollementDate ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_INCIDENT_DATE, + daysSinceIncidentDate ); + + return templateMessage; + } + + @Override + public String getMessageFromTemplate( PatientReminder patientReminder, ProgramStageInstance programStageInstance, + I18nFormat format ) + { + Patient patient = programStageInstance.getProgramInstance().getPatient(); + String templateMessage = patientReminder.getTemplateMessage(); + + String patientName = patient.getFirstName(); + String organisationunitName = patient.getOrganisationUnit().getName(); + String programName = programStageInstance.getProgramInstance().getProgram().getName(); + String programStageName = programStageInstance.getProgramStage().getName(); + String daysSinceDueDate = DateUtils.daysBetween( new Date(), programStageInstance.getDueDate() ) + ""; + String dueDate = format.formatDate( programStageInstance.getDueDate() ); + + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_PATIENT_NAME, patientName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME, + programStageName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_DUE_DATE, dueDate ); + templateMessage = templateMessage + .replace( PatientReminder.TEMPLATE_MESSSAGE_ORGUNIT_NAME, organisationunitName ); + templateMessage = templateMessage.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_DUE_DATE, + daysSinceDueDate ); + + return templateMessage; + } + + @Override + public Set getPhonenumbers( PatientReminder patientReminder, Patient patient ) + { + Set phoneNumbers = new HashSet(); + + switch ( patientReminder.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 : patientReminder.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; + } +} === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/scheduling/SendScheduledMessageTask.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/scheduling/SendScheduledMessageTask.java 2013-07-24 07:03:54 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patient/scheduling/SendScheduledMessageTask.java 2013-08-07 03:44:17 +0000 @@ -199,7 +199,7 @@ { notifier.notify( taskId, "Start to prepare reminder messages for enrollements" ); - Collection schedulingProgramObjects = programInstanceService.getSendMesssageEvents(); + Collection schedulingProgramObjects = programInstanceService.getScheduleMesssages(); for ( SchedulingProgramObject schedulingProgramObject : schedulingProgramObjects ) { === modified file 'dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientreport/hibernate/HibernatePatientAggregateReportStore.java' --- dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientreport/hibernate/HibernatePatientAggregateReportStore.java 2013-05-24 04:19:07 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/patientreport/hibernate/HibernatePatientAggregateReportStore.java 2013-08-07 03:44:17 +0000 @@ -32,13 +32,11 @@ import java.util.List; import org.hibernate.Criteria; -import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hisp.dhis.common.SharingUtils; import org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore; import org.hisp.dhis.patientreport.PatientAggregateReport; import org.hisp.dhis.patientreport.PatientAggregateReportStore; -import org.hisp.dhis.patientreport.PatientTabularReport; import org.hisp.dhis.user.User; /** === 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-07-23 03:14:03 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramInstanceService.java 2013-08-07 03:44:17 +0000 @@ -29,8 +29,10 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import org.hisp.dhis.common.Grid; import org.hisp.dhis.common.GridHeader; @@ -43,13 +45,17 @@ import org.hisp.dhis.patient.PatientIdentifier; import org.hisp.dhis.patient.PatientIdentifierType; import org.hisp.dhis.patient.PatientReminder; +import org.hisp.dhis.patient.PatientReminderService; import org.hisp.dhis.patientattributevalue.PatientAttributeValue; import org.hisp.dhis.patientattributevalue.PatientAttributeValueService; import org.hisp.dhis.patientcomment.PatientComment; import org.hisp.dhis.patientdatavalue.PatientDataValue; import org.hisp.dhis.patientdatavalue.PatientDataValueService; +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.grid.ListGrid; +import org.hisp.dhis.user.CurrentUserService; import org.springframework.transaction.annotation.Transactional; /** @@ -92,6 +98,27 @@ this.programService = programService; } + private OutboundSmsService outboundSmsService; + + public void setOutboundSmsService( OutboundSmsService outboundSmsService ) + { + this.outboundSmsService = outboundSmsService; + } + + private CurrentUserService currentUserService; + + public void setCurrentUserService( CurrentUserService currentUserService ) + { + this.currentUserService = currentUserService; + } + + private PatientReminderService patientReminderService; + + public void setPatientReminderService( PatientReminderService patientReminderService ) + { + this.patientReminderService = patientReminderService; + } + // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- @@ -396,16 +423,17 @@ { for ( PatientIdentifier identifier : identifiers ) { - if ( identifier.getIdentifierType() != null && identifier.getIdentifierType().equals( identifierType ) ) + if ( identifier.getIdentifierType() != null + && identifier.getIdentifierType().equals( identifierType ) ) { grid.addRow(); grid.addValue( identifierType.getDisplayName() ); grid.addValue( identifier.getIdentifier() ); } - else if ( identifier.getIdentifierType() == null ) + else if ( identifier.getIdentifierType() == null ) { grid.addRow(); - grid.addValue( i18n.getString( "system_identifier" )); + grid.addValue( i18n.getString( "system_identifier" ) ); grid.addValue( identifier.getIdentifier() ); } } @@ -480,7 +508,7 @@ programInstanceStore.removeProgramEnrollment( programInstance ); } - public Collection getSendMesssageEvents() + public Collection getScheduleMesssages() { Collection result = programInstanceStore .getSendMesssageEvents( PatientReminder.ENROLLEMENT_DATE_TO_COMPARE ); @@ -490,8 +518,29 @@ return result; } + public Collection sendMessages( ProgramInstance programInstance, int status, I18nFormat format ) + { + Patient patient = programInstance.getPatient(); + Collection outboundSmsList = new HashSet(); + + Collection reminders = programInstance.getProgram().getPatientReminders(); + for ( PatientReminder rm : reminders ) + { + if ( rm != null && rm.getWhenToSend() != null && rm.getWhenToSend() == status ) + { + OutboundSms outboundSms = sendProgramMessage( rm, programInstance, patient, format ); + if ( outboundSms != null ) + { + outboundSmsList.add( outboundSms ); + } + } + } + + return outboundSmsList; + } + // ------------------------------------------------------------------------- - // due-date && report-date + // Supportive methods // ------------------------------------------------------------------------- private void getProgramStageInstancesReport( Grid grid, ProgramInstance programInstance, I18nFormat format, @@ -574,4 +623,31 @@ } } + private OutboundSms sendProgramMessage( PatientReminder patientReminder, ProgramInstance programInstance, + Patient patient, I18nFormat format ) + { + Set phoneNumbers = patientReminderService.getPhonenumbers( patientReminder, patient ); + OutboundSms outboundSms = null; + + if ( phoneNumbers.size() > 0 ) + { + String msg = patientReminderService.getMessageFromTemplate( patientReminder, programInstance, format ); + + try + { + outboundSms = new OutboundSms(); + outboundSms.setMessage( msg ); + outboundSms.setRecipients( phoneNumbers ); + outboundSms.setSender( currentUserService.getCurrentUsername() ); + outboundSmsService.sendMessage( outboundSms, null ); + } + catch ( SmsServiceException e ) + { + e.printStackTrace(); + } + } + + return outboundSms; + } + } === 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-07-23 04:16:21 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java 2013-08-07 03:44:17 +0000 @@ -26,6 +26,15 @@ */ package org.hisp.dhis.program; +import java.util.ArrayList; +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; import org.hisp.dhis.dataelement.DataElement; @@ -35,21 +44,19 @@ import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.organisationunit.OrganisationUnitService; import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.patient.PatientReminder; +import org.hisp.dhis.patient.PatientReminderService; import org.hisp.dhis.patientdatavalue.PatientDataValue; import org.hisp.dhis.patientdatavalue.PatientDataValueService; import org.hisp.dhis.patientreport.TabularReportColumn; import org.hisp.dhis.period.Period; +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.grid.ListGrid; +import org.hisp.dhis.user.CurrentUserService; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * @author Abyot Asalefew * @version $Id$ @@ -90,6 +97,27 @@ this.organisationUnitService = organisationUnitService; } + private OutboundSmsService outboundSmsService; + + public void setOutboundSmsService( OutboundSmsService outboundSmsService ) + { + this.outboundSmsService = outboundSmsService; + } + + private CurrentUserService currentUserService; + + public void setCurrentUserService( CurrentUserService currentUserService ) + { + this.currentUserService = currentUserService; + } + + private PatientReminderService patientReminderService; + + public void setPatientReminderService( PatientReminderService patientReminderService ) + { + this.patientReminderService = patientReminderService; + } + // ------------------------------------------------------------------------- // Implementation methods // ------------------------------------------------------------------------- @@ -499,7 +527,8 @@ Boolean useFormNameDataElement, I18nFormat format, I18n i18n ) { return programStageInstanceStore.getAggregateReport( position, programStage, orgunitIds, facilityLB, deGroupBy, - deSum, deFilters, periods, aggregateType, limit, useCompletedEvents, displayTotals, useFormNameDataElement, format, i18n ); + deSum, deFilters, periods, aggregateType, limit, useCompletedEvents, displayTotals, useFormNameDataElement, + format, i18n ); } @Override @@ -529,4 +558,56 @@ return programStageInstanceStore.getCompleteness( orgunitIds, program, startDate, endDate, i18n ); } + @Override + public Collection sendMessages( ProgramStageInstance programStageInstance, int status, + I18nFormat format ) + { + Patient patient = programStageInstance.getProgramInstance().getPatient(); + Collection outboundSmsList = new HashSet(); + + Collection reminders = programStageInstance.getProgramStage().getPatientReminders(); + for ( PatientReminder rm : reminders ) + { + if ( rm != null && rm.getWhenToSend() != null && rm.getWhenToSend() == status ) + { + OutboundSms outboundSms = sendEventMessage( rm, programStageInstance, patient, format ); + if ( outboundSms != null ) + { + outboundSmsList.add( outboundSms ); + } + } + } + + return outboundSmsList; + } + + // ------------------------------------------------------------------------- + // Supportive methods + // ------------------------------------------------------------------------- + + private OutboundSms sendEventMessage( PatientReminder patientReminder, ProgramStageInstance programStageInstance, + Patient patient, I18nFormat format ) + { + Set phoneNumbers = patientReminderService.getPhonenumbers( patientReminder, patient ); + OutboundSms outboundSms = null; + + if ( phoneNumbers.size() > 0 ) + { + String msg = patientReminderService.getMessageFromTemplate( patientReminder, programStageInstance, format ); + try + { + outboundSms = new OutboundSms(); + outboundSms.setMessage( msg ); + outboundSms.setRecipients( phoneNumbers ); + outboundSms.setSender( currentUserService.getCurrentUsername() ); + outboundSmsService.sendMessage( outboundSms, null ); + } + catch ( SmsServiceException e ) + { + e.printStackTrace(); + } + } + + return outboundSms; + } } === 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-06-18 02:41:49 +0000 +++ dhis-2/dhis-services/dhis-service-patient/src/main/resources/META-INF/dhis/beans.xml 2013-08-07 03:44:17 +0000 @@ -210,6 +210,12 @@ ref="org.hisp.dhis.patientdatavalue.PatientDataValueService" /> + + + @@ -220,6 +226,12 @@ ref="org.hisp.dhis.patientdatavalue.PatientDataValueService" /> + + + @@ -523,6 +535,11 @@ + + + + + === 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-08-05 03:00:51 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/CompleteDataEntryAction.java 2013-08-07 03:44:17 +0000 @@ -28,9 +28,7 @@ import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Date; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -44,12 +42,8 @@ import org.hisp.dhis.program.ProgramInstanceService; 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; @@ -91,13 +85,6 @@ this.currentUserService = currentUserService; } - private OutboundSmsService outboundSmsService; - - public void setOutboundSmsService( OutboundSmsService outboundSmsService ) - { - this.outboundSmsService = outboundSmsService; - } - private I18nFormat format; public void setFormat( I18nFormat format ) @@ -159,7 +146,14 @@ // Send message when to completed the event - sendSMSToCompletedEvent( programStageInstance ); + List psiOutboundSms = programStageInstance.getOutboundSms(); + if ( psiOutboundSms == null ) + { + psiOutboundSms = new ArrayList(); + } + + psiOutboundSms.addAll( programStageInstanceService.sendMessages( programStageInstance, + PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT, format ) ); programStageInstanceService.updateProgramStageInstance( programStageInstance ); @@ -185,7 +179,14 @@ programInstance.setStatus( ProgramInstance.STATUS_COMPLETED ); programInstance.setEndDate( new Date() ); - sendSMSToCompletedProgram( programInstance ); + List piOutboundSms = programInstance.getOutboundSms(); + if ( piOutboundSms == null ) + { + piOutboundSms = new ArrayList(); + } + + piOutboundSms.addAll( programInstanceService.sendMessages( programInstance, + PatientReminder.SEND_WHEN_TO_C0MPLETED_PROGRAM, format ) ); programInstanceService.updateProgramInstance( programInstance ); @@ -200,202 +201,4 @@ return "programcompleted"; } - - // ------------------------------------------------------------------------- - // Supportive methods - // ------------------------------------------------------------------------- - - private void sendSMSToCompletedEvent( ProgramStageInstance programStageInstance ) - { - Patient patient = programStageInstance.getProgramInstance().getPatient(); - - if ( patient != null ) - { - Collection reminders = programStageInstance.getProgramStage().getPatientReminders(); - for ( PatientReminder rm : reminders ) - { - if ( rm != null && rm.getWhenToSend() != null - && rm.getWhenToSend() == PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT ) - { - sendEventMessage( rm, programStageInstance, patient ); - } - } - } - } - - private void sendEventMessage( PatientReminder reminder, ProgramStageInstance programStageInstance, Patient patient ) - { - Set phoneNumbers = getPhonenumbers( reminder, patient ); - - if ( phoneNumbers.size() > 0 ) - { - String msg = getStringMsgFromTemplateMsg( reminder, programStageInstance, patient ); - try - { - OutboundSms outboundSms = new OutboundSms(); - outboundSms.setMessage( msg ); - outboundSms.setRecipients( phoneNumbers ); - outboundSms.setSender( currentUserService.getCurrentUsername() ); - outboundSmsService.sendMessage( outboundSms, null ); - - List outboundSmsList = programStageInstance.getOutboundSms(); - if ( outboundSmsList == null ) - { - outboundSmsList = new ArrayList(); - } - outboundSmsList.add( outboundSms ); - programStageInstance.setOutboundSms( outboundSmsList ); - } - catch ( SmsServiceException e ) - { - e.printStackTrace(); - } - } - - } - - private void sendSMSToCompletedProgram( 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_C0MPLETED_PROGRAM ) - { - 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, ProgramStageInstance programStageInstance, - Patient patient ) - { - String msg = reminder.getTemplateMessage(); - - String patientName = patient.getFirstName(); - String organisationunitName = patient.getOrganisationUnit().getName(); - String programName = programStageInstance.getProgramInstance().getProgram().getName(); - String programStageName = programStageInstance.getProgramStage().getName(); - String daysSinceDueDate = DateUtils.daysBetween( new Date(), programStageInstance.getDueDate() ) + ""; - String dueDate = format.formatDate( programStageInstance.getDueDate() ); - - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PATIENT_NAME, patientName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME, programStageName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DUE_DATE, dueDate ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_ORGUNIT_NAME, organisationunitName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_DUE_DATE, daysSinceDueDate ); - - return msg; - } - - 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/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-08-02 03:34:24 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/patient/SaveProgramEnrollmentAction.java 2013-08-07 03:44:17 +0000 @@ -29,9 +29,7 @@ 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; @@ -45,12 +43,8 @@ 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; @@ -107,20 +101,6 @@ 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 // ------------------------------------------------------------------------- @@ -266,7 +246,15 @@ } // send messages after enrollment program - sendMessage(programInstance); + List outboundSms = programInstance.getOutboundSms(); + if ( outboundSms == null ) + { + outboundSms = new ArrayList(); + } + + outboundSms.addAll( programInstanceService.sendMessages( programInstance, + PatientReminder.SEND_WHEN_TO_EMROLLEMENT, format ) ); + programInstanceService.updateProgramInstance( programInstance ); } else { @@ -293,129 +281,4 @@ 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/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-08-05 03:00:51 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/reminder/SetEventStatusAction.java 2013-08-07 03:44:17 +0000 @@ -28,23 +28,13 @@ package org.hisp.dhis.caseentry.action.reminder; 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.i18n.I18nFormat; -import org.hisp.dhis.patient.Patient; import org.hisp.dhis.patient.PatientReminder; 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; @@ -67,20 +57,6 @@ this.programStageInstanceService = programStageInstanceService; } - private CurrentUserService currentUserService; - - public void setCurrentUserService( CurrentUserService currentUserService ) - { - this.currentUserService = currentUserService; - } - - private OutboundSmsService outboundSmsService; - - public void setOutboundSmsService( OutboundSmsService outboundSmsService ) - { - this.outboundSmsService = outboundSmsService; - } - private I18nFormat format; public void setFormat( I18nFormat format ) @@ -122,7 +98,15 @@ case ProgramStageInstance.COMPLETED_STATUS: programStageInstance.setCompleted( true ); programStageInstance.setStatus( null ); - sendSMSToCompletedEvent(programStageInstance); + + // Send 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 ) ); break; case ProgramStageInstance.VISITED_STATUS: programStageInstance.setCompleted( false ); @@ -148,126 +132,4 @@ return SUCCESS; } - // ------------------------------------------------------------------------- - // Supportive methods - // ------------------------------------------------------------------------- - - private void sendSMSToCompletedEvent( ProgramStageInstance programStageInstance ) - { - Patient patient = programStageInstance.getProgramInstance().getPatient(); - - if ( patient != null ) - { - Collection reminders = programStageInstance.getProgramStage().getPatientReminders(); - for ( PatientReminder rm : reminders ) - { - if ( rm != null && rm.getWhenToSend() == PatientReminder.SEND_WHEN_TO_C0MPLETED_EVENT ) - { - sendEventMessage( rm, programStageInstance, patient ); - } - } - } - } - - private void sendEventMessage( PatientReminder reminder, ProgramStageInstance programStageInstance, Patient patient ) - { - Set phoneNumbers = getPhonenumbers( reminder, patient ); - - if ( phoneNumbers.size() > 0 ) - { - String msg = getStringMsgFromTemplateMsg( reminder, programStageInstance, patient ); - try - { - OutboundSms outboundSms = new OutboundSms(); - outboundSms.setMessage( msg ); - outboundSms.setRecipients( phoneNumbers ); - outboundSms.setSender( currentUserService.getCurrentUsername() ); - outboundSmsService.sendMessage( outboundSms, null ); - - List outboundSmsList = programStageInstance.getOutboundSms(); - if ( outboundSmsList == null ) - { - outboundSmsList = new ArrayList(); - } - outboundSmsList.add( outboundSms ); - programStageInstance.setOutboundSms( outboundSmsList ); - } - catch ( SmsServiceException e ) - { - e.printStackTrace(); - } - } - - } - - public String getStringMsgFromTemplateMsg( PatientReminder reminder, ProgramStageInstance programStageInstance, - Patient patient ) - { - String msg = reminder.getTemplateMessage(); - - String patientName = patient.getFirstName(); - String organisationunitName = patient.getOrganisationUnit().getName(); - String programName = programStageInstance.getProgramInstance().getProgram().getName(); - String programStageName = programStageInstance.getProgramStage().getName(); - String daysSinceDueDate = DateUtils.daysBetween( new Date(), programStageInstance.getDueDate() ) + ""; - String dueDate = format.formatDate( programStageInstance.getDueDate() ); - - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PATIENT_NAME, patientName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME, programStageName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DUE_DATE, dueDate ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_ORGUNIT_NAME, organisationunitName ); - msg = msg.replace( PatientReminder.TEMPLATE_MESSSAGE_DAYS_SINCE_DUE_DATE, daysSinceDueDate ); - - return msg; - } - - 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; - } - } === 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-06 06:33:43 +0000 +++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml 2013-08-07 03:44:17 +0000 @@ -121,8 +121,6 @@ - - - - -