public class NotifyResponsibleAboutAuditStartBean implements NotifyResponsibleAboutAuditStart {
@Inject
private Persistence persistence;
@Inject
private EmailService emailService;
@Inject
private GlobalConfig globalConfig;
@Inject
private QMSProperty qmsProperty;
@Override
@Transactional
public void notifyResponsible() {
try (Transaction tx = persistence.createTransaction()){
Integer countDay = qmsProperty.getEmailAboutAuditStart();
Calendar calendar = new GregorianCalendar();
Date currentDate = calendar.getTime();
calendar.add(calendar.DATE, - countDay);
Date date = calendar.getTime();
String queryTemplate = "select a from qms$AuditPlan a where a.dateStart = :date";
// Ответственным за countDay дней до старта
TypedQuery<AuditPlan> query = persistence.getEntityManager().createQuery(queryTemplate, AuditPlan.class);
query.setParameter("date", date);
List<AuditPlan> audits = query.getResultList();
String url = globalConfig.getWebAppUrl();
for (AuditPlan audit : audits) {
Auditor responsible = audit.getResponsible();
String email = responsible.getEmployee().getEmail();
String link = String.format("%s/open?screen=qms$AuditPlan.edit&item=qms$AuditPlan-%s", url, audit.getId().toString());
String subject = countDay + " дней до начала аудита \"" + audit.getName();
sendEmail(email, subject, link);
}
// Отправка писем ответственным в день старта аудита
query = persistence.getEntityManager().createQuery(queryTemplate, AuditPlan.class);
query.setParameter("date", currentDate);
audits = query.getResultList();
if (audits != null) {
String url = globalConfig.getWebAppUrl();
for (AuditPlan audit : audits) {
Auditor responsible = audit.getResponsible();
Employee employee = responsible.getEmployee();
if (audit.getDateStartFact() == null) {
String email = employee.getEmail();
String link = String.format("%s/open?screen=qms$AuditPlan.edit&item=qms$AuditPlan-%s", url, audit.getId().toString());
String subject = "Начало аудита \"" + audit.getName();
sendEmail(email, subject, link);
}
}
}
tx.commit();
}
}
private void sendEmail(String email, String subject, String link) {
if (email != null) {
EmailInfo emailInfo = new EmailInfo(email, subject, link, subject);
emailService.sendEmailAsync(emailInfo);
}
}
}