From 88c4c2ce70dfa5871677950acd967c830cd5b526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awek=20Zatorski?= Date: Mon, 2 Dec 2024 19:20:03 +0100 Subject: [PATCH] transaction fix --- .../java/com/sasiedzi/event/domain/Event.java | 73 +++++++++++++++ .../sasiedzi/event/domain/Transaction.java | 28 ++++++ .../event/repository/EventRepository.java | 8 +- .../sasiedzi/event/service/EventService.java | 18 ++++ .../event/service/TransactionService.java | 5 +- .../event/web/rest/EventResource.java | 5 +- .../app/entities/event/event-details.vue | 90 ++++++++++++++----- .../app/entities/transaction/transaction.vue | 2 +- .../webapp/app/shared/model/event.model.ts | 15 ++++ .../app/shared/model/transaction.model.ts | 4 + 10 files changed, 219 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/sasiedzi/event/domain/Event.java b/src/main/java/com/sasiedzi/event/domain/Event.java index 9a71876..036615f 100644 --- a/src/main/java/com/sasiedzi/event/domain/Event.java +++ b/src/main/java/com/sasiedzi/event/domain/Event.java @@ -1,11 +1,13 @@ package com.sasiedzi.event.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; import jakarta.validation.constraints.*; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.HashSet; import java.util.Set; @@ -92,6 +94,77 @@ public class Event implements Serializable { this.date = date; } + // @Transient + // private Boolean editable; + + @JsonProperty("editable") + public Boolean getEditable() { + if (date == null) return false; + LocalDate currentDate = LocalDate.now(); + long daysBetween = ChronoUnit.DAYS.between(this.date, currentDate); + return daysBetween <= 7; + } + + @Transient + private Long chargeTransactionId; + + @JsonProperty("chargeTransactionId") + public Long getChargeTransactionId() { + return chargeTransactionId; + } + + public void setChargeTransactionId(Long chargeTransactionId) { + this.chargeTransactionId = chargeTransactionId; + } + + // public void setEditable(Boolean editable) { + // this.editable = editable; + // } + + @Transient + private Boolean charged; + + @JsonProperty("charged") + public Boolean getCharged() { + return charged; + } + + public void setCharged(Boolean charged) { + this.charged = charged; + } + + @Transient + private Boolean current; + + @JsonProperty("current") + public Boolean getCurrent() { + return current; + } + + public void setCurrent(Boolean current) { + this.current = current; + } + + @JsonProperty("active") + public Boolean getActive() { + if (date == null) return false; + LocalDate currentDate = LocalDate.now(); + long daysBetween = ChronoUnit.DAYS.between(this.date, currentDate); + return daysBetween <= 0; + } + + // @Transient + // private Boolean deletable; + + @JsonProperty("deletable") + public Boolean getDeletable() { + return getEditable(); + } + + // public void setDeletable(Boolean deletable) { + // this.deletable = deletable; + // } + public Integer getPlayersLimit() { return this.playersLimit; } diff --git a/src/main/java/com/sasiedzi/event/domain/Transaction.java b/src/main/java/com/sasiedzi/event/domain/Transaction.java index 90ea5f3..8e56390 100644 --- a/src/main/java/com/sasiedzi/event/domain/Transaction.java +++ b/src/main/java/com/sasiedzi/event/domain/Transaction.java @@ -6,6 +6,7 @@ import com.sasiedzi.event.domain.enumeration.TransactionType; import jakarta.persistence.*; import java.io.Serializable; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.HashSet; import java.util.Set; @@ -80,6 +81,33 @@ public class Transaction implements Serializable { return this; } + // @Transient + // private Boolean editable; + + @JsonProperty("editable") + public Boolean getEditable() { + if (date == null) return false; + LocalDate currentDate = LocalDate.now(); + long daysBetween = ChronoUnit.DAYS.between(this.date, currentDate); + return daysBetween <= 7; + } + + // public void setEditable(Boolean editable) { + // this.editable = editable; + // } + + // @Transient + // private Boolean deletable; + + @JsonProperty("deletable") + public Boolean getDeletable() { + return getEditable(); + } + + // public void setDeletable(Boolean deletable) { + // this.deletable = deletable; + // } + public void setType(TransactionType type) { this.type = type; } diff --git a/src/main/java/com/sasiedzi/event/repository/EventRepository.java b/src/main/java/com/sasiedzi/event/repository/EventRepository.java index c9f00e1..f4d7841 100644 --- a/src/main/java/com/sasiedzi/event/repository/EventRepository.java +++ b/src/main/java/com/sasiedzi/event/repository/EventRepository.java @@ -1,7 +1,10 @@ package com.sasiedzi.event.repository; +import com.sasiedzi.event.domain.Charge; import com.sasiedzi.event.domain.Event; +import java.util.List; import org.springframework.data.jpa.repository.*; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; /** @@ -9,4 +12,7 @@ import org.springframework.stereotype.Repository; */ @SuppressWarnings("unused") @Repository -public interface EventRepository extends JpaRepository {} +public interface EventRepository extends JpaRepository { + @Query("select event from Event event left join fetch event.transactions where event.id =:id") + Event findByIdWithTransactions(@Param("id") Long id); +} diff --git a/src/main/java/com/sasiedzi/event/service/EventService.java b/src/main/java/com/sasiedzi/event/service/EventService.java index 4ca820b..0c4cd3d 100644 --- a/src/main/java/com/sasiedzi/event/service/EventService.java +++ b/src/main/java/com/sasiedzi/event/service/EventService.java @@ -126,6 +126,24 @@ public class EventService { return eventRepository.findById(id); } + @Transactional(readOnly = true) + public Event getEventForRegistration(Long id) { + LOG.debug("Request to get Event : {}", id); + Event event = eventRepository.findByIdWithTransactions(id); + event.setCurrent(id.equals(getCurrentEventId())); + event.setCharged(event.getTransactions().stream().anyMatch(t -> TransactionType.FIELDPAYMENT.equals(t.getType()))); + event.setChargeTransactionId( + event + .getTransactions() + .stream() + .filter(t -> TransactionType.MATCH.equals(t.getType())) + .map(Transaction::getId) + .findFirst() + .orElse(null) + ); + return event; + } + /** * Delete the event by id. * diff --git a/src/main/java/com/sasiedzi/event/service/TransactionService.java b/src/main/java/com/sasiedzi/event/service/TransactionService.java index 8798a35..6cc13ce 100644 --- a/src/main/java/com/sasiedzi/event/service/TransactionService.java +++ b/src/main/java/com/sasiedzi/event/service/TransactionService.java @@ -116,6 +116,7 @@ public class TransactionService { setBeneficiary(newTransaction); newTransaction.setEvent(existing.getEvent()); calculateBalances(existing.getTransactionItems().stream().map(TransactionItem::getUserAccount).toList()); + Set processedAccounts = new HashSet<>(); for (TransactionItem item : existing.getTransactionItems()) { BigDecimal accountBalance = item.getUserAccount().getBalance(); if (accountBalance == null) { @@ -125,7 +126,8 @@ public class TransactionService { accountBalance.compareTo(BigDecimal.ZERO) < 0 && !Account.Skarbiec.toString().equals(item.getUserAccount().getName()) && !Account.Boisko.toString().equals(item.getUserAccount().getName()) && - !Account.Counter.toString().equals(item.getUserAccount().getName()) + !Account.Counter.toString().equals(item.getUserAccount().getName()) && + !processedAccounts.contains(item.getUserAccount().getId()) ) { TransactionItem newItem = new TransactionItem(); newItem.setAmount(accountBalance.negate()); @@ -135,6 +137,7 @@ public class TransactionService { newItem.setRegistration(item.getRegistration()); newItem.setComment(item.getComment()); newTransaction.getTransactionItems().add(newItem); + processedAccounts.add(item.getUserAccount().getId()); } } return newTransaction; diff --git a/src/main/java/com/sasiedzi/event/web/rest/EventResource.java b/src/main/java/com/sasiedzi/event/web/rest/EventResource.java index eacf468..e8d191f 100644 --- a/src/main/java/com/sasiedzi/event/web/rest/EventResource.java +++ b/src/main/java/com/sasiedzi/event/web/rest/EventResource.java @@ -160,10 +160,9 @@ public class EventResource { * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the event, or with status {@code 404 (Not Found)}. */ @GetMapping("/{id}") - public ResponseEntity getEvent(@PathVariable("id") Long id) { + public Event getEvent(@PathVariable("id") Long id) { LOG.debug("REST request to get Event : {}", id); - Optional event = eventService.findOne(id); - return ResponseUtil.wrapOrNotFound(event); + return eventService.getEventForRegistration(id); } /** diff --git a/src/main/webapp/app/entities/event/event-details.vue b/src/main/webapp/app/entities/event/event-details.vue index 206225c..8fdf377 100644 --- a/src/main/webapp/app/entities/event/event-details.vue +++ b/src/main/webapp/app/entities/event/event-details.vue @@ -39,7 +39,7 @@ :to="{ name: 'RegistrationCreateForEvent', params: { eventId: event.id } }" custom v-slot="{ navigate }" - v-if="isCurrentEvent" + v-if="event.active" > - - +
@@ -181,6 +160,71 @@ + + + + + + + + + +
+ Rozliczenie: +
+ + + + + + + + + + + + + + + +
+
+ {{ transaction.date }} {{ transaction.type }} + +
{{ transaction.comment }}
+
+
diff --git a/src/main/webapp/app/entities/transaction/transaction.vue b/src/main/webapp/app/entities/transaction/transaction.vue index 956d3f2..201a79d 100644 --- a/src/main/webapp/app/entities/transaction/transaction.vue +++ b/src/main/webapp/app/entities/transaction/transaction.vue @@ -94,7 +94,7 @@ :to="{ name: 'TransactionEdit', params: { transactionId: transaction.id } }" custom v-slot="{ navigate }" - v-if="hasAnyAuthority(['ROLE_ADMIN', 'ROLE_COUNTER'])" + v-if="(transaction.editable && hasAnyAuthority(['ROLE_COUNTER'])) || hasAnyAuthority(['ROLE_ADMIN'])" >