implemented proper messages for accounting events

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-05-05 10:01:03 +02:00
parent 713edd3638
commit 719558e8ee
14 changed files with 101 additions and 43 deletions
@@ -1,22 +1,19 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.messagebus.events;
import de.srsoftware.umbrella.core.ModuleRegistry;
import static de.srsoftware.umbrella.core.ModuleRegistry.accountingService;
import static de.srsoftware.umbrella.core.constants.Field.*;
import static de.srsoftware.umbrella.core.model.Translatable.t;
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;
import de.srsoftware.umbrella.core.model.Translatable;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
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<Transaction> {
private Collection<UmbrellaUser> audience;
@@ -38,17 +35,42 @@ public class TransactionEvent extends Event<Transaction> {
@Override
public Translatable describe() {
var user = initiator().name();
var type = t(Text.TRANSACTION);
var entity = payload().purpose();
return switch (eventType()){
case UPDATE -> new UnTranslatable(diff().orElse(""));
case null, default -> new UnTranslatable(payload().toString());
case CREATE -> describeDetail();
case DELETE -> describeDetail();
case UPDATE -> describeUpdate();
case null, default -> t("TODO"); // TODO
};
}
private Translatable describeUpdate() {
var head = t("Changes in {type} '{entity}':\n\n{body}",Field.TYPE,t(Text.TRANSACTION),Field.ENTITY,oldData().get(PURPOSE),BODY,diff().orElse(""));
return t("{head}\n\n{link}","head",head,"link",link());
}
private Translatable describeDetail(){
var tr = payload();
var head = subject();
var message = "{head}:\n\n{source}: {source_name}\n{destination}: {dest_name}\n{amount}: {value}\n{purpose}: {purpose_val}\n\n{link}";
return t(message,Field.HEAD, head, SOURCE,t(Text.SOURCE), "source_name",tr.source(), DESTINATION,t(Text.DESTINATION),"dest_name",tr.destination(), AMOUNT,t(Text.AMOUNT), VALUE,tr.amount(), PURPOSE,t(Text.PURPOSE),"purpose_val",tr.purpose(),"link",link());
}
private Translatable link() {
return t("You can view/edit this transaction at {base_url}/account/{id}", ID, payload().accountId());
}
@Override
public Translatable subject() {
var user = initiator().name();
var entity = payload().purpose();
return switch (eventType()){
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 CREATE -> t("{user} added a new transaction: {entity}", USER,user, ENTITY, entity);
case DELETE -> t("The transaction '{entity}' has been deleted by {user}",Field.ENTITY, entity, USER, user);
case UPDATE -> t("{user} updated the transaction '{entity}'", USER,user, ENTITY, oldData().get(PURPOSE));
case null, default -> t("TODO"); // TODO
};
}