/** * Axelor Business Solutions * * Copyright (C) 2016 Axelor (<http://axelor.com>). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * 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. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.axelor.apps.hr.service.batch; import java.util.HashSet; import java.util.List; import com.axelor.apps.base.db.Company; import com.axelor.apps.base.db.repo.CompanyRepository; import com.axelor.apps.base.db.repo.MailBatchRepository; import com.axelor.apps.base.service.administration.AbstractBatch; import com.axelor.apps.hr.db.Employee; import com.axelor.apps.hr.db.Timesheet; import com.axelor.apps.hr.db.repo.EmployeeRepository; import com.axelor.apps.hr.db.repo.TimesheetRepository; import com.axelor.apps.message.db.EmailAddress; import com.axelor.apps.message.db.Message; import com.axelor.apps.message.db.Template; import com.axelor.apps.message.db.repo.MailAccountRepository; import com.axelor.apps.message.db.repo.MessageRepository; import com.axelor.apps.message.service.MessageService; import com.axelor.apps.message.service.TemplateMessageService; import com.axelor.auth.AuthUtils; import com.axelor.exception.db.IException; import com.axelor.exception.service.TraceBackService; import com.axelor.i18n.I18n; import com.axelor.inject.Beans; import com.google.inject.Inject; public class BatchReminderTimesheet extends AbstractBatch{ protected TemplateMessageService templateMessageService; protected MessageService messageService; @Inject public BatchReminderTimesheet( TemplateMessageService templateMessageService, MessageService messageService){ this.templateMessageService = templateMessageService; this.messageService = messageService; } @Override protected void process() { if(batch.getMailBatch().getCode().equals(MailBatchRepository.CODE_BATCH_EMAIL_TIME_SHEET)){ if(batch.getMailBatch().getTemplate() != null) this.generateEmailTemplate(); else this.generateEmail(); } else if(batch.getMailBatch().getCode().equals(MailBatchRepository.CODE_BATCH_EMAIL_ALL_TIME_SHEET)){ if(batch.getMailBatch().getTemplate() != null) this.generateAllEmailTemplate(); else this.generateAllEmail(); } } public void generateEmailTemplate(){ Company company = batch.getMailBatch().getCompany(); Template template = batch.getMailBatch().getTemplate(); List<Timesheet> timesheetList = null; if(Beans.get(CompanyRepository.class).all().fetch().size() >1){ timesheetList = Beans.get(TimesheetRepository.class).all().filter("self.company.id = ?1 AND self.statusSelect = 1 AND self.user.employee.timesheetReminder = true", company.getId()).fetch(); }else{ timesheetList = Beans.get(TimesheetRepository.class).all().filter("self.statusSelect = 1 AND self.user.employee.timesheetReminder = true").fetch(); } String model = template.getMetaModel().getFullName(); String tag = template.getMetaModel().getName(); for (Timesheet timesheet : timesheetList) { Message message = new Message(); try{ message = templateMessageService.generateMessage(timesheet.getUser().getEmployee().getId(), model, tag, template); message = messageService.sendByEmail(message); incrementDone(); } catch(Exception e){ incrementAnomaly(); TraceBackService.trace(new Exception(e),IException.REMINDER,batch.getId()); } } } public void generateEmail(){ Company company = batch.getMailBatch().getCompany(); List<Timesheet> timesheetList = null; if(Beans.get(CompanyRepository.class).all().fetch().size() >1){ timesheetList = Beans.get(TimesheetRepository.class).all().filter("self.company.id = ?1 AND self.statusSelect = 1 AND self.user.employee.timesheetReminder = true", company.getId()).fetch(); }else{ timesheetList = Beans.get(TimesheetRepository.class).all().filter("self.statusSelect = 1 AND self.user.employee.timesheetReminder = true").fetch(); } for (Timesheet timesheet : timesheetList) { Message message = new Message(); try{ message.setMediaTypeSelect(MessageRepository.MEDIA_TYPE_EMAIL); message.setReplyToEmailAddressSet(new HashSet<EmailAddress>()); message.setCcEmailAddressSet(new HashSet<EmailAddress>()); message.setBccEmailAddressSet(new HashSet<EmailAddress>()); message.addToEmailAddressSetItem(timesheet.getUser().getEmployee().getContactPartner().getEmailAddress()); message.setSenderUser(AuthUtils.getUser()); message.setSubject(batch.getMailBatch().getSubject()); message.setContent(batch.getMailBatch().getContent()); message.setMailAccount(Beans.get(MailAccountRepository.class).all().filter("self.isDefault = true").fetchOne()); message = messageService.sendByEmail(message); incrementDone(); } catch(Exception e){ incrementAnomaly(); TraceBackService.trace(new Exception(e),IException.INVOICE_ORIGIN,batch.getId()); } } } public void generateAllEmailTemplate(){ Template template = batch.getMailBatch().getTemplate(); List<Employee> employeeList = null; if(Beans.get(CompanyRepository.class).all().fetch().size() >1){ employeeList = Beans.get(EmployeeRepository.class).all().filter("self.timesheetReminder = true").fetch(); }else{ employeeList = Beans.get(EmployeeRepository.class).all().filter("self.timesheetReminder = true").fetch(); } String model = template.getMetaModel().getFullName(); String tag = template.getMetaModel().getName(); for (Employee employee : employeeList) { try{ Message message = templateMessageService.generateMessage(employee.getId(), model, tag, template); message = messageService.sendByEmail(message); incrementDone(); } catch(Exception e){ incrementAnomaly(); TraceBackService.trace(new Exception(e),IException.REMINDER,batch.getId()); } } } public void generateAllEmail(){ Company company = batch.getMailBatch().getCompany(); List<Employee> employeeList = null; if(Beans.get(CompanyRepository.class).all().fetch().size() >1){ employeeList = Beans.get(EmployeeRepository.class).all().filter("self.timesheetReminder = true").fetch(); }else{ employeeList = Beans.get(EmployeeRepository.class).all().filter("self.timesheetReminder = true").fetch(); } for (Employee employee : employeeList) { Message message = new Message(); try{ message.setMediaTypeSelect(MessageRepository.MEDIA_TYPE_EMAIL); message.setReplyToEmailAddressSet(new HashSet<EmailAddress>()); message.setCcEmailAddressSet(new HashSet<EmailAddress>()); message.setBccEmailAddressSet(new HashSet<EmailAddress>()); message.addToEmailAddressSetItem(employee.getContactPartner().getEmailAddress()); message.setSenderUser(AuthUtils.getUser()); message.setSubject(batch.getMailBatch().getSubject()); message.setContent(batch.getMailBatch().getContent()); message.setMailAccount(Beans.get(MailAccountRepository.class).all().filter("self.isDefault = true").fetchOne()); message = messageService.sendByEmail(message); incrementDone(); } catch(Exception e){ incrementAnomaly(); TraceBackService.trace(new Exception(e),IException.INVOICE_ORIGIN,batch.getId()); } } } @Override protected void stop() { String comment = String.format("\t* %s Email(s) sent \n", batch.getDone()); comment += String.format(I18n.get(com.axelor.apps.base.exceptions.IExceptionMessage.ALARM_ENGINE_BATCH_4), batch.getAnomaly()); super.stop(); addComment(comment); } }