Skip to content

Commit

Permalink
#111 logic for handling supplement policy: MANDATORY_ONE_FOR_TICKET
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed May 19, 2017
1 parent 2060cbd commit 0da5422
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 3 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ dependencies {
compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
compile "org.springframework.security:spring-security-web:$springSecurityConfigVersion"
compile "org.springframework.security:spring-security-config:$springSecurityConfigVersion"
compile "ch.digitalfondue.npjt-extra:npjt-extra:1.1.2"
compile "ch.digitalfondue.npjt-extra:npjt-extra:1.1.3"
compile "com.samskivert:jmustache:1.13"
compile "com.github.sps.mustache:mustache-spring-view:1.4"
compile "javax.mail:mail:1.5.0-b01"
Expand Down
18 changes: 16 additions & 2 deletions src/main/java/alfio/manager/TicketReservationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,21 @@ public String createTicketReservation(Event event,

ticketReservationRepository.createNewReservation(reservationId, reservationExpiration, discount.map(PromoCodeDiscount::getId).orElse(null), locale.getLanguage(), event.getId());
list.forEach(t -> reserveTicketsForCategory(event, specialPriceSessionId, reservationId, t, locale, forWaitingQueue, discount.orElse(null)));
additionalServices.forEach(as -> reserveAdditionalServicesForReservation(event.getId(), reservationId, as, locale, discount.orElse(null)));

int ticketCount = list
.stream()
.map(TicketReservationWithOptionalCodeModification::getAmount)
.mapToInt(Integer::intValue).sum();

//TODO: add date validity check too in findAllInEventWithPolicy
additionalServiceRepository.findAllInEventWithPolicy(event.getId(), AdditionalService.SupplementPolicy.MANDATORY_ONE_FOR_TICKET).forEach(as -> {
AdditionalServiceReservationModification asrm = new AdditionalServiceReservationModification();
asrm.setAdditionalServiceId(as.getId());
asrm.setQuantity(ticketCount);
additionalServices.add(new ASReservationWithOptionalCodeModification(asrm, Optional.empty()));
});

additionalServices.forEach(as -> reserveAdditionalServicesForReservation(event.getId(), reservationId, as, discount.orElse(null)));

TicketReservation reservation = ticketReservationRepository.findReservationById(reservationId);

Expand Down Expand Up @@ -241,7 +255,7 @@ void reserveTicketsForCategory(Event event, Optional<String> specialPriceSession
ticketRepository.updateTicketPrice(reservedForUpdate, category.getId(), event.getId(), category.getSrcPriceCts(), MonetaryUtil.unitToCents(priceContainer.getFinalPrice()), MonetaryUtil.unitToCents(priceContainer.getVAT()), MonetaryUtil.unitToCents(priceContainer.getAppliedDiscount()));
}

private void reserveAdditionalServicesForReservation(int eventId, String transactionId, ASReservationWithOptionalCodeModification additionalServiceReservation, Locale locale, PromoCodeDiscount discount) {
private void reserveAdditionalServicesForReservation(int eventId, String transactionId, ASReservationWithOptionalCodeModification additionalServiceReservation, PromoCodeDiscount discount) {
Optional.ofNullable(additionalServiceReservation.getAdditionalServiceId())
.flatMap(id -> optionally(() -> additionalServiceRepository.getById(id, eventId)))
.filter(as -> additionalServiceReservation.getQuantity() > 0 && (as.isFixPrice() || Optional.ofNullable(additionalServiceReservation.getAmount()).filter(a -> a.compareTo(BigDecimal.ZERO) > 0).isPresent()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,6 @@ int update(@Bind("id") int id, @Bind("fixPrice") boolean fixPrice,
@Bind("inceptionTs") ZonedDateTime inception, @Bind("expirationTs") ZonedDateTime expiration, @Bind("vat") BigDecimal vat,
@Bind("vatType") AdditionalService.VatType vatType, @Bind("srcPriceCts") int srcPriceCts);

@Query("select * from additional_service where event_id_fk = :eventId and supplement_policy = :supplementPolicy order by ordinal")
List<AdditionalService> findAllInEventWithPolicy(@Bind("eventId") int eventId, @Bind("supplementPolicy") AdditionalService.SupplementPolicy policy);
}

0 comments on commit 0da5422

Please sign in to comment.