Skip to content

Commit

Permalink
Send notification messages in the users preferred locale FIST-718 #re…
Browse files Browse the repository at this point in the history
…solve (#1458)
  • Loading branch information
Luis-Cruz authored and sergiofbsilva committed Feb 7, 2019
1 parent bcb6e8a commit aaa7e34
Showing 1 changed file with 40 additions and 22 deletions.
62 changes: 40 additions & 22 deletions src/main/java/org/fenixedu/academic/task/EventNotificationTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,22 @@

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;

import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.accounting.Event;
import org.fenixedu.academic.domain.accounting.calculator.DebtInterestCalculator;
import org.fenixedu.academic.domain.organizationalStructure.Party;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.domain.UserProfile;
import org.fenixedu.bennu.core.groups.Group;
import org.fenixedu.bennu.scheduler.CronTask;
import org.fenixedu.bennu.scheduler.annotation.Task;
import org.fenixedu.commons.i18n.I18N;
import org.fenixedu.messaging.core.domain.Message;
import org.fenixedu.messaging.core.domain.MessageTemplate;
import org.fenixedu.messaging.core.template.DeclareMessageTemplate;
Expand Down Expand Up @@ -75,8 +80,8 @@ private Map<String, Object> paramMap(final Event event, final String key, final
return params;
}

private String createMessage(final String templateKey, final Event event, final String paramKey, final String paramValue) {
return MessageTemplate.get(templateKey).getCompiledTextBody(paramMap(event, paramKey, paramValue)).getContent();
private String createMessage(final String templateKey, final Event event, final String paramKey, final String paramValue, final Locale locale) {
return MessageTemplate.get(templateKey).getCompiledTextBody(paramMap(event, paramKey, paramValue)).getContent(locale);
}

@Override
Expand All @@ -91,36 +96,45 @@ public void runTask() throws Exception {
}

private void process(final Party party, final DateTime now, final LocalDate afterTomorrow, final LocalDate yesterday) {
FenixFramework.atomic(() -> {
if (party.isPerson()) {
final Person person = (Person) party;
try {
FenixFramework.atomic(() -> {
if (party.isPerson()) {
final Person person = (Person) party;
final User user = person.getUser();
if (user != null) {
final Locale locale = getLocale(person);

final String message = person.getEventsSet().stream()
.flatMap(e -> generateNotifications(e, now, afterTomorrow, yesterday))
.reduce("", String::concat);
if (!message.isEmpty()) {
Message.fromSystem()
.to(Group.users(person.getUser()))
.template("event.notifications")
.parameter("notificationMessage", message)
.and()
.wrapped()
.send();
final String message = person.getEventsSet().stream()
.flatMap(e -> generateNotifications(e, now, afterTomorrow, yesterday, locale))
.reduce("", String::concat);
if (!message.isEmpty()) {
Message.fromSystem()
.preferredLocale(locale)
.to(Group.users(person.getUser()))
.template("event.notifications")
.parameter("notificationMessage", message)
.and()
.wrapped()
.send();
}
}
}
}
});
});
} catch (final Throwable t) {
taskLog("Unable to process party: %s - %s%n", party.getExternalId(), t.getMessage());
}
}

private Stream<String> generateNotifications(final Event event, final DateTime now, final LocalDate afterTomorrow, final LocalDate yesterday) {
private Stream<String> generateNotifications(final Event event, final DateTime now, final LocalDate afterTomorrow, final LocalDate yesterday, final Locale locale) {
try {
final DebtInterestCalculator calculator = event.getDebtInterestCalculator(now);
if (event.getWhenOccured().toLocalDate().equals(yesterday) && calculator.getDueAmount().signum() == 1) {
return Stream.of(createMessage("event.notification.new.event", event, "debtAmount", calculator.getDebtAmount().toPlainString()));
return Stream.of(createMessage("event.notification.new.event", event, "debtAmount", calculator.getDebtAmount().toPlainString(), locale));
}

final Stream<String> dueAmountNotifications = calculator.getDebtsOrderedByDueDate().stream()
.filter(d -> d.isOpen() && d.getDueDate().equals(afterTomorrow))
.map(d -> createMessage("event.notification.due.event", event, "dueAmount", d.getAmount().toPlainString()));
.map(d -> createMessage("event.notification.due.event", event, "dueAmount", d.getAmount().toPlainString(), locale));

final BigDecimal totalUnusedAmount = calculator.getTotalUnusedAmount();
if (totalUnusedAmount.signum() == 1) {
Expand All @@ -129,7 +143,7 @@ private Stream<String> generateNotifications(final Event event, final DateTime n
.max((dt1, dt2) -> dt1.compareTo(dt2))
.orElse(null);
if (lastPaymentDate != null && lastPaymentDate.toLocalDate().equals(yesterday)) {
return Stream.concat(dueAmountNotifications, Stream.of(createMessage("event.notification.unused.amount", event, "totalUnusedAmount", totalUnusedAmount.toPlainString())));
return Stream.concat(dueAmountNotifications, Stream.of(createMessage("event.notification.unused.amount", event, "totalUnusedAmount", totalUnusedAmount.toPlainString(), locale)));
}
}
return dueAmountNotifications;
Expand All @@ -139,4 +153,8 @@ private Stream<String> generateNotifications(final Event event, final DateTime n
}
}

private static Locale getLocale(final Person person) {
return Optional.ofNullable(person.getProfile()).map(UserProfile::getPreferredLocale).orElseGet(I18N::getLocale);
}

}

0 comments on commit aaa7e34

Please sign in to comment.