From f00910791ebe848eba127e8638fed8eaa3ceb9de Mon Sep 17 00:00:00 2001 From: Jumpy Squirrel Date: Sun, 10 Mar 2024 14:10:36 +0100 Subject: [PATCH] feat(#137): nick and ev flag in accounting page --- .../web/forms/AccountingSearchForm.java | 109 +++++++++++++++--- src/tpl/common/pages/accountingList.vm | 6 + .../pages/strings/accounting.strings.vm | 2 +- .../mmc/pages/strings/accounting.strings.vm | 2 +- 4 files changed, 102 insertions(+), 17 deletions(-) diff --git a/src/java/org/eurofurence/regsys/web/forms/AccountingSearchForm.java b/src/java/org/eurofurence/regsys/web/forms/AccountingSearchForm.java index 31270a3..4cb4542 100644 --- a/src/java/org/eurofurence/regsys/web/forms/AccountingSearchForm.java +++ b/src/java/org/eurofurence/regsys/web/forms/AccountingSearchForm.java @@ -1,5 +1,8 @@ package org.eurofurence.regsys.web.forms; +import org.eurofurence.regsys.repositories.attendees.AttendeeSearchCriteria; +import org.eurofurence.regsys.repositories.attendees.AttendeeSearchResultList; +import org.eurofurence.regsys.repositories.attendees.AttendeeService; import org.eurofurence.regsys.repositories.errors.DownstreamException; import org.eurofurence.regsys.repositories.errors.DownstreamWebErrorException; import org.eurofurence.regsys.repositories.payments.PaymentService; @@ -17,7 +20,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.SortedMap; import java.util.TreeMap; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -33,8 +35,6 @@ public class AccountingSearchForm extends Form { public static final String PARAM_SEARCH_TYPE = "searchPaymentType"; public static final String PARAM_SEARCH_METHOD = "searchPaymentMethod"; - public static final String PARAM_LONG_VERSION = "long"; - // ------------ attributes ----------------------- private String searchFrom; // kept as iso - from @@ -49,11 +49,26 @@ public class AccountingSearchForm extends Form { private Map> breakdownCountByAmount; private Map totalAmounts; + public static class AttendeeInfos { + public String nickname; + public String flags; + public String options; + public String packages; + public String status; + public long totalDues; + public long paymentBalance; + public long currentDues; + public String dueDate; + } + + private Map attendeeInfos = new HashMap<>(); + private List found = new ArrayList<>(); // ------------ constructors and initialization ----------------------- private final PaymentService paymentService = new PaymentService(); + private final AttendeeService attendeeService = new AttendeeService(); public AccountingSearchForm() { breakdownCountByAmount = new TreeMap<>(); @@ -130,18 +145,8 @@ public boolean find() { boolean result = false; found = new ArrayList<>(); try { - TransactionResponse response = paymentService.performFindTransactions(null, null, searchFrom, searchTo, getPage().getTokenFromRequest(), getPage().getRequestId()); - if (response.payload != null) { - for (Transaction t : response.payload) { - if (searchStatus.contains(t.status) && - searchTypes.contains(t.transactionType) && - searchMethods.contains(t.method)) { - if (searchComments.equals("") || t.comment != null && t.comment.contains(searchComments)) { - found.add(t); - } - } - } - } + populateAttendeeInfos(); + loadTransactions(); result = true; count = -1; // first loadNextTransaction() advances to first } catch (DownstreamWebErrorException e) { @@ -153,6 +158,52 @@ public boolean find() { return result; } + private void populateAttendeeInfos() { + AttendeeSearchCriteria.AttendeeSearchSingleCriterion criterion = new AttendeeSearchCriteria.AttendeeSearchSingleCriterion(); + AttendeeSearchCriteria criteria = new AttendeeSearchCriteria(); + criteria.fillFields = Arrays.asList("nickname", "configuration", "balances", "status"); + criteria.matchAny.add(criterion); // note: will filter deleted attendees + + AttendeeSearchResultList resultList = attendeeService.performFindAttendees(criteria, getPage().getTokenFromRequest(), getPage().getRequestId()); + if (resultList != null && resultList.attendees != null) { + resultList.attendees.forEach(sr -> { + AttendeeInfos inf = new AttendeeInfos(); + inf.nickname = sr.nickname; + inf.flags = sr.flags; + inf.options = sr.options; + inf.packages = sr.packages; + inf.status = sr.status; + inf.totalDues = valueOrZero(sr.totalDues); + inf.paymentBalance = valueOrZero(sr.paymentBalance); + inf.currentDues = valueOrZero(sr.currentDues); + inf.dueDate = sr.dueDate; + attendeeInfos.put(sr.id, inf); + }); + } + } + + private void loadTransactions() { + TransactionResponse response = paymentService.performFindTransactions(null, null, searchFrom, searchTo, getPage().getTokenFromRequest(), getPage().getRequestId()); + if (response.payload != null) { + for (Transaction t : response.payload) { + if (searchStatus.contains(t.status) && + searchTypes.contains(t.transactionType) && + searchMethods.contains(t.method)) { + if (searchComments.equals("") || t.comment != null && t.comment.contains(searchComments)) { + found.add(t); + } + } + } + } + } + + private long valueOrZero(Long value) { + if (value == null) { + return 0L; + } + return value.longValue(); + } + public boolean loadNextTransaction() { count++; if (count < found.size()) { @@ -339,6 +390,34 @@ public String getComment() { return escape(found.get(count).comment); } + // lookups from attendeeInfos + + private AttendeeInfos attInf() { + Long debitorId = found.get(count).debitorId; + if (debitorId != null) { + AttendeeInfos inf = attendeeInfos.get(debitorId); + if (inf == null) { + inf = new AttendeeInfos(); + inf.nickname = "(unknown)"; + } + return inf; + } else { + AttendeeInfos inf = new AttendeeInfos(); + inf.nickname = "(no id)"; + return inf; + } + } + + public String getAttendeeNickname() { + return escape(attInf().nickname); + } + + public boolean attendeeHasFlag(String flag) { + AttendeeInfos inf = attInf(); + String flags = "," + inf.flags + ","; // may result in ,null, + return flags.contains("," + flag + ","); + } + // attributes for the amount breakdown (available after all loadNexts only) public List> getDueAmountsBreakdown() { diff --git a/src/tpl/common/pages/accountingList.vm b/src/tpl/common/pages/accountingList.vm index 5e3871d..3ad5817 100644 --- a/src/tpl/common/pages/accountingList.vm +++ b/src/tpl/common/pages/accountingList.vm @@ -9,6 +9,8 @@ $strcolType $strcolMethod $strcolComment + $strcolNick + $strcolMembership #foreach($i in [0..10000])## if there are more than this many results, the page will load forever anyway @@ -24,6 +26,8 @@ $form.type $form.method $form.comment + $form.attendeeNickname + #if($form.attendeeHasFlag("ev"))X#{end} #end## @@ -39,6 +43,8 @@ + + diff --git a/src/tpl/common/pages/strings/accounting.strings.vm b/src/tpl/common/pages/strings/accounting.strings.vm index ec2e9ae..7bff66f 100644 --- a/src/tpl/common/pages/strings/accounting.strings.vm +++ b/src/tpl/common/pages/strings/accounting.strings.vm @@ -21,7 +21,7 @@ #set($strcolRealname = "Realname")## #set($strcolTotal = "Total")## #set($strcolAttendance = "Attendance")## -#set($strcolMembership = "Membership")## +#set($strcolMembership = "e.V.")## #set($strcolAmount = "Paid €")## #set($strcolAmountDue = "Due €")## #set($strcolDate = "Date")## diff --git a/src/tpl/mmc/pages/strings/accounting.strings.vm b/src/tpl/mmc/pages/strings/accounting.strings.vm index 21ef465..7124aa7 100644 --- a/src/tpl/mmc/pages/strings/accounting.strings.vm +++ b/src/tpl/mmc/pages/strings/accounting.strings.vm @@ -21,7 +21,7 @@ #set($strcolRealname = "Realer Name")## #set($strcolTotal = "Total")## #set($strcolAttendance = "Teilnahme")## -#set($strcolMembership = "Vereinsbeitrag")## +#set($strcolMembership = "e.V.")## #set($strcolAmount = "Betrag")## #set($strcolAmountDue = "Ford.")## #set($strcolDate = "Datum")##