/**
*Electronic Logistics Management Information System(eLMIS)is a supply chain management system for health commodities in a developing country setting.
*
*Copyright(C)2015 Clinton Health Access Initiative(CHAI)/MoHCDGEC Tanzania.
*
*This program is free software:you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation,either version 3of the License,or(at your option)any later version.
*This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU Affero General Public License for more details.
**/
package org.openlmis.vaccine.service.VaccineOrderRequisitionServices;
import org.openlmis.core.domain.*;
import org.openlmis.core.dto.FacilitySupervisor;
import org.openlmis.core.service.*;
import org.openlmis.email.service.EmailService;
import org.openlmis.vaccine.domain.VaccineOrderRequisition.VaccineOrderRequisition;
import org.openlmis.vaccine.domain.inventory.VaccineDistribution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class VaccineNotificationService {
private static final Logger LOGGER = LoggerFactory.getLogger(VaccineNotificationService.class);
@Value("${mail.base.url}")
String baseURL;
@Autowired
ProgramService programService;
SimpleMailMessage message;
@Autowired
private EmailService emailService;
@Autowired
private FacilityService facilityService;
@Autowired
private ConfigurationSettingService configService;
@Autowired
private ProcessingPeriodService processingPeriodService;
@Autowired
private UserService userService;
@Autowired
private VaccineOrderRequisitionService requisitionService;
public void sendOrderRequisitionStatusChangeNotification(VaccineOrderRequisition report, Long userId) {
List<FacilitySupervisor> supervisorList = new ArrayList<>();
supervisorList = facilityService.getFacilitySuperVisorBy(report.getProgramId(), report.getFacility().getId());
String emailMessageKey = ConfigurationSettingKey.EMAIL_TEMPLATE_FOR_VACCINE_ORDER_REQUISITION;
String emailSubjectKey = ConfigurationSettingKey.EMAIL_SUBJECT_VACCINE_ORDER_REQUISITION_FORM_SUBMISSION;
sendEmailToSuperVisor(report, supervisorList, emailMessageKey, emailSubjectKey);
}
private void sendEmailToSuperVisor(VaccineOrderRequisition report, List<FacilitySupervisor> supervisorList, String emailMessageKey, String emailSubjectKey) {
for (FacilitySupervisor facilitySupervisor : supervisorList) {
String issueURL;
issueURL = String.format("%1$s/public/pages/vaccine/order-requisition/index.html#/view/", baseURL);
message = new SimpleMailMessage();
String emailMessage = configService.getByKey(emailMessageKey).getValue();
emailMessage = emailMessage.replaceAll("\\{approver_name\\}", facilitySupervisor.getName());
emailMessage = emailMessage.replaceAll("\\{facility_name\\}", report.getFacility().getName());
emailMessage = emailMessage.replaceAll("\\{period\\}", report.getPeriod().getName());
emailMessage = emailMessage.replaceAll("\\{link\\}", issueURL);
message.setText(emailMessage);
message.setSubject(configService.getByKey(emailSubjectKey).getValue());
message.setTo(facilitySupervisor.getContact());
try {
emailService.queueMessage(message);
} catch (Exception exp) {
LOGGER.error("Notification was not sent due to the following exception ...", exp);
}
}
}
public void sendConsolidationNotification(VaccineDistribution distribute, Long userId) {
List<FacilitySupervisor> userList = new ArrayList<>();
userList = facilityService.getSuperVisedUserFacility(distribute.getProgramId(), distribute.getToFacilityId());
constructEmailForConsolidation(distribute, userList);
}
private void constructEmailForConsolidation(VaccineDistribution distribute, List<FacilitySupervisor> users) {
for (FacilitySupervisor supervisor : users) {
message = new SimpleMailMessage();
String emailMessage = configService.getByKey(ConfigurationSettingKey.EMAIL_TEMPLATE_FOR_ORDER_CONSOLIDATION).getValue();
Facility facility = facilityService.getById(distribute.getFromFacilityId());
VaccineOrderRequisition orderRequisition = requisitionService.getById(distribute.getOrderId());
emailMessage = emailMessage.replaceAll("\\{user_name\\}", supervisor.getName());
emailMessage = emailMessage.replaceAll("\\{from_facility_name\\}", facility.getName());
emailMessage = emailMessage.replaceAll("\\{date_submitted\\}", orderRequisition.getOrderDate());
emailMessage = emailMessage.replaceAll("\\{period\\}", orderRequisition.getPeriod().getName());
message.setText(emailMessage);
message.setSubject(configService.getByKey(ConfigurationSettingKey.EMAIL_SUBJECT_FOR_ORDER_CONSOLIDATION).getValue());
message.setTo(supervisor.getContact());
try {
emailService.queueMessage(message);
} catch (Exception exp) {
LOGGER.error("Notification was not sent due to the following exception ...", exp);
}
}
}
public void sendIssuingEmail(VaccineDistribution distribution) {
List<FacilitySupervisor> userList = new ArrayList<>();
List<Program> programs = programService.getAllIvdPrograms();
Program program = (programs != null && programs.size() > 0) ? programs.get(0) : null;
Long programId = (program != null) ? program.getId() : null;
userList = facilityService.getSuperVisedUserFacility(programId, distribution.getToFacilityId());
for (FacilitySupervisor supervisor : userList) {
message = new SimpleMailMessage();
String emailMessage = configService.getByKey(ConfigurationSettingKey.EMAIL_TEMPLATE_FOR_ISSUE_VOUCHER).getValue();
Facility facility = facilityService.getById(distribution.getFromFacilityId());
VaccineOrderRequisition orderRequisition = (distribution.getOrderId() != null) ? requisitionService.getById(distribution.getOrderId()) : null;
emailMessage = emailMessage.replaceAll("\\{user_name\\}", supervisor.getName());
emailMessage = emailMessage.replaceAll("\\{from_facility_name\\}", facility.getName());
String orderDate = (orderRequisition != null) ? orderRequisition.getOrderDate() : "-";
String period = (orderRequisition != null) ? orderRequisition.getPeriod().getName() : "-";
emailMessage = emailMessage.replaceAll("\\{date_submitted\\}", orderDate);
emailMessage = emailMessage.replaceAll("\\{period\\}", period);
message.setText(emailMessage);
message.setSubject(configService.getByKey(ConfigurationSettingKey.EMAIL_SUBJECT_FOR_ISSUE_VOUCHER).getValue());
message.setTo(supervisor.getContact());
try {
emailService.queueMessage(message);
} catch (Exception exp) {
LOGGER.error("Notification was not sent due to the following exception ...", exp);
}
}
}
}