Search in sources :

Example 1 with MessageRepository

use of com.axelor.apps.message.db.repo.MessageRepository in project axelor-open-suite by axelor.

the class BatchEventReminder method generateMessageProcess.

protected void generateMessageProcess() {
    MessageRepository messageRepo = Beans.get(MessageRepository.class);
    if (!stop) {
        int i = 0;
        Query q = JPA.em().createQuery(" SELECT er FROM EventReminder as er WHERE er.isReminded = true and ?1 MEMBER OF er.batchSet");
        q.setParameter(1, batch);
        @SuppressWarnings("unchecked") List<EventReminder> eventReminderList = q.getResultList();
        for (EventReminder eventReminder : eventReminderList) {
            try {
                eventReminder = eventReminderRepo.find(eventReminder.getId());
                Message message = messageServiceCrmImpl.createMessage(eventReminder.getEvent());
                // Send reminder to owner of the reminder in any case
                if (eventReminder.getUser().getPartner() != null && eventReminder.getUser().getPartner().getEmailAddress() != null) {
                    message.addToEmailAddressSetItem(eventReminder.getUser().getPartner().getEmailAddress());
                } else if (eventReminder.getUser().getEmail() != null) {
                    message.addToEmailAddressSetItem(findOrCreateEmailAddress(eventReminder.getUser().getEmail(), "[" + eventReminder.getUser().getEmail() + "]"));
                } else {
                    messageRepo.remove(message);
                    throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.CRM_CONFIG_USER_EMAIL), eventReminder.getUser().getName());
                }
                // Also send to attendees if needed
                if (EventReminderRepository.ASSIGN_TO_ALL.equals(eventReminder.getAssignToSelect()) && eventReminder.getEvent().getAttendees() != null) {
                    for (ICalendarUser iCalUser : eventReminder.getEvent().getAttendees()) {
                        if (iCalUser.getUser() != null && iCalUser.getUser().getPartner() != null) {
                            message.addToEmailAddressSetItem(iCalUser.getUser().getPartner().getEmailAddress());
                        } else {
                            message.addToEmailAddressSetItem(findOrCreateEmailAddress(iCalUser.getEmail(), iCalUser.getName()));
                        }
                    }
                }
                message = Beans.get(MessageService.class).sendByEmail(message);
            } catch (Exception e) {
                TraceBackService.trace(new Exception(String.format(I18n.get("Event") + " %s", eventRepo.find(eventReminder.getEvent().getId()).getSubject()), e), ExceptionOriginRepository.CRM, batch.getId());
                incrementAnomaly();
                LOG.error("Bug(Anomalie) généré(e) pour l'évènement {}", eventRepo.find(eventReminder.getEvent().getId()).getSubject());
            } finally {
                if (i % 1 == 0) {
                    JPA.clear();
                }
            }
        }
    }
}
Also used : AxelorException(com.axelor.exception.AxelorException) ICalendarUser(com.axelor.apps.base.db.ICalendarUser) EventReminder(com.axelor.apps.crm.db.EventReminder) Query(javax.persistence.Query) IExceptionMessage(com.axelor.apps.crm.exception.IExceptionMessage) Message(com.axelor.apps.message.db.Message) MessageRepository(com.axelor.apps.message.db.repo.MessageRepository) AxelorException(com.axelor.exception.AxelorException)

Aggregations

ICalendarUser (com.axelor.apps.base.db.ICalendarUser)1 EventReminder (com.axelor.apps.crm.db.EventReminder)1 IExceptionMessage (com.axelor.apps.crm.exception.IExceptionMessage)1 Message (com.axelor.apps.message.db.Message)1 MessageRepository (com.axelor.apps.message.db.repo.MessageRepository)1 AxelorException (com.axelor.exception.AxelorException)1 Query (javax.persistence.Query)1