diff --git a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java index b9866382..209c2189 100644 --- a/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java +++ b/accounting/src/main/java/de/srsoftware/umbrella/accounting/AccountingModule.java @@ -222,6 +222,7 @@ public class AccountingModule extends BaseHandler implements AccountingService { private boolean patchTransaction(UmbrellaUser user, long transactionId, HttpExchange ex) throws IOException { var transaction = accountDb.loadTransaction(transactionId); LOG.log(WARNING,"Missing permission check in patchTransaction(…)!"); + var oldData = transaction.toMap(); var json = json(ex); if (json.has(Field.AMOUNT)) transaction.amount(json.getDouble(Field.AMOUNT)); if (json.has(Field.DATE)) transaction.date(LocalDate.parse(json.getString(Field.DATE))); @@ -230,7 +231,7 @@ public class AccountingModule extends BaseHandler implements AccountingService { if (json.has(Field.SOURCE)) transaction.source(IdOrString.of(json.getString(Field.SOURCE))); if (json.has(Field.TAG)) transaction.tags().add(json.getString(Field.TAG)); var patched = accountDb.save(transaction); - messageBus().dispatch(new TransactionEvent(user,patched,UPDATE)); + messageBus().dispatch(new TransactionEvent(user,patched,oldData)); return sendContent(ex,patched); } diff --git a/bus/src/main/java/de/srsoftware/umbrella/messagebus/events/TransactionEvent.java b/bus/src/main/java/de/srsoftware/umbrella/messagebus/events/TransactionEvent.java index 4da0e1f6..ae0794db 100644 --- a/bus/src/main/java/de/srsoftware/umbrella/messagebus/events/TransactionEvent.java +++ b/bus/src/main/java/de/srsoftware/umbrella/messagebus/events/TransactionEvent.java @@ -1,6 +1,7 @@ package de.srsoftware.umbrella.messagebus.events; import de.srsoftware.umbrella.core.ModuleRegistry; +import de.srsoftware.umbrella.core.constants.Field; import de.srsoftware.umbrella.core.constants.Module; import de.srsoftware.umbrella.core.constants.Text; import de.srsoftware.umbrella.core.model.Transaction; @@ -10,9 +11,11 @@ import de.srsoftware.umbrella.core.model.UnTranslatable; import java.util.Collection; import java.util.List; +import java.util.Map; import static de.srsoftware.umbrella.core.ModuleRegistry.accountingService; import static de.srsoftware.umbrella.core.model.Translatable.t; +import static java.text.MessageFormat.format; public class TransactionEvent extends Event { private Collection audience; @@ -22,6 +25,11 @@ public class TransactionEvent extends Event { audience = null; } + public TransactionEvent(UmbrellaUser initiator, Transaction transaction, Map oldData){ + super(initiator,Module.ACCOUNTING,transaction,oldData); + } + + @Override public Collection audience() { if (audience == null) audience = accountingService().loadAccount(payload().accountId()).userMap().values(); @@ -30,14 +38,17 @@ public class TransactionEvent extends Event { @Override public Translatable describe() { - return new UnTranslatable(payload().purpose()); + return switch (eventType()){ + case UPDATE -> new UnTranslatable(diff().orElse("")); + case null, default -> new UnTranslatable(payload().toString()); + }; } @Override public Translatable subject() { return switch (eventType()){ - case CREATE -> t("user_created_entity",initiator().name(), Text.TRANSACTION); - case UPDATE -> t("user_updated_entity",initiator().name(), Text.TRANSACTION); + case CREATE -> t("user_created_entity", Field.USER,initiator().name(), Field.ENTITY, t(Text.TRANSACTION)); + case UPDATE -> t("user_updated_entity", Field.USER,initiator().name(), Field.ENTITY, t(Text.TRANSACTION)); case null, default -> t("TODO"); // TODO }; } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java b/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java index a8ca1d2d..5331e28c 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/constants/Field.java @@ -57,6 +57,7 @@ public class Field { public static final String EDITOR = "editor"; public static final String EMAIL = "email"; public static final String END_TIME = "end_time"; + public static final String ENTITY = "entity"; public static final String ENTITY_ID = "entity_id"; public static final String EST_TIME = "est_time"; public static final String EVALUATION = "evaluation";