use of alfio.model.Event in project alf.io by alfio-event.
the class ExtensionApiController method deleteEventSettingValue.
@DeleteMapping("/setting/organization/{orgShortName}/event/{shortName}/{id}")
public void deleteEventSettingValue(@PathVariable("orgShortName") String orgShortName, @PathVariable("shortName") String eventShortName, @PathVariable("id") int id, Principal principal) {
Organization org = organizationRepository.findByName(orgShortName).orElseThrow(IllegalStateException::new);
ensureOrganization(principal, org);
Event event = eventRepository.findByShortName(eventShortName);
ensureEventInOrganization(org, event);
extensionService.deleteSettingValue(id, String.format("-%d-%d", org.getId(), event.getId()));
}
use of alfio.model.Event in project alf.io by alfio-event.
the class ExtensionApiController method getParametersFor.
@RequestMapping(value = "/setting/organization/{orgShortName}/event/{shortName}", method = RequestMethod.GET)
public Map<Integer, List<ExtensionParameterMetadataAndValue>> getParametersFor(@PathVariable("orgShortName") String orgShortName, @PathVariable("shortName") String eventShortName, Principal principal) {
Organization org = organizationRepository.findByName(orgShortName).orElseThrow(IllegalStateException::new);
ensureOrganization(principal, org);
Event event = eventRepository.findByShortName(eventShortName);
ensureEventInOrganization(org, event);
String pattern = String.format("-%d-%d", org.getId(), event.getId());
return extensionService.getConfigurationParametersFor(pattern, pattern, "EVENT").stream().collect(Collectors.groupingBy(ExtensionParameterMetadataAndValue::getExtensionId));
}
use of alfio.model.Event in project alf.io by alfio-event.
the class ReservationForm method validate.
public Optional<Pair<List<TicketReservationWithOptionalCodeModification>, List<ASReservationWithOptionalCodeModification>>> validate(Errors bindingResult, TicketReservationManager tickReservationManager, AdditionalServiceRepository additionalServiceRepository, EventManager eventManager, Event event) {
int selectionCount = ticketSelectionCount();
if (selectionCount <= 0) {
bindingResult.reject(ErrorsCode.STEP_1_SELECT_AT_LEAST_ONE);
return Optional.empty();
}
List<Pair<TicketReservationModification, Integer>> maxTicketsByTicketReservation = selected().stream().map(r -> Pair.of(r, tickReservationManager.maxAmountOfTicketsForCategory(event.getOrganizationId(), event.getId(), r.getTicketCategoryId()))).collect(toList());
Optional<Pair<TicketReservationModification, Integer>> error = maxTicketsByTicketReservation.stream().filter(p -> p.getKey().getAmount() > p.getValue()).findAny();
if (error.isPresent()) {
bindingResult.reject(ErrorsCode.STEP_1_OVER_MAXIMUM, new Object[] { error.get().getValue() }, null);
return Optional.empty();
}
final List<TicketReservationModification> categories = selected();
final List<AdditionalServiceReservationModification> additionalServices = selectedAdditionalServices();
final boolean validCategorySelection = categories.stream().allMatch(c -> {
TicketCategory tc = eventManager.getTicketCategoryById(c.getTicketCategoryId(), event.getId());
return OptionalWrapper.optionally(() -> eventManager.findEventByTicketCategory(tc)).isPresent();
});
final boolean validAdditionalServiceSelected = additionalServices.stream().allMatch(asm -> {
AdditionalService as = eventManager.getAdditionalServiceById(asm.getAdditionalServiceId(), event.getId());
ZonedDateTime now = ZonedDateTime.now(event.getZoneId());
return as.getInception(event.getZoneId()).isBefore(now) && as.getExpiration(event.getZoneId()).isAfter(now) && asm.getQuantity() >= 0 && ((as.isFixPrice() && asm.isQuantityValid(as, selectionCount)) || (!as.isFixPrice() && asm.getAmount() != null && asm.getAmount().compareTo(BigDecimal.ZERO) >= 0)) && OptionalWrapper.optionally(() -> eventManager.findEventByAdditionalService(as)).isPresent();
});
if (!validCategorySelection || !validAdditionalServiceSelected) {
bindingResult.reject(ErrorsCode.STEP_1_TICKET_CATEGORY_MUST_BE_SALEABLE);
return Optional.empty();
}
List<TicketReservationWithOptionalCodeModification> res = new ArrayList<>();
//
Optional<SpecialPrice> specialCode = Optional.ofNullable(StringUtils.trimToNull(promoCode)).flatMap((trimmedCode) -> tickReservationManager.getSpecialPriceByCode(trimmedCode));
//
final ZonedDateTime now = ZonedDateTime.now(event.getZoneId());
maxTicketsByTicketReservation.forEach((pair) -> validateCategory(bindingResult, tickReservationManager, eventManager, event, pair.getRight(), res, specialCode, now, pair.getLeft()));
return bindingResult.hasErrors() ? Optional.empty() : Optional.of(Pair.of(res, additionalServices.stream().map(as -> new ASReservationWithOptionalCodeModification(as, specialCode)).collect(Collectors.toList())));
}
use of alfio.model.Event in project alf.io by alfio-event.
the class AttendeeManager method registerSponsorScan.
public TicketAndCheckInResult registerSponsorScan(String eventShortName, String ticketUid, String username) {
int userId = userRepository.getByUsername(username).getId();
Optional<Event> maybeEvent = eventRepository.findOptionalByShortName(eventShortName);
if (!maybeEvent.isPresent()) {
return new TicketAndCheckInResult(null, new DefaultCheckInResult(CheckInStatus.EVENT_NOT_FOUND, "event not found"));
}
Event event = maybeEvent.get();
Optional<Ticket> maybeTicket = ticketRepository.findOptionalByUUID(ticketUid);
if (!maybeTicket.isPresent()) {
return new TicketAndCheckInResult(null, new DefaultCheckInResult(CheckInStatus.TICKET_NOT_FOUND, "ticket not found"));
}
Ticket ticket = maybeTicket.get();
if (ticket.getStatus() != Ticket.TicketStatus.CHECKED_IN) {
return new TicketAndCheckInResult(ticket, new DefaultCheckInResult(CheckInStatus.INVALID_TICKET_STATE, "not checked-in"));
}
Optional<ZonedDateTime> existingRegistration = sponsorScanRepository.getRegistrationTimestamp(userId, event.getId(), ticket.getId());
if (!existingRegistration.isPresent()) {
sponsorScanRepository.insert(userId, ZonedDateTime.now(event.getZoneId()), event.getId(), ticket.getId());
}
return new TicketAndCheckInResult(ticket, new DefaultCheckInResult(CheckInStatus.SUCCESS, "success"));
}
use of alfio.model.Event in project alf.io by alfio-event.
the class AttendeeManager method retrieveTicket.
public Result<Ticket> retrieveTicket(String eventShortName, String ticketUid, String username) {
Optional<Event> maybeEvent = eventRepository.findOptionalByShortName(eventShortName).filter(e -> userManager.findUserOrganizations(username).stream().anyMatch(o -> o.getId() == e.getOrganizationId()));
if (!maybeEvent.isPresent()) {
return Result.error(ErrorCode.EventError.NOT_FOUND);
}
Event event = maybeEvent.get();
Optional<Ticket> maybeTicket = ticketRepository.findOptionalByUUID(ticketUid).filter(t -> t.getEventId() == event.getId());
return new Result.Builder<Ticket>().checkPrecondition(maybeTicket::isPresent, ErrorCode.custom("ticket_not_found", "ticket not found")).build(maybeTicket::get);
}
Aggregations